77077 发表于 2022-7-5 22:33:40

请帮助提高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)
)
 
只支持文字,可以支持文字+多行文字+尺寸???

Lee Mac 发表于 2022-7-5 22:46:04

下面是另一种书写方式:
(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)
)

77077 发表于 2022-7-5 22:52:18

 
多行文字???暗值???

7o7 发表于 2022-7-5 23:07:10

您可以这样更改代码。

(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)
)

对于多行文字,只会影响简单的格式。

77077 发表于 2022-7-5 23:09:02

 
非常感谢!兄弟平均值呢?可以添加吗?

7o7 发表于 2022-7-5 23:20:48

对于平均值,只需添加:

(setq K (getint "\n SUM<1>,Quadrature<2>,Maximum <3>,Minimum<4>,Average<5>"))



((= K 5)(setq num (/ (apply '+ numlst) (length numlst))))

77077 发表于 2022-7-5 23:30:26

 
非常好!非常感谢!我的兄弟。

7o7 发表于 2022-7-5 23:41:24

不客气,我的朋友。
页: [1]
查看完整版本: 请帮助提高cod