2015-02-04 53 views
0

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

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

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

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

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

好运, 马特

+0

非常感谢。我尝试了你的sugesstion(我只将BuiltInParameter更改为BuiltInCatogary)并且它与Comments参数一起工作正常,但没有任何其他参数。我得到错误“值不能为空”。我注意到注释参数在项目中,但在编辑家庭属性niether实例或类型时没有看到。有关于此的任何想法? – user3968554

+0

Comments参数是项目级别上所有实例/类别的内置参数。你如何定义你的elementNo参数? – Matt

+0

实例参数标识数据整数。我尝试过所有类型的其他参数,但它是一样的 – user3968554