CAD.NET 选择集操作

本文详细探讨了CAD.NET中选择集的操作,包括如何创建、修改和使用选择集来实现对CAD对象的选择与操作。通过实例,阐述了如何高效地管理和应用选择集,以提升CAD应用程序的交互性和功能。
using Autodesk.AutoCAD;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
namespace SelectionTest
{
    public class PickfirstTestCmds
    {
        //必须指定UsePickSet标志 
        **[CommandMethod("MyPickFirst", CommandFlags.UsePickSet | CommandFlags.Redraw | CommandFlags.Modal)]**
        static public void MyPickFirst()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            try
            {
                //得到pickfirst集
                PromptSelectionResult selectionRes = ed.SelectImplied();
                //如果没有pickfirst集
                if (selectionRes.Status == PromptStatus.Error)
                {
                    //请求用户选择实体
                    PromptSelectionOptions selectionOpts = new PromptSelectionOptions();
                    selectionOpts.MessageForAdding = "\nSelect objects to list: ";
                    selectionRes = ed.GetSelection(selectionOpts);
                }
                else//如果有pickfirst集,清除它或者取出来用于其他
                {
                    ed.SetImpliedSelection(new ObjectId[0]);
                }
                //如果用户在此时还没有取消操作
                if (selectionRes.Status == PromptStatus.OK)
                {
                    //遍历被选择的对象
                    Transaction tr = doc.TransactionManager.StartTransaction();
                    try
                    {
                        ObjectId[] objIds = selectionRes.Value.GetObjectIds();
                        foreach (ObjectId objId in objIds)
                        {
                            Entity ent = (Entity)tr.GetObject(objId, OpenMode.ForRead);
                            //此例中,只是dump它的的属性到命令行中
                            ent.List();
                            ent.Dispose();
                        }
                        //尽管没有对实体作改变,但使用Commit(),因为这样比回滚操//作要快些
                        tr.Commit();
                    }
                    catch (Autodesk.AutoCAD.Runtime.Exception ex)
                    {
                        ed.WriteMessage(ex.Message);
                        tr.Abort();
                    }
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage(ex.Message);
            }
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值