kkdolphin 发表于 2019-12-28 13:17:55

帮朋友问,直线自动连

有很多直线看起来好像是相连的,但是其实是相离的,或者是相交的。输入程序以后,框选,所有直线,最近的两条直线就会首尾相连,一条接着一条。注意:1,      连接后,每条直线长度和方向与原来相比保持不变,只是位置变;2,      两直线最近的点之间距离能有个限制值D,超过这个值,两直线就不会相连。

x_s_s_1 发表于 2019-12-28 13:17:56

本帖最后由 x_s_s_1 于 2019-12-30 13:46 编辑

试试





ssdsfg 发表于 2019-12-28 16:15:26

我可以试试看,有结果联系你!

ssdsfg 发表于 2019-12-28 21:07:50

限制值大致多少?

kkdolphin 发表于 2019-12-28 21:24:14

你好,1以内。可以自己设置吗?

x_s_s_1 发表于 2019-12-28 23:01:07

本帖最后由 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:07:22

本帖最后由 kkdolphin 于 2019-12-29 00:54 编辑

现在重试一下。楼上朋友能否改进:
1.我们画图的尺寸在100到1,000,000,当距离(容差)比较小时候,例如D少于0.0023,命令不能执行。
2,感觉是串联,如果中间有一条线段容差超出D,那么这条线段之后的线段,即使距离不超出D也不能相连了。能否使用框选?

kkdolphin 发表于 2019-12-29 01:02:19

限制值(容差D)在0.000001至10,希望各位帮一下忙。

Vhzeyu 发表于 2019-12-29 07:39:33

膜拜大神,论坛里有线段归整的插件,再加上这个插件,画图岂不爽歪歪

x_s_s_1 发表于 2019-12-29 09:07:34

本帖最后由 x_s_s_1 于 2019-12-29 09:25 编辑

容差本来就是要输入范围值里Max,框选代码太多,懒得写了。
另:编辑的时候不小心,网页把后面的代码删掉了。由于没用,没存原有代码,下载了的再发上来吧,方便有需要的网友


页: [1] 2 3
查看完整版本: 帮朋友问,直线自动连