明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6598|回复: 21

[源码] 发一个统计块数量的源码

[复制链接]
发表于 2014-10-10 21:16:28 | 显示全部楼层 |阅读模式
本帖最后由 邹锋 于 2014-10-10 21:17 编辑
  1. (defun c:bk(/ npl mpl ss n na i)
  2.   (setq ss (ssget '((0 . "INSERT"))))
  3.   (setq n 0)
  4.   (repeat (sslength ss)
  5.     (setq npl (cons (cdr (assoc '2 (entget (ssname ss n)))) npl))
  6.     (setq n (1+ n))
  7.     )
  8.   (while npl
  9.     (setq i 0)
  10.     (setq na (car npl))
  11.     (mapcar  '(lambda (y) (if (= na y)
  12.                             (progn
  13.                               (setq i (1+ i))
  14.                               )
  15.                             )
  16.                 )
  17.              npl
  18.              )
  19.     (setq npl (vl-remove na npl))
  20.     (setq mpl (cons (list na (rtos i 2 0)) mpl))
  21.     )
  22.   (princ mpl)
  23.   (princ)
  24. )
返回块名字与个数

评分

参与人数 1明经币 +1 收起 理由
maiko + 1 淡定

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-5-14 17:30:32 | 显示全部楼层
看看我这个怎么样 我也是才学的

  1. ;选块名
  2. (defun c:xkm ()
  3.         (setq xh 0)
  4.         (while xh
  5.                 (setq km (entsel "\n请选择要过滤的块"))
  6.                 (if (= km nil)
  7.                         (princ "\n请重新选择")
  8.                         (if (= (cdr (assoc 0 (entget (car km)))) "INSERT")
  9.                                 (progn
  10.                                         (setq km (assoc 2 (entget (car km))))
  11.                                         (setq xh nil)
  12.                                 )
  13.                         )
  14.                 )
  15.         )
  16.         (setq ss (ssget (list km (cons 0 "INSERT"))))
  17.         (sssetfirst nil ss)
  18.         (princ (strcat "\n已选择" (rtos (sslength ss) 2 4) "个对象"))
  19.         (princ)
  20. )
发表于 2018-1-1 10:27:48 | 显示全部楼层
试一下,整是自己想要的功能
发表于 2019-7-6 15:43:03 | 显示全部楼层
这个好用谢谢分享
发表于 2014-10-11 07:43:08 | 显示全部楼层
顶顶源码
发表于 2014-10-11 07:57:23 | 显示全部楼层
顶顶源码
发表于 2014-10-11 08:23:52 | 显示全部楼层
顶源码
发表于 2014-10-11 08:58:16 | 显示全部楼层
感谢 邹锋 分享程序!
发表于 2014-10-11 11:02:12 | 显示全部楼层
为什么要写这么复杂?练习复杂的函数?
  1. (defun c:bk(/ en mpl ss n nn m xx)
  2. (setq ss (ssget '((0 . "INSERT"))))
  3. (or ss (setq ss (ssadd)))
  4. (setq n 0 nn (sslength ss) mpl '())
  5. (while (< n nn)
  6.         (setq en (ssname ss n) data (entget en))
  7.   (setq n (1+ n))
  8.         (setq name (cdr (assoc 2 data)))
  9.         (setq xx (assoc name mpl))
  10.         (if xx
  11.         (setq m (cdr xx) m (1+ m) mpl (subst (cons name m) xx mpl))
  12.         (setq mpl (cons (cons name 1) mpl))
  13.         )
  14.   )
  15. (if mpl (princ mpl)(princ "/nNothing!"))
  16. (princ)
  17. )

点评

一开始我也想到用点对表替换的  发表于 2014-10-11 12:35
发表于 2014-10-11 11:20:32 | 显示全部楼层
叮咚 发表于 2014-10-11 11:02
为什么要写这么复杂?练习复杂的函数?

请教下,第三行干嘛用的?
发表于 2014-10-11 11:42:20 | 显示全部楼层
只是为了后续语句在空选时不报错
发表于 2014-10-11 16:47:58 | 显示全部楼层
我是来学习的,谢谢分享
发表于 2014-10-11 22:57:02 | 显示全部楼层
本帖最后由 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”)
用于把选择的重名块去除

点评

你是用燕秀的吧,哈哈,我测试 也是用这来去测试的的,,,已经去除了啊,应该没有重名的吧,你这是合并块名成一个名字了  发表于 2014-10-12 21:14
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-9 22:12 , Processed in 0.217366 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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