帮朋友问,直线自动连
有很多直线看起来好像是相连的,但是其实是相离的,或者是相交的。输入程序以后,框选,所有直线,最近的两条直线就会首尾相连,一条接着一条。注意:1, 连接后,每条直线长度和方向与原来相比保持不变,只是位置变;2, 两直线最近的点之间距离能有个限制值D,超过这个值,两直线就不会相连。本帖最后由 x_s_s_1 于 2019-12-30 13:46 编辑
试试
我可以试试看,有结果联系你! 限制值大致多少? 你好,1以内。可以自己设置吗? 本帖最后由 x_s_s_1 于 2019-12-29 09:50 编辑
试试-------------:L编辑部分代码,网页把后面的代码删掉了,由于没用,没存原有代码,下载了的再发上来吧,方便有需要的网友-----从手机里居然找到了(defun c:test3
(/ cpt getdxf fuzz en entmp pt10 pt11 en1 pt10a pt11a lst n)
(defun cpt (pt dis n / i lst)
(setq i 0)
(repeat n
(setq lst(cons (polar pt (/ (* 2 i pi) n) dis) lst)
i(1+ i)
)
)
lst
)
(defun getdxf (dxf en) (cdr (assoc dxf (entget en))))
(setq fuzz (getreal "\n连接最大距离:"))
(setqen (car (entsel "\n拾取头部线:"))
entmp en
)
(while en
(redraw en 2)
(setq pt10 (getdxf 10 en)
pt11 (getdxf 11 en)
)
(if(setq en1 (ssget "cp" (cpt pt10 fuzz 72)))
(progn
(setq en (ssname en1 0)
pt10a (getdxf 10 en)
pt11a (getdxf 11 en)
)
(if (< (distance pt10 pt10a) (distance pt10 pt11a))
(setq lst (cons (list en pt10 pt10a) lst))
(setq lst (cons (list en pt10 pt11a) lst))
)
)
(if (setq en1 (ssget "cp" (cpt pt11 fuzz 72)))
(progn (setq en (ssname en1 0)
pt10a (getdxf 10 en)
pt11a (getdxf 11 en)
)
(if (< (distance pt11 pt10a) (distance pt11 pt11a))
(setq lst (cons (list en pt11 pt10a) lst))
(setq lst (cons (list en pt11 pt11a) lst))
)
)
(setq en nil)
)
)
)
(redraw entmp 1)
(foreach n lst (redraw (car n) 1))
(setq lst (reverse lst))
(while lst
(setq n (car lst))
(foreach en lst
(vla-move (vlax-ename->vla-object (car en))
(vlax-3d-point (caddr n))
(vlax-3d-point (cadr n))
)
)
(setq lst (cdr lst))
)
(princ)
)
本帖最后由 kkdolphin 于 2019-12-29 00:54 编辑
现在重试一下。楼上朋友能否改进:
1.我们画图的尺寸在100到1,000,000,当距离(容差)比较小时候,例如D少于0.0023,命令不能执行。
2,感觉是串联,如果中间有一条线段容差超出D,那么这条线段之后的线段,即使距离不超出D也不能相连了。能否使用框选?
限制值(容差D)在0.000001至10,希望各位帮一下忙。 膜拜大神,论坛里有线段归整的插件,再加上这个插件,画图岂不爽歪歪 本帖最后由 x_s_s_1 于 2019-12-29 09:25 编辑
容差本来就是要输入范围值里Max,框选代码太多,懒得写了。
另:编辑的时候不小心,网页把后面的代码删掉了。由于没用,没存原有代码,下载了的再发上来吧,方便有需要的网友