Найти тему

Revit API. Переключение осей из 2D в 3D и обратно.

Оглавление

Всем привет. Сегодня рассмотрим довольно простую задачу, которая часто приводит к проблемам у начинающих проектировщиков в Revit.

Проблема такая: мы оформили некий план, и переходим на план другого этажа. На нём поменялась конфигурация здания, поэтому мы подвинули оси. Но мы не учли, что мы подвинули оси в режиме 3D, и поэтому оси на первом плане поехали.

На следующий раз, мы, наученные неприятным опытом, сидим и старательно на каждом плане перещёлкиваем оси из режима 3D в 2D, и у нас ничего не едет. Работает? Работает. Удобно? Конечно нет.

Стандартное решение

Вообще, эту проблему легко решить встроенными средствами Revit. Просто применить границу к виду, и сделайте так, чтобы кружки осей торчали за эту самую границу. Все выходящие за границу оси перейдут в режим 2D. Поскольку границу мы можем нарисовать любой формы, то в общем-то, это всё: проблема решена:

Решение через программирование

Проблема решена, конец. Всем спасибо за внимание! Шучу, разумеется.

Решение в данном случае простое, но, возможно, не совсем очевидное. Ось относится к классу Grid, а у него нет методов, которые позволяют переключать режим кружков оси.

Вспомним мою статью про наследование и посмотрим, что у Grid есть базовый класс DatumPlane:

-2

И вот у него уже есть множество методов, которые позволяют модифицировать оси. Нам нужен SetDatumExtenetType. Собственно, используя его, выполним следующее: переключим все 2D-концы в 3D, а 3D в 2D на активном виде.

Для этого вспомним:

Код в виду его краткости и простоты я напишу в макросе. Как подключить себе макрос — читайте здесь.

А если захотите подключить данный функционал в виде плагина Revit — то вам сюда.

Код в общем получился простой, но довольно длинный:

-3

Чтобы было удобнее читать, я выложил его на Github Gist по ссылке.

Итак, что тут происходит:

  1. Собрали все оси с вида.
  2. Открыли транзакцию
  3. Запустили цикл по всем осям
  4. В котором проверили первый и второй конец оси. Если он в 3D, то переключили его в 2D, и наоборот
  5. Закрыли транзакцию.

В общем-то, и всё. Вы можете воспроизвести всё это у себя, создав аналогичный макрос (дублирую ссылку).

Подписывайтесь на мой телеграм-канал и до новых встреч на страницах блога!

-4