xubin_9705 发表于 2009-2-2 19:53:00

怎样查找某个坐标的最近的线

请教各位大哥,假如给出坐标,怎样查找距离这个坐标最近的线,有的说用SSGET "C",慢慢放大选择集,这种方法准确度不是很高,使用起来也不太方便,有更好的方法吗?

tony911 发表于 2009-2-3 09:01:00

俺也不知道,呵呵!

BDYCAD 发表于 2009-2-3 10:28:00

文字对象和块对象不能计算,以下是代码,刚写的,供你参考!(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))
   ))
    )
)
)

xubin_9705 发表于 2009-2-3 17:28:00

<p>在这里先谢谢你了,你的方法是先把整幅图东西<font color="#800080">垂直点都跟着计算一遍,然后筛选,这样要是图很大的话好慢啊,还有更好的思路吗,</font></p>

BDYCAD 发表于 2009-2-4 08:44:00

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")

xubin_9705 发表于 2009-2-4 11:32:00

谢谢版主,版主辛苦了,
页: [1]
查看完整版本: 怎样查找某个坐标的最近的线