找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2201|回复: 13

[求助] 点与多段线的关系

[复制链接]
发表于 2014-6-2 17:39:56 | 显示全部楼层 |阅读模式

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

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

×
求教:已知一个点,和很多封闭的多段线,如果不用遍历的方法,怎么能快速确定出包含这个点的多段线呢?
(PS:这些多段线彼此没有交集)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-2 17:46:14 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2014-6-2 17:48 编辑

由点构造一个 F  选择集, 取第一个曲线

都要在可见范围

点评

这个选择集该怎么写呢?求明示。  详情 回复 发表于 2014-6-3 09:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-3 09:00:46 | 显示全部楼层
csharp 发表于 2014-6-2 17:46
由点构造一个 F  选择集, 取第一个曲线

都要在可见范围

这个选择集该怎么写呢?求明示。

点评

ssget 用F 根据你的点,算一个距离很近的满足要求的临时点,两点fence  详情 回复 发表于 2014-6-3 09:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-6-3 09:25:54 | 显示全部楼层
正版马甲 发表于 2014-6-3 09:00
这个选择集该怎么写呢?求明示。

ssget 用F
根据你的点,算一个距离很近的满足要求的临时点,两点fence

点评

你说的SSGET应该是VB吧,F又是什么? 我对VB不了解,如果换成c#的话,该咋写呐?  详情 回复 发表于 2014-6-3 09:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-3 09:31:11 | 显示全部楼层
newer 发表于 2014-6-3 09:25
ssget 用F
根据你的点,算一个距离很近的满足要求的临时点,两点fence

你说的SSGET应该是VB吧,F又是什么?
我对VB不了解,如果换成c#的话,该咋写呐?

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-3 10:49:57 | 显示全部楼层
正版马甲 发表于 2014-6-3 09:31
你说的SSGET应该是VB吧,F又是什么?
我对VB不了解,如果换成c#的话,该咋写呐?

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-6-3 11:24:05 | 显示全部楼层
正版马甲 发表于 2014-6-3 09:31
你说的SSGET应该是VB吧,F又是什么?
我对VB不了解,如果换成c#的话,该咋写呐?

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-3 12:14:25 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2014-6-3 12:51 编辑

由已知点和当前视口边缘一个点来构造选集、取选集第一个
FenceSelectionSet.Value.GetObjectIds[0]

点评

突然想到了另一种方法,你看可否? 由点找到其边界线,遍历边界线查找出闭合多段线(因为多段线和生成多段线的直线有重复),判断点与这个多段线的关系。。  详情 回复 发表于 2014-6-3 14:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-3 14:43:36 | 显示全部楼层
csharp 发表于 2014-6-3 12:14
由已知点和当前视口边缘一个点来构造选集、取选集第一个
FenceSelectionSet.Value.GetObjectIds[0]

突然想到了另一种方法,你看可否?
由点找到其边界线,遍历边界线查找出闭合多段线(因为多段线和生成多段线的直线有重复),判断点与这个多段线的关系。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-3 15:37:50 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2014-6-3 15:48 编辑

你的意思这个多线里面只有这个点没有其它干扰图元?用那个trace边界?
Editor.TraceBoundary(ppr.Value, true);

点评

我这个麻烦点。 ResultBuffer rb = new ResultBuffer(); rb.Add(new TypedValue(5005, "_Boundary")); rb.Add(new TypedValue(5009, point3d)); ed.AcedCmd(rb); PromptSelectionResult pResult = ed. SelectLa  详情 回复 发表于 2014-6-3 16:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-3 16:12:45 | 显示全部楼层
csharp 发表于 2014-6-3 15:37
你的意思这个多线里面只有这个点没有其它干扰图元?用那个trace边界?
Editor.TraceBoundary(ppr.Value, t ...

我这个麻烦点。
ResultBuffer rb = new ResultBuffer();
rb.Add(new TypedValue(5005, "_Boundary"));
rb.Add(new TypedValue(5009, point3d));
ed.AcedCmd(rb);
PromptSelectionResult pResult = ed. SelectLast();
但是刚才试了一下并么有选择到我要的多线。

可以先保证没有干扰图元。
但是这个多线是由线段生成的,而这些线段都没有删除,
如果按照上面的代码的话,到底会选择线段还是多线呢?

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-3 17:37:50 来自手机 | 显示全部楼层
正版马甲 发表于 2014-6-3 16:12
我这个麻烦点。
ResultBuffer rb = new ResultBuffer();
rb.Add(new TypedValue(5005, "_Boundary"));
...

你这是生成了一个一样的多线

点评

是有这个问题,方案已经取消了。 你所说的选择集中第一个对象确定是包含点的多段线吗??  详情 回复 发表于 2014-6-3 22:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-3 22:15:31 | 显示全部楼层
csharp 发表于 2014-6-3 17:37
你这是生成了一个一样的多线

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-6-4 23:30:55 | 显示全部楼层
正版马甲 发表于 2014-6-3 22:15
是有这个问题,方案已经取消了。
你所说的选择集中第一个对象确定是包含点的多段线吗??

一个简单测试
  1. [/color][/size][/font]
  2. namespace AutoCAD_CSharp_plug_in18
  3. {
  4.     public class MyCommands
  5.     {
  6.         [CommandMethod("MyGroup", "MyCommand", "MyCommandLocal", CommandFlags.Modal)]
  7.         public void MyCommand() // This method can have any name
  8.         {
  9.             Document doc = Application.DocumentManager.MdiActiveDocument;
  10.             Editor ed = doc.Editor;
  11.             Database db = doc.Database;
  12.             Transaction tr = db.TransactionManager.StartTransaction();
  13.             PromptPointResult ppr = ed.GetPoint("Pick Point\n");
  14.             if (ppr.Status != PromptStatus.OK) return;
  15.             Point3d pCen = (Point3d ) Application.GetSystemVariable("VIEWCTR");
  16.             double height = (double)Application.GetSystemVariable("VIEWSIZE");
  17.             Point3d p1 = new Point3d(ppr.Value.X, pCen.Y - ppr.Value.Y + height/2, 0);
  18.             Point3dCollection pts = new Point3dCollection();
  19.             pts.Add(ppr.Value);
  20.             pts.Add(p1);
  21.             SelectionFilter filter = new SelectionFilter(new TypedValue[]{new TypedValue(0, "LWPOLYLINE")});
  22.             PromptSelectionResult psr = ed.SelectFence(pts, filter );
  23.             if (psr.Status != PromptStatus.OK) return;
  24.             ObjectId[] ids = psr.Value .GetObjectIds();
  25.             Entity ent = (Entity) ids[0].GetObject(OpenMode.ForRead);
  26.             ent.UpgradeOpen();
  27.             ent.Highlight();
  28.         }
  29.     }
  30. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-18 23:47 , Processed in 0.473440 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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