Данная статья является продолжением этой:
Пишем первый скрипт.
Раз уж есть кнопка, предлагаю познакомиться немного с апи и напиcать какую-то базовую штуку, но только не “привет мир”.
Пусть кнопка закрепляет все наши оси в проекте.
Для этого откроем файл script.py. В качестве редактора я буду использовать VSCode.
Для того чтобы быстро открыть скрипт какой-либо кнопки, необходимо активировать ее левой кнопкой мыши зажав ALT
ALT + Click - открывает папку с скриптом
Пройдем по строкам:
1 - Задаем кодировку для отображения и использования русских символов: Указание кодировки UTF-8, позволяет корректно отображать и использовать русские символы.
3-5 - Заголовок, автор и описание скрипта:
- __title__: Устанавливает заголовок скрипта.
- __author__: Указывает автора скрипта.
- __doc__: Предоставляет описание скрипта.
Это методанные для кнопки. Их можно определять в качестве глобальных переменных в самом коде или в специальном файле bundle.yaml. О методанных говорим здесь:
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’у и активируем кнопку. Появится окно:
Итересной особенностью работы является то, что после изменения скриптов нет необходимости перезагружать панель.
Внесли изменения - сохранили скрипт - нажали на кнопку и будет исполняться актуальынй код.
Но вот чтобы отобразить новые кнопки или изменения в оформление(строчки 1-4 ) необходимо произвести перезагрузку панелей пая.
Для этого на вкладке pyRevit есть кнопка “Обновить”.
Нажимаем “Да” и ждем обновления панелей
Теперь мы видим, что имя кнопки сменилось на то, которое мы указали внутри самого скрипта и добавилось описание.
Ведь код представлен тут.
О том какие еще бывают кнопки написал тут
Заключение
Спасибо за внимание.
Подписывайтесь пожалуйста на этот дзен и тг: