Revit 二次开发API中提供了一个FilteredElementCollector 类,通过这个类我们可以方便的获取到
我们想要获取的Element。
这个类返回的是一个Element的集合,
他有3种构造函数
1.FilteredElementCollector(Document)
这个是返回传入Document中的所有Element
2FilteredElementCollector(Document, ElementId)
ElementId 是一个视图的ID ,所以这个是返回这个视图中所有的Element
3FilteredElementCollector(Document, ICollection<(Of<<'(ElementId>)>>))
返回传入的ElementID集合的Element
创建了FilteredElementCollector 后,我们要做的就是创建 过滤条件
比如 要过滤所有的门
FilteredElementCollector doorFilter = new FilteredElementCollector(doc);//创建过滤集合
ElementCategoryFilter doorCategory = new ElementCategoryFilter(BuiltInCategory.OST_Doors);//创建类别过滤条件
doorFilter .WherePasses(doorCategory ); //这个返回的是门类别下的所有Element,他包括了文件中的门实例(对应type为FamilyInstance),和用来创建门实例的类型,(type 对应FamilySymbol)
ElementClassFilter doorType = new ElementClassFilter (typeof(FamilyInstance));//创建一个type过滤器
经过上面的两次过滤doorFilter里就只剩文件中创建的门了doorFilter .WherePasses(doorType);//过滤掉其中的门类型(FamilySymbol)
上面的两次过滤也可以简写为
doorFilter.OfCategory(BuiltInCategory.OST_Doors).OfClass(typeof(FamilyInstance)
更多过滤器请查手册
博主会经常更新一些技术文章,请大家多多关注,多多交流
更多技术交流,请加qq群480950299