试用以下程序:
 - (defun c:flqh()
- (command "_undo" "be")
- (defun tqsjzb(Xssa Xn / i n Xtymb)
- (setq i 0 n (sslength Xssa) Xtymb ni)
- (repeat n
- (setq ent (ssname Xssa i)
- dxf (entget ent)
- )
- (if (= Xn 0)
- (setq Xtymb (cons (list (cdr (assoc 1 dxf)) (cdr (assoc 10 dxf))) Xtymb))
- (setq Xtymb (cons (list (cdr (assoc 1 dxf)) (cdr (assoc 10 dxf)) ent) Xtymb))
- )
- (setq i (1+ i))
- )
-
- (setq Xtymb (vl-sort Xtymb '(lambda(e1 e2)
- (setq pt1 (cadr e1)
- pt2 (cadr e2)
- )
- (if (equal (cadr pt1) (cadr pt2) 2.0)
- (< (car pt1) (car pt2))
- (> (cadr pt1) (cadr pt2))
- )
- )
- )
- )
- )
-
- (if (progn
- (princ "\n请选取要统计的数据:")
- (setq ssa (ssget '((0 . "*text") (1 . "#*#"))))
- )
- (if (progn
- (princ "\n请选取更新的数据:")
- (setq ssb (ssget '((0 . "*text") (1 . "#*#壁厚管材,#*#"))))
- )
- (progn
- (setq tymba (tqsjzb ssa 0))
- (setq tymbb (tqsjzb ssb 1))
-
- (setq sjb nil)
- (while tymba
- (setq sjb (cons (list (car (car tymba)) (car (cadr tymba))) sjb))
- (setq tymba (cdr (cdr tymba)))
- )
- (setq qhjg 'nil)
- (foreach zb sjb
- (if (setq cxjg (assoc (car zb) qhjg))
- (setq qhjg (subst (list (car zb) (+ (cadr cxjg) (read (cadr zb)))) cxjg qhjg))
- (setq qhjg (cons (list (car zb) (read (cadr zb))) qhjg))
- )
- )
- (setq qhjg (vl-sort qhjg '(lambda(x1 x2)(< (car x1) (car x2)))))
- (setq Newsjb nil)
- (while tymbb
- (setq Newsjb (cons (list (car (car tymbb)) (last (cadr tymbb))) Newsjb))
- (setq tymbb (cdr (cdr tymbb)))
- )
- (foreach zb qhjg
- (If (setq cxjg (assoc (strcat (car zb) "壁厚管材" ) Newsjb))
- (progn
- (setq ent (last cxjg)
- dxf (entget ent)
- dxf (subst (cons 1 (rtos (cadr zb))) (assoc 1 dxf) dxf)
- )
- (entmod dxf)
- )
- )
- )
- )
- )
- )
- (command "_undo" "e")
- (princ)
- )
|