匡匡 发表于 2010-11-24 14:42:00

[求助]访问图形数据库中的pline,求取各个拐点的坐标

<p>大家好,请教一个问题。</p>
<p>我在AutoCAD中画了一个多边形。想读取多边形各个拐点的坐标。通过访问图形数据库。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></p>
<p>(setq e (entnext))<o:p></o:p></p>
<p>(while e<o:p></o:p></p>
<p>&nbsp; (setq e1 (entget e))<o:p></o:p></p>
<p>&nbsp; (if(="LWPOLYLINE " (cdr (assoc 0 e1)))<o:p></o:p></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr(assoc 10 elist))//10是拐点坐标,这里只能返回一个多边形一个点的值,怎么才能返回所有点的值呢?而且每个点的坐标标志都是“<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="10" unitname="”">10”</st1:chmetcnv>啊?<o:p></o:p></p>
<p>&nbsp; )<o:p></o:p></p>
<p>)<o:p></o:p></p>

就一小卒 发表于 2010-11-24 16:16:00

<p>用 nth函数 依次返回e1表的元素,在用car函数返回首元素,在判断是否以10开头的就可以了啊</p>
<p>&nbsp;</p>

匡匡 发表于 2010-11-24 16:33:00

<p>谢谢了。如果我使用Activex,如下面:</p>
<p>(setq myacad(vlax-get-acad-object))<br/>(setq mydoc(vla-get-ActiveDocument myacad))<br/>(setq myms(vla-get-ModelSpace mydoc))<br/>(setq my (vla-item myms 0))<br/>(vlax-dump-object my t)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>出现以下信息:</p>
<p>; IAcadLWPolyline: AutoCAD Lightweight Polyline 接口<br/>;特性值:<br/>;&nbsp;&nbsp; Application (RO) = #&lt;VLA-OBJECT IAcadApplication 00c2eb8c&gt;<br/>;&nbsp;&nbsp; Area (RO) = 8950.36<br/>;&nbsp;&nbsp; Closed = -1<br/>;&nbsp;&nbsp; ConstantWidth = 0.0<br/>;&nbsp;&nbsp; Coordinate = ...不显示带索引的内容...<br/>;&nbsp;&nbsp; Coordinates = (809.203 829.272 842.478 849.13 894.903 817.309 ... )<br/>;&nbsp;&nbsp; Document (RO) = #&lt;VLA-OBJECT IAcadDocument 0747bef4&gt;<br/>;&nbsp;&nbsp; Elevation = 0.0<br/>;&nbsp;&nbsp; Handle (RO) = "10B"<br/>;&nbsp;&nbsp; HasExtensionDictionary (RO) = 0<br/>;&nbsp;&nbsp; Hyperlinks (RO) = #&lt;VLA-OBJECT IAcadHyperlinks 074fcb84&gt;<br/>;&nbsp;&nbsp; Layer = "图层1"<br/>;&nbsp;&nbsp; Length (RO) = 616.994<br/>;&nbsp;&nbsp; Linetype = "ByLayer"<br/>;&nbsp;&nbsp; LinetypeGeneration = 0<br/>;&nbsp;&nbsp; LinetypeScale = 1.0<br/>;&nbsp;&nbsp; Lineweight = -1<br/>;&nbsp;&nbsp; Normal = (0.0 0.0 1.0)<br/>;&nbsp;&nbsp; ObjectID (RO) = 2130067480<br/>;&nbsp;&nbsp; ObjectName (RO) = "AcDbPolyline"<br/>;&nbsp;&nbsp; OwnerID (RO) = 2130062584<br/>;&nbsp;&nbsp; PlotStyleName = "ByLayer"<br/>;&nbsp;&nbsp; Thickness = 0.0<br/>;&nbsp;&nbsp; TrueColor = #&lt;VLA-OBJECT IAcadAcCmColor 074fca20&gt;<br/>;&nbsp;&nbsp; Visible = -1</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这里面的有坐标信息,;&nbsp;&nbsp; Coordinates = (809.203 829.272 842.478 849.13 894.903 817.309 ... )<br/>我怎么才能提取出坐标呢?<br/></p>

ZZXXQQ 发表于 2010-11-24 20:48:00

<p>(setq plst (list))</p>
<p>(if (= (cdr(assoc 0 (setq ent (entget(car(entsel)))))) "LWPOLYLINE")</p>
<p>&nbsp;(foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))</p>
<p>)</p>

xshrimp 发表于 2010-11-24 21:01:00

<p><font face="Verdana"><font face="Verdana">(setq entlst (entget (car (entsel))))</font></font></p>
<p>&nbsp;</p>
<p><font face="Verdana">(vl-remove-if-not '(lambda(x)(= 10 (car x)) ) entlst)</font></p>

匡匡 发表于 2010-11-25 08:22:00

<p>多谢!</p>

就一小卒 发表于 2010-11-25 10:40:00

<p>如果用vlisp的 话 如下<font face="Verdana">&nbsp;(<font face="Verdana">(setq b (vlax-ename-&gt;vla-object a)) 首先将cad对象转换为VLA对象</font><br/>(setq point (vlax-safearray-&gt;list (vlax-variant-value (vlax-get-property b 'coordinate i))))提取coordinate的属性。i为表的长度 i=0时提取提取第一个元素</font></p>
页: [1]
查看完整版本: [求助]访问图形数据库中的pline,求取各个拐点的坐标