美文网首页
Revit过滤器

Revit过滤器

作者: Karel_ | 来源:发表于2017-09-02 00:24 被阅读55次

    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<ElementId> elid = new List<ElementId>();
                foreach (Element el in collector)
                {
                    elid.Add(el.Id);
                }
                //将图元设置为选中状态
                uidoc.Selection.SetElementIds(elid);
    
                return Result.Succeeded;
    
            }
    
    测试结果

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

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

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

    查看元素类别 测试结果

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

    主函数中的实现:
    ISelectionFilter WallFilter = new WallSelectionFilter();
                IList<Reference> 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过滤器

          本文链接:https://www.haomeiwen.com/subject/vhkljxtx.html