1.过滤器
1.1ElementClassFilter
ElementClassFilter的作用是根据类,来过滤Revit文档中的元素,即获取到符合传入类的元素。ElementClassFilter的构造函数定义是:ElementClassFilter(Type type)。
使用实例:
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);//建立收集器
ElementClassFilter classFilter = new ElementClassFilter(typeof(Wall));//利用ElementClassFilter对收集器进行过滤
collector = collector.WherePasses(classFilter);
//将过滤得到的图元转换为id
IList<ElementId> elid = new List<ElementId>();
foreach (Element el in collector)
{
elid.Add(el.Id);
}
//将图元设置为选中状态
uidoc.Selection.SetElementIds(elid);
return Result.Succeeded;
}
测试结果
1.2ElementCategoryFilter
ElementCategoryFilter即元素类别过滤器。Category(类别)!所有基类为Element类的元素都拥有一个Category属性用于表示这个元素属于的类别或者子类别,详见上一篇数据结构。
ElementCategoryFilter categoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_Walls);//将元素的类别作为传入参数来过滤元素
collector = collector.WherePasses(categoryFilter);
元素的类别可以采用如图方法查看:
查看元素类别 测试结果2.选择过滤器
在执行命令的过程中,让用户自行选择构件或构建集。
主函数中的实现:
ISelectionFilter WallFilter = new WallSelectionFilter();
IList<Reference> elementList = uidoc.Selection.PickObjects(ObjectType.Element, WallFilter, "选择墙");
接口的实现:
public class WallSelectionFilter : ISelectionFilter
{
public bool AllowElement(Element elem)
{
if(elem is Wall && elem.Name == "常规 - 200mm")
{
return true;
}
return false;
}
public bool AllowReference(Reference reference, XYZ position)
{
return false;
}
}
选择过滤器
网友评论