xiaomihu 发表于 2005-12-1 11:14:00

取得pline关键点的坐标

<P>如何取得pline线关键点的坐标组成一个选择集</P>

王咣生 发表于 2005-12-1 14:43:00

reply

<P>取得线结点坐标,返回点表:</P>
<P>(defun *ax:GetVertexList (Ename / obj tmp coords oname start end)<BR>&nbsp; <BR>&nbsp; (setq obj (*ax:MakeObject Ename)<BR>&nbsp;coords '()<BR>&nbsp;oname (*ax:ObjectName obj))<BR>&nbsp; <BR>&nbsp; (if (member oname '("AcDbPolyline" "AcDb2dPolyline"))<BR>&nbsp;&nbsp;&nbsp; (progn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq tmp (vlax-safearray-&gt;list<BR>&nbsp;&nbsp;&nbsp; (vlax-variant-value<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-get-property<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Coordinates))))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond<BR>&nbsp;((= oname "AcDb2dPolyline")&nbsp;;Polyline<BR>&nbsp; (while tmp<BR>&nbsp;&nbsp;&nbsp; (setq coords (append coords (list (list (car tmp)(cadr tmp)(caddr tmp))))<BR>&nbsp;&nbsp; tmp (cdddr tmp))<BR>&nbsp; );while<BR>&nbsp;);<BR>&nbsp;((= oname "AcDbPolyline")&nbsp;;LWPolyline<BR>&nbsp; (while tmp<BR>&nbsp;&nbsp;&nbsp; (setq coords (append coords (list (list (car tmp)(cadr tmp))))<BR>&nbsp;&nbsp; tmp (cddr tmp))<BR>&nbsp; );while<BR>&nbsp;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );cond<BR>&nbsp;&nbsp;&nbsp; );<BR>&nbsp; );if</P>
<P>&nbsp; (if (= oname "AcDbLine")<BR>&nbsp;&nbsp;&nbsp; (progn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq start (vlax-safearray-&gt;list<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-variant-value<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-get-property obj 'StartPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp; end (vlax-safearray-&gt;list<BR>&nbsp;&nbsp;&nbsp; (vlax-variant-value<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-get-property obj 'EndPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp; coords (append coords (list start))<BR>&nbsp;&nbsp;&nbsp;&nbsp; coords (append coords (list end)))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; );if<BR>&nbsp; coords<BR>)</P>

xiaomihu 发表于 2005-12-1 15:25:00

<P>((-1 . &lt;&Iacute;&frac14;&Ocirc;&ordf;&Atilde;&ucirc;: 7ef50e78&gt;) (0 . "LWPOLYLINE") (330 . &lt;&Iacute;&frac14;&Ocirc;&ordf;&Atilde;&ucirc;: <BR>7ef50cf8&gt;) (5 . "87") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") <BR>(100 . "AcDbPolyline") (90 . 10) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 <BR>520.312 887.337) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 901.354 927.418) (40 . <BR>0.0) (41 . 0.0) (42 . 0.0) (10 873.333 739.408) (40 . 0.0) (41 . 0.0) (42 . <BR>0.436024) (10 891.634 716.515) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 1280.74 <BR>687.642) (40 . 0.0) (41 . 0.0) (42 . -0.615591) (10 1294.42 654.653) (40 . 0.0) <BR>(41 . 0.0) (42 . 0.0) (10 1006.09 319.53) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 <BR>703.034 424.185) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 553.737 584.507) (40 . <BR>0.0) (41 . 0.0) (42 . 0.0) (10 404.44 720.335) (40 . 0.0) (41 . 0.0) (42 . 0.0) <BR>(210 0.0 0.0 1.0))</P>
<P>可以不用这么复杂,就是把上面的列表中含有10的都选出来,组成一个新的列表。我记得好象用foreach就可以实现,好久不用忘了</P>

无痕 发表于 2005-12-1 21:54:00

<P>你说的只是针对lwpolyline.</P>
<P>&nbsp;</P>
页: [1]
查看完整版本: 取得pline关键点的坐标