soly2006 发表于 2009-6-24 00:07:00

两多段线相交的交点坐标问题

<p>最近遇到难题,想标出线相交处的位置,在论坛上看也有不少,但是还是不够理想,有个程序是这样:</p><p>;求两实体交点<br/>(defun c:get_int0( / ent1 ent2 ps)<br/>&nbsp; (setq ent1 (car (entsel "选择第一实体:")))<br/>&nbsp; (setq ent2 (car (entsel "选择第二实体:")))<br/>&nbsp; (print)<br/>&nbsp; (setq ps (obj_int ent1 ent2))<br/>)<br/>;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br/>;功能:返回两个对象的所有交点<br/>;参数: ent1、ent2 均为ename对象<br/>(defun obj_int (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)<br/>&nbsp;&nbsp; (setq ax_ent_1 (vlax-ename-&gt;vla-object ent1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ax_ent_2 (vlax-ename-&gt;vla-object ent2)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))<br/>&nbsp;&nbsp; (setq intpoints (vlax-variant-value intpoints))<br/>&nbsp;&nbsp; (setq i 0)<br/>&nbsp;&nbsp; (if (&gt; (vlax-safearray-get-u-bound intpoints 1) 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (repeat (/ (+ 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (- (vlax-safearray-get-u-bound intpoints 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-l-bound intpoints 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq points (append points (list (list<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-element intpoints i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-element intpoints (+ i 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-element intpoints (+ i 2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq i (+ 3 i))<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; points<br/>)</p><p>各位问一下,上面列出所有相交情况,能否剔除两对象只有一点相重或边的情况(没有交叉),期待高手解答</p>

sailorcwx 发表于 2009-6-24 23:44:00

判断obj_int的返回值,如果为nil,有可能没有相交或者重合,如果有值,用length判断有多少个点

kry 发表于 2009-6-25 15:46:00

呵呵,我也遇到这种问题了,不过有点不同。知道两点,不画直线,求其与多义线的交点

soly2006 发表于 2009-6-30 11:06:00

靠在一起(如一角点搭在另一多边形的边上),也返回,我要的是交叉的点数

一只鸟243aZ 发表于 2018-4-29 21:43:47

vla-intersectwith 是个什么东东?能指示下么?

页: [1]
查看完整版本: 两多段线相交的交点坐标问题