0

ビューで特定の要素を表示/非表示にするフィルターを使用しようとしています。このファミリは、カテゴリ GenericModel からのものです。オートデスク サイトのヘルプで、元の状態 (カテゴリは壁) で問題なく動作する同じコード スニペットを使用しますが、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();
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 に答える