Об использовании FilterCategoryRule
Вопрос: у меня есть 3 вопроса относительно использования класса FilterCategoryRule
1) Как он соотносится с пользовательским интерфейсом Revit?
2) Если он представляет собой фильтр по категориям, как он соотносится с перечнем категорий, передаваемых в метод ParameterFilterElement.Create?
3) Как мне создать фильтр с этим правилом? Я пробовал в 2017 и 2018 версиях Revit и получал ошибку "An internal error has occurred". В справке сказано, что FilterCategoryRule это правило фильтра, по которому отбираются элементы заданного множества категорий.
Ответ: Класс FilterCategoryRule может быть использован в описании ParameterFilterElement. Он представляет собой правило, которому соответствуют элементы из множества категорий. Метод ParameterFilterElement.AllCategoriesFilterable() был заменен на FilterCategoryRule.AllCategoriesFilterable().
Ответы команды разработчиков:
1) Как он соотносится с пользовательским интерфейсом Revit?
Прямой связи между UI нет, этот FilterRule используется только в API
2) Если он представляет собой фильтр по категориям, как он соотносится с перечнем категорий, передаваемых в метод ParameterFilterElement.Create?
Такая связь также отсутствует
3) Как мне создать фильтр с этим правилом?
Создать ParameterFilterElement, основанный на FilterCategoryRule нельзя, но можно создать ElementParameterFilter, передав FilterCategoryRule в конструктор
Вот пример кода:
- // Найти все стены и окна в документе
- IList<ElementId> cats = new List<ElementId>();
- cats.Add(new ElementId(BuiltInCategory.OST_Walls));
- cats.Add(new ElementId(BuiltInCategory.OST_Windows));
- FilterCategoryRule r = new FilterCategoryRule(cats);
- ElementParameterFilter f = new ElementParameterFilter(r, true);
- FilteredElementCollector wallsAndWindows = new FilteredElementCollector(doc).WherePasses(f);
Справка по Revit API не совсем верная, особенно предложение "The new class FilterCategoryRule can be used in the definition of a ParameterFilterElement" (Новый класс FilterCategoryRule может быть использован в определении ParameterFilterElement). Потенциально метод ParameterFilterElement.Create может принимать параметром объект FilterCategoryRule вместо множества Id категорий, но такой метод так и не был добавлен. Мы поставили задачу команде разработки исправить справку или добавить метод. Ну и в дополнении в Revit API несколько неоднозначно названы классы ParameterFilterElement and ElementParameterFilter :-~
Как заметил Benoit FilterCategoryRule можно заменить Extension-методом ElementCategoryFilter с помощью методов OfCategory и OfCategoryId.
Я считаю, что FilterCategoryRule полностью эквивалентно логическому "или" нескольких ElementCategoryFilter, которые я использовал в следующих примерах:
Примечание переводчика: я считаю, что в таких случаях разумнее использовать ElementMulticategoryFilter
Источник: http://thebuildingcoder.typepad.com/blog/2018/05/how-to-use-filtercategoryrule.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 31.07.2018