LLXXZZ 发表于 2011-8-31 20:42:50

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

本帖最后由 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
    )
)

以下是晓城的子程,写的非常棒!!
;;;***********************************************************
;;; No.1-2获取图块内的所有非图块对象(含嵌套块中的)名称 函数
;;;***********************************************************
(defun ayGetAllEntInBLK
       (BlkEntName / xBlkName xBlkDef entName1 entType entNameList)
(setq xBlkName (cdr (assoc 2 (entget BlkEntName))))
(setq xBlkDef (tblobjname "Block" xBlkName))
(while (setq entName1 (entnext xBlkDef))
    (setq entType (cdr (assoc 0 (entget entName1))))
    (if(= entType "INSERT")
      (setq entNameList
       (append (ayGetAllEntInBLK entName1) entNameList)
      )
      (setq entNameList (cons entName1 entNameList))
    )          ;end_if
    (setq xBlkDef entName1)
)          ;end_while   entNameList
entNameList
)          ;end_defun

美林 发表于 2019-6-30 08:39:04

各位大神,请教一下,图档里面有一个A4图框块,我用代码(setq e1 (car (entsel)))选择图框返回的图元名与用代码(setq e2 (tblobjname "Block" "A4"))返回的图元名两个怎么不一样,各有什么作用,谢谢了

流动的清泉 发表于 2024-5-25 10:14:58

楼主是做幕墙的李晓卓吧,看名称也是姓名的首字母

atone 发表于 2024-2-9 11:33:27

厉害,学习啦

Andyhon 发表于 2011-8-31 22:03:45

Visit site:
http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/scan-blocks-and-nested-blocks/td-p/3014594/page/2

caiqs 发表于 2011-9-2 07:46:48

这个代码有些技术含量,要用递归,别人不会放源码的,请搜看我的“无限层块”

LLXXZZ 发表于 2011-9-2 12:45:42

多谢热心人.代码在群里一个哥们提供了.有空我给贴上来.

pizg 发表于 2012-7-13 14:56:59

本帖最后由 pizg 于 2012-7-13 14:57 编辑

LLXXZZ 发表于 2011-9-2 12:45 http://bbs.mjtd.com/static/image/common/back.gif
多谢热心人.代码在群里一个哥们提供了.有空我给贴上来.

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

cheng5276 发表于 2012-9-20 23:15:53

很好的代码,这问题困扰了我很久,感谢

cheng5276 发表于 2012-9-21 20:55:51

哎呀呀,看错了,以为是能够取得单独块的子图元,原来还是块容器的。

cheng5276 发表于 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)
)

clh521 发表于 2012-10-6 16:32:21

收集眦贴,有用

434939575 发表于 2015-3-5 16:52:46

这个好难找啊!辛苦了!
页: [1] 2
查看完整版本: 求助:获得图块的全部子图元(答案已找到.感谢:晓城(64388102))