Найти фильтр вида Revit Api

Я пытаюсь использовать фильтр, чтобы показать / скрыть определенный элемент в представлении. Семейство из категории GenericModel. Я использую тот же фрагмент кода, который в справке на сайте Autodesk отлично работает в исходном состоянии (категория - стены), но когда я изменил его на 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();

person user3968554    schedule 04.02.2015    source источник


Ответы (1)


Я думаю, проблема в том, что ваш код, выполняющий FilteredElementCollector, недостаточно конкретен. В примере ADN они фильтруют по типу «Стена», но вы фильтруете по типу FamilyInstance. Вы правы в отношении типа, но FamilyInstance охватывает множество категорий. FirstElement () предоставляет первый экземпляр FamilyInstance в сборщике (который, вероятно, не является универсальной моделью).

Попробуйте эту строку: Parameter parameter = parameterCollector.OfClass (typeof (FamilyInstance)). OfCategory (BuiltInCategory.OST_GenericModel) .FirstElement (). Get_Parameter ("elementNo");

Таким образом, вы должны получить первый элемент, который одновременно является экземпляром семейства и GenericModel.

Удачи, Мэтт

person Matt    schedule 05.02.2015
comment
Большое тебе спасибо. Я попробовал ваше предложение (я меняю только BuiltInParameter на BuiltInCatogary), и он отлично работал с параметром комментариев, но не с любым другим параметром. У меня ошибка. Значение не может быть пустым. Я замечаю, что параметр «Комментарий» присутствует в проекте, но не отображается, когда я редактирую свойства семейства, кроме экземпляра или типа. Есть идеи по этому поводу? - person user3968554; 05.02.2015
comment
Параметр Комментарии является встроенным параметром для всех экземпляров / категорий на уровне проекта. Как вы определяете свой параметр elementNo? - person Matt; 05.02.2015
comment
instance paramater identity Целое число данных. Я пробовал с другими параметрами всех типов, но это то же самое - person user3968554; 05.02.2015