明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2983|回复: 25

[提问] 怎样获取图块的所有层

[复制链接]
发表于 2015-5-12 10:00:01 | 显示全部楼层 |阅读模式
别人做的图块很不规范,不是在0层做的块,经常是a层做的块,却在b层插入,甚至多重嵌套的情况。
层隔离老是没法成功,有什么办法能够获得一个图块所包含的所有图层,包括插入的图层,图块内各单体的图层
谢谢
发表于 2015-5-12 20:21:07 | 显示全部楼层
发测试文件
 楼主| 发表于 2015-5-15 09:44:17 | 显示全部楼层
比如这个块
在“1”层插入,其实内含3个图层:“dq1”,“dq3”,“dqt”,用层隔离,隔离出“1”层来,却什么也显示不出来

本帖子中包含更多资源

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

x
发表于 2015-5-15 12:14:14 | 显示全部楼层
搜一下非选择集图层关闭
发表于 2015-5-15 19:15:50 | 显示全部楼层
最近有人一直要获取块内所有图层的函数..
我拿出来卖了  疯狂敛财..
http://bbs.mjtd.com/thread-113789-1-1.html
  如帖子  刚写的 新鲜的.
发表于 2015-5-15 19:42:47 | 显示全部楼层
  1. ;;; BLOCK_LAYERS
  2. (defun c:block_layers ( / myblock tlist ename llist ctr)
  3. (while (setq myblock (car (entsel "\n选择块: ")))
  4.         (if (= (cdr (assoc 0 (entget myblock))) "INSERT")
  5.          (progn
  6. (setq tlist (tblsearch "BLOCK" (cdr (assoc 2 (entget myblock))))
  7.          ename (cdr (assoc -2 tlist))
  8. )
  9. (while ename
  10. (if llist
  11.          (setq llist
  12.          (append (list (cdr (assoc 8 (entget ename)))) llist)
  13.          )
  14.          (setq llist (list (cdr (assoc 8 (entget ename)))))
  15. )
  16. (setq ename (entnext ename))
  17. )
  18. (setq ctr 0)
  19. (princ(strcat "\nBlock " (cdr (assoc 2 (entget myblock)))))
  20. (repeat(length llist)
  21. (princ(strcat "\n" (nth ctr llist)))
  22. (setq ctr(1+ ctr))
  23. )

  24.          )
  25.          (if myblock
  26. (princ "\n对象不是块. ")
  27.          )
  28.         )

  29. )
  30. (princ)
  31. )
发表于 2015-5-15 19:50:24 | 显示全部楼层
再来一个:
(defun C:GetLayersInBlocks
(/ lstAll lstLayers objBlockReference objItem)
(vlax-for objBlockReference (vla-get-blocks
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(setq lstLayers nil)
(if (/= (substr (vla-get-name objBlockReference) 1 1) "*")
(progn
(vlax-for objItem objBlockReference
(if (not (member (vla-get-layer objItem) lstLayers))
(setq lstLayers (cons (vla-get-layer objItem) lstLayers))
)
)
(if lstLayers
(setq lstAll (cons (cons (vla-get-name objBlockReference)
(acad_strlSort lstLayers)
)
lstAll
)
)
)
)
)
)
(if lstAll
(foreach lstSublist
(vl-sort lstAll '(lambda (X Y) (< (car X) (car Y))))
(print lstSubList)
)
)
(princ)
)

命令: GetLayersInBlocks
("图块1" "0")
("图块2" "图层1" "图层2")
("图块3" "0")
("图块4" "0" "图层3")

点评

你究竟收藏了多少好宝贝啊?  发表于 2015-5-15 19:56
发表于 2015-5-15 19:54:52 | 显示全部楼层
lucas你又出来奉献了

点评

呵呵,兄台你也不错!  发表于 2015-5-15 20:03
发表于 2015-5-15 21:14:02 | 显示全部楼层
看看源码
发表于 2015-5-16 10:26:58 | 显示全部楼层
我仔细看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 20:13 , Processed in 0.198884 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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