明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2369|回复: 6

[求助]如何统计块中子块的数量

[复制链接]
发表于 2009-12-19 17:30:00 | 显示全部楼层 |阅读模式
请求帮忙如何统计块中子块的数量,输出到图纸中,不要分解图块,谢谢
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-12-19 18:01:00 | 显示全部楼层
给几个别人写的程序,你稍作修改,便可以满足你的要求
运行程序会返回图形或选择集中所有的块树列表
例如:("1" ("2" "3"  ("4"  ("5" ("6" ("7"))))))
表示:块“7”在块“6”中,块“6”在块“5”中,块“5”在块“4”中,块“4”,块“3”,块“2”,在块“1”中
  1. ;;;作者:highflybird
  2. ;;;Main Function
  3. (defun c:BT (/ AllLst bkTree)
  4.   (setq *APP (vlax-get-acad-object))
  5.   (setq *DOC (vla-get-ActiveDocument *APP))
  6.   (setq *BLK (vla-get-blocks *DOC))
  7.   (vlax-for blk *BLK
  8.     (setq AllLst (cons (GetNestedName blk) AllLst))
  9.   )
  10.   (foreach n AllLst
  11.     (setq bkTree (cons (Tree (car n)) bkTree))
  12.   )
  13.   (princ bkTree)   ; Now BkTree is the return value, it's a blockDef tree.
  14.   (princ)
  15. )
  16. ;;;Get all names of Nested Blocks in A blockDef
  17. (defun GetNestedName (blk / lst iName)
  18.   (vlax-for n blk
  19.     (if (or
  20.           (= (vla-get-objectname n) "AcDbBlockReference")
  21.           (= (vla-get-objectname n) "AcDbMInsertBlock")
  22.         )
  23.       (progn
  24.         (setq iName (vla-get-name n))
  25.         (if (not (member iName lst))
  26.           (setq lst (cons iName lst))
  27.         )
  28.       )
  29.     )
  30.   )
  31.   (cons (vla-get-name blk) lst)
  32. )
  33. ;;;to Construct The BlockDef Tree
  34. (defun Tree (name / lst)
  35.   (foreach n (cdr (assoc name AllLst))
  36.     (setq lst (cons (Tree n) lst))
  37.   )
  38.   (if lst
  39.     (cons name (list lst))
  40.     name
  41.   )
  42. )
  1. ;;;作者:Leeben
  2. (defun AllBlkNInBlkdef (blkn / blkdef e typ bn bnl e-l nl)
  3.   (setq ;bnl    '()
  4. blkdef (tblobjname "block" blkn)
  5.   )
  6.   (while (setq e (entnext blkdef))
  7.     (setq typ (cdr (assoc 0 (entget e))))
  8.     (if (= typ "INSERT")
  9.       (setq bn (vla-get-name (vlax-ename->vla-object e))
  10.      bnl (if bn
  11.     (cons (if (setq nl (AllBlkNInBlkdef bn))
  12.        (list bn nl)
  13.        bn
  14.      )
  15.      bnl
  16.     )
  17.   )
  18.       )
  19.     )
  20.     (setq blkdef e)
  21.   )
  22.   bnl
  23. )
  24. (defun c:ABnInBl (/ i en ss blknlst ABblknlst)
  25.   (setq ss   (ssget '((0 . "INSERT")))
  26. ;ABblknlst '()
  27.   )
  28.   (if ss
  29.     (repeat (setq i (sslength ss))
  30.       (setq en       (ssname ss (setq i (1- i)))
  31.      blkn      (vla-get-name (vlax-ename->vla-object en))
  32.      blknlst   (AllBlkNInBlkdef blkn)
  33.      ABblknlst (cons (if blknlst
  34.     (list blkn blknlst)
  35.     blkn
  36.          )
  37.          ABblknlst
  38.         )
  39.       )
  40.     )
  41.     (princ "*** 你没有选择任何图块 ***")
  42.   )
  43.   (princ ABblknlst)
  44. (princ)
  45. )
 楼主| 发表于 2009-12-19 20:28:00 | 显示全部楼层
首先感谢2楼的朋友,不过好像有点问题,运行出错。我不太懂编程,还请朋友们帮忙。
发表于 2009-12-20 12:16:00 | 显示全部楼层

感谢楼主提供程序

程序运行O.K.

发表于 2011-1-6 17:08:43 | 显示全部楼层
复制了,晚上回家研究一下
发表于 2021-4-20 20:35:14 | 显示全部楼层
楼主得到统计子块插件了吗?
发表于 2021-4-29 15:37:24 | 显示全部楼层
yoyoho 发表于 2009-12-20 12:16
感谢楼主提供程序程序运行O.K.

请问您统计子块代码整理清楚了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 16:56 , Processed in 0.198957 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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