明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1755|回复: 5

如何由一个选集创建另一个选集

[复制链接]
发表于 2009-7-16 12:24 | 显示全部楼层 |阅读模式

如何由一个选集创建另一个选集

比如我一个选集A中含有直线,多段线,块参照等,我想通过过滤器直接由A中选出块参照,除了遍历选集A一个个判断,还有没有更好的办法

发表于 2009-7-16 14:46 | 显示全部楼层

可以重构过滤器再选一遍

在什么时候需要这样?

 楼主| 发表于 2009-7-16 22:06 | 显示全部楼层

我在做一个块替换程序,我要在当前选集里面过滤出指定的块,然后进行替换。类似快速选择的选择方式,有两种选择模式,一个是全图,一个是当前选择。虽然遍历可以解决问题,但是我始终觉得效率不高。

发表于 2009-7-16 22:37 | 显示全部楼层

不知道这样效率会不会好些

        [CommandMethod("t9")]
        public static void Test9()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            PromptSelectionResult res1 = ed.GetSelection();
            ObjectId[] ids1 = res1.Value.GetObjectIds();

            PromptSelectionResult res2 = ed.SelectAll(new SelectionFilter(new TypedValue[] { new TypedValue(0, "line") }));
            List<ObjectId> ids2 = new List<ObjectId>(res2.Value.GetObjectIds());

            List<ObjectId> ids = new List<ObjectId>();

            foreach (ObjectId id in ids1)
            {
                if(ids2.Contains(id))
                {
                    ids.Add(id);
                }
            }
           
            ed.SetImpliedSelection(ids.ToArray());

        }

 楼主| 发表于 2009-7-17 01:18 | 显示全部楼层

嗯,这个也是遍历,这个效率跟选集有关,比如我整个图有1000个line,而我选择的只有1个line,那我还得遍历1000个line来找到选集中的line。lisp里面ssget有个p选项可以由选集中过滤出另一个选集,但是net就找不到这个功能了

发表于 2009-7-17 08:56 | 显示全部楼层

可能比不上直接遍历

如果用P选带过滤器,可能只有p/invoke了

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

本版积分规则

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

GMT+8, 2024-5-4 02:04 , Processed in 0.190006 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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