请帮助提高cod
(defun c:test( / Layer sslst numlst num)(defun ss->EnLst (ss / retu)
(setq retu (apply 'append (ssnamex ss)))
(setq retu (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) retu))
)
(setq K (getint "\n SUM<1>,Quadrature<2>,Maximum <3>,Minimum<4>"))
(setq sslst (ss->EnLst (ssget (list (cons 0 "TEXT") (cons 1 "~*[~`--9]*")))))
(setq numlst (mapcar '(lambda(x) (atof (cdr (assoc 1 (entget x))))) sslst))
(cond
((= K 1)(setq num (apply '+ numlst)))
((= K 2)(setq num (apply '* numlst)))
((= K 3)(setq num (apply 'max numlst)))
((= K 4)(setq num (apply 'min numlst)))
(T (setq num (apply '+ numlst)))
)
(princ num)
(princ)
)
只支持文字,可以支持文字+多行文字+尺寸??? 下面是另一种书写方式:
(defun c:test ( / f i n r s )
(initget "Sum Quad Max Min")
(setq f
(cond
( (eval (cdr (assoc (getkword "\n <Sum>: ") '(("Sum" . +) ("Quad" . *) ("Max" . max) ("Min" . min))))))
( + )
)
)
(if (setq s (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))))
(repeat (setq i (sslength s))
(setq n (atof (cdr (assoc 1 (entget (ssname s (setq i (1- i)))))))
r (if r (f n r) n)
)
)
)
(princ r)
(princ)
)
多行文字???暗值??? 您可以这样更改代码。
(defun c:test( / Layer sslst numlst num)
(defun ss->EnLst (ss / retu)
(setq retu (apply 'append (ssnamex ss)))
(setq retu (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) retu))
)
(setq K (getint "\n SUM<1>,Quadrature<2>,Maximum <3>,Minimum<4>"))
(setq sslst (ss->EnLst (ssget (list (cons 0 "*TEXT,DIMENSION") (cons 1 "~*[~`--9]*")))))
(setq numlst (mapcar '(lambda(x)
(if (= "DIMENSION" (cdr (assoc 0 (entget x))))
(cdr (assoc 42 (entget x)))
(atof (cdr (assoc 1 (entget x)))))) sslst))
(cond
((= K 1)(setq num (apply '+ numlst)))
((= K 2)(setq num (apply '* numlst)))
((= K 3)(setq num (apply 'max numlst)))
((= K 4)(setq num (apply 'min numlst)))
(T (setq num (apply '+ numlst)))
)
(princ num)
(princ)
)
对于多行文字,只会影响简单的格式。
非常感谢!兄弟平均值呢?可以添加吗? 对于平均值,只需添加:
(setq K (getint "\n SUM<1>,Quadrature<2>,Maximum <3>,Minimum<4>,Average<5>"))
和
((= K 5)(setq num (/ (apply '+ numlst) (length numlst))))
非常好!非常感谢!我的兄弟。 不客气,我的朋友。
页:
[1]