1. Старт

Статьи посвещенные быстрому старту работы с pyRevit

1.1. Давайте знакомиться, pyRevit

asd.webp

1.1.1. Введение

В мире архитектурного и инженерного проектирования программное обеспечение Autodesk Revit занимает особое место. Однако, несмотря на его мощь и возможности, у многих пользователей возникает желание расширить функционал программы, сделать ее более гибкой и адаптированной под свои задачи. Здесь на помощь приходит pyRevit — инструмент, который способен существенно повысить эффективность работы в Revit.

1.1.2. Что такое pyRevit?

pyRevit — это бесплатный и открытый фреймворк, разработанный для расширения возможностей Autodesk Revit с помощью языка программирования Python. Он позволяет создавать пользовательские скрипты, инструменты и даже целые панели инструментов, интегрированные непосредственно в интерфейс Revit.

image.png

Основная идея pyRevit заключается в том, чтобы предоставить пользователям простой и доступный способ автоматизировать рутинные задачи, создавать собственные инструменты и делиться ими с сообществом. Благодаря использованию Python, одного из самых популярных и простых в освоении языков программирования, pyRevit открывает двери в мир кастомизации Revit даже для тех, кто не является профессиональным программистом.

image.png

1.1.3. Встроенные кнопки и инструменты pyRevit

После установки pyRevit в Revit появляется новая вкладка с множеством полезных инструментов. Эти инструменты разработаны для решения различных задач, с которыми сталкиваются пользователи в повседневной работе:

Эти инструменты созданы сообществом и постоянно обновляются, что позволяет решать самые актуальные задачи и быть в курсе последних тенденций в отрасли.

1.1.4. Создание собственных инструментов

Одним из главных преимуществ pyRevit является возможность создавать собственные скрипты и инструменты. Это открывает безграничные возможности для персонализации Revit под конкретные потребности:

Создание собственных инструментов на Python не только повышает эффективность работы, но и способствует профессиональному росту, открывая новые горизонты в программировании и автоматизации.

image.png

1.1.5. Преимущества pyRevit по сравнению с RPS, Dynamo и C#

image.png

Многие могут задаться вопросом: "Зачем использовать pyRevit, если есть другие инструменты для расширения Revit, такие как RevitPythonShell (RPS), Dynamo или возможности программирования на C#?"

Вот несколько причин, почему pyRevit выделяется на их фоне:

1.1.6. Заключение

pyRevit — это мощный инструмент, который может значительно повысить эффективность вашей работы в Autodesk Revit. Он объединяет в себе простоту использования, гибкость и широкие возможности для кастомизации.

Если вы ищете способ упростить рутинные задачи, добавить новые функции в Revit или просто хотите расширить свои навыки и возможности, pyRevit — это то, что вам нужно.

В следующих статьях мы более подробно рассмотрим, как установить pyRevit, как пользоваться встроенными инструментами и как начать создавать собственные скрипты. Присоединяйтесь к нам в этом увлекательном путешествии и откройте для себя новые возможности в мире BIM-проектирования с pyRevit!

1.2. Установка


205ОБЩ.png


"...самый лучший плагин" - это не только кликабельный заголовок, но и моё официальное заявление.
Причины описаны ТУТ


1.2.1. Установка

Переходим на github: https://github.com/pyrevitlabs/pyRevit/releases

Выбираем версию для установки:

image.png

Зачем их 2?

На случай если у вас нет прав администратора на компьютере.

Далее:

Вот собственно и все.
Теперь у вас есть самый крутой плагин. Я же говорил, что будет быстро.

1.2.2. Расширения

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


Их я условно разделю на "Одобренные" и "Прочие", отличаются они лишь способ установки.


Кстати, если прям не терпится написать свое вот статья.

1.2.2.1. Одобренные

Переходим на вкладку pyRevit и ищем вот эту стрелку:

image.png

Далее "Расширения":

image.png

Откроется меню, где представлены одобренные самим pyRevit расширения:

image.png

Любой из них можно выбрать и установить.

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

Для того чтобы попасть в список этих расширений необходимо следовать этой инструкции.

1.2.2.2. Прочие

Вот эти расширения надо поискать самостоятельно, но ниже в главе "Ресурсы" я закину пару расширений, которые смог найти.

Теперь представим, что вы скачали чьё-то расширение или сделали его сами, и у вас будет папка с окончанием .extension в имени.

image.png

Надо указать паю путь до нее. Для этого переходим в "Настройки":

image.png

Откроет такое окно:

image.png

  • Выбираем "Добавить папку"
  • Указываем папку В КОТОРОЙ находится папка с расширением .extension
  • Нажимаем "Сохранить и перезапустить"

После перезагрузки новые расширения отобразятся в Ревит.

И да, теперь любую из кнопок (при условие что она была написана на python) можно открыть и посмотреть ее исходный код. Для этого зажмите Alt + ЛКМ по кнопке - откроется папка с исполняющим файлом.

image.png

1.2.3. Ресурсы

1.3. Первая кнопка

image.png

Сегодня мы с вами создадим свою вкладку, свою панель и свою кнопку в пару кликов.
Все это благодаря pyRevit (дальше "пай").

1.3.1. В начале была папка.

Добавить пользовательское расширение в пай легко.
Нужно лишь создать правильную структуру папок остальное на себя возьмет сам плагин.

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


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


