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開發指南 宦國勝 主編