tempasdf 发表于 2024-10-22 18:14:31

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

本帖最后由 tempasdf 于 2024-10-22 18:14 编辑

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


(setq i 0 n (sslength ss) get nil)
(repeat n
      (setq get (cons (ssname ss i) get))
      (setq i (1+ i))
   );(repeat n
   
(setq get (vl-sort get '(lambda(a b)
            (< (cdr (assoc 40 (entget a)))
               (cdr (assoc 40 (entget b)))
                        )
            )
            )
   );(setq get (vl-sort get '(lambda(a b)


)

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

(defun c:zzzCircle (/ bf-list-item-num d get i n num ss str)
(vl-load-com)
        (defun BF-list-item-num        (lst / l2 tmp tmp1)
                (while
                        (setq l2
                                (cons
                                        (list
                                                (setq tmp1 (car lst))
                                                (- (length lst) (length (setq tmp (vl-remove tmp1 lst)))))
                                        l2)
                                lst tmp
                        )
                )
                (reverse l2)
        )
(setq ss (ssget (list (cons 0 "CIRCLE"))))
        (setq i 0 n (sslength ss) get nil)
(repeat n
                (setq get (cons (cdr (assoc 40 (entget (ssname ss i)))) get))
                (setq i (1+ i))
        )
        (setq get (vl-sort get '(lambda (a b) (< a b))))
        (setq str "" n 0)
        (foreach a (BF-list-item-num get)
                (setq
                        d (car a)
                        num (cadr a)
                        n (+ num n)
                        str (strcat str " Φ" (vl-princ-to-string d) "*" (itoa num))
                )
        )
        (alert (strcat "共" (itoa n) "个" str))
        (princ)
)

vitalgg 发表于 2024-10-22 18:47:25

本帖最后由 vitalgg 于 2024-10-22 18:52 编辑

(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))))
(stat:stat (mapcar '(lambda(x)(entity:getdxf x 40))(pickset:to-list (ssget '((0 . "circle"))))))




http://bbs.mjtd.com/data/attachment/forum/202409/24/214927kize9bamimb4c40v.png

tempasdf 发表于 2024-10-22 18:51:18

vitalgg 发表于 2024-10-22 18:47


感谢恢复 ,但这个需要联网调用函数吧,想要不用联网的

vitalgg 发表于 2024-10-22 18:53:49

tempasdf 发表于 2024-10-22 18:51
感谢恢复 ,但这个需要联网调用函数吧,想要不用联网的
看源码。自己按需组合函数。
可以安装 到本地。

tempasdf 发表于 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))
页: [1]
查看完整版本: 求助 圆按从小到大排列,显示统计信息