找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 934|回复: 8

[求助] 如何判断是否共线

[复制链接]

已领礼包: 149个

财富等级: 日进斗金

发表于 2017-5-15 20:24:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
拾取2条线,判断这两条线是否共线 ,拾取的两条线有两种可能
1:是两条直线(line)对象
2:是这“两条”是一条多段线上的两段


用 nentselp 获取, 要如何写呢?

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-5-15 20:27:52 | 显示全部楼层
一条线的两个顶点距离另一条线的距离都等于0,就共线了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-5-15 20:29:19 | 显示全部楼层
你自己可以试下,用NENTSEL是选择不到多段线上的一段的,和entsel结果是一样的。 因为是一个实体。
nentsel能点选块内的子实体。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 149个

财富等级: 日进斗金

 楼主| 发表于 2017-5-15 20:29:41 | 显示全部楼层

写不出来, 特别是多段线的处理
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-15 20:36:10 | 显示全部楼层
本帖最后由 newer 于 2017-5-15 20:37 编辑

你用LISP,(对于都是直线段)也只能去找到各个顶点成的表了,然后两两一对,就代表线了。

怎么获得顶点表,用 多段线 搜索下论坛,很多。

XD API就简单多了。今天发布的函数 xd::polyline:getSegAt 就是根据一个点,得到所在的段。
http://bbs.xdcad.net/forum.php?m ... sortid%26sortid%3D1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-15 21:32:45 | 显示全部楼层

你这问题用XDRX API,简单的几行代码,API提供了丰富的对多段线处理的函数

  1. (defun c:tt (/ e1 p1 e2 p2 poly g1 g2)
  2.   (if (and (setq e1 (xdrx_entsel "\n拾取线段<退出>:"))
  3.            (setq p1 (cadr e1)
  4.                  e1 (car e1)
  5.            )
  6.            (setq e2 (xdrx_entsel "\n拾取线段2<退出>:"))
  7.            (setq p2 (cadr e2)
  8.                  e2 (car e2)
  9.            )
  10.       )
  11.     (progn
  12.       (if (and (eq e1 e2)
  13.                (xdrx_object_isa e1 "AcDbPolyline")
  14.                (/= (xd::polyline:onsegat e1 p1)
  15.                    (xd::polyline:onsegat e2 p2)
  16.                )
  17.           )
  18.         (progn
  19.           (setq poly t
  20.                 g1   (xd::polyline:getSegAt e1 p1)
  21.                 g2   (xd::polyline:getSegAt e2 p2)
  22.           )
  23.         )
  24.         (progn
  25.           (if (and (xdrx_object_isa e1 "AcDbLine")
  26.                    (xdrx_object_isa e2 "AcDbLine")
  27.               )
  28.             (progn
  29.               (setq g1 (xdge::constructor e1)
  30.                     g2 (xdge::constructor e2)
  31.               )
  32.             )
  33.           )
  34.         )
  35.       )
  36.       (if (and g1 g2)
  37.         (progn
  38.           (if poly
  39.             (princ "\n选择了多段线的两段.")
  40.             (princ "\n选择了两条直线.")
  41.           )
  42.           (if (xdge::getpropertyvalue g1 "isColinearTo" g2) ;;判断是否共线
  43.             (princ "\n它们共线!")
  44.             (princ "\n它们不共线!")
  45.           )
  46.           (xdge::free g1 g2)
  47.         )
  48.       )
  49.     )
  50.   )
  51.   (princ)
  52. )



两线段是否共线.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-5-15 21:47:38 | 显示全部楼层
同一条线上的直线段可以这样(不考虑弧段)

  1. (defun c:test (/ _getseg e e1 sp1 ep1 sp2 ep2 v)
  2.   (defun _getseg (l / p m i)
  3.     (setq p (apply 'vlax-curve-getclosestpointto l)
  4.           m (vlax-curve-getparamatpoint (car l) p)
  5.           i (fix m)
  6.     )
  7.     (list (vlax-curve-getpointatparam (car l) i)
  8.           (vlax-curve-getpointatparam (car l) (1+ i))
  9.     )
  10.   )
  11.   (if (and (setq e (entsel "\npick first pline: "))
  12.            (setq e1 (entsel "\npick second pline: "))
  13.            (eq (car e) (car e1))
  14.            (mapcar 'set '(sp1 ep1) (_getseg e))
  15.            (mapcar 'set '(sp2 ep2) (_getseg e1))
  16.            (setq v (mapcar '- ep2 sp2))
  17.            (< (abs (car (trans (mapcar '- sp1 sp2) 0 v))) 1e-6)
  18.            (< (abs (car (trans (mapcar '- ep1 sp2) 0 v))) 1e-6)
  19.       )
  20.     (princ "\n共线!")
  21.     (princ "\n非共线!")
  22.   )
  23.   (princ)
  24. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 149个

财富等级: 日进斗金

 楼主| 发表于 2017-5-16 17:07:29 | 显示全部楼层
谢谢以上回复的几位大师!以及lispboy发布的函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 04:16 , Processed in 0.285880 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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