找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1103|回复: 9

[讨论]:如何得到离指定点最近且包含这点的封闭曲线

[复制链接]

已领礼包: 8121个

财富等级: 富甲天下

发表于 2007-4-2 18:00:43 | 显示全部楼层 |阅读模式

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

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

×
今天在autodesk讨论组中看到一个话题:

大意如下:给出一个点,如何得到离该点最近且包含这点的封闭曲线。(circle,polyline....),如果有,返回该曲线图元名,如果不存在包含这点的封闭曲线,则返回nil值。

I am familiar with some methods to determine if a point is inside a given polyline... but I am looking to find... or create...
a function to select a closed polyline given a point which is inside its space... if the point is not within a closed polyline then returns nil.
我的英文不够好,不知道是否准确理解了他们的意思。
Gilles Chanteau给出了一个lisp程序,但并不很准确,有时会出错。
如果对这个题目有兴趣的话,不妨讨论一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2007-4-4 15:21:28 | 显示全部楼层

  1. (defun C:test (/ curlst point curve closep dist ent return)
  2.   (vl-load-com)
  3.   (setq curlst nil)
  4.   (initget 1)
  5.   (setq point (getpoint "\nPlease enter a point:"))
  6.   (vlax-for n (vla-get-Modelspace
  7.                 (vla-get-activeDocument (vlax-get-acad-object))
  8.               )
  9.     (if        (or (vlax-property-available-p n 'closed)
  10.             (= (vla-get-objectname n) "AcDbCircle")
  11.             (and (= (vla-get-objectname n) "AcDbEllipse")
  12.                  (= (vla-get-startangle n) 0)
  13.                  (= (vla-get-endangle n) (* 2 pi))
  14.             )
  15.         )
  16.       (progn
  17.         (setq curve (vlax-vla-object->ename n))
  18.         (if (dos_isinsidecurve curve point)
  19.           (setq        closeP (vlax-curve-getClosestPointTo n point)
  20.                 dist   (distance point closeP)
  21.                 curlst (cons (cons curve dist) curlst)
  22.           )
  23.         )
  24.       )
  25.     )
  26.   )
  27.   (if curlst
  28.     (setq curlst (vl-sort curlst '(lambda (e1 e2) (< (cdr e1) (cdr e2))))
  29.           ent         (caar curlst)
  30.           return (cadr (sssetfirst nil (ssadd ent)))
  31.     )
  32.   )
  33. )

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-11-20 16:29:12 | 显示全部楼层
想过这个问题,但一直找不到答案。
是不是遍历,找到所有封闭图形,然后判断点是否在封闭图形中,然后再找最近那个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-20 16:37:50 | 显示全部楼层
过这个点做个射线,取得选择集,然后找面积最小的那个。

点评

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-11-20 16:49:02 | 显示全部楼层
newer 发表于 2014-11-20 16:37
过这个点做个射线,取得选择集,然后找面积最小的那个。

如果封闭曲线没有在可视范围内呢{:soso_e113:}

点评

zoom e.  详情 回复 发表于 2014-11-20 18:02
在CAD下,你要想方便的话,那肯定先要ZOOM E下了。这样利用CAD自己的高效率的选择实体方法。 否则,你就得自己遍历数据库了。  详情 回复 发表于 2014-11-20 16:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-20 16:53:05 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-11-20 16:49
如果封闭曲线没有在可视范围内呢

在CAD下,你要想方便的话,那肯定先要ZOOM E下了。这样利用CAD自己的高效率的选择实体方法。

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

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2014-11-20 18:02:20 来自手机 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-11-20 16:49
如果封闭曲线没有在可视范围内呢

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-11-20 18:16:32 来自手机 | 显示全部楼层
要提高效率,还不如用boly. pt生成一个多边形。如果这个多边形刚好是屏幕4角点,说明没有

点评

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

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2014-11-20 18:36:10 来自手机 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-11-20 18:16
要提高效率,还不如用boly. pt生成一个多边形。如果这个多边形刚好是屏幕4角点,说明没有

哇,bpoly 还能认屏幕框?!

点评

bpoly的用处是被你哇出来的。有了bPoly,这个问题就简单了。ss可以选所有对象  详情 回复 发表于 2014-11-22 19:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-11-22 19:04:01 来自手机 | 显示全部楼层
iLisp 发表于 2014-11-20 18:36
哇,bpoly 还能认屏幕框?!

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 16:33 , Processed in 0.204720 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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