EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

萧闫子 发表于 2014-1-8 16:43:09

[用户交互] 选择集合

在与用户交互式的绘图的时候可能需要批量获取一些图形,而在这一批选择的时候你可能需要过滤一些不需要的类型自动排除在你选择的集合以外,下面这个例子就是只接受选择文本、圆、直线三种类型,其余的图形将不能选中。
using System;<p>
</p><p>using Autodesk.AutoCAD.Runtime;</p><p>using Autodesk.AutoCAD.ApplicationServices;</p><p>using Autodesk.AutoCAD.DatabaseServices;</p><p>using Autodesk.AutoCAD.EditorInput;</p><p>
</p><p></p><p>namespace Sample</p><p>{</p><p>    /// <summary></p><p>    /// 类型过滤枚举类</p><p>    /// </summary></p><p>    public enum FilterType</p><p>    {</p><p>      Curve, Dimension, Polyline, BlockRef, Circle, Line, Arc, Text, MText</p><p>    }</p><p>
</p><p>    class Selection</p><p>    {</p><p>      </p><p>      public void Select()</p><p>      {</p><p>            FilterType LineType = FilterType.Line;</p><p>            FilterType TextType = FilterType.Text;</p><p>            FilterType CircleType = FilterType.Circle;</p><p>
</p><p>            FilterType[] Types = new FilterType;</p><p>            Types = LineType;</p><p>            Types = TextType;</p><p>            Types = CircleType;</p><p>            DBObjectCollection EntityCollection = GetSelection(Types);</p><p>      }</p><p>
</p><p>      public static DBObjectCollection GetSelection(FilterType[] tps)</p><p>      {</p><p>            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;</p><p>            Database db = doc.Database;</p><p>            Editor ed = doc.Editor;</p><p>            Entity entity = null;</p><p>            DBObjectCollection EntityCollection = new DBObjectCollection();</p><p>            PromptSelectionOptions selops = new PromptSelectionOptions();</p><p>            // 建立选择的过滤器内容</p><p>            TypedValue[] filList = new TypedValue;</p><p>            filList = new TypedValue((int)DxfCode.Operator, "<or");</p><p>            filList = new TypedValue((int)DxfCode.Operator, "or>");</p><p>            for (int i = 0; i < tps.Length; i++)</p><p>            {</p><p>                filList = new TypedValue((int)DxfCode.Start, tps.ToString());</p><p>            }</p><p>            // 建立过滤器</p><p>            SelectionFilter filter = new SelectionFilter(filList);</p><p>            // 按照过滤器进行选择</p><p>            PromptSelectionResult ents = ed.GetSelection(selops, filter);</p><p>            if (ents.Status == PromptStatus.OK)</p><p>            {</p><p>                using (Transaction transaction = db.TransactionManager.StartTransaction())</p><p>                {</p><p>                  SelectionSet SS = ents.Value;</p><p>                  foreach (ObjectId id in SS.GetObjectIds())</p><p>                  {</p><p>                        entity = (Entity)transaction.GetObject(id, OpenMode.ForWrite, true);</p><p>                        if (entity != null)</p><p>                            EntityCollection.Add(entity);</p><p>                  }</p><p>                  transaction.Commit();</p><p>                }</p><p>            }</p><p>            return EntityCollection;</p><p>      }</p><p>    }</p><p>}</p>加载程序运行命令后框选图形上的对象后得到如下效果:

茶神idg 发表于 2014-5-13 10:30:39

(*^__^*) 嘻嘻……

孙雅 发表于 2014-5-13 10:17:24

(*^__^*) 嘻嘻……

等你回来 发表于 2014-5-13 10:33:03

顶......
楼下跟上.....

影馨 发表于 2014-3-10 13:25:10

(*^__^*) 嘻嘻……

dison 发表于 2014-3-11 11:06:27

非常感谢!!

波罗友 发表于 2014-3-11 11:10:28

谢谢BIM大神…

教父 发表于 2014-3-11 11:17:10

顶!!!!!!!!!!

风浪子 发表于 2014-3-11 11:21:45

谢谢老师…

We晕晕 发表于 2014-3-14 11:18:39

路过!!!
不发表意见……

codywu 发表于 2014-3-14 11:21:54

顶!!!!!!!!!!!!!!!!!!!!!!!!!

极HONDA速 发表于 2014-3-14 11:30:43

(*^__^*) 嘻嘻……

风浪子 发表于 2014-3-14 11:32:34

顶!!!!!!!!!!

zpklfruV 发表于 2014-5-7 10:04:25

顶......
楼下跟上.....

妮可 发表于 2014-5-7 10:12:33

顶起来…………

妮可 发表于 2014-5-7 10:18:24

顶!!!!!!!!!!!!!!!!!!!!!!!!!

NetBeetle 发表于 2014-5-13 10:22:24

顶!!!!!!!!!!
页: [1] 2
查看完整版本: [用户交互] 选择集合