乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 29|回复: 7

[编程交流] 请帮助提高cod

[复制链接]

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 22:33:40 | 显示全部楼层 |阅读模式
  1. (defun c:test( / Layer sslst numlst num)
  2.   (defun ss->EnLst (ss / retu)
  3.       (setq retu (apply 'append (ssnamex ss)))
  4.       (setq retu (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) retu))
  5.   )
  6. (setq K (getint "\n SUM<1>,Quadrature<2>,Maximum <3>,Minimum<4>"))
  7. (setq sslst (ss->EnLst (ssget (list (cons 0 "TEXT") (cons 1 "~*[~`--9]*")))))
  8. (setq numlst (mapcar '(lambda(x) (atof (cdr (assoc 1 (entget x))))) sslst))
  9. (cond
  10.      ((= K 1)(setq num (apply '+ numlst)))
  11.      ((= K 2)(setq num (apply '* numlst)))
  12.      ((= K 3)(setq num (apply 'max numlst)))
  13.      ((= K 4)(setq num (apply 'min numlst)))
  14.      (T (setq num (apply '+ numlst)))
  15. )
  16. (princ num)
  17. (princ)
  18. )

 
只支持文字,可以支持文字+多行文字+尺寸???
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 22:46:04 | 显示全部楼层
下面是另一种书写方式:
  1. (defun c:test ( / f i n r s )
  2.    (initget "Sum Quad Max Min")
  3.    (setq f
  4.        (cond
  5.            (   (eval (cdr (assoc (getkword "\n[sum/Quad/Max/Min] <Sum>: ") '(("Sum" . +) ("Quad" . *) ("Max" . max) ("Min" . min))))))
  6.            (   +   )
  7.        )
  8.    )
  9.    (if (setq s (ssget '((0 . "TEXT") (1 . "~*[~`--9]*"))))
  10.        (repeat (setq i (sslength s))
  11.            (setq n (atof (cdr (assoc 1 (entget (ssname s (setq i (1- i)))))))
  12.                  r (if r (f n r) n)
  13.            )
  14.        )
  15.    )
  16.    (princ r)
  17.    (princ)
  18. )
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 22:52:18 | 显示全部楼层
 
多行文字???暗值???
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:07:10 | 显示全部楼层
您可以这样更改代码。
  1. (defun c:test( / Layer sslst numlst num)
  2.   (defun ss->EnLst (ss / retu)
  3.       (setq retu (apply 'append (ssnamex ss)))
  4.       (setq retu (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) retu))
  5.   )
  6. (setq K (getint "\n SUM<1>,Quadrature<2>,Maximum <3>,Minimum<4>"))
  7. (setq sslst (ss->EnLst (ssget (list (cons 0 "*TEXT,DIMENSION") (cons 1 "~*[~`--9]*")))))
  8. (setq numlst (mapcar '(lambda(x)
  9. (if (= "DIMENSION" (cdr (assoc 0 (entget x))))
  10.   (cdr (assoc 42 (entget x)))
  11.   (atof (cdr (assoc 1 (entget x)))))) sslst))
  12. (cond
  13.      ((= K 1)(setq num (apply '+ numlst)))
  14.      ((= K 2)(setq num (apply '* numlst)))
  15.      ((= K 3)(setq num (apply 'max numlst)))
  16.      ((= K 4)(setq num (apply 'min numlst)))
  17.      (T (setq num (apply '+ numlst)))
  18. )
  19. (princ num)
  20. (princ)
  21. )

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

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 23:09:02 | 显示全部楼层
 
非常感谢!兄弟平均值呢?可以添加吗?
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:20:48 | 显示全部楼层
对于平均值,只需添加:
  1. (setq K (getint "\n SUM<1>,Quadrature<2>,Maximum <3>,Minimum<4>,Average<5>"))


  1. ((= K 5)(setq num (/ (apply '+ numlst) (length numlst))))
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 23:30:26 | 显示全部楼层
 
非常好!非常感谢!我的兄弟。
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:41:24 | 显示全部楼层
不客气,我的朋友。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 06:21 , Processed in 0.551122 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表