1. 程式人生 > >Revit二次開發之如何選取Revit元素【比目魚原創】

Revit二次開發之如何選取Revit元素【比目魚原創】

Revit API提供的獲取元素的互動包括以下幾種方式:
方式(1)先選擇元素,再執行外部命令,Revit文件可以獲取選擇元素並做相應處理。

方式(2)先執行命令,再選擇元素或者位置,選擇結束後命令繼續執行。

這種方式的選擇又包含

①單選。只能選取一個元素,選擇後當前選擇操作結束。

②多選。可以選取多個元素,單擊工具條上的“結朿”按鈕來確認選擇操作結束,或者 單擊“取消”或者按ESC鍵來取消選擇。
③框選。拉框訪方式選取,所有在框內的且符合過濾條件的元素都將被選取。

④選點。選擇檢視中的一個座標點。

學習的程式碼如下:

using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
namespace HelloRevit
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]
    public class Class1 : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData revit, ref string message, ElementSet elements)
        {
            UIDocument uidoc = revit.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            Selection selection = uidoc.Selection;


            try
            {
                //獲取Revit已選中的元素
                String info = "所選元素型別為: ";
                foreach (var elementId in selection.GetElementIds())
                {
                    var elem = doc.GetElement(elementId);
                    if (elem != null)
                    {
                        info += "\n\t" + elem.GetType().ToString();
                    }
                }
                TaskDialog.Show("Revit已選中的元素為:", info);


                //使用者自行選擇元素
                var referenceCollection = selection.PickObjects(ObjectType.Element, "請選擇模型構件");
                if (0 == referenceCollection.Count)
                {
                    TaskDialog.Show("Revit", "你沒有選任何元素.");
                }
                else
                {
                    info = "所選元素型別為: ";
                    foreach (var reference in referenceCollection)
                    {
                        var elem = doc.GetElement(reference);
                        if (elem != null)
                        {
                            info += "\n\t" + elem.GetType().ToString();
                        }
                    }
                    TaskDialog.Show("你所選擇的元素為", info);
                }
            }
            catch (Exception e)
            {
                message = e.Message;
                return Autodesk.Revit.UI.Result.Failed;
            }
            return Autodesk.Revit.UI.Result.Succeeded;
        }
    }
}

其中ObjectType. Element指定選取的是元素整體,Revit API還支援選取面(Face)、 邊(Edge)、點(Point)等。

=========【更多高階應用請關注公眾號】========


===================================