连续选择同一类别的图元

今天看到有群员有个需求:在选择的图元的时候 第一次选中后,后面的选中的图元也只能是第一次选中的同类别图元。比如说我第一次选中了门,后面选择的图元也只能是门。

  1. 定义Selectionfilter
public class SelectionFilter : ISelectionFilter
    {
        private readonly Element m_targetElement;
        public SelectionFilter(Element e)
        {
            m_targetElement = e;
        }
        public bool AllowElement(Element elem)
        {
            return elem.Category?.Id == m_targetElement.Category?.Id;
        }
        public bool AllowReference(Reference reference, XYZ position)
        {
            return false;
        }
    }

2 用while循环连续选择

[Transaction(TransactionMode.Manual)]
    public class PickSelector : IExternalCommand
    {
        private UIDocument m_uidoc;
        private Document m_doc;
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            m_uidoc = commandData.Application.ActiveUIDocument;
            m_doc = m_uidoc.Document;
            const string m_prompt = "pick a element";
            Element m_pickedElement = m_doc.GetElement(m_uidoc.Selection.PickObject(ObjectType.Element, m_prompt));
            while (true)
            {
                try
                {
                    Element m_element = m_doc.GetElement(m_uidoc.Selection.PickObject(ObjectType.Element, 
                        new SelectionFilter(m_pickedElement), m_prompt));
                    TaskDialog.Show("Prompt", $"The name of selected element is {m_element.Name}.");
                }
                catch (Autodesk.Revit.Exceptions.OperationCanceledException)
                {
                    break;
                }
                catch (Exception e)
                {
                    Debug.Assert(false, e.Message);
                    break;
                }
            }
            return Result.Succeeded;
        }
    }

效果如下:
本人菜鸟一只,如有错误,望大佬雅正~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值