对于两条多段线,如何自适应延伸和剪切,使其首尾相连?
如图,想要编段代码,实现点击两条多段线,能自适应按需延伸和剪切。
初步思路如下:
1.先获取多段线1与多段线2的两个交点
2.选取离拾取点较近的交点,画一段很短的临时线
3.以这段很短的临时线为边界,分别对两条多段线先进行延伸再进行剪切
4.删除临时线
现在遇到的问题是,用(vlax-invoke obj1 'Intersectwith obj2 Flag)获取两条多段线的交点,得到的结果有5个交点,请问如何找到合适的那个交点?
或者各位大神有什么更加简便的方法吗?我只能想到这个笨办法了。
(defun c:tt ()
"延伸修剪处理"
(while (and (setq e1 (entsel "\n选择固定边线: "))
(setq e2 (entsel "\n选择延伸边线: "))
)
(setq s1 (car e1)
s2 (car e2)
pt (cadr e2)
)
(command "extend" e1 "" e2 "")
(setq p1(vlax-curve-getStartPoint s1)
p2(vlax-curve-getEndPoint s1)
lst (list p1 p2)
lst (vl-sort lst'(lambda (x y) (< (distance x pt) (distance y pt))))
p0(car lst)
)
(command "trim" e2 "" (list s1 p0) "")
)
(princ)
)
本帖最后由 vbnewer 于 2024-11-28 22:51 编辑
对于两条直线可以采用倒角,对于两条多段线,使用倒角的方法多数情况下会出现意料外的结果,拾取点必须点在合适的位置才能得到期望的结果,感兴趣的话可以打开附件的测试图试试。
而且我还有一个小需求,希望保持每条多段线原有的颜色,如果采用倒角方法,会导致两条多段线合并成一条,颜色就统一了。
本帖最后由 vbnewer 于 2024-11-29 00:28 编辑
非常感谢版主大神指教,上面的代码对于我发的这个测试图确实很有效,谢谢。
我前面发的图可能有一定的特殊性,没有把几种情况都表达出来,重新发个全面点的,大神有空的时候请再指教一下,谢谢。
这个不是倒角的事? fillet 0 ? 用交点法 Flag 处有四个值可选 指明延伸方式
acExtendNone
acExtendThisEntity
acExtendOtherEntity
acExtendBoth 不能指明延伸方式就 判断两个交点表 之间的距离 还有最笨的方法是PE和倒角 Andyhon 发表于 2024-11-28 22:45
fillet 0 ?
对于我的这个图,fillet 0必须是拾取点正好点击在虚拟交点附近的那一段上的某些位置才可以,不能随意点击。
有空的话请下载测试图试一下,谢谢关注。 风景 这边独好