找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 928|回复: 6

[分享]:如何判断一个点是否在一个实体上?

[复制链接]
发表于 2003-7-17 13:32:22 | 显示全部楼层 |阅读模式

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

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

×
如何判断一个点是否在一个实体上?
判断一个点是否在一条直线上论坛已有帖子阐述。也有关于圆和圆弧的简单实体。 对于复杂实体就爱能莫助了. 借助ActiveX中的intersectwith方法,下列ptatent程序可判断一点是否在任何实体上,包括椭圆,多义线和样条曲线。
考虑到大家使用的习惯,参数point是点表,ent为实体。欢迎试用。
(defun c:test ()
  (setq p (getpoint "\nPick a Point"))
  (setq ent (car (entsel "\nSelect First Object: ")))
  (ptatent p ent)
)
(defun ptatent (p ent)
  (vl-load-com)
  (vl-cmdf "_point" p)
  (setq obj1 (vlax-ename->vla-object (entlast)))
  (setq obj2 (vlax-ename->vla-object ent))
  (setq pts (vla-IntersectWith obj1 obj2 acExtendnone))
  (setq ins (not (minusp (vlax-safearray-get-u-bound
                           (vlax-variant-value pts) 1))))
   ins
);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-7-18 08:06:35 | 显示全部楼层

  1. ;;用点选对象判别是否在对象上

  2. (defun TT (ENT PT / HOLDPICK FLAG SS)
  3.   (setq HOLDPICK (getvar "PICKBOX"))
  4.   (setvar "PICKBOX" 0)
  5.   (if (and (setq SS (ssget PT))
  6.            (equal (ssname SS 0) ENT)
  7.       )
  8.     (setq FLAG t)
  9.   )
  10.   (setvar "PICKBOX" HOLDPICK)
  11.   FLAG
  12. )


  13. ;|
  14. 指令: _line 指定第一点: 0,0

  15. 指定下一点或 [复原(U)]: 100,0

  16. 指定下一点或 [复原(U)]:

  17. 指令: (SETQ WW (ENTLAST))
  18. <像素名称: 40245868>

  19. 指令: (TT WW '(50 0.1))
  20. nil

  21. 指令: (TT WW '(50 0.000001))
  22. nil

  23. 指令: (TT WW '(50 0.0000001))
  24. T

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-18 08:15:46 | 显示全部楼层
试试这个

  1. (defun $ea_iscurve (objectname)
  2.   (member objectname
  3.           '("AcDbArc"               "AcDbPolyline"          "AcDbLine"
  4.             "AcDbEllipse"      "AcDbSpline"          "AcDbCircle"
  5.             "AcDb2dPolyline"
  6.            )
  7.   )
  8. )
  9. (defun ea:ison (e pt / obj ptmp)
  10.   (setq obj (vlax-ename->vla-object e))
  11.   (if ($ea_iscurve (vla-get-objectname obj))
  12.     (progn
  13.       (setq ptmp (vlax-curve-getClosestPointTo obj pt))
  14.       (equal ptmp pt)
  15.     )
  16.   )
  17. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-7-19 08:54:33 | 显示全部楼层

  1. (defun pt-on-curve(pt e)
  2. (if(vlax-curve-getParamAtPoint (vlax-ename->vla-object e) Pt)t nil)
  3. )

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-19 20:16:14 | 显示全部楼层
最初由 aeo 发布
[B]

  1. (defun pt-on-curve(pt e)
  2. (if(vlax-curve-getParamAtPoint (vlax-ename->vla-object e) Pt)t nil)
  3. )

t--在线上 [/B]

加个错误处理

  1. (defun ea:ison (e pt / curve)
  2.   (setq curve (vlax-ename->vla-object e))
  3.   (if (vl-catch-all-error-p
  4.         (vl-catch-all-apply
  5.           'vlax-curve-getParamatpoint
  6.           (list        curve
  7.                 pt
  8.           )
  9.         )
  10.       )
  11.     nil
  12.     t
  13.   )
  14. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-7-21 22:25:47 | 显示全部楼层
不在curve,vlax-curve-getParamatpoint就为nil,不会出错.

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-21 23:33:21 | 显示全部楼层
最初由 aeo 发布
[B]不在curve,vlax-curve-getParamatpoint就为nil,不会出错.

你写的是错的,你试试
道理也说不过去:不出错就在curve上? [/B]

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 14:26 , Processed in 0.340594 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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