努.力 发表于 2023-12-23 17:52:35

判断P1、P2两点之间是否有线段存在

本帖最后由 努.力 于 2023-12-24 16:41 编辑

如题所述,求判断P1、P2两点之间是否有线段存在,并且该线段的一个端点与P1重合,另一个端点与P2重合
麻烦论坛上的大神们帮忙编一段程序,如果P1、P2两点有直线段,就给一个返回值,谢谢了

yaojing38 发表于 2023-12-23 17:52:36

改了下 ,应该可以

本帖最后由 yaojing38 于 2023-12-25 10:52 编辑

(defun c:tt (/ e ent ent1 i l obj pt1 pt2 s ss)

(setq pt1 (getpoint)pt2 (getpoint))
(setq ss (ssget "F" (list pt1 pt2)))

    (cond
      
      (t
      (repeat (setq i (sslength ss))
            (setq ent (ssname ss (setq i (1- i))))
          (setq obj (vlax-ename->vla-object ent)
         
            s (vlax-curve-getStartPoint obj)
            e (vlax-curve-getEndPoint obj)
          )
          (if (="LWPOLYLINE" (cdr (assoc 0 (entget ent))))
          (progn
          (setq l ( - (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) (vlax-curve-getDistAtPoint obj pt2)))
         (setq s (vlax-curve-getPointAtParam obj (vlax-curve-getParamAtPoint obj pt1))
            e (vlax-curve-getPointAtParam obj (vlax-curve-getParamAtPoint obj pt2)))
          )
          (setq l (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
          )
          (if (and (OR (and (equals pt10.1) (equale pt20.1)) (and (equal e pt10.1) (equal s pt20.1)))
               
                (equal (distance pt1 pt2 ) l 0.1)
            )
         
          (setq ent1 ent)
          )
      )
    )

)
ent1
)
努.力 发表于 2023-12-24 16:38
不知道能不能这样:p1、p2各选一次图元,再以p1、p2的中点选一次图元,如果三次选择都包含同一图元,则再判 ...

炸开比较??又是多段线又是直线的。。。

xj6019 发表于 2023-12-23 19:31:00

本帖最后由 xj6019 于 2023-12-23 19:35 编辑

这样行不,如果P1 P2中间有图元,就返回这个一个选择集结果,如果没有就返回nil

(defun is-p1p2ent (p1 p2 / ss)       
        (if(setq ss (ssget "c"(polar p1(angle p1 p2)(* 0.1(distance p1 p2)))(polar p2(angle p2 p1)(* 0.1(distance p1 p2)))))
                ss
                nil
        )       
)

努.力 发表于 2023-12-23 20:18:24

xj6019 发表于 2023-12-23 19:31
这样行不,如果P1 P2中间有图元,就返回这个一个选择集结果,如果没有就返回nil

(defun is-p1p2ent (p1...

非常感谢长老的回复,用选择集判断,不是那么理想,第一个图形就判断为有了

wzg356 发表于 2023-12-23 20:24:54

本帖最后由 wzg356 于 2023-12-23 20:28 编辑

问题不严密:
线段是严格在p1p2区间且同向同线,容差多少
容差---方向?端点偏移距离?




努.力 发表于 2023-12-23 20:47:18

wzg356 发表于 2023-12-23 20:24
问题不严密:
线段是严格在p1p2区间且同向同线,容差多少
容差---方向?端点偏移距离?

大神说的对,由于对lsp的不了解,所以也不懂如何描述恰当,请海涵……
线段的一个端点与P1重合,另一个端点与P2重合

yaojing38 发表于 2023-12-24 12:42:47

试试 应该可以

本帖最后由 yaojing38 于 2023-12-24 12:55 编辑

;;-------------------------------------------------
(defun c:tt (/ e ent ent1 i l obj pt1 pt2 s ss)

(setq pt1 (getpoint)pt2 (getpoint))
(setq ss (ssget "F" (list pt1 pt2)))

    (cond
      
      (t
      (repeat (setq i (sslength ss))
            (setq ent (ssname ss (setq i (1- i))))
          (setq obj (vlax-ename->vla-object ent)
         
            s (vlax-curve-getStartPoint obj)
            e (vlax-curve-getEndPoint obj)
          )
          (setq l (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
          (if (and (OR (and (equals pt10.1) (equale pt20.1)) (and (equal e pt10.1) (equal s pt20.1)))
               
                (equal (distance pt1 pt2 ) l 0.1)
            )
         
          (setq ent1 ent)
          )
      )
    )

)
ent1
)
;;-------------------------------------------------

努.力 发表于 2023-12-24 16:30:43

yaojing38 发表于 2023-12-24 12:42


非常感谢大神回复,图二判断为错误,应该是有

努.力 发表于 2023-12-24 16:38:17

不知道能不能这样:p1、p2各选一次图元,再以p1、p2的中点选一次图元,如果三次选择都包含同一图元,则再判断该图元的量端点是否与p1、p2重合……不知是否可行?

努.力 发表于 2023-12-25 12:02:14

yaojing38 发表于 2023-12-25 10:25
努.力 发表于 2023-12-24 16:38
不知道能不能这样:p1、p2各选一次图元,再以p1、p2的中点选一次图元, ...

非常感谢大神鼎力相助
页: [1]
查看完整版本: 判断P1、P2两点之间是否有线段存在