carrot1983 发表于 2010-4-30 15:19:00

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

<p></p><p>(defun ALL-ENTS&nbsp;(/ E ELST)<br/>&nbsp; (and (setq E (entnext))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ELST (cons E ELST))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (while (setq E (entnext E))<br/>&nbsp; (setq ELST (cons E ELST))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; ELST<br/>)</p><p>原以为上面的代码可以做到,发现不行,<font color="#ff0000">不能遍历到块内的图元</font>。</p><p>想用<font color="#ff0000">VLA方法</font>取得,但是,似乎没有简便的方法。</p><p>后来,新的想法:<font color="#ff0000">有没有办法搞到图形中,所有的句柄? 就是组码5的值??</font>
                <br/></p>

liminnet 发表于 2010-4-30 17:00:00

enocheasty 发表于 2010-4-30 17:30:00

<p>你的意思是不是想进入块内??</p><p>如果只是这个意思的话,那就在遍历图元之前遍历块就行了。</p><p>你可以现用tblnext遍历每个块,然后遍历块里面的每一个图元</p><p>最后在遍历模型空间的图元就是了。因为模型空间里面的是Insert对象,而不是块本身。</p>

ZZXXQQ 发表于 2010-4-30 19:15:00

<p>(ssget "X")不行吗?</p>

sailorcwx 发表于 2010-4-30 20:28:00

<p>vla也不是很麻烦啊,不过感觉ssget简单很多了</p><p>(defun c:getall()<br/>&nbsp; (vl-load-com)<br/>&nbsp; (setq acad (vlax-get-acad-object)<br/>&nbsp;doc (vla-get-activedocument acad)<br/>&nbsp;spc (vla-get-modelspace doc)<br/>&nbsp;ssets (vla-get-selectionsets doc)<br/>&nbsp;sset (vla-add ssets "allobjects1")<br/>&nbsp;)<br/>&nbsp; (vla-select sset acSelectionSetAll)<br/>&nbsp; (princ (strcat "共" (itoa (vla-get-count sset)) "个对象:\n"))<br/>&nbsp; (vlax-for obj sset<br/>&nbsp;&nbsp;&nbsp; (princ (vla-get-objectname obj))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (princ)<br/>&nbsp; )</p>

carrot1983 发表于 2010-5-1 09:05:00

enocheasty发表于2010-4-30 17:30:00static/image/common/back.gif你的意思是不是想进入块内??如果只是这个意思的话,那就在遍历图元之前遍历块就行了。你可以现用tblnext遍历每个块,然后遍历块里面的每一个图元最后在遍历模型空间的图元就是了。因为模型空

<p></p><p>想用简便的方法。</p><p><font color="#ff0000">有没有办法搞到图形中,所有的句柄? 就是组码5的值??<br/></font>&nbsp;&nbsp;</p>

carrot1983 发表于 2010-5-1 09:08:00

ZZXXQQ发表于2010-4-30 19:15:00static/image/common/back.gif(ssget \"X\")不行吗?

<p>上传一个DWG</p><p>里面有个块,块内有四个文字,两个空字符串。。。</p><p>_$ (setq ss (ssget "X" '((0 . "TEXT"))))<br/>&lt;Selection set: 106&gt;<br/>_$ (sslength ss)<br/><font color="#ff0000">2</font></p><p>把块炸开了以后:</p><p>_$ (setq ss (ssget "X" '((0 . "TEXT"))))<br/>&lt;Selection set: 19a&gt;<br/>_$ (sslength ss)<br/><font color="#ff0000">4</font></p>

carrot1983 发表于 2010-5-1 09:12:00

sailorcwx发表于2010-4-30 20:28:00static/image/common/back.gifvla也不是很麻烦啊,不过感觉ssget简单很多了(defun c:getall()&nbsp; (vl-load-com)&nbsp; (setq acad (vlax-get-acad-object)&nbsp;doc (vla-get-activedocument acad)&nbsp;spc (vla-get-mo

<p>用我楼上的图形文件。</p><p>原来是块的时候: </p><p>命令: 共3个对象:</p><p>"AcDbBlockReference"<br/>"AcDbText"<br/>"AcDbText"</p><p>块炸开之后: </p><p>"AcDbText"<br/>"AcDbPolyline"<br/>"AcDbText"<br/>"AcDbPolyline"<br/>"AcDbPolyline"<br/>"AcDbPolyline"<br/>"AcDbText"<br/>"AcDbText"</p><p><font color="#ff0000">也就是说,在块里面,不能识别出空字符串????</font></p><p></p>

eachy 发表于 2010-5-1 09:34:00

本帖最后由 作者 于 2010-5-1 10:09:26 编辑 <br /><br /> <p>记录CAD实体顺序生成的有两种符号<br/>1:Handle 16进制<br/>2:ObjectID 8进制数字</p><p>以前有个帖子讨论某个实体之后所有实体的帖子,或许会有启发</p>

caoyin 发表于 2010-5-1 10:37:00

本帖最后由 作者 于 2010-5-1 13:13:55 编辑 <br /><br /> <p>;;vlax-for应该是最简单的方法</p><p>(defun c:TT (/&nbsp;blks)<br/>&nbsp; (setq BLKS (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))<br/>&nbsp; (vlax-for blk blks (vlax-for obj blk<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (vlax-vla-object-&gt;ename obj))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>)</p>
页: [1] 2
查看完整版本: [讨论]如何取得图形中全部的图元