明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3779|回复: 10

[讨论]如何取得图形中全部的图元

[复制链接]
发表于 2010-4-30 15:19:00 | 显示全部楼层 |阅读模式

(defun ALL-ENTS (/ E ELST)
  (and (setq E (entnext))
       (setq ELST (cons E ELST))
       (while (setq E (entnext E))
  (setq ELST (cons E ELST))
       )
  )
  ELST
)

原以为上面的代码可以做到,发现不行,不能遍历到块内的图元

想用VLA方法取得,但是,似乎没有简便的方法。

后来,新的想法:有没有办法搞到图形中,所有的句柄? 就是组码5的值??

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-4-30 17:00:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2010-4-30 17:30:00 | 显示全部楼层

你的意思是不是想进入块内??

如果只是这个意思的话,那就在遍历图元之前遍历块就行了。

你可以现用tblnext遍历每个块,然后遍历块里面的每一个图元

最后在遍历模型空间的图元就是了。因为模型空间里面的是Insert对象,而不是块本身。

发表于 2010-4-30 19:15:00 | 显示全部楼层

(ssget "X")不行吗?

发表于 2010-4-30 20:28:00 | 显示全部楼层

vla也不是很麻烦啊,不过感觉ssget简单很多了

(defun c:getall()
  (vl-load-com)
  (setq acad (vlax-get-acad-object)
 doc (vla-get-activedocument acad)
 spc (vla-get-modelspace doc)
 ssets (vla-get-selectionsets doc)
 sset (vla-add ssets "allobjects1")
 )
  (vla-select sset acSelectionSetAll)
  (princ (strcat "共" (itoa (vla-get-count sset)) "个对象:\n"))
  (vlax-for obj sset
    (princ (vla-get-objectname obj))
    )
  (princ)
  )

 楼主| 发表于 2010-5-1 09:05:00 | 显示全部楼层
enocheasty发表于2010-4-30 17:30:00你的意思是不是想进入块内??如果只是这个意思的话,那就在遍历图元之前遍历块就行了。你可以现用tblnext遍历每个块,然后遍历块里面的每一个图元最后在遍历模型空间的图元就是了。因为模型空

想用简便的方法。

有没有办法搞到图形中,所有的句柄? 就是组码5的值??
  

 楼主| 发表于 2010-5-1 09:08:00 | 显示全部楼层
ZZXXQQ发表于2010-4-30 19:15:00(ssget \"X\")不行吗?

上传一个DWG

里面有个块,块内有四个文字,两个空字符串。。。

_$ (setq ss (ssget "X" '((0 . "TEXT"))))
<Selection set: 106>
_$ (sslength ss)
2

把块炸开了以后:

_$ (setq ss (ssget "X" '((0 . "TEXT"))))
<Selection set: 19a>
_$ (sslength ss)
4

 楼主| 发表于 2010-5-1 09:12:00 | 显示全部楼层
sailorcwx发表于2010-4-30 20:28:00vla也不是很麻烦啊,不过感觉ssget简单很多了(defun c:getall()  (vl-load-com)  (setq acad (vlax-get-acad-object) doc (vla-get-activedocument acad) spc (vla-get-mo

用我楼上的图形文件。

原来是块的时候:

命令: 共3个对象:

"AcDbBlockReference"
"AcDbText"
"AcDbText"

块炸开之后:

"AcDbText"
"AcDbPolyline"
"AcDbText"
"AcDbPolyline"
"AcDbPolyline"
"AcDbPolyline"
"AcDbText"
"AcDbText"

也就是说,在块里面,不能识别出空字符串????

发表于 2010-5-1 09:34:00 | 显示全部楼层
本帖最后由 作者 于 2010-5-1 10:09:26 编辑

记录CAD实体顺序生成的有两种符号
1:Handle 16进制
2:ObjectID 8进制数字

以前有个帖子讨论某个实体之后所有实体的帖子,或许会有启发

发表于 2010-5-1 10:37:00 | 显示全部楼层
本帖最后由 作者 于 2010-5-1 13:13:55 编辑

;;vlax-for应该是最简单的方法

(defun c:TT (/ blks)
  (setq BLKS (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
  (vlax-for blk blks (vlax-for obj blk
                       (princ (vlax-vla-object->ename obj))
                       (princ "\n")
                     )
  )
)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 01:26 , Processed in 0.199487 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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