在建模的时候会给门命名比如:M1、M2...FM3
想得到所有的M1很麻烦(模型太大门很多的时候)
可以试着用过滤器找到指定名字的门
代码如下:
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace filtered
{
[TransactionAttribute(TransactionMode.Manual)]
class filter : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Application application = uiApp.Application;
UIDocument uIDocument = uiApp.ActiveUIDocument;
Document document = uIDocument.Document;
//选择所有的门
IList<Reference> references = uIDocument.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element,new fliterAny());
List<ElementId> ids= new List<ElementId>();
//得到主窗类
MainWindow mainWindow = new MainWindow();
//显示窗体
mainWindow.ShowDialog();
if (!mainWindow.ClickClosed)
{
return Result.Cancelled;
}
String name = mainWindow.text.Text;
//遍历
foreach (Reference reference in references)
{
Element element = document.GetElement(reference);
//找到想要的门
if(element.Name == name)
{
ids.Add(element.Id);
}
}
//高亮显示
uIDocument.Selection.SetElementIds(ids);
return Result.Succeeded;
}
/// <summary>
/// 过滤门
/// </summary>
public class fliterAny : ISelectionFilter
{
public bool AllowElement(Element elem)
{
if (elem is FamilyInstance && elem.Category.Id.IntegerValue ==(int)BuiltInCategory.OST_Doors)
{
return true;
}
return false;
}
public bool AllowReference(Reference reference, XYZ position)
{
return true;
}
}
}
}
到revit里看看
非常简单、简洁