找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2525|回复: 12

[多段线] 判断点集围合区域是否全部包含在另一点集围合区域内(API组合)

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-6-24 02:27:29 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Pnts:IsInPnts
调用格式: (XD::Pnts:IsInPnts p1 p2)
参数说明: p1 - 点集
p2 - 点集
返回值: 点集 P1 全部在点集 P2 内部,返回 T,其他 Nil
函数简介: 判断两个点集是否包含关系
函数来源: 原创
函数作者: Eachy
适用版本: 不限 
最后更新时间: 2013-06-24
备注: -
演示图片: -

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

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

×
  1. (defun XD::Pnts:IsInPnts (p1 p2)
  2.   (not
  3.     (vl-some
  4.       'null
  5.       (mapcar '(lambda (x) (apply 'xdrx_isinside (cons x p2))) p1)
  6.     )
  7.   )
  8. )

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

已领礼包: 6个

财富等级: 恭喜发财

发表于 2013-6-24 02:33:19 | 显示全部楼层
用while出现nil就停止应当快些

点评

VL-SOME函数就是出现一个非NIL值,就结束。  详情 回复 发表于 2013-6-24 03:18
那就改改  详情 回复 发表于 2013-6-24 02:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-6-24 02:35:53 | 显示全部楼层
fsxm 发表于 2013-6-24 02:33
用while出现nil就停止应当快些

那就改改,这样
  1. (defun XD::Pnts:IsInside (p1 p2 / tf)
  2.   (setq tf t)
  3.   (while (and tf p1)
  4.     (setq tf (apply 'xdrx_isinside (cons (car p1) p2))
  5.    p1 (cdr p1)
  6.     )
  7.   )
  8.   tf
  9. )

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-24 03:13:22 | 显示全部楼层
我提供个VL-SOME的,大家谁测试下,看看这个行不
  1. (defun XD::Pnts:IsInPnts (pts1 pts2)
  2.   (not (vl-some '(lambda (x)
  3.                    (not (apply
  4.                           'xdrx_isinside
  5.                           (cons x pts2)
  6.                         )
  7.                    )
  8.                  ) pts1
  9.        )
  10.   )
  11. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-24 03:17:18 | 显示全部楼层
使用论坛上的通用函数库里面的
  1. (defun XD::Pnts:IsInPnts (pts1 pts2)
  2.   (not (vl-some '(lambda (x)
  3.                    (not (XD::Pnt:IsInside x pts2))
  4.                  ) pts1
  5.        )
  6.   )
  7. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-24 03:18:19 | 显示全部楼层
fsxm 发表于 2013-6-24 02:33
用while出现nil就停止应当快些

VL-SOME函数就是出现一个非NIL值,就结束。

点评

测试中 Vl-some 总是出现非期望效果,样图是两个方框,通过先后选择Pline 判断点保含关系,下面是测试程序,为了简短,Pline 取点用了 api  详情 回复 发表于 2013-6-25 08:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-25 02:30:16 | 显示全部楼层
参数不明确啊,点集?点表? 最好用lsp的描述,如:返回LIST,点表
凑热闹:
(defun ptssome (pts1 pts2)
  (vl-some '(lambda(x)(member x pts2)) pts1)
)

点评

这个函数是判断一个点表的所有点是否在另外一个点表组成的多边形内。  详情 回复 发表于 2013-6-25 02:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-25 02:42:29 | 显示全部楼层
梦断江南 发表于 2013-6-25 02:30
参数不明确啊,点集?点表? 最好用lsp的描述,如:返回LIST,点表
凑热闹:
(defun ptssome (pts1 pts2)
...

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-6-25 08:30:44 | 显示全部楼层
newer 发表于 2013-6-24 03:18
VL-SOME函数就是出现一个非NIL值,就结束。

测试中 Vl-some 总是出现非期望效果,样图是两个方框,通过先后选择Pline 判断点保含关系,下面是测试程序,为了简短,Pline 取点用了 api
  1. (defun c:tt (/ e1 e2 plst1 plst2 tf)
  2.   (if (and (setq e1 (car (entsel)))
  3.     (setq e2 (car (entsel)))
  4.       )
  5.     (progn
  6.       (setq plst1 (xdrx_entity_getstretchpoint e1)
  7.      plst2 (xdrx_entity_getstretchpoint e2)
  8.       )
  9.       (setq tf (XD::Pnts:IsInPnts plst1 plst2))
  10.     )
  11.   )
  12.   tf
  13. )

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-6-25 08:36:07 | 显示全部楼层
题意不明确,看9楼回复应该是判断点集是否全部包含在另一点表围成的多边形内吧!最好修改下函数标题!

点评

已修改,这个可以用来把 Region 其他实体的 相交、包含 简化为用点集判断  详情 回复 发表于 2013-6-25 08:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-6-25 08:41:42 | 显示全部楼层
牢固 发表于 2013-6-25 08:36
题意不明确,看9楼回复应该是判断点集是否全部包含在另一点表围成的多边形内吧!最好修改下函数标题!

已修改,这个可以用来把 Region 其他实体的 相交、包含 简化为用点集判断
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-28 03:06:50 | 显示全部楼层
测试了一下,发现本函数,当P1在p2内,P1和P2有重复点时候判别是T,但是P1中的点在P2联线上的时候判别是nil,请复查
tt.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 15个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 02:03 , Processed in 0.450379 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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