UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Document doc = uidoc.Document;
综述:
FilterElementCollector collector =new FilterElementCollector(doc); //*收集器必须重要
WherePasses(),ofClass(),ofCategory() //*判断条件
IList<Element> WallList = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Walls).ToElements();
总结方法:
1.收集ElementType类型的元素——宏观把控
FilteredElementCollector collector = new FilteredElementCollector(doc);
ElementIsElementTypeFilter elementfilter = new ElementIsElementTypeFilter();
IList<Element> elementlist = collector.WherePasses(elementfilter).ToElements();
2.收集两种或两种以上的类型的元素——二次宏观把控
LogicalOrFilter 和 LogicalAndFilter ——逻辑过滤器
ElementCategoryFilter filter1 = new ElementCategoryFilter(BuiltInCategory.OST_Walls);
ElementCategoryFilter filter2 = new ElementCategoryFilter(BuiltInCategory.OST_Windows);
LogicalOrFilter logicalorfilter = new LogicalOrFilter(filter1,filter2);
IList<Element> elementlist = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).WherePasses(logicalorfilter).ToElements();
3.收集单个类型对象的元素——细节把控
FilteredElementCollector collector = new FilteredElementCollector(doc);
ElementIsElementTypeFilter familyinstancefilter = new ElementIsElementTypeFilter(FamilyInstance);
IList<Element> elementlist = collector.WherePasses(familyinstancefilter ).ToElements();
4.收集多个类型对象元素——多细节把控
Type[] elementTypes = { typeof(Wall), typeof(FamilyInstance), typeof(Floor) }; //*多种类型设置
List<ElementFilter> elementFilters = new List<ElementFilter>();//*过滤器种类
foreach (Type elemType in elementTypes)//*添加那几种过滤器
{
ElementClassFilter elementClassFilter = new ElementClassFilter(elemType);
elementFilters.Add(elementClassFilter);
}
LogicalOrFilter logicalOrFilter = new LogicalOrFilter(elementFilters);//*逻辑过滤器 该过滤器适合两种及以上的类型
FilteredElementCollector collector = new FilteredElementCollector(doc);
TransElements = collector.WherePasses(logicalOrFilter).ToElements();
群:1090519856