明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2637|回复: 10

关于经过两点的各类线获取

[复制链接]
发表于 2010-8-26 09:31:00 | 显示全部楼层 |阅读模式

         我用的如下代码:

            Dim acTypValAr(0) As TypedValue

            acTypValAr.SetValue(New TypedValue(DxfCode.Start, "*Line"), 0)
            Dim pc As New Point3dCollection
            pc.Add(ss.pos)
            pc.Add(ps.pos)
            Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
            Dim acSSPrompt As PromptSelectionResult = ed.SelectFence(pc, acSelFtr)
            Dim acSSet As SelectionSet = acSSPrompt.Value

            If Not acSSet Is Nothing Then
                obc = acSSet.GetObjectIds

             end if

奇怪的是,明明经过两点的直线只有一条,却总是得到好几条,并且从我调试的前几个点来看,筛选的obc里头,一般都是最后一个才是真正要获取的,这是为什么啊?

发表于 2010-8-26 11:01:00 | 显示全部楼层
栏选的方式是与两点连线有交点的图元就会被选中,你可以选择后在遍历过滤一下
 楼主| 发表于 2010-8-26 11:56:00 | 显示全部楼层
那有什么更好的方法只选择startpoint和endpoint只为给出的两点的线呢?上面方法对于大图来说,搜索时间太烦
发表于 2010-8-26 16:14:00 | 显示全部楼层

过滤组码10/11

 楼主| 发表于 2010-8-26 17:21:00 | 显示全部楼层

          这样吗?但是我搜索不到线条

  Dim acTypValAr(4) As TypedValue
            acTypValAr.SetValue(New TypedValue(DxfCode.Start, "*Line"), 0)
            acTypValAr.SetValue(New TypedValue(-4, "<OR"), 1)
            acTypValAr.SetValue(New TypedValue(10, ss.pos), 2)
            acTypValAr.SetValue(New TypedValue(11, ps.pos), 3)
            acTypValAr.SetValue(New TypedValue(-4, "OR>"), 4)
            Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
            Dim acSSPrompt As PromptSelectionResult = ed.SelectAll(acSelFtr)
            Dim acSSet As SelectionSet = acSSPrompt.Value

发表于 2010-8-26 22:04:00 | 显示全部楼层
  1.         [CommandMethod("tt5")]
  2.         public static void test25()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Editor ed = doc.Editor;
  6.             Database db = doc.Database;
  7.             var resPt1 = ed.GetPoint("\n请输入第一点:");
  8.             if (resPt1.Status != PromptStatus.OK)
  9.                 return;
  10.             var resPt2 = ed.GetPoint("\n请输入第二点:");
  11.             if (resPt2.Status != PromptStatus.OK)
  12.                 return;
  13.             var resSel =
  14.                 ed.SelectAll(
  15.                     new ResultList
  16.                     {
  17.                         {0, "line"},
  18.                         {-4, "<xor"},
  19.                             {-4, "<and"},
  20.                                 {10, resPt1.Value},
  21.                                 {11, resPt2.Value},
  22.                             {-4, "and>"},
  23.                             {-4, "<and"},
  24.                                 {10, resPt2.Value},
  25.                                 {11, resPt1.Value},
  26.                             {-4, "and>"},
  27.                         {-4, "xor>"}
  28.                     });
  29.             if (resSel.Status == PromptStatus.OK)
  30.                 ed.SetImpliedSelection(resSel.Value.GetObjectIds());
  31.         }
复制代码
 楼主| 发表于 2010-8-27 08:40:00 | 显示全部楼层

我按照 版主的代码改了,但是还是没有?

 Dim acTypValAr(10) As TypedValue
            acTypValAr.SetValue(New TypedValue(DxfCode.Start, "*Line"), 0)
            acTypValAr.SetValue(New TypedValue(-4, "<XOR"), 1)
            acTypValAr.SetValue(New TypedValue(-4, "<AND"), 2)
            acTypValAr.SetValue(New TypedValue(10, ss.pos), 3)
            acTypValAr.SetValue(New TypedValue(11, ps.pos), 4)
            acTypValAr.SetValue(New TypedValue(-4, "AND>"), 5)
            acTypValAr.SetValue(New TypedValue(-4, "<AND"), 6)
            acTypValAr.SetValue(New TypedValue(10, ps.pos), 7)
            acTypValAr.SetValue(New TypedValue(11, ss.pos), 8)
            acTypValAr.SetValue(New TypedValue(-4, "AND>"), 9)
            acTypValAr.SetValue(New TypedValue(-4, "XOR>"), 10)
            Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
            Dim acSSPrompt As PromptSelectionResult = ed.SelectAll(acSelFtr)

发表于 2010-8-27 10:54:00 | 显示全部楼层

多段线用下面的

{0 ,  "LWPOLYLINE"},

{10, ss.pos},

{10, ps.pos}

 楼主| 发表于 2010-8-27 12:33:00 | 显示全部楼层

版主,好像还是没有唉,我搜索所有直线包括多段线,或者单独多段线也不行。

发表于 2010-8-27 19:17:00 | 显示全部楼层
我这里测试是正常的
  1.             var resSel =
  2.                 ed.SelectAll(
  3.                     new ResultList
  4.                     {
  5.                         {-4, "<or"},
  6.                         {-4, "<and"},
  7.                             {0, "line"},
  8.                             {-4, "<xor"},
  9.                                 {-4, "<and"},
  10.                                     {10, resPt1.Value},
  11.                                     {11, resPt2.Value},
  12.                                 {-4, "and>"},
  13.                                 {-4, "<and"},
  14.                                     {10, resPt2.Value},
  15.                                     {11, resPt1.Value},
  16.                                 {-4, "and>"},
  17.                             {-4, "xor>"},
  18.                         {-4, "and>"},
  19.                         {-4, "<and"},
  20.                             {0, "lwpolyline"},
  21.                             {10, resPt1.Value},
  22.                             {10, resPt2.Value},
  23.                         {-4, "and>"},
  24.                         {-4, "or>"},
  25.                     });
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-21 03:37 , Processed in 0.296067 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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