Найти тему

pyRevit. Пишем первый скрипт

Оглавление

Данная статья является продолжением этой:

Пишем первый скрипт.

Раз уж есть кнопка, предлагаю познакомиться немного с апи и напиcать какую-то базовую штуку, но только не “привет мир”.

Пусть кнопка закрепляет все наши оси в проекте.

Для этого откроем файл script.py. В качестве редактора я буду использовать VSCode.

Для того чтобы быстро открыть скрипт какой-либо кнопки, необходимо активировать ее левой кнопкой мыши зажав ALT
ALT + Click - открывает папку с скриптом
-2

Пройдем по строкам:

1 - Задаем кодировку для отображения и использования русских символов: Указание кодировки UTF-8, позволяет корректно отображать и использовать русские символы.

3-5 - Заголовок, автор и описание скрипта:

  • __title__: Устанавливает заголовок скрипта.
  • __author__: Указывает автора скрипта.
  • __doc__: Предоставляет описание скрипта.

Это методанные для кнопки. Их можно определять в качестве глобальных переменных в самом коде или в специальном файле bundle.yaml. О методанных говорим здесь:

-3

7 - Импортируем библиотеку Autodesk Revit API: Импортируем пространство имен DB из библиотеки Autodesk Revit, которое содержит классы и методы для работы с элементами Revit.

9 - Получаем активный документ Revit: doc хранит ссылку на текущий активный документ Revit, который используется для выполнения операций с элементами модели.

11-13 - Определяем функцию pin для закрепления элемента: Функция которая будет закреплять элемент и выводить информацию об этом через print

15-18 - Создаем коллекцию всех осей в документе:

DB.FilteredElementCollector(doc): Создает коллекцию для фильтрации элементов в документе doc.

  • .OfCategory(DB.BuiltInCategory.OST_Grids): Фильтрует коллекцию по категории "Оси" (Grids).
  • .WhereElementIsNotElementType(): Исключает из коллекции типы элементов, оставляя только экземпляры.
  • .ToElements(): Преобразует отфильтрованную коллекцию в список элементов.

20-25 - Открываем транзакцию для выполнения изменений в документе:

  • with DB.Transaction(doc, "Автозакрепление") as t: Создает транзакцию с именем "Автозакрепление" и открывает ее в контексте with.
  • t.Start(): Запускает транзакцию.
  • if grids: Проверяет, если список осей не пустой.
  • for grid in grids: Перебирает каждую ось в списке grids.
  • pin(grid, 1): Вызывает функцию pin для закрепления текущей оси grid (устанавливает статус в 1, что означает "закреплено").
  • t.Commit(): Фиксирует изменения в документе, завершает транзакцию.

Сохраняем скрипт, возвращаемся к Revit’у и активируем кнопку. Появится окно:

-4

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

Внесли изменения - сохранили скрипт - нажали на кнопку и будет исполняться актуальынй код.

Но вот чтобы отобразить новые кнопки или изменения в оформление(строчки 1-4 ) необходимо произвести перезагрузку панелей пая.

Для этого на вкладке pyRevit есть кнопка “Обновить”.

-5
-6

Нажимаем “Да” и ждем обновления панелей

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

-7

Ведь код представлен тут.

Revit. Pinned all grids

О том какие еще бывают кнопки написал тут

Заключение

Спасибо за внимание.

Подписывайтесь пожалуйста на этот дзен и тг:

pyRevit | BIM. Илья Нистратов