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消失了,谢谢你!