查找视图过滤器Revit Api

时间:2015-02-04 23:22:15

标签: c# revit revit-api

我正在尝试使用过滤器来显示/隐藏视图上的某个元素。这个家族来自catogary GenericModel。我使用相同的代码片段,在autodesk网站上的帮助下,它在原始状态下工作正常(catogary是墙)但是当我将其更改为GenericModel时,我收到以下错误: “给定规则之一是指不适用于此过滤器类别的参数。” 我怀疑typeOf(FamilyInstance)有问题。 Autodesk网站上的原始代码为:

http://help.autodesk.com/view/RVT/2014/ENU/?guid=GUID-B6FB80F2-7A17-4242-9E95-D6056090E85B

这是我的代码

Transaction trans = new Transaction(doc);
         trans.Start("Hide_or_Unhide");
        //
        List<ElementId> categories = new List<ElementId>();
        categories.Add(new ElementId(BuiltInCategory.OST_GenericModel));
        ParameterFilterElement parameterFilterElement = ParameterFilterElement.Create(doc, "elementNo = 102", categories);
        FilteredElementCollector parameterCollector = new FilteredElementCollector(doc);
        Parameter parameter = parameterCollector.OfClass(typeof(FamilyInstance)).FirstElement().get_Parameter("elementNo");
        List<FilterRule> filterRules = new List<FilterRule>();
        filterRules.Add(ParameterFilterRuleFactory.CreateEqualsRule(parameter.Id, 102));   
        try
        {
            parameterFilterElement.SetRules(filterRules);
        }
        catch (Exception ex)
        {
            TaskDialog.Show("", ex.Message);
        }
        OverrideGraphicSettings filterSettings = new OverrideGraphicSettings();
        // outline walls in red            
        filterSettings.SetProjectionLineColor(new Autodesk.Revit.DB.Color(255, 0, 0));
        Autodesk.Revit.DB.View curView = doc.ActiveView;
        curView.SetFilterOverrides(parameterFilterElement.Id, filterSettings);
        trans.Commit();

1 个答案:

答案 0 :(得分:1)

我认为问题在于执行FilteredElementCollector的代码不够具体。在ADN示例中,他们过滤了一种类型的“Wall” - 但是您正在过滤一种FamilyInstance。你的类型是正确的,但FamilyInstance涵盖了很多类别。 FirstElement()在收集器中提供第一个FamilyInstance(可能不是通用模型)。

试试这一行: 参数parameter = parameterCollector.OfClass(typeof(FamilyInstance))。OfCategory(BuiltInCategory.OST_GenericModel).FirstElement()。get_Parameter(“elementNo”);

这样,你应该得到第一个既是家庭实例又是GenericModel的元素。

祝你好运, 马特