Revit二次開發之按照標高過濾元素

Revit二次開發之按照標高過濾元素

之前羣裏有朋友問怎麼過濾特定標高的元素,當時有人回答先都過濾出來,然後遍歷判斷相應的標高參數來找出特定標高的元素。今天在看書的時候看到了一個可以過濾特定標高元素的方法,在此記錄一下。
這個demo實現了亮顯標高 1中所有元素的效果。


using System;
using System.Collections.Generic;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.DB.Electrical;
using System.Threading;
using System.Linq;
using System.Runtime.InteropServices;

namespace 插件
{
    [Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(RegenerationOption.Manual)]
    [Autodesk.Revit.Attributes.Journaling(JournalingMode.UsingCommandData)]
    public class Command : IExternalCommand
    {
        public readonly double unit = 304.8;

        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elementSet)
        {
            UIApplication uiapp = new UIApplication(commandData.Application.Application);
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            Selection selection = uidoc.Selection;

            Level level = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).OfClass(typeof(Level)).WhereElementIsNotElementType().ToElements().Where(m => m.Name == "標高 1").ToList().FirstOrDefault() as Level;
            // 創建一個標高過濾器
            ElementLevelFilter levelFilter = new ElementLevelFilter(level.Id);
            FilteredElementCollector coll = new FilteredElementCollector(doc);
            ICollection<ElementId> ids = coll.WhereElementIsNotElementType().WherePasses(levelFilter).ToElementIds();
            selection.SetElementIds(ids);
            return Result.Succeeded;
        }
    }
}
  • 參考——API開發指南 宦國勝 主編
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章