[讨论]如何取得图形中全部的图元
<p></p><p>(defun ALL-ENTS (/ E ELST)<br/> (and (setq E (entnext))<br/> (setq ELST (cons E ELST))<br/> (while (setq E (entnext E))<br/> (setq ELST (cons E ELST))<br/> )<br/> )<br/> ELST<br/>)</p><p>原以为上面的代码可以做到,发现不行,<font color="#ff0000">不能遍历到块内的图元</font>。</p><p>想用<font color="#ff0000">VLA方法</font>取得,但是,似乎没有简便的方法。</p><p>后来,新的想法:<font color="#ff0000">有没有办法搞到图形中,所有的句柄? 就是组码5的值??</font><br/></p> <p>你的意思是不是想进入块内??</p><p>如果只是这个意思的话,那就在遍历图元之前遍历块就行了。</p><p>你可以现用tblnext遍历每个块,然后遍历块里面的每一个图元</p><p>最后在遍历模型空间的图元就是了。因为模型空间里面的是Insert对象,而不是块本身。</p> <p>(ssget "X")不行吗?</p> <p>vla也不是很麻烦啊,不过感觉ssget简单很多了</p><p>(defun c:getall()<br/> (vl-load-com)<br/> (setq acad (vlax-get-acad-object)<br/> doc (vla-get-activedocument acad)<br/> spc (vla-get-modelspace doc)<br/> ssets (vla-get-selectionsets doc)<br/> sset (vla-add ssets "allobjects1")<br/> )<br/> (vla-select sset acSelectionSetAll)<br/> (princ (strcat "共" (itoa (vla-get-count sset)) "个对象:\n"))<br/> (vlax-for obj sset<br/> (princ (vla-get-objectname obj))<br/> )<br/> (princ)<br/> )</p> enocheasty发表于2010-4-30 17:30:00static/image/common/back.gif你的意思是不是想进入块内??如果只是这个意思的话,那就在遍历图元之前遍历块就行了。你可以现用tblnext遍历每个块,然后遍历块里面的每一个图元最后在遍历模型空间的图元就是了。因为模型空
<p></p><p>想用简便的方法。</p><p><font color="#ff0000">有没有办法搞到图形中,所有的句柄? 就是组码5的值??<br/></font> </p> 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/><Selection set: 106><br/>_$ (sslength ss)<br/><font color="#ff0000">2</font></p><p>把块炸开了以后:</p><p>_$ (setq ss (ssget "X" '((0 . "TEXT"))))<br/><Selection set: 19a><br/>_$ (sslength ss)<br/><font color="#ff0000">4</font></p> sailorcwx发表于2010-4-30 20:28:00static/image/common/back.gifvla也不是很麻烦啊,不过感觉ssget简单很多了(defun c:getall() (vl-load-com) (setq acad (vlax-get-acad-object) doc (vla-get-activedocument acad) 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> 本帖最后由 作者 于 2010-5-1 10:09:26 编辑 <br /><br /> <p>记录CAD实体顺序生成的有两种符号<br/>1:Handle 16进制<br/>2:ObjectID 8进制数字</p><p>以前有个帖子讨论某个实体之后所有实体的帖子,或许会有启发</p> 本帖最后由 作者 于 2010-5-1 13:13:55 编辑 <br /><br /> <p>;;vlax-for应该是最简单的方法</p><p>(defun c:TT (/ blks)<br/> (setq BLKS (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))<br/> (vlax-for blk blks (vlax-for obj blk<br/> (princ (vlax-vla-object->ename obj))<br/> (princ "\n")<br/> )<br/> )<br/>)</p>
页:
[1]
2