怎样查找某个坐标的最近的线
请教各位大哥,假如给出坐标,怎样查找距离这个坐标最近的线,有的说用SSGET "C",慢慢放大选择集,这种方法准确度不是很高,使用起来也不太方便,有更好的方法吗? 俺也不知道,呵呵! 文字对象和块对象不能计算,以下是代码,刚写的,供你参考!(setq SSAll(ssget"x"'((0 . "SPLINE,ARC,CIRCLE,LINE,POLYLINE,LWPOLYLINE,ELLIPSE"))));,INSERT,TEXT(setq pt(getpoint"\n请输入基点:"));
(if pt
(progn
(setq SSLen(sslength SSAll)i 0)
(repeat SSLen
(setq Ename(ssname SSAll i)i(1+ i))
(setq dxf(entget Ename))
(if(= i 1)
(progn
(setq OUtName Ename)
(setq Npt(vlax-curve-getClosestPointTo Ename pt T));垂直点
(setq dist1(distance pt Npt))
)
(progn
(setq Npt(vlax-curve-getClosestPointTo Ename pt T));垂直点
(setq dist2(distance pt Npt))
(if(> dist1 dist2)(setq dist1 dist2 OUtName Ename))
))
)
)
) <p>在这里先谢谢你了,你的方法是先把整幅图东西<font color="#800080">垂直点都跟着计算一遍,然后筛选,这样要是图很大的话好慢啊,还有更好的思路吗,</font></p> E,快一点的方法可能是这样子吧:
固定区域选取法
1、用放大命令把基点(指找最近对象的点)放到绘图区中间;
2、进行选取;
3、筛选最近对象;
4、放大还原。
(setq pt(getpoint"\n请输入基点:"));
(setq p1(list(-(car pt)100)(-(cadr pt)100))
p2(list(+(car pt)100)(+(cadr pt)100)))
(command".zoom" p1 p2)
(setq SS(ssget "C" p1 p2'((0 . "SPLINE,ARC,CIRCLE,LINE,POLYLINE,LWPOLYLINE,ELLIPSE"))))
(if SS
(progn
(setq SSLen(sslength SS)i 0)
(repeat SSLen
(setq Ename(ssname SS i)i(1+ i))
(setq dxf(entget Ename))
(if(= i 1)
(progn
(setq OUtName Ename)
(setq Npt(vlax-curve-getClosestPointTo Ename pt T));垂直点
(setq dist1(distance pt Npt))
)
(progn
(setq Npt(vlax-curve-getClosestPointTo Ename pt T));垂直点
(setq dist2(distance pt Npt))
(if(> dist1 dist2)(setq dist1 dist2 OUtName Ename))
))
)
)
)
(command".zoom" "P") 谢谢版主,版主辛苦了,
页:
[1]