以下函数将返回LWPolyline的自交点,如果LWPolyline不与自身相交,则返回nil。
- [color=GREEN];; Get Self-Intersections - Lee Mac - 2011 - www.lee-mac.com[/color]
- [color=GREEN];; Returns a list of self-intersections points of an LWPolyline.[/color]
- ([color=BLUE]defun[/color] _GetSelfIntersections ( obj [color=BLUE]/[/color] _LWVertices _Group3D )
- ([color=BLUE]defun[/color] _LWVertices ( l z )
- ([color=BLUE]if[/color] l ([color=BLUE]cons[/color] ([color=BLUE]list[/color] ([color=BLUE]car[/color] l) ([color=BLUE]cadr[/color] l) z) (_LWVertices ([color=BLUE]cddr[/color] l) z)))
- )
- ([color=BLUE]defun[/color] _Group3D ( l )
- ([color=BLUE]if[/color] l ([color=BLUE]cons[/color] ([color=BLUE]list[/color] ([color=BLUE]car[/color] l) ([color=BLUE]cadr[/color] l) ([color=BLUE]caddr[/color] l)) (_Group3D ([color=BLUE]cdddr[/color] l))))
- )
- (
- ([color=BLUE]lambda[/color] ( l )
- ([color=BLUE]vl-remove-if[/color]
- ([color=BLUE]function[/color]
- ([color=BLUE]lambda[/color] ( a )
- ([color=BLUE]vl-some[/color] ([color=BLUE]function[/color] ([color=BLUE]lambda[/color] ( b ) ([color=BLUE]equal[/color] a b 1e-)) l)
- )
- )
- (_Group3D ([color=BLUE]vlax-invoke[/color] obj 'intersectwith obj [color=BLUE]acextendnone[/color]))
- )
- )
- (_LWVertices ([color=BLUE]vlax-get[/color] obj 'coordinates) ([color=BLUE]vlax-get[/color] obj 'elevation))
- )
- )
对于直接位于多段线顶点上的自交点,上述操作将失败。 |