Перейти к основному контенту

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

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

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

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


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


Напишем первые строчки - метаданные.

image.png

Пройдем по ним

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

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

  • __title__: Устанавливает заголовок скрипта.

  • __author__: Указывает автора скрипта.

  • __doc__: Предоставляет описание скрипта.


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


 

image.png

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’у и активируем кнопку. Появится окно:

-17

 

Как видно мы внесли изменения в файл скрипта и он отработал согласно последним изменениям в нем.


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


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

image.png

image.png

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

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

image.png

Наша первая полностью функционирующая кнопка готова.

Код тут:  gist.github