Для статьи я выберу папку просто на рабочем столе: 
C:\Users\chttm\OneDrive\Рабочий стол\TEST\

Открываем папку TEST идем по пунктам:

1.3.2. ".extension"

Нам нужна папка с окончанием .extension.

Это сообщит pyRevit, что у нас внутри есть структура папок расширений.

Создаем папку с именем "МоеРасширение.extension".


💡.extension - специальное окончание в имени папки, так пай будет понимать, что это расширение.
💡МоеРасширение - произвольное имя, оно не будет фигурировать в самом ревите.


1.3.3. ".tab"

Внутри МоеРасширение.extension создадим папку "МояВкладка.tab".


💡.tab - специальное окончание, которое укажет паю, что эту папку надо рассматривать как вкладу ревита
💡“МояВкладка” - имя вкладки. Оно отобразится в ревите.


Это в Revit называется "Вкладки".

Это вкладки

1.3.4 ".panel"

Перейдем в “МояВкладка.tab” и создадим папку МояПанель1.panel


💡.panel - специальное окончание, которое укажет паю, что содержимое этой папки надо поместить на отдельную панель.
💡МояПанель1 - имя панели.


Это "Панели".

image.png

1.3.5. ".pushbutton"

Наконец, нам нужно создать кнопки.

Перейдем в папку МояПанель1.panel и создадим папку "МояПростоКнопка.pushbutton".


💡.pushbutton - специальное окончание, которое укажет паю, что эта папка должна стать кнопкой.
💡"МояПростоКнопка" - имя кнопки, если нет иного указания имени.


Это "Кнопки".


image.png

Внутри этой папки должны находится:


💡Мы можем называть наши скрипты как угодно, лишь бы в конце стоял script.py.
💡Например: Supernatural_script.py


 


💡Не обязательный файл.
💡Максимальный размер 96x96 пикселей.

 


 


💡Не обязательный файл.
💡Удобный способ задать имя, контекст, описание, автора и многое другое для кнопки.

 


image.png

У нас получится такая структуру папок:

- МоеРасширение.extension

- - МояВкладка.tab

- - - МояПанель1.panel

- - - - МояПростоКнопка.pushbutton

- - - - - script.py

- - - - - icon.png

image.png

Поздравляю вас, первая кнопка создана.

Теперь подключим наше расширение к Revit.

1.4. Подключение своего расширения

В этом нам поможет классическая вкладка pyRevit, которая появляется сразу после его установки.

image.png

Переходим по пути: pyRevit - Настройки - Каталоги пользовательских расширений

image.png

image.png

image.png

Нажимаем “Добавить папку” и указываем папку TEST - то есть, ту папку, в которой находится папка с окончанием .extension

Еще раз - не саму папку с расширением .extension, а директорию в которой она находится.

image.png

И нажимаем “Выбор папки” и применяем настройки нажав “Сохранить и перезапустить

image.png

После перезагрузки появляется новая вкладка “МояВкладка

image.png

Откроем ее и увидим нашу первую кнопку.

image.png

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

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

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

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


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


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

image.png

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

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

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


Это метаданные для кнопки. Их можно определять в качестве глобальных переменных в самом коде или в специальном файле 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.

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

-17

 

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


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


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

image.png

image.png

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

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

image.png

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

Код тут:  gist.github

1.6. Типы кнопок

image.png

В предыдущей статье мы разбирали как создать кнопку типа .pushbutton, но на этом функционал Revit и pyRevit не заканчивается.

Давайте посмотрим, что они еще могут.

1.6.1. Выпадающий список и стак (.pulldown и .stack)

Стак выглядит так:

image.png

Выпадающий список выглядит так:

image.png

Для этого в папке “МояВкладка.tab” создадим папку "МояПанель2.panel"

image.png

В нее поместим папку с именем "Стак1.stack"

image.png

А в нее поместим “Стаковая кнопка 1.pulldown

image.png

Внутри папки .pulldown расположим 3 папки с расширением .pushbutton (в .pushbutton закидываем script.py и icon.png )

image.png

После чего скопируем .pulldown 2 раза поменяв названия.

image.png

Должна получится такая структура:

- МояВкладка.tab

- МояПанель2.panel

- Стак1.stack

- Стаковая кнопка 1.pulldown

- Стаковая кнопка 2.pulldown

- Стаковая кнопка 3.pulldown

- Кнопка1.pushbutton

- script.py

- icon.png

- Кнопка2.pushbutton

- Кнопка3.pushbutton

- icon.png

Перезапускаем панель нажав “Обновить” и вауля:

image.png

Попробую еще раз но другими слова для закрепления.

 


Сначала мы создали .stack сказав паю что надо расплагать все что будет внутри друг под другом - типа таблицей. Максимальная высота стака - 3.

 

А "таблица" состоин из выпадающих списков, и что бы пай понял, что это "выпадающий" мы задаем в имени папки на конце .pulldown

В основном я пользуюсь только 3 типа кнопок:

и просто по разному комбинирую их.


1.6.2. А какие еще могут быть кнопки?

Вообще, вы могли заметить, что по сути тип кнопки не поменялся, как был pushbutton так и остался. Поменялась структура, в которой расположена кнопка. Но в пай действительно можно создать другой тип кнопки. Описывать подробно в рамках статей я не буду, но дам затравку:

подробнее тут