首页 > 其他 > 详细

Revit二次开发中经常用到的一些过滤器

时间:2014-03-03 21:24:00      阅读:787      评论:0      收藏:0      [点我收藏+]

这篇随笔呢,主要是记录一下工作中经常用到的一些过滤器,给自己总结一下,以便以后更加的灵活运用。

1. 利用FilteredElementCollector 的构造函数初步一个大范围
  对一个文档中进行过滤
  FilteredElementCollector(Document)

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

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

2. 利用FilteredElementCollector的函数添加快捷过滤条件

  ? FilteredElementCollector的快捷方法添加过滤条件
  ? 快捷方法可以并联,连续添加多个条件
  ? OfClass(Type)

  ? OfCategory(BuiltInCategory)

  ? OfCatoryId(ElementId)

  ? OwnedByView()
  ? ContainedInDesignOption(ElementId designOptionId)
  ? WhereElementIsCurveDriven
  ? WhereElementIsElementType

例子:

     FilteredElementCollector collector = new FilteredElementCollector(doc);

     ICollection<Element> levels = collector.OfClass(typeof(Level)).ToElements();

   ElementType wallType = new                                                                            FilteredElementCollector(doc).WhereElementIsElementType().OfClass(typeof(WallType))

        .OfCatory(BulidInCatory.OST_Walls).FirstElement() as ElementType;


3. 通过FilteredElementCollector的WherePasses() 函数添加任意过滤条件

  ElementClassFilter instanceFitler = new ElementClassFilter(typeof(FamilyInstance));

  ElementClassFilter hostFilter = new ElementClassFilter(typeof(HostObject));

  IList<ElementFilter> listFilter = new List<ElementFilter>();

  listFilter.Add(instanceFitler);

  listFilter.Add(hostFilter);

  LogicalOrFilter orFilter = new LogicalOrFilter(listFilter);//逻辑过滤器LogicalOrFilter ,LogicalAndFilter 

  FilteredElementCollector fec = new FilteredElementCollector(doc);

  fec.WherePasses(orFilter);

 

  //遍历过滤器内的实体第一种方法

  FilteredElementIterator fei = fec.GetElementIterator();

  fei.Reset();//把迭代器设置到起始端

  while (fei.MoveNext())

  {

     //相关操作           

  }

     //遍历过滤器内的实体第二种方法

  Selction sel = app.ActiveUIDocument.Selection;

  sel.Elements.Clear();

  Foreach(Element ele in collector)

  {

    sel.Elements.Add(ele);

  }

4.对象过滤步骤
1. 首先确定你的目标对象的特征?
? 比如:在哪个模型中,是否只在某个视图中的实体
? 多个条件的联合
? 常用条件的快捷方式
? 与其他过滤对象Collector的相交或合并操作
? 需要排除哪些对象
2. 选择用何种方式进行遍历
? 使用遍历器Iterator
? Element 集合 还是 ElementId 集合
? IEnumerable
3. 获得过滤结果中的对象
? 使用foreach来遍历每一个对象
? LINQ 进一步限制所获得的结果集合
? 只获得第一个对象或对象的ElementId

5.高效对象过滤最佳实践
? 优先使用快速过滤条件
? 慢过滤条件次之
? 使用了内置过滤技术后,考虑使用 LINQ 来更进一步限制.
? 技巧: 使用 FilteredElementCollector的快捷方法Of***()
? 如果你使用快捷方法,实际上是使用了快速过滤。因为慢过滤没有快捷
方法.

Revit二次开发中经常用到的一些过滤器,布布扣,bubuko.com

Revit二次开发中经常用到的一些过滤器

原文:http://www.cnblogs.com/love-huihui-zhupo/p/3578104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!