🌓
搜索
 找回密码
 立即注册

Revit二次开发之使用LINQ查询元素过滤集合里的元素

万联Revit开发 2018-11-10 19:45:21 96621

元素过滤器的使用方式:



FilteredElementCollector collection = new FilteredElementCollector(RevitDoc); 

ElementFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_StackedWalls); 

collection.OfClass(typeof(Wall)).WherePasses(filter); 

ICollection<ElementId> foundIds = collection.ToElementIds(); 

 


FilteredElementCollector提供了一系列的方法,允许用户设置査询和过滤所需的元素集:
•通用方法WherePasses(),在收集器中应用单一的ElementFilter。该方法可以在结果中重复使用来增加不同的过滤器(filter)。
•快捷方法,比如ofClass(),ofCategoryId(),ownedByView()。
•并集、交集等运算-方法,比如UnionWith()和IntersectWith()。
这些方法返回收集器本身,并允许不同的过滤器链式调用。



过滤完后可以用两种方式取出所需元素:

方法①:foreach


FilteredElementCollector collector = new FilteredElementCollector(m_doc); 

  // 查询并遍历文档中所有的Level 

collector.WherePasses(new 

ElementCategoryFilter(BuiltInCategory.OST_Levels)).WhereElementIsNotElementType(); 

foreach(Level level in collector) 

    TaskDialog.Show("Level Name", level.Name); 

 


方法②:LINQ


FilteredElementCollector collector = new FilteredElementCollector(m_doc); 

   

// 首先使用一个内建的过滤器来减少后面使用LINQ查询的元素数量 

collector.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_Levels)); 

 

// LINQ查询:找到名字为"Level 1"的标高 

var levelElements = from element in collector 

                                        where element.Name == "Level 1" 

                                        select element;    

List<Autodesk.Revit.DB.Element> levels = levelElements.ToList<Autodesk.Revit.DB.Element>(); 

   

ElementId level1Id = levels[0].Id; 



扫一扫

66634.jpg

0 回复

高级模式
游客
返回顶部