0

I am trying to use a filter to show/hide a certain element on the view. The family is from catogary GenericModel. I use the same code snippet that on the help on the autodesk site it works fine in its original state (catogary is walls) but when I changed it to GenericModel I got the following error: "One of the given rules refers to a parameter that does not apply to this filter's categories." I suspect that something wrong with the typeOf(FamilyInstance). The original code on Autodesk site is:

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

and here is my code

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();
4

1 回答 1

1

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

试试这一行: Parameter parameter = parameterCollector.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_GenericModel).FirstElement().get_Parameter("elementNo");

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

祝你好运,马特

于 2015-02-05T03:11:26.743 回答