明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 748|回复: 5

[讨论] 求助 圆按从小到大排列,显示统计信息

[复制链接]
发表于 2024-10-22 18:14:31 | 显示全部楼层 |阅读模式
本帖最后由 tempasdf 于 2024-10-22 18:14 编辑

各位:
        本人小白一名, 现在想统计圆的数量,并按从小到大排列显示直径信息及数量 例: 共14个 Φ5*1 Φ5.8*3 Φ9.9*10
在论坛找了一下现在只完成了按半径从小到大排序的图元名,后面怎么通过图元名将半径信息 相同半径数量累计给完成了?
  1. (defun c:zzzCircle ()
  2.   (vl-load-com)
  3.   (setq ss (ssget (list (cons 0 "CIRCLE"))))

  4.   
  5.   (setq i 0 n (sslength ss) get nil)
  6.   (repeat n
  7.       (setq get (cons (ssname ss i) get))
  8.       (setq i (1+ i))
  9.    );(repeat n
  10.    
  11.   (setq get (vl-sort get '(lambda(a b)
  12.               (< (cdr (assoc 40 (entget a)))
  13.                  (cdr (assoc 40 (entget b)))
  14.                           )
  15.               )
  16.             )
  17.    );(setq get (vl-sort get '(lambda(a b)


  18.   )

发表于 2024-10-22 19:15:43 | 显示全部楼层
  1. (defun c:zzzCircle (/ bf-list-item-num d get i n num ss str)
  2.   (vl-load-com)
  3.         (defun BF-list-item-num        (lst / l2 tmp tmp1)
  4.                 (while
  5.                         (setq l2  
  6.                                 (cons
  7.                                         (list
  8.                                                 (setq tmp1 (car lst))
  9.                                                 (- (length lst) (length (setq tmp (vl-remove tmp1 lst)))))
  10.                                         l2)
  11.                                 lst tmp
  12.                         )
  13.                 )
  14.                 (reverse l2)
  15.         )
  16.   (setq ss (ssget (list (cons 0 "CIRCLE"))))
  17.         (setq i 0 n (sslength ss) get nil)
  18.   (repeat n
  19.                 (setq get (cons (cdr (assoc 40 (entget (ssname ss i)))) get))
  20.                 (setq i (1+ i))
  21.         )
  22.         (setq get (vl-sort get '(lambda (a b) (< a b))))
  23.         (setq str "" n 0)
  24.         (foreach a (BF-list-item-num get)
  25.                 (setq
  26.                         d (car a)
  27.                         num (cadr a)
  28.                         n (+ num n)
  29.                         str (strcat str " Φ" (vl-princ-to-string d) "*" (itoa num))
  30.                 )
  31.         )
  32.         (alert (strcat "共" (itoa n) "个" str))
  33.         (princ)
  34. )
回复 支持 1 反对 0

使用道具 举报

发表于 2024-10-22 18:47:25 | 显示全部楼层
本帖最后由 vitalgg 于 2024-10-22 18:52 编辑
  1. (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
  2. (stat:stat (mapcar '(lambda(x)(entity:getdxf x 40))(pickset:to-list (ssget '((0 . "circle"))))))







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2024-10-22 18:51:18 | 显示全部楼层

感谢恢复 ,但这个需要联网调用函数吧,想要不用联网的
发表于 2024-10-22 18:53:49 | 显示全部楼层
tempasdf 发表于 2024-10-22 18:51
感谢恢复 ,但这个需要联网调用函数吧,想要不用联网的

看源码。自己按需组合函数。
可以安装 到本地。
 楼主| 发表于 2024-10-22 23:39:44 | 显示全部楼层
本帖最后由 tempasdf 于 2024-10-23 00:13 编辑

飞雪神光 发表于 2024-10-22 19:15


感谢回复, 有个小bug 就是 部分圆统计时会出现 Φ4.2*2 Φ42.*2的情况,  实际应该是Φ4.2*4
参照论坛其他网友在代码修改了一下 解决了

(setq get (cons (atof (rtos (cdr (assoc 40 (entget (ssname ss i)))) 2 2)) get))

还有一个bug 是显示的是半径 这个也改了一下
str (strcat str " Φ" (vl-princ-to-string (* 2 d)) "*" (itoa num))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-21 03:30 , Processed in 0.157563 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表