Revit+对象高效过滤

FilteredElementCollector 

步骤:1.var wallTypeCollector1 = new FilteredElementCollector(_doc);
    2.wallType.WherePasses(new ElementClassFilter(typeof(WallType)));
    3.IList<Element> wallTypes1 = wallTypeCollector1.ToElement();

确定过滤范围:

1. FilteredElementCollector(Document)  对一个文档中进行过滤

2. FilteredElementCollector(Document, ElementId)只对给定视图中可见的对象过滤

3. FilteredElementCollector(Document, ICollection<Of<ElementId>>)对一个对象集合进行过滤

 

FilteredElementCollector的快捷过滤方式:

OfClass(Type)、OfCategory(BuildlnCategory)、OfCatoryId(ElementId)、OwnedByView()

ContainedInDesignOption(ElementId designOptionId) …

举例:FilteredElementCollector collector = new FilteredElementCollector(document);

            ICollection<Element> levels = collector.OfClass(typeof(level)).ToElements();  //level 楼层  .OfClass(XXX).OfCategory().XXX  可以并联

FilteredElementCollector.WherePasses(ElementFilter)

举例:ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(FamilyInstance));
   ElementCategoryFilter doorsCategoryfilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
   LogicalAndFilter doorInstancesFilter = new LogicalAndFilter(familyInstanceFilter, doorsCategoryfilter);
   FilteredElementCollector collector.WherePasses(doorInstancesFilter ).ToElement();

FilteredElementCollector.FirstElement()返回第一个对象 FilteredElementCollector.FirstElementId()返回第一个对象的Id

获得遍历器来访问全部的对象:

GetElementIdIterator/GetElementIterator

举例:FilteredElementCollector roomIdItr = collector.GetElementIdIterator();

            roomIdItr.Reset();

            while(roomIdItr.MoveNext())

     {

ElementId roomId = roomIdItr.Current;

                        Room room = document.get_Element(roomId) as Room;

     }

直接获得结果列表:

ToElementIds()/ToElements()

doorInstancesFilter 实现了IEnumerable接口,可以用ForEach来遍历。

获取选择集:

sel = app.ActiveUIDocument.Selection;

sel.Elements.Clear();

foreach(Element elem in collector)

sel.Elements.Add(elem) 

.NET LINQ:对集合类进行过滤

//LINQ query

var wallTypeElems1 = from element in wallTypeCollector1 where element.Name.Equals(wallTypeName) select element;

快速过滤条件: ElementClassFilter、ElementCategoryFilter

慢速过滤条件:FamilyInstanceFilter、AreaFilter

逻辑过滤条件,组合多个过滤条件:LogicalAndFilter 逻辑与 、 LogicalOrFilter 逻辑或 

均用WherePasses添加。

《Revit+对象高效过滤》

《Revit+对象高效过滤》

《Revit+对象高效过滤》过滤类:

空间过滤方式:

1.过滤与对象相交的其他对象:FilteredElementCollector collector = new FilteredElementCollector(doc);

ElementIntersectsElementFilter elementFilter = new ElementIntersectsElementFilter(column,false);

                                                        collector.WherePasses(elementFilter);

2.过滤与solid相交的对象: FilteredElementCollector collector = new FilteredElementCollector(doc);

ElementIntersectsSolidFilter solidFilter = new ElementIntersectsSolidFilter(solid);

  collector.WherePasses(solidFilter);

《Revit+对象高效过滤》

    原文作者:停车场模拟问题
    原文地址: https://blog.csdn.net/Alexander_Frank/article/details/52764578
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