ADN Open CIS
Сообщество программистов Autodesk в СНГ

22/08/2013

API для работы с фильтрами переопределения видимости/графики

Возможность иметь программный доступ к управлению фильтрами переопределения видимости/графики было одним из самых долгожданных пожеланий многих разработчиков. И эта возможность полностью реализована в Revit API 2014.

 

 

Для управления фильтрами в API появились следующие методы:

  • View.AddFilter()
  • View.SetFilterVisibility()
  • View.SetFilterOverrides()

Ниже мы рассмотрим несколько вопросов от разработчиков, для решения которых необходимо использовать новые функций.

Вопрос 1: Мы хотим программно делать то, что мы можем на вкладке Фильтры в диалоге Переопределения видимости/графики.

С помощью фильтров можно, например, установить синий цвет для всех элементов, у которых значение определенного общего параметра находится в заданном диапазоне. Другие элементы можно отобразить красным. Все фильтры, включая цвет и штриховку поверхностей уже есть в API.

Мы также хотим скрыть определенный элемент на виде. Это можно сделать с помощью фильтра переопределения видимости/графики. Сейчас мы используем свойства View.ProjColorOverrideByElement и View.ProjLineWeightOverrideByElement для изменения цвета элементов, но скрыть элементы мы не можем.

В примере из SDK описывается, как достичь того, чего мы хотим, за исключением последнего шага – как применить созданный фильтр к виду. В Revit 2013 и более ранних версиях единственным способом применить созданный фильтр вручную в диалоге Переопределения видимости/графики на вкладке фильтры.

Вопрос 2: Benson оставил следующий комментарий к моей статье Видимость элементов, где он спрашивает:

Я могу выбрать элемент и в контекстном меню по правой кнопке мыши выбрать Скрыть на виде -> По фильтру…  и добавить фильтр для скрытия выбранного элемента. Метод IsHiddenElementOrCategory все равно вернет True для этого элемента. Т.е. фильтр для скрытия элемента игнорируется.

Я хочу получить все элементы, которые скрыты по условиям фильтра. На первый взгляд классы ParameterFilterElement и FilterRule должны быть полезны в этом случае. Метод FilterRule.ElementPasses можно использовать для определения попадает ли элемент в фильтр, но нельзя определить применен ли этот фильтр к конкретному виду или нет.

Так можно ли определить установлена ли видимость фильтра для конкретного вида?

 

Я нашел как перечислить все фильтры, но все еще не могу понять, как определить установлена ли галочка Видимость для фильтра или нет.

Вопрос 3: Я бы хотел экспортировать только видимые объекты. Метод Element.IsHidden возвращает верное значение, только если элемент был скрыт с помощью меню Скрыть на виде -> Элемент (Категорию), но игнорирует скрытие элемента с помощью фильтра.

Как можно точно определить, что пользователь действительно видит на виде? Наши клиенты очень ждут такую возможность для экспорта.

Вопрос 4: Мне нужно программно  определить цвет и тип линий. В интерфейсе Revit это можно увидеть в диалоге Переопределения видимости/графики на вкладке Фильтры.

Вопрос 5: Мне нужно программно получить список фильтров в диалоге Переопределения видимости/графики.

Ответ: Класс ParameterFilterElement и связанные с ним классы были обновлены и теперь похожи на классы ElementFilter, которые используются для поиска элементов я для DMU.

Первоначально не было прямого способа как привязать фильтр к виду. Параметры SCHEDULE_FILTER_PARAM и VIS_GRAPHICS_FILTERS возможно используются для этих целей, но нельзя было изменить или прочитать значение этих параметров.

Этот недостаток был устранен в Revit API 2014 и в документации это выделено в разделе Что нового:

Фильтры Переопределения видимости/графики

Новые методы класса View позволяют получить, добавить, применить и удалить фильтры. Фильтры могут быть созданы с помощью метода Create класса ParameterFilterElement, который был и предыдущих версиях API.

Как я уже говорил, новые методы, которые предоставляют доступ к новым функциям это:

  • View.AddFilter()
  • View.SetFilterVisibility()
  • View.SetFilterOverrides()

Источник: http://thebuildingcoder.typepad.com/blog/2013/08/view-filter-api.html

 

Обсуждение: http://adn-cis.org/forum/index.php?topic=185

Опубликовано 22.08.2013
Отредактировано 22.08.2013 в 11:30:34