明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5230|回复: 12

求助:获得图块的全部子图元(答案已找到.感谢:晓城(64388102))

  [复制链接]
发表于 2011-8-31 20:42:50 | 显示全部楼层 |阅读模式
本帖最后由 LLXXZZ 于 2011-9-2 21:30 编辑

以下为本人做的小程序,只能取得次级图元.
不会用循环取得全部图元.请指教.

;;;获得图块次级图元
;;;若非图块,返回自身图元名.
;;;(blk:2ent  (car (entsel))) (dxf 2 (car (entsel))) (tblobjname "block" nil)
(defun blk:2ent (blk / rtn Name temp)
  (SETQ rtn (list)
Name (dxf 2 blk)
)
  (if Name
    (progn
      (setq temp (tblobjname "block" Name))
      (while (SETQ temp (entnext temp)) (SETQ rtn (cons temp rtn)))
      )
    blk
    )
)

以下是晓城的子程,写的非常棒!!
  1. ;;;***********************************************************
  2. ;;; No.1-2  获取图块内的所有非图块对象(含嵌套块中的)名称 函数
  3. ;;;***********************************************************
  4. (defun ayGetAllEntInBLK
  5.        (BlkEntName / xBlkName xBlkDef entName1 entType entNameList)
  6.   (setq xBlkName (cdr (assoc 2 (entget BlkEntName))))
  7.   (setq xBlkDef (tblobjname "Block" xBlkName))
  8.   (while (setq entName1 (entnext xBlkDef))
  9.     (setq entType (cdr (assoc 0 (entget entName1))))
  10.     (if  (= entType "INSERT")
  11.       (setq entNameList
  12.        (append (ayGetAllEntInBLK entName1) entNameList)
  13.       )
  14.       (setq entNameList (cons entName1 entNameList))
  15.     )          ;end_if
  16.     (setq xBlkDef entName1)
  17.   )          ;end_while   entNameList
  18.   entNameList
  19. )          ;end_defun

评分

参与人数 1明经币 +1 收起 理由
cheng5276 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 收集|主题: 58, 订阅: 4
发表于 2019-6-30 08:39:04 | 显示全部楼层
各位大神,请教一下,图档里面有一个A4图框块,我用代码(setq e1 (car (entsel)))选择图框返回的图元名与用代码(setq e2 (tblobjname "Block" "A4"))返回的图元名两个怎么不一样,各有什么作用,谢谢了
发表于 2024-5-25 10:14:58 | 显示全部楼层
楼主是做幕墙的李晓卓吧,看名称也是姓名的首字母
发表于 2024-2-9 11:33:27 | 显示全部楼层
厉害,学习啦
发表于 2011-8-31 22:03:45 | 显示全部楼层
发表于 2011-9-2 07:46:48 | 显示全部楼层
这个代码有些技术含量,要用递归,别人不会放源码的,请搜看我的“无限层块”
 楼主| 发表于 2011-9-2 12:45:42 | 显示全部楼层
多谢热心人.代码在群里一个哥们提供了.有空我给贴上来.
发表于 2012-7-13 14:56:59 | 显示全部楼层
本帖最后由 pizg 于 2012-7-13 14:57 编辑
LLXXZZ 发表于 2011-9-2 12:45
多谢热心人.代码在群里一个哥们提供了.有空我给贴上来.


都過了那麼久了, 怎還沒貼上呀?

点评

一楼帖了.估计你没有注意看.  发表于 2012-7-14 12:25
发表于 2012-9-20 23:15:53 | 显示全部楼层
很好的代码,这问题困扰了我很久,感谢

点评

取之于明,用之于明. 明=明经.  发表于 2012-9-21 11:59
发表于 2012-9-21 20:55:51 | 显示全部楼层
哎呀呀,看错了,以为是能够取得单独块的子图元,原来还是块容器的。
发表于 2012-9-21 20:57:33 | 显示全部楼层
我也凑热闹,贴个我的吧,都是大同小异的
;块(参照)子图元OBJ列表,包括子图元
(defun cheng5276-block-objlst (ename&name / *doc blist blocks bname elist en ent lst n st)
   (vl-load-com)
   (defun block->objlst (BName)
   (vl-load-com)
   (setq *DOC (vla-get-activeDocument (vlax-get-acad-object)))
           (setq blocks (vla-get-blocks *Doc))
    (setq BList (vla-item blocks BName));得到块内实体集合
    (vlax-for n Blist
        (setq en (a->en n))
        (setq ent (entget en))
        (if (= (cdr (assoc 0 ent)) "INSERT")
     (SETQ LST (block->objlst (CDR (assoc 2 ent))))
        )
     (setq lst (append lst (list n)))
    )
        LST
        )
       
   (setq st (type ename&name))
   (COND
   ((= st 'ENAME)
    (setq EList (entget ename&name))         ;得到插入块图元表
    (setq BName (cdr (assoc 2 EList)))  ;得到插入块块名
   )
   ((= st 'STR)
   (SETQ BName ename&name)
   )
   )
   (block->objlst BName)
)
发表于 2012-10-6 16:32:21 | 显示全部楼层
收集眦贴,有用
发表于 2015-3-5 16:52:46 | 显示全部楼层
这个好难找啊!辛苦了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 16:54 , Processed in 0.174636 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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