发一个统计块数量的源码
本帖最后由 邹锋 于 2014-10-10 21:17 编辑(defun c:bk(/ npl mpl ss n na i)
(setq ss (ssget '((0 . "INSERT"))))
(setq n 0)
(repeat (sslength ss)
(setq npl (cons (cdr (assoc '2 (entget (ssname ss n)))) npl))
(setq n (1+ n))
)
(while npl
(setq i 0)
(setq na (car npl))
(mapcar'(lambda (y) (if (= na y)
(progn
(setq i (1+ i))
)
)
)
npl
)
(setq npl (vl-remove na npl))
(setq mpl (cons (list na (rtos i 2 0)) mpl))
)
(princ mpl)
(princ)
)
返回块名字与个数 看看我这个怎么样 我也是才学的
;选块名
(defun c:xkm ()
(setq xh 0)
(while xh
(setq km (entsel "\n请选择要过滤的块"))
(if (= km nil)
(princ "\n请重新选择")
(if (= (cdr (assoc 0 (entget (car km)))) "INSERT")
(progn
(setq km (assoc 2 (entget (car km))))
(setq xh nil)
)
)
)
)
(setq ss (ssget (list km (cons 0 "INSERT"))))
(sssetfirst nil ss)
(princ (strcat "\n已选择" (rtos (sslength ss) 2 4) "个对象"))
(princ)
)
试一下,整是自己想要的功能 这个好用谢谢分享 顶顶源码 顶顶源码 顶源码 感谢 邹锋 分享程序! 为什么要写这么复杂?练习复杂的函数?
(defun c:bk(/ en mpl ss n nn m xx)
(setq ss (ssget '((0 . "INSERT"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 2 data)))
(setq xx (assoc name mpl))
(if xx
(setq m (cdr xx) m (1+ m) mpl (subst (cons name m) xx mpl))
(setq mpl (cons (cons name 1) mpl))
)
)
(if mpl (princ mpl)(princ "/nNothing!"))
(princ)
) 叮咚 发表于 2014-10-11 11:02 static/image/common/back.gif
为什么要写这么复杂?练习复杂的函数?
请教下,第三行干嘛用的? 只是为了后续语句在空选时不报错 我是来学习的,谢谢分享 本帖最后由 zhongys 于 2014-10-11 23:04 编辑
请教邹大大
若将这一句(setq mpl (cons (list na (rtos i 2 0)) mpl))改成过滤重名块怎么改。
我改了一下
(setq mpl (cons (strcat na) mpl))
)
(setq mpl (cons "2 ." mpl))
得出结果不对,如下
(2 . screw_m10_h screw_m10_l epin_ejp_9 epin_ejp_7 epin_ejp_6 epin_ejp_4)
希望得出结果如下
(2 .“ screw_m10_h,screw_m10_l,epin_ejp_9,epin_ejp_7,epin_ejp_6,epin_ejp_4”)
用于把选择的重名块去除