为什么Autodesk提供的此代码无法正常工作?

时间:2017-10-07 12:53:59

标签: c# api revit

我正在尝试从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遇到了一个argumentException。 name的给定值已被用作过滤器元素名称parmeter名称:ParameterFilterElement上的name parameterFilterElement = ParameterFilterElement.Create(doc,&#34; Comments = foo&#34;,categories)。我无法在代码中看到这发生的位置。(OBS我在上面的原始代码中将get_parameter更改为lookupparameter,因为第一个被弃用)

2 个答案:

答案 0 :(得分:0)

根据source codeCreate方法的第二个参数是name。错误消息指出您已使用名称&#34;评论= Foo&#34;。所以我认为最好的办法是动态生成名称或为用户提供指定名称的方法。

答案 1 :(得分:0)

经过一番思考后我就明白了。实际上我应该从鞭打中做到这一点。无论如何prgram创建过滤器,它现在在视图中,所以当我再次运行命令时,已经有一个。谢谢。