【问题标题】:Find a view filter Revit Api查找视图过滤器 Revit Api
【发布时间】:2015-04-04 16:33:12
【问题描述】:

我正在尝试使用过滤器来显示/隐藏视图上的某个元素。该系列来自分类GenericModel。我使用与 Autodesk 站点帮助中相同的代码 sn-p,它在原始状态下工作正常(分类是墙壁),但是当我将其更改为 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();

【问题讨论】:

    标签: c# revit revit-api


    【解决方案1】:

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

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

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

    祝你好运, 马特

    【讨论】:

    • 非常感谢。我尝试了您的建议(我只将 BuiltInParameter 更改为 BuiltInCatogary),它适用于 Comments 参数,但不适用于任何其他参数。我收到错误“值不能为空”。我注意到项目中有 Comment 参数,但在我编辑系列属性实例或类型时没有看到。有什么想法吗?
    • 注释参数是项目级别所有实例/类别的内置参数。你是如何定义你的 elementNo 参数的?
    • 实例参数标识数据整数。我尝试了所有类型的其他参数,但它是相同的
    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2017-01-14
    • 2017-06-23
    相关资源
    最近更新 更多