GUO960 发表于 2005-5-26 09:15:00

如何获取多义线的端点坐标

在纯vlisp环境里,如何获取多义线(LWPOLYLINE)的两端点及各节点坐标呢?

BDYCAD 发表于 2005-5-27 08:21:00

(setq sel-one (car (entsel)); 选取对象<BR>                                       spt (vlax-curve-getstartpoint sel-one);对象的起点<BR>                                       ept (vlax-curve-getendpoint a));对象的终点

LONGXIN 发表于 2005-5-26 20:31:00

<FONT face=宋体 size=2>(DEFUN C:XX (/ E1 DXF XY )<BR>(SETQ E1 (CAR (ENTSEL)))<BR>(SETQ E1 (ENTNEXT E1))<BR>(SETQ DXF (ENTGET E1))<BR><BR>(while (= (cdr (assoc 0 dxf)) "VERTEX")<BR>(setq XY (cdr (assoc 10 dxf)))<BR>(COMMAND "POINT" XY)<BR>(SETQ E1 (ENTNEXT E1))<BR>(SETQ DXF (ENTGET E1))<BR>)<BR>)</FONT>

sieben 发表于 2005-5-28 00:46:00

vlax-curve-getpointatparam


vla-get-coordinate (Lwpolyline Object        Property)

LONGXIN 发表于 2005-5-28 08:49:00

我帮楼上的再帖得更全一些吧!


功能取得对象顶点的坐标:       





vla-<FONT size=3>get-Coordinate </FONT>



<TABLE id=AutoNumber2 height=26 cellSpacing=1 width=925 align=left border=0>
<TBODY>
<TR>
<TD width=53 height=5>语法





</TD>
<TD width=997 colSpan=2 height=5>(vla-<FONT size=3>get-Coordinate </FONT>Object <FONT size=3>index</FONT>)</TD></TR>
<TR>
<TD width=53 height=1></TD>
<TD width=292 height=1><FONT size=3>Object </FONT></TD>
<TD width=705 height=1><FONT size=3><A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/3DPolyline%20对象.htm" target="_blank" >3DPoly</A>, <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/Leader%20对象.htm" target="_blank" >Leader</A>, <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/LightweightPolyline%20对象.htm" target="_blank" >LightweightPolyline</A>, <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/Point%20对象.htm" target="_blank" >Point</A>,        <BR><A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/PolyfaceMesh%20对象.htm" target="_blank" >PolyfaceMesh</A>, <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/PolygonMesh%20对象.htm" target="_blank" >PolygonMesh</A>, <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/Polyline%20对象.htm" target="_blank" >Polyline</A>, <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/Solid%20对象.htm" target="_blank" >Solid</A>, <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/Trace%20对象.htm" target="_blank" >Trace</A></FONT></TD></TR>
<TR>
<TD width=53 height=1></TD>
<TD width=292 height=1></TD>
<TD width=705 height=1><FONT size=3>这个属性适用的对象。</FONT></TD></TR>
<TR>
<TD width=53 height=1></TD>
<TD width=292 height=1><FONT size=3>Coordinate</FONT></TD>
<TD width=705 height=1><FONT size=3>变体(双精度的三元素或二元素数组);读/写</FONT></TD></TR>
<TR>
<TD width=53 height=1></TD>
<TD width=292 height=1></TD>
<TD width=705 height=1><FONT size=3>指定的顶点的X、Y与Z坐标值的数组。<BR><A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/LightweightPolyline%20对象.htm" target="_blank" >LightweightPolyline</A>对象:具有两个元素的变体,表示OCS中<BR>的X与Y坐标值。<BR><A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/Polyline%20对象.htm" target="_blank" >Polyline</A>对象:具有三个元素的变体,代表OCS的X与Y坐标值。<BR>Z坐标以变体表示但被忽略。<BR>所有其它对象:变体具有三个元素,代表WCS的X与Y坐标,Z坐<BR>标在当前的UCS上将默认为0</FONT></TD></TR>
<TR>
<TD width=53 height=1></TD>
<TD width=292 height=1><FONT size=3>index</FONT></TD>
<TD width=705 height=1><FONT size=3>整数</FONT></TD></TR>
<TR>
<TD width=53 height=1></TD>
<TD width=292 height=1></TD>
<TD width=705 height=1><FONT size=3>顶点数组中要设定或查询的顶点的索引。<BR>顶点数组是以0为基底。</FONT></TD></TR></TBODY></TABLE>



<P class=MsoNormal style="LINE-HEIGHT: 150%; TEXT-ALIGN: left" align=left><FONT size=3><BR></FONT><FONT face=华文行楷 size=5><BR><BR><BR></FONT><FONT size=3><BR><BR></FONT>



<P class=MsoNormal style="LINE-HEIGHT: 150%; TEXT-ALIGN: left" align=left> 



<P class=MsoNormal style="LINE-HEIGHT: 150%; TEXT-ALIGN: left" align=left> 



<P class=MsoNormal style="LINE-HEIGHT: 150%; TEXT-ALIGN: left" align=left> 



<P class=MsoNormal style="LINE-HEIGHT: 150%; TEXT-ALIGN: left" align=left><FONT face=华文行楷 size=5>说明        </FONT><FONT size=3><B><BR></B>                       这个属性会置换指定对象的任何已有的顶点。可使用标准的数组处理方法来处理这个<BR>属性包含的值。<BR>                       3DPoly, Polyline, PolygonMesh:如果是简单多段线(不是样条曲线或曲线拟合),<BR>这个属性指定简单顶点。如果是样条曲线或曲面拟合多段线,这个属性指定顶点的控制点。<BR>                       <A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/Polyline%20对象.htm" target="_blank" >Polyline</A>与<A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/LightweightPolyline%20对象.htm" target="_blank" >LightweightPolyline</A>对象的OCS坐标值可使用<A href="mk:@MSITStore:C:/cbz242/VBA%20鍑芥暟璇存槑.chm::/TranslateCoordinates%20方法.htm" target="_blank" >TranslateCoordinates</A>方法<BR>转换成其它坐标系统,或从其它坐标系统转换为OCS坐标值。<BR><BR></FONT><FONT face=华文行楷 size=5><BR>范例</FONT>       



<P class=MsoNormal>(defun Example_Coordinate()



<P class=MsoNormal>;;; <FONT size=3>这个范例在模型空间中建立一条Polyline,接着<BR>;;; 查询与改变第一个索引位置的坐标</FONT>



<P class=MsoNormal>       (VL-LOAD-COM)



<P class=MsoNormal>       (setq AcadObject(vlax-get-acad-object)



<P class=MsoNormal>                                              AcadDocument(vla-get-ActiveDocument Acadobject)



<P class=MsoNormal>                                                       mSpace(vla-get-ModelSpace Acaddocument)



<P class=MsoNormal>       )



<P class=MsoNormal>;;; <FONT size=3>定义 2D 多段线的点</FONT>



<P class=MsoNormal>       (setq pnts(vlax-make-safearray vlax-vbDouble '(0 . 14)))



<P class=MsoNormal>       (vlax-safearray-fill pnts '(10 10 0 10 20 0 20 20 0 30 20 0 40 40 0))



<P class=MsoNormal>;;; <FONT size=3>在模型空间中建立一个轻Polyline对象</FONT>



<P class=MsoNormal>       (setq PolylineObj(vla-AddPolyline mSpace pnts))



<P class=MsoNormal>       (vla-ZoomExtents AcadObject)



<P class=MsoNormal>;;; <FONT size=3>找出第一个索引位置的坐标</FONT>



<P class=MsoNormal>       (setq coord(vla-get-Coordinate PolylineObj 0))



<P class=MsoNormal>       (princ (STRCAT "多义线的第一个索引位置的坐标是:" (rtos (vlax-safearray-get-element (vlax-variant-value coord) 0))



<P class=MsoNormal>                                                                                                               "," (rtos (vlax-safearray-get-element (vlax-variant-value coord) 1))



<P class=MsoNormal>                                                                                                               "," (rtos (vlax-safearray-get-element (vlax-variant-value coord) 2)) "\n"



<P class=MsoNormal>     )



<P class=MsoNormal> )



<P class=MsoNormal>       (PROMPT "&lt;Enter&gt;进行:")(VL-CMDF pause)



<P class=MsoNormal>;;; <FONT size=3>改变坐标</FONT>



<P class=MsoNormal>       (setq temp(+ (vlax-safearray-get-element (vlax-variant-value coord) 0) 1))



<P class=MsoNormal>       (setq coord(vlax-variant-value coord))



<P class=MsoNormal>       (vlax-safearray-put-element coord 0 temp)



<P class=MsoNormal>       (vla-put-Coordinate PolylineObj 0 coord)



<P class=MsoNormal>       (vla-Update PolylineObj)



<P class=MsoNormal>;;; <FONT size=3>查询新的坐标</FONT>



<P class=MsoNormal>       (setq coord(vla-get-Coordinate PolylineObj 0))



<P class=MsoNormal>       (princ (STRCAT "多义线的第一个索引位置的坐标当前是:" (rtos (vlax-safearray-get-element (vlax-variant-value coord) 0))



<P class=MsoNormal>                                                                                                               "," (rtos (vlax-safearray-get-element (vlax-variant-value coord) 1))



<P class=MsoNormal>                                                                                                               "," (rtos (vlax-safearray-get-element (vlax-variant-value coord) 2))



<P class=MsoNormal>     )



<P class=MsoNormal> )



<P class=MsoNormal>       (princ)



<P class=MsoNormal>)

zhuangxu_521 发表于 2011-8-23 20:34:58

今天又学到不少东东

zzl9105 发表于 2018-5-23 17:16:18

BDYCAD 发表于 2005-5-27 08:21
(setq sel-one (car (entsel)); 选取对象                                       spt (vlax-curve-getstartpoint sel-one);对象的起点                                       e ...

试了半天,发现自己少了一个car。

oistre 发表于 2018-8-5 02:33:16

学习了,谢谢楼主
页: [1]
查看完整版本: 如何获取多义线的端点坐标