[求助]访问图形数据库中的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> (setq e1 (entget e))<o:p></o:p></p>
<p> (if(="LWPOLYLINE " (cdr (assoc 0 e1)))<o:p></o:p></p>
<p> (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> )<o:p></o:p></p>
<p>)<o:p></o:p></p> <p>用 nth函数 依次返回e1表的元素,在用car函数返回首元素,在判断是否以10开头的就可以了啊</p>
<p> </p> <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> </p>
<p> </p>
<p>出现以下信息:</p>
<p>; IAcadLWPolyline: AutoCAD Lightweight Polyline 接口<br/>;特性值:<br/>; Application (RO) = #<VLA-OBJECT IAcadApplication 00c2eb8c><br/>; Area (RO) = 8950.36<br/>; Closed = -1<br/>; ConstantWidth = 0.0<br/>; Coordinate = ...不显示带索引的内容...<br/>; Coordinates = (809.203 829.272 842.478 849.13 894.903 817.309 ... )<br/>; Document (RO) = #<VLA-OBJECT IAcadDocument 0747bef4><br/>; Elevation = 0.0<br/>; Handle (RO) = "10B"<br/>; HasExtensionDictionary (RO) = 0<br/>; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 074fcb84><br/>; Layer = "图层1"<br/>; Length (RO) = 616.994<br/>; Linetype = "ByLayer"<br/>; LinetypeGeneration = 0<br/>; LinetypeScale = 1.0<br/>; Lineweight = -1<br/>; Normal = (0.0 0.0 1.0)<br/>; ObjectID (RO) = 2130067480<br/>; ObjectName (RO) = "AcDbPolyline"<br/>; OwnerID (RO) = 2130062584<br/>; PlotStyleName = "ByLayer"<br/>; Thickness = 0.0<br/>; TrueColor = #<VLA-OBJECT IAcadAcCmColor 074fca20><br/>; Visible = -1</p>
<p> </p>
<p> </p>
<p>这里面的有坐标信息,; Coordinates = (809.203 829.272 842.478 849.13 894.903 817.309 ... )<br/>我怎么才能提取出坐标呢?<br/></p> <p>(setq plst (list))</p>
<p>(if (= (cdr(assoc 0 (setq ent (entget(car(entsel)))))) "LWPOLYLINE")</p>
<p> (foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))</p>
<p>)</p> <p><font face="Verdana"><font face="Verdana">(setq entlst (entget (car (entsel))))</font></font></p>
<p> </p>
<p><font face="Verdana">(vl-remove-if-not '(lambda(x)(= 10 (car x)) ) entlst)</font></p> <p>多谢!</p> <p>如果用vlisp的 话 如下<font face="Verdana"> (<font face="Verdana">(setq b (vlax-ename->vla-object a)) 首先将cad对象转换为VLA对象</font><br/>(setq point (vlax-safearray->list (vlax-variant-value (vlax-get-property b 'coordinate i))))提取coordinate的属性。i为表的长度 i=0时提取提取第一个元素</font></p>
页:
[1]