【问题标题】:Why this code from Autodesk help doesn't work?为什么 Autodesk 帮助中的这段代码不起作用?
【发布时间】:2017-10-07 12:53:59
【问题描述】:

我正在尝试运行 Autodesk 帮助中的代码

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

private void CreateViewFilter(Autodesk.Revit.DB.Document doc, View view) 
{
     List<ElementId> categories = new List<ElementId>();
     categories.Add(new ElementId(BuiltInCategory.OST_Walls));
     ParameterFilterElement parameterFilterElement =
       ParameterFilterElement.Create(doc, "Comments = foo", categories);

     FilteredElementCollector parameterCollector = new FilteredElementCollector(doc);
     Parameter parameter = parameterCollector.OfClass(typeof(Wall)).FirstElement().get_Parameter("Comments");

     List<FilterRule> filterRules = new List<FilterRule>();
     filterRules.Add(ParameterFilterRuleFactory.CreateEqualsRule(parameter.Id, "foo", true));
     parameterFilterElement.SetRules(filterRules);

     OverrideGraphicSettings filterSettings = new OverrideGraphicSettings();
     // outline walls in red            
     filterSettings.SetProjectionLineColor(new Color(255, 0, 0));
     view.SetFilterOverrides(parameterFilterElement.Id, filterSettings);
}

当我打开一个视图并多次运行代码时,我收到以下错误

Revit 遇到参数异常。 name 的给定值已用作过滤器元素名称参数名称:ParameterFilterElement 处的名称 parameterFilterElement = ParameterFilterElement.Create(doc, "Comments= foo", categories)。我看不到代码中发生这种情况的地方。(OBS我将上面原始代码中的get_parameter更改为lookupparameter,因为第一个已弃用)

【问题讨论】:

  • 哪一行抛出异常?

标签: c# api revit


【解决方案1】:

根据docsCreate方法的第二个参数是name。错误消息表明您已经在使用名称“Comments = Foo”。所以我认为最好的办法是动态生成名称或为用户提供一种指定名称的方式。

【讨论】:

    【解决方案2】:

    经过一番思考,我明白了。其实我应该从一开始就这样做。无论如何,prgram 创建过滤器现在在视图中,所以当我再次运行命令时已经有一个。谢谢。

    【讨论】:

      猜你喜欢
      • 2010-09-18
      相关资源
      最近更新 更多