Vhzeyu 发表于 2019-12-29 09:37:26

可以框选最好了,毕竟工程图线条超多,大神能完善一下吗,感觉很有用的啊

Vhzeyu 发表于 2019-12-29 09:38:28

【test3】直线容差内首尾相接(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))   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))

Vhzeyu 发表于 2019-12-29 09:39:09

这应该是下载的原有代码吧

xj6019 发表于 2019-12-29 09:39:16

为什么我的电脑加载不上,显示代码有错误呀
(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))
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 enlst
      (vla-move(vlax-ename->vla-object (car en))
    (vlax-3d-point (caddr n))
    (vlax-3d-point (cadr n))
      )
    )
    (setq lst (cdr lst))
)
(princ)

xj6019 发表于 2019-12-29 09:40:19

大神,搞个能框选的完整版重新发一次把,福利大众

13916020908 发表于 2019-12-29 10:58:20

大神,搞个能框选的完整版重新发一次把,福利大众

kkdolphin 发表于 2019-12-29 11:51:37

之前的大哥,应该加上一段: (vl-load-com)。否则有些同学不能运行的

kkdolphin 发表于 2019-12-29 17:20:02

本帖最后由 kkdolphin 于 2019-12-29 19:39 编辑

x_s_s_1 发表于 2019-12-29 09:07
容差本来就是要输入范围值里Max,框选代码太多,懒得写了。
另:编辑的时候不小心,网页把后面的代码删掉 ...
.刚才试验过,有两条直线,一条直线长度为2110,一条直线为1150,相距为0.0528,但是我输入1或者0.5的时候,程序不能执行,输入0.1和0.4的时候程序可以执行。输入的最大距离长度貌似不能大于两直线实际相距的长度的8倍左右。但我们不一定能猜出相离或者相交的直线的实际距离D,要求在一个值以下就可以了。在输入1时候,能把0.001相距的距离的两直线执行程序。请问能否改进一下?拜托。

x_s_s_1 发表于 2019-12-29 20:41:27

需连接的线应都在可视区域,你所述的情况不会出现,原理就是线端半径FUZZ外接圆的72边形选择

kkdolphin 发表于 2019-12-30 18:32:49

很好,之前的bug消失了,谢谢你!
页: 1 [2] 3
查看完整版本: 帮朋友问,直线自动连