乐筑天下

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

[编程交流] 平均值、最小值、最大值

[复制链接]

14

主题

29

帖子

16

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
74
发表于 2022-7-6 16:00:22 | 显示全部楼层 |阅读模式
有人能帮我找到一个lisp,用数值计算文本的平均值、最小值和最大值吗?
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 16:03:57 | 显示全部楼层
CAD TIPS中有一个完整的Lisp例程存档,它是cadalyst杂志网站的一部分。为了回答这里提出的问题,我在那里进行了多次搜索。试试看。从这里开始:
 
www.cadalyst。通用域名格式
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:09:45 | 显示全部楼层
如果你在Cadalyst上运气不好,试试这个,这是我刚才输入的
 
  1. ; Max, Min and Average by Lee McDonnell -- 12/08
  2. (defun c:number    (/ ans ent1 nmax ent num ent2 nmin ent3 num2 ss ssl index tents tot ent4 num3 ave)
  3.    (princ "\nInitializing...")
  4.    (initget 1 "Max Min Average")
  5.    (setq ans (getkword "\nSpecify Numerical Requirement [MAx/MIn/Ave]: "))
  6.    (cond
  7.    ((= ans "Max")
  8.     (if
  9.         (setq ent1 (car (entsel "\nSelect Numerical Text: ")))
  10.        (progn
  11.            (setq nmax (atof (cdr (assoc 1 (entget ent1)))))
  12.            (while
  13.            (/= (setq ent (car (entsel "\nSelect Numerical Text: "))) nil)
  14.               (if (= (cdr (assoc 0 (entget ent))) "TEXT")
  15.                   (progn
  16.                   (setq num (atof (cdr (assoc 1 (entget ent)))))
  17.                   (if (> num nmax)
  18.                       (setq nmax num)
  19.                   ) ;_  end if
  20.                   ) ;_  end progn
  21.                   (alert "Selected Entity must be Text.")
  22.               ) ;_  end if
  23.            ) ;_  end while
  24.            (alert (strcat "Maximum Number is: " (rtos nmax)))
  25.        ) ;_  end progn
  26.        (alert "Text Required.")
  27.     ) ;_  end if
  28.    )
  29.    ((= ans "Min")
  30.     (if
  31.         (setq ent2 (car (entsel "\nSelect Numerical Text: ")))
  32.        (progn
  33.            (setq nmin (atof (cdr (assoc 1 (entget ent2)))))
  34.            (while
  35.            (/= (setq ent3 (car (entsel "\nSelect Numerical Text: "))) nil)
  36.               (if (= (cdr (assoc 0 (entget ent3))) "TEXT")
  37.                   (progn
  38.                   (setq num2 (atof (cdr (assoc 1 (entget ent3)))))
  39.                   (if (< num2 nmin)
  40.                       (setq nmin num2)
  41.                   ) ;_  end if
  42.                   ) ;_  end progn
  43.                   (alert "Selected Entity must be Text.")
  44.               ) ;_  end if
  45.            ) ;_  end while
  46.            (alert (strcat "Minimum Number is: " (rtos nmin)))
  47.        ) ;_  end progn
  48.        (alert "Text Required.")
  49.     ) ;_  end if
  50.    )
  51.    ((= ans "Average")
  52.     (setq ss    (ssget)
  53.           ssl   (sslength ss)
  54.           index 0
  55.           tents 0
  56.           tot   0
  57.     ) ;_  end setq
  58.     (repeat ssl
  59.         (setq ent4 (entget (ssname ss index)))
  60.         (if (= (cdr (assoc 0 ent4)) "TEXT")
  61.         (progn
  62.             (setq num3 (atof (cdr (assoc 1 ent4))))
  63.             (setq tot (+ num3 tot))
  64.             (setq tents (1+ tents))
  65.         ) ;_  end progn
  66.         ) ;_  end if
  67.         (setq index (1+ index))
  68.     ) ;_  end repeat
  69.     (if (/= tents 0)
  70.         (progn
  71.         (setq ave (/ tot tents))
  72.         (alert (strcat "Average of " (rtos tents) " Numbers is: " (rtos ave)))
  73.         ) ;_  end progn
  74.         (alert "No Text Entities Selected.")
  75.     ) ;_  end if
  76.    )
  77.    ) ;_  end cond
  78.    (princ)
  79. ) ;_  end defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:10:08 | 显示全部楼层
我对在Max和Min操作中选择文本实体的“entsel”方法不太满意——我更愿意再次使用ssget选择方法。
 
但我遇到的问题是,在最小值和最大值运算中,可能需要一个基准进行比较,即取集合中的一个数字,然后将其他数字与之进行比较,如果每个数字都大于或小于基准,则将其设置为新的基准,依此类推。所以我考虑使用选择集的第一个元素作为基准,但这并没有放弃第一个元素可能不是文本元素的可能性。
我想我可以设计一个程序来做到这一点,但我需要更多的时间-暂时使用上述内容。
回复

使用道具 举报

3

主题

136

帖子

133

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 16:14:19 | 显示全部楼层
 
李不可接受。我们现在需要修复,否则你就得不到报酬!:x
 
 
附笔。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 16:18:25 | 显示全部楼层
懒鬼:lol::lol:
 
李:
 
第一你如此轻松地完成了这些事情,我很嫉妒。你似乎真的有Lisp程序的本领。
 
第二你睡过吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:19:29 | 显示全部楼层
 
谢谢-我在这里有很多练习
 
 
我必须承认,很少。。。
回复

使用道具 举报

14

主题

29

帖子

16

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
74
发表于 2022-7-6 16:25:20 | 显示全部楼层
谢谢你的帮助李。我同意你选择文本实体的“entsel”方法。我有数百个文本实体,这使得它不切实际。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:27:44 | 显示全部楼层
好的,约翰,我有几分钟的时间,试试这个:
 
  1. ; Max, Min and Average by Lee McDonnell -- 12/08
  2. (defun c:number    (/       ans         ss_max    ssl_max     xth       tent_max  ent_max   ent_base_max
  3.         num_max   ss_min    ssl_min   yth     tent_min  ent_min   ent_base_min
  4.         num_min   ss         ssl       index     tents       tot         ent       num
  5.         ave
  6.        )
  7.    (princ "\nInitializing...")
  8.    (initget 1 "Max Min Average")
  9.    (setq ans (getkword "\nSpecify Numerical Requirement [MAx/MIn/Ave]: "))
  10.    (cond
  11.    ((= ans "Max")
  12.     (setq ss_max    (ssget)
  13.           ssl_max    (sslength ss_max)
  14.           xth    0
  15.           tent_max    0
  16.     ) ;_  end setq
  17.     (if (/= ssl_max 0)
  18.         (progn
  19.         (while    (< xth ssl_max)
  20.             (setq ent_max (entget (ssname ss_max xth)))
  21.             (if (= (cdr (assoc 0 ent_max)) "TEXT")
  22.             (progn
  23.                 (setq ent_base_max (atof (cdr (assoc 1 ent_max))))
  24.                 (setq xth ssl_max)
  25.             ) ;_  end progn
  26.             (setq xth (1+ xth))
  27.             ) ;_  end if
  28.         ) ;_  end while
  29.         (setq xth 0)
  30.         (repeat ssl_max
  31.             (setq ent_max (entget (ssname ss_max xth)))
  32.             (if (= (cdr (assoc 0 ent_max)) "TEXT")
  33.             (progn
  34.                 (setq num_max (atof (cdr (assoc 1 ent_max))))
  35.                 (if (> num_max ent_base_max)
  36.                 (setq ent_base_max num_max)
  37.                 ) ;_  end if
  38.                 (setq tent_max (1+ tent_max))
  39.             ) ;_  end progn
  40.             ) ;_  end if
  41.             (setq xth (1+ xth))
  42.         ) ;_  end repeat
  43.         (alert (strcat "Maximum of " (rtos tent_max) " Numbers is: " (rtos ent_base_max)))
  44.         ) ;_  end progn
  45.         (alert "No Entities Selected.")
  46.     ) ;_  end if
  47.    )
  48.    ((= ans "Min")
  49.     (setq ss_min    (ssget)
  50.           ssl_min    (sslength ss_min)
  51.           yth    0
  52.           tent_min    0
  53.     ) ;_  end setq
  54.     (if (/= ssl_min 0)
  55.         (progn
  56.         (while    (< yth ssl_min)
  57.             (setq ent_min (entget (ssname ss_min yth)))
  58.             (if (= (cdr (assoc 0 ent_min)) "TEXT")
  59.             (progn
  60.                 (setq ent_base_min (atof (cdr (assoc 1 ent_min))))
  61.                 (setq yth ssl_min)
  62.             ) ;_  end progn
  63.             (setq yth (1+ yth))
  64.             ) ;_  end if
  65.         ) ;_  end while
  66.         (setq yth 0)
  67.         (repeat ssl_min
  68.             (setq ent_min (entget (ssname ss_min yth)))
  69.             (if (= (cdr (assoc 0 ent_min)) "TEXT")
  70.             (progn
  71.                 (setq num_min (atof (cdr (assoc 1 ent_min))))
  72.                 (if (< num_min ent_base_min)
  73.                 (setq ent_base_min num_min)
  74.                 ) ;_  end if
  75.                 (setq tent_min (1+ tent_min))
  76.             ) ;_  end progn
  77.             ) ;_  end if
  78.             (setq yth (1+ yth))
  79.         ) ;_  end repeat
  80.         (alert (strcat "Minimum of " (rtos tent_min) " Numbers is: " (rtos ent_base_min)))
  81.         ) ;_  end progn
  82.         (alert "No Entities Selected.")
  83.     ) ;_  end if
  84.    )
  85.    ((= ans "Average")
  86.     (setq ss    (ssget)
  87.           ssl   (sslength ss)
  88.           index 0
  89.           tents 0
  90.           tot   0
  91.     ) ;_  end setq
  92.     (repeat ssl
  93.         (setq ent (entget (ssname ss index)))
  94.         (if (= (cdr (assoc 0 ent)) "TEXT")
  95.         (progn
  96.             (setq num (atof (cdr (assoc 1 ent))))
  97.             (setq tot (+ num tot))
  98.             (setq tents (1+ tents))
  99.         ) ;_  end progn
  100.         ) ;_  end if
  101.         (setq index (1+ index))
  102.     ) ;_  end repeat
  103.     (if (/= tents 0)
  104.         (progn
  105.         (setq ave (/ tot tents))
  106.         (alert (strcat "Average of " (rtos tents) " Numbers is: " (rtos ave)))
  107.         ) ;_  end progn
  108.         (alert "No Text Entities Selected.")
  109.     ) ;_  end if
  110.    )
  111.    ) ;_  end cond
  112.    (princ)
  113. ) ;_  end defun
回复

使用道具 举报

14

主题

29

帖子

16

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
74
发表于 2022-7-6 16:29:13 | 显示全部楼层
谢谢李。你有非凡的能力!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:33 , Processed in 1.292958 second(s), 72 queries .

© 2020-2025 乐筑天下

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