明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 966|回复: 9

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

[复制链接]
发表于 2023-12-23 17:52:35 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 努.力 于 2023-12-24 16:41 编辑

如题所述,求判断P1、P2两点之间是否有线段存在,并且该线段的一个端点与P1重合,另一个端点与P2重合
麻烦论坛上的大神们帮忙编一段程序,如果P1、P2两点有直线段,就给一个返回值,谢谢了
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

努.力 发表于 2023-12-24 16:38 不知道能不能这样:p1、p2各选一次图元,再以p1、p2的中点选一次图元,如果三次选择都包含同一图元,则再判 ... 炸开比较??又是多段线又是直线的。。。
发表于 2023-12-23 17:52:36 | 显示全部楼层

改了下 ,应该可以

本帖最后由 yaojing38 于 2023-12-25 10:52 编辑
  1. (defun c:tt (/ e ent ent1 i l obj pt1 pt2 s ss)
  2.   
  3.   (setq pt1 (getpoint)  pt2 (getpoint))
  4.   (setq ss (ssget "F" (list pt1 pt2)))

  5.     (cond
  6.       
  7.       (t
  8.         (repeat (setq i (sslength ss))
  9.               (setq ent (ssname ss (setq i (1- i))))
  10.           (setq obj (vlax-ename->vla-object ent)
  11.          
  12.             s (vlax-curve-getStartPoint obj)
  13.             e (vlax-curve-getEndPoint obj)
  14.           )
  15.           (if (=  "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
  16.           (progn
  17.           (setq l ( - (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) (vlax-curve-getDistAtPoint obj pt2)))
  18.            (setq s (vlax-curve-getPointAtParam obj (vlax-curve-getParamAtPoint obj pt1))
  19.             e (vlax-curve-getPointAtParam obj (vlax-curve-getParamAtPoint obj pt2)))
  20.           )
  21.           (setq l (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
  22.           )
  23.           (if (and (OR (and (equal  s pt1  0.1) (equal  e pt2  0.1)) (and (equal e pt1  0.1) (equal s pt2  0.1)))
  24.                
  25.                 (equal (distance pt1 pt2 ) l 0.1)
  26.               )
  27.          
  28.           (setq ent1 ent)
  29.           )
  30.       )
  31.     )

  32.   )
  33.   ent1
  34. )

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


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

使用道具 举报

发表于 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  ...

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

使用道具 举报

发表于 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重合
回复

使用道具 举报

发表于 2023-12-24 12:42:47 | 显示全部楼层

试试 应该可以

本帖最后由 yaojing38 于 2023-12-24 12:55 编辑
  1. ;;-------------------------------------------------
  2. (defun c:tt (/ e ent ent1 i l obj pt1 pt2 s ss)
  3.   
  4.   (setq pt1 (getpoint)  pt2 (getpoint))
  5.   (setq ss (ssget "F" (list pt1 pt2)))

  6.     (cond
  7.       
  8.       (t
  9.         (repeat (setq i (sslength ss))
  10.               (setq ent (ssname ss (setq i (1- i))))
  11.           (setq obj (vlax-ename->vla-object ent)
  12.          
  13.             s (vlax-curve-getStartPoint obj)
  14.             e (vlax-curve-getEndPoint obj)
  15.           )
  16.           (setq l (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
  17.           (if (and (OR (and (equal  s pt1  0.1) (equal  e pt2  0.1)) (and (equal e pt1  0.1) (equal s pt2  0.1)))
  18.                
  19.                 (equal (distance pt1 pt2 ) l 0.1)
  20.               )
  21.          
  22.           (setq ent1 ent)
  23.           )
  24.       )
  25.     )

  26.   )
  27.   ent1
  28. )
  29. ;;-------------------------------------------------

回复

使用道具 举报

 楼主| 发表于 2023-12-24 16:30:43 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 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的中点选一次图元, ...

非常感谢大神鼎力相助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-27 07:10 , Processed in 0.196929 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表