Revit过滤器

1.过滤器

1.1ElementClassFilter​
ElementClassFilter的作用是根据类,来过滤Revit文档中的元素,即获取到符合传入类的元素。ElementClassFilter的构造函数定义是:ElementClassFilter(Type type)​​。

使用实例:

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;

            FilteredElementCollector collector = new FilteredElementCollector(doc);//建立收集器

            ElementClassFilter classFilter = new ElementClassFilter(typeof(Wall));//利用ElementClassFilter对收集器进行过滤
            collector = collector.WherePasses(classFilter);

            //将过滤得到的图元转换为id
            IList elid = new List();
            foreach (Element el in collector)
            {
                elid.Add(el.Id);
            }
            //将图元设置为选中状态
            uidoc.Selection.SetElementIds(elid);

            return Result.Succeeded;

        }
Revit过滤器_第1张图片
测试结果

1.2ElementCategoryFilter​​
ElementCategoryFilter即元素类别过滤器。Category(类别)!所有基类为Element类的元素都拥有一个Category属性用于表示这个元素属于的类别或者子类别,详见上一篇数据结构。

  ElementCategoryFilter​​ categoryFilter = new ElementCategoryFilter​​(BuiltInCategory.OST_Walls);//将元素的类别作为传入参数来过滤元素
            collector = collector.WherePasses(categoryFilter);

元素的类别可以采用如图方法查看:

Revit过滤器_第2张图片
查看元素类别
Revit过滤器_第3张图片
测试结果

2.选择过滤器
在执行命令的过程中,让用户自行选择构件或构建集。

主函数中的实现:
ISelectionFilter WallFilter = new WallSelectionFilter();
            IList elementList = uidoc.Selection.PickObjects(ObjectType.Element, WallFilter, "选择墙");
接口的实现:
public class WallSelectionFilter : ISelectionFilter
    {
        public bool AllowElement(Element elem)
        {
            if(elem is Wall && elem.Name == "常规 - 200mm")
            {
                return true;
            }
            return false;
        }

        public bool AllowReference(Reference reference, XYZ position)
        {
            return false;
        }
    }
Revit过滤器_第4张图片
选择过滤器

你可能感兴趣的:(Revit过滤器)