Всем привет. Сегодня рассмотрим довольно простую задачу, которая часто приводит к проблемам у начинающих проектировщиков в Revit.
Проблема такая: мы оформили некий план, и переходим на план другого этажа. На нём поменялась конфигурация здания, поэтому мы подвинули оси. Но мы не учли, что мы подвинули оси в режиме 3D, и поэтому оси на первом плане поехали.
На следующий раз, мы, наученные неприятным опытом, сидим и старательно на каждом плане перещёлкиваем оси из режима 3D в 2D, и у нас ничего не едет. Работает? Работает. Удобно? Конечно нет.
Стандартное решение
Вообще, эту проблему легко решить встроенными средствами Revit. Просто применить границу к виду, и сделайте так, чтобы кружки осей торчали за эту самую границу. Все выходящие за границу оси перейдут в режим 2D. Поскольку границу мы можем нарисовать любой формы, то в общем-то, это всё: проблема решена:
Решение через программирование
Проблема решена, конец. Всем спасибо за внимание! Шучу, разумеется.
Решение в данном случае простое, но, возможно, не совсем очевидное. Ось относится к классу Grid, а у него нет методов, которые позволяют переключать режим кружков оси.
Вспомним мою статью про наследование и посмотрим, что у Grid есть базовый класс DatumPlane:
И вот у него уже есть множество методов, которые позволяют модифицировать оси. Нам нужен SetDatumExtenetType. Собственно, используя его, выполним следующее: переключим все 2D-концы в 3D, а 3D в 2D на активном виде.
Для этого вспомним:
Код в виду его краткости и простоты я напишу в макросе. Как подключить себе макрос — читайте здесь.
А если захотите подключить данный функционал в виде плагина Revit — то вам сюда.
Код в общем получился простой, но довольно длинный:
Чтобы было удобнее читать, я выложил его на Github Gist по ссылке.
Итак, что тут происходит:
- Собрали все оси с вида.
- Открыли транзакцию
- Запустили цикл по всем осям
- В котором проверили первый и второй конец оси. Если он в 3D, то переключили его в 2D, и наоборот
- Закрыли транзакцию.
В общем-то, и всё. Вы можете воспроизвести всё это у себя, создав аналогичный макрос (дублирую ссылку).
Подписывайтесь на мой телеграм-канал и до новых встреч на страницах блога!