Исходные файлы DynamoRevit также хранятся в репозитории DynamoDS Github, что позволяет разработчикам вносить свой вклад и создавать бета-версии. Процесс создания DynamoRevit на основе исходного кода в целом аналогичен процессу, используемому в Dynamo, за исключением нескольких важных деталей:
DynamoRevit ссылается на сборки Dynamo, поэтому их следует создавать с соответствующими пакетами NuGet. Например, DynamoRevit 2.x не загружается в Dynamo 1.3.
DynamoRevit относится к определенным версиям Revit, например ветвь DynamoRevit 2018 должна работать в Revit 2018.
В данном руководстве предполагается, что используются следующие версии:
Revit 2023.
Последняя версия DynamoRevit, созданная в ветви Revit2023
.
Последняя сборка Dynamo.
Для успешной сборки в этом руководстве мы клонируем репозитории Dynamo и DynamoRevit.
Примечание. Создавать Dynamo вручную до использования DynamoRevit требуется только при сборке Dynamo 1.x и DynamoRevit 1.x. Новые версии репозитория DynamoRevit используют диспетчер пакетов NuGet для загрузки необходимых зависимостей Dynamo. Хотя для сборки DynamoRevit 2.x не нужно извлекать Dynamo вручную, для запуска DynamoRevit addin
потребуются файлы Core dlls
, так что мы рекомендуем все равно загрузить и собрать Dynamo. См. подробности ниже: Создание репозитория с помощью Visual Studio
Код проекта DynamoRevit и исходный код основного Dynamo хранятся на Github в отдельных репозиториях. Этот репозиторий содержит исходные файлы для узлов Revit и надстройку Revit, с помощью которой выполняется загрузка Dynamo. Сборки DynamoRevit для различных версий Revit (например, 2016, 2017 или 2018) существуют в репозитории как ветви.
Исходный код DynamoRevit находится здесь: https://github.com/DynamoDS/DynamoRevit
Клонирование или скачивание репозитория.
Ветви DynamoRevit ссылаются на версии Revit.
Так же, как мы извлекали репозиторий Dynamo, мы используем команду git clone, чтобы клонировать DynamoRevit и указать ветвь, соответствующую версии Revit. Для начала откроем интерфейс командной строки и зададим в качестве текущего каталога папку, в которую будут скопированы файлы.
cd C:\Users\username\Documents\GitHub
заменяет текущий каталог
Замените
username
именем пользователя.
Теперь можно клонировать репозиторий в эту папку. Хотя нам нужно будет указать ветвь репозитория, мы можем переключиться на эту ветвь после клонирования.
git clone https://github.com/DynamoDS/DynamoRevit.git
клонирует репозиторий с удаленного URL и по умолчанию переключается на главную ветвь.
После клонирования репозитория измените текущий каталог на папку репозитория и перейдите в ветвь, соответствующую установленной версии Revit. В данном примере используется Revit RC2.13.1_Revit2023. Все удаленные ветви можно просмотреть на странице Github в раскрывающемся меню ветви.
cd C:\Users\username\Documents\GitHub\DynamoRevit
меняет каталог на DynamoRevit.
git checkout RC2.13.1_Revit2023
определяет в качестве текущей ветвь RC2.13.1_Revit2023
.
git branch
проверяет, на какой ветви мы находимся, и отображает другие локальные ветви.
Выгруженная в данный момент ветвь помечена звездочкой. Ветвь
Revit2018
отображается, так как уже была выгружена ранее, и поэтому присутствует на локальном компьютере.
Важно выбрать правильную ветвь репозитория, чтобы при сборке проекта в Visual Studio он ссылался на сборки верной версии каталога установки Revit, а именно RevitAPI.dll
и RevitAPIUI.dll
.
Перед созданием репозитория необходимо восстановить пакеты NuGet с файлом restorepackages.bat
в папке src
. В этом BAT-файле используется диспетчер пакетов nuget для извлечения встроенных двоичных файлов Dynamo Core, необходимых для работы DynamoRevit. Их также можно создать вручную, но только если изменения вносятся в DynamoRevit, а не в ядро Dynamo. Это позволяет быстрее начать работу. Убедитесь, что этот файл запущен от имени администратора.
Щелкните правой кнопкой мыши
restorepackages.bat
и выберитеRun as administrator
(запуск от имени администратора).
Если пакеты успешно восстановлены, в папку packages
будет добавлена папка src
с последними бета-версиями пакетов NuGet.
Последние бета-версии пакетов Dynamo NuGet
После восстановления пакетов откройте файл решения DynamoRevit.All.sln
Visual Studio в src
и выполните сборку. В сборке могут изначально возникнуть проблемы с поиском AssemblySharedInfo.cs
. Перезапустите сборку, чтобы устранить эту проблему.
Выберите
Build > Build Solution
(Сборка > Собрать решение).В окне вывода вы должны увидеть сообщение об успешной сборке. Например:
===== Build: 13 succeeded, 0 failed, 0 up-to-date, 0 skipped =====
.
Для распознавания DynamoRevit в Revit требуется файл надстройки, который автоматически создается программой установки. В процессе разработки нам необходимо вручную создать файл надстройки, указывающий на необходимую нам сборку DynamoRevit — DynamoRevitDS.dll
. Кроме того, DynamoRevit необходимо связать со сборкой Dynamo.
Создайте файл Dynamo.addin
в папке надстройки Revit, расположенной в папке C:\ProgramData\Autodesk\Revit\Addins\2023
. У нас уже установлена версия DynamoRevit, поэтому мы просто отредактируем существующий файл, чтобы указать на новую сборку.
Укажите путь к файлу DynamoRevitDS.dll
внутри <Assembly>...</Assembly>
.
Кроме того, можно использовать надстройку для загрузки селектора версий вместо определенной сборки.
Задайте путь к файлу <Assembly>...</Assembly>
: DynamoRevitVersionSelector.dll
<FullClassName>...</FullClassName>
определяет, какой класс будет создан из сборки. Мы указали его в пути к элементу сборки выше. Этот класс будет отправной точкой для нашей надстройки.
Кроме того, необходимо удалить существующее приложение Dynamo, входящее в комплект поставки Revit. Для этого перейдите в раздел C:\\Program Files\Autodesk\Revit 2023\AddIns
и удалите две папки, содержащие Dynamo: DynamoForRevit
и DynamoPlayerForRevit
. Их можно удалить или создать резервную копию в отдельной папке, если требуется восстановить исходное приложение Dynamo for Revit.
После этого необходимо добавить путь к файлу основных сборок Dynamo Dynamo.config
в папку DynamoRevit bin
. DynamoRevit загрузит их при открытии надстройки в Revit. Этот файл конфигурации позволяет указать надстройку DynamoRevit для различных версий Dynamo Core, чтобы разрабатывать и тестировать изменения в Core и DynamoRevit.
Код должен выглядеть так:
Добавьте путь к <add key/>
в папке bin
.
Перед созданием руководства мы клонировали Dynamo и произвели сборку, чтобы гарантировать корректную работу DynamoRevit. Путь к папке указывает на эту сборку.
Теперь при открытии Revit на вкладке «Управление» должна появиться надстройка Dynamo.
Выберите
Manage
(Управление).Щелкните значок надстройки Dynamo.
Экземпляр DynamoRevit.
Если отображается диалоговое окно с сообщением об ошибке, в котором показаны отсутствующие сборки, то, вероятно, обнаружено несоответствие между версиями Dynamo Core, созданными на основе этих сборок, и версиями, загружаемыми во время выполнения. Например, DynamoRevit с последними бета-версиями 2.0 пакетов Dynamo Core не будет работать при попытке запуска с помощью DLL-файлов Dynamo 1.3. Убедитесь, что версии репозиториев совпадают, а DynamoRevit извлекает корректную версию зависимостей nuget. Зависимости определены в файле package.json
репозитория DynamoRevit.
В предыдущем разделе, Сборка Dynamo на основе исходного кода, мы кратко описали отладку в Visual Studio и способ присоединения Visual Studio к процессу. На примере исключения в узле Wall.ByCurveAndHeight рассмотрим процедуру присоединения к процессу, задания точек прерывания, пошагового выполнения кода и использования стека вызовов для определения источника исключения. Эти средства отладки обычно применяются к рабочим процессам разработки .Net и описаны за рамками данного руководства.
Присоединение к процессу связывает выполняющееся приложение с Visual Studio для отладки. Если требуется отладить поведение в сборке DynamoRevit, можно открыть исходные файлы DynamoRevit в Visual Studio и присоединить процесс Revit.exe
, который является родительским процессом надстройки DynamoRevit. Visual Studio использует файл обозначений (.pbd
) для создания связи между выполняемыми сборками DynamoRevit и исходным кодом.
Точки прерывания устанавливают строки в исходном коде, перед выполнением которых приложение приостановит работу. Если узел приводит к аварийному завершению работы DynamoRevit или к непредвиденному результату, можно добавить точку прерывания в исходный код узла, чтобы приостановить процесс, выполнить код пошагово и проверить значения переменных в реальном времени, пока не будет найден источник проблемы
При пошаговом выполнении код выполняется построчно. Можно выполнять функции по одной, отлаживать вызов функции и выходить из выполняемой в текущий момент функции.
Стек вызовов показывает функцию, которая в текущий момент выполняется процессом, относительно предыдущих вызовов функции, которые спровоцировали данный вызов функции. В Visual Studio есть окно для отображения стека вызовов. Например, если мы получим исключение за пределами исходного кода, мы увидим путь к коду вызова в стеке вызовов.
В материалах 2000 вещей, которые необходимо знать о C# содержится более подробное описание стеков вызовов
Узел Wall.ByCurveAndHeight создает исключение, если в качестве входного значения кривой для него задана кривая PolyCurve с сообщением To BSPlineCurve Not Implemented. С помощью отладки мы можем выяснить точную причину, по которой узел не принимает выбранный тип геометрии в качестве входных данных параметра кривой. В следующем примере предполагается, что DynamoRevit успешно собран и может быть запущен как надстройка для Revit.
Узел Wall.ByCurveAndHeight вызвал исключение
Для начала откройте файл решения DynamoRevit.All.sln
, запустите Revit, а затем надстройку DynamoRevit. Затем присоедините Visual Studio к процессу Revit с помощью окна Attach to Process
(Присоединить к процессу).
Чтобы показать доступные процессы, необходимо запустить Revit и DynamoRevit
Откройте окно
Attach to Process
(Присоединить к процессу), выбравDebug > Attach to Process...
(Отладка > Присоединить к процессу).Установите для параметра
Transport
(Транспорт) значениеDefault
(По умолчанию).Выберите
Revit.exe
.Выберите
Attach
(Присоединить).
Присоединив Visual Studio к Revit, откройте исходный код Wall.ByCurveAndHeight в Wall.cs
. Его можно найти в обозревателе решений в разделе Libraries > RevitNodes > Elements
(Библиотеки > RevitNodes > Элементы) в области Public static constructors
файла. Задайте точку прерывания в конструкторе типа стены, чтобы при выполнении узла в Dynamo процесс прерывался, и мы могли просмотреть каждую строку кода по отдельности. Обычно автоматические конструкторы Dynamo начинаются с By<parameters>
.
Файл класса с конструктором для Wall.ByCurveAndHeight.
Чтобы задать точку прерывания, левой кнопкой мыши щелкните номер строки или правой кнопкой мыши щелкните строку кода, выберите
Breakpoint > Insert Breakpoint
(Точка прерывания > Вставить точку прерывания).
После установки точки прерывания необходимо запустить процесс через функцию Wall.ByCurveAndHeight. Эту функцию можно повторно выполнить в Dynamo, заново подключив провод к одному из портов, что приведет к повторному выполнению узла. Точка прерывания будет достигнута в Visual Studio.
По достижении точки прерывания ее значок меняется.
В окне стека вызовов отображается следующий метод.
Теперь мы будем переходить от строки к строке до тех пор, пока не возникнет исключение. Следующим выполняется код, выделенный желтым цветом.
Инструменты отладки для навигации по коду.
Нажмите
Step Over
(Шаг с обходом), чтобы запустить выделенный код, а затем приостановить выполнение после возврата функцииСледующий выполняемый оператор обозначен желтым цветом и стрелкой.
Если продолжить пошаговое выполнение функции, возникнет исключение, отображаемое в окне DynamoRevit. В окне стека вызовов можно увидеть, что исключение изначально было создано методом Autodesk.Revit.CurveAPIUtils.CreateNurbsCurve
. К счастью, здесь происходит обработка исключения, поэтому не происходит сбоя Dynamo. В процессе отладки мы выяснили контекст для проблемы, обнаружив в исходном коде другой метод.
Поскольку это не библиотека с открытым исходным кодом, мы не можем вносить в нее изменения. Имея дополнительную информацию, мы можем описать проблему с контекстом на GitHub или предложить решение проблемы, используя запрос на слияние.
При переходе к оператору, вызывающему исключение в
Walls.cs
, процесс отладки позволяет максимально близко подобраться к основной причине проблемы в пользовательском коде вProtoToRevitCurve.cs
Оператор, вызвавший исключение в
ProtoToRevitCurve.cs
.В стеке вызовов видно, что исключение возникает не в пользовательском коде.
Всплывающее окно с информацией об исключении.
Этот процесс можно применить к любым исходным файлам, с которыми мы работаем. При разработке библиотеки узлов Zero-Touch для Dynamo Studio можно открыть исходный код библиотеки и подключить процесс Dynamo для отладки библиотеки узлов. Даже если все работает нормально, отладка послужит отличным способом изучения кода для понимания рабочих процессов.
Процесс аналогичный извлечению изменений для Dynamo, но требует нахождения в правильной ветви. Используйте команду git branch
в хранилище DynamoRevit, чтобы узнать, какие ветви доступны локально и какие из них в настоящий момент извлечены.
cd C:\Users\username\Documents\GitHub\DynamoRevit
задает текущий каталог в репозитории DynamoRevit.
git branch
проверяет правильности ветви, RC2.13.1_Revit2023
.
git pull origin RC2.13.1_Revit2023
извлекает изменения из удаленной исходной ветви RC2.13.1_Revit2023
.
Начало координат указывает на исходный URL-адрес, который мы клонировали.
Необходимо помнить о том, на какой ветви мы находимся и из какой ветви мы извлекаем изменения, чтобы не переносить ненужные изменения, скажем, из
RC2.13.1_Revit2023
вRevit2018
.
Как уже упоминалось в разделе Сборка Dynamo на основе исходного кода, при отправке изменений в хранилище DynamoRevit можно создать запрос на слияние, следуя рекомендациям команды Dynamo, изложенным в соответствующем разделе.
Исходный код Dynamo размещен на GitHub в общем доступе, чтобы любой разработчик мог клонировать его и вносить свой вклад в развитие. В этой главе мы рассмотрим клонирование репозитория с помощью Git, компиляцию исходных файлов с помощью Visual Studio, запуск и отладку локальной сборки, а также получение новых изменений из GitHub.
GitHub — это хостинговая служба на базе Git, системы управления версиями, которая позволяет отслеживать изменения и координировать работу пользователей. Git можно использовать для скачивания исходных файлов Dynamo и их обновления с помощью нескольких команд. Этот метод позволяет избежать ненужной и изначально сложной работы по скачиванию и замене исходных файлов при каждом обновлении вручную. Система управления версиями Git отслеживает любые различия между локальным и удаленным репозиториями кода.
Исходный код Dynamo размещен в репозитории DynamoDS на GitHub: https://github.com/DynamoDS/Dynamo
Исходные файлы Dynamo.
Клонирование или скачивание всего репозитория
Другие репозитории DynamoDS
Исходные файлы Dynamo
Файлы, относящиеся к Git
Установите Git, прежде чем клонировать репозиторий. Это краткое руководство содержит инструкции по установке и настройке адреса электронной почты и имени пользователя на GitHub. В нашем примере мы будем использовать Git в командной строке. В этом руководстве предполагается, что вы работаете в Windows, но вы также можете использовать Git для клонирования исходных файлов Dynamo в macOC или Linux.
Нам нужен URL-адрес для клонирования репозитория Dynamo. Его можно найти, нажав кнопку «Clone or download» (Клонировать или скачать) на странице репозитория. Скопируйте URL-адрес для вставки в командную строку.
Нажмите «Clone or download» (Клонировать или скачать).
Скопируйте URL.
После установки Git можно клонировать хранилище Dynamo. Для начала откройте командную строку. Затем с помощью команды смены каталога cd
перейдите к папке, в которую необходимо клонировать исходные файлы. В нашем примере мы создали папку с именем Github
в папке Documents
.
cd C:\Users\username\Documents\GitHub
Замените username на ваше имя пользователя
На следующем этапе мы выполним команду Git, чтобы клонировать хранилище Dynamo в указанную папку. URL в команде можно получить, нажав кнопку Clone or download (Клонировать или скачать) на GitHub. Выполните эту команду в командной строке терминала. Обратите внимание, что эта операция приведет к клонированию главной ветви репозитория Dynamo, где хранится последняя версия кода Dynamo. Эта ветвь меняется ежедневно.
git clone https://github.com/DynamoDS/Dynamo.git
Если операция клонирования успешно завершена, Git будет работать. В проводнике перейдите в папку, в которую были скопированы исходные файлы. Структура папок должна выглядеть так же, как в главной ветви репозитория Dynamo на Github.
Исходные файлы Dynamo
Файлы Git
Мы клонировали исходные файлы на локальный компьютер и теперь можем собрать исполняемый файл для Dynamo. Для этого потребуется настроить среду разработки Visual Studio IDE и убедиться, что .NET Framework и DirectX установлены.
Скачайте и установите Microsoft Visual Studio Community 2015 (или более поздних версий) — бесплатную полнофункциональную IDE (интегрированную среду разработки).
Скачайте и установите Microsoft .NET Framework 4.5 или более поздней версии.
Установите Microsoft DirectX из локального репозитория Dynamo (Dynamo\tools\install\Extra\DirectX\DXSETUP.exe
).
Возможно, .NET и DirectX уже установлены.
После завершения установки запустим Visual Studio и откроем файл Dynamo.All.sln
, который находится в папке Dynamo\src
.
Выберите
File > Open > Project/Solution
(Файл > Открыть > Проект/решение).Перейдите в репозиторий Dynamo и откройте папку
src
.Выберите файл решения
Dynamo.All.sln
.Нажмите
Open
(Открыть).
Прежде чем собрать решение, необходимо указать несколько параметров. Сначала необходимо создать отладочную версию Dynamo — так Visual Studio сможет собирать больше информации во время отладки, чтобы помочь нам в разработке. В качестве целевой платформы выберите AnyCPU (любой ЦП).
Они будут преобразованы в папки в каталоге
bin
В данном примере выбрано
Debug
(Отладка) в качестве конфигурации решения.Задайте для платформы решения значение
Any CPU
.
Открыв проект, мы можем выполнить сборку решения. В результате этого процесса будет создан файл DynamoSandbox.exe, доступный для запуска.
При сборке проекта будут восстановлены зависимости NuGet.
Выберите
Build > Build Solution
(Сборка > Собрать решение).В окне вывода отобразится сообщение об успешной сборке. Например:
==== Build: 69 succeeded, 0 failed, 0 up-to-date, 0 skipped ====
.
Если сборка Dynamo выполнена успешно, в репозитории Dynamo будет создана папка bin
с файлом DynamoSandbox.exe. Мы выполняем сборку с параметром Debug, поэтому исполняемый файл находится в папке bin\AnyCPU\Debug
. При запуске откроется локальная сборка Dynamo.
Только что созданный исполняемый файл DynamoSandbox. Выполните его, чтобы запустить Dynamo.
На этом этапе все почти готово для разработки для Dynamo.
Инструкции по сборке Dynamo для других платформ (например, Linux или OS X) см. на вики-странице.
Отладка представляет собой процесс выявления, изоляции и исправления ошибок или проблем. После успешной сборки Dynamo на основе исходного кода можно использовать несколько инструментов Visual Studio для отладки выполняющегося приложения. Например, надстройку DynamoRevit. Мы можем проанализировать исходный код, чтобы найти причину проблемы, или просмотреть выполняемый в данный момент код. Более подробное описание процедуры отладки кода и навигации по нему в Visual Studio см. в документации по Visual Studio.
Для автономного приложения Dynamo, DynamoSandbox, мы рассмотрим два варианта отладки:
Создание и запуск Dynamo непосредственно из Visual Studio.
Присоединение Visual Studio к запущенному процессу Dynamo.
При запуске Dynamo из Visual Studio решение собирается заново для каждого сеанса отладки, если это необходимо. После редактирования исходного кода внесенные изменения будут учтены при отладке. Не закрывая решение Dynamo.All.sln
, выберите Debug
, AnyCPU
и DynamoSandbox
в раскрывающемся меню, а затем нажмите Start
(Запуск). При этом будет выполнена сборка Dynamo, запущен новый процесс (DynamoSandbox.exe) и к нему присоединен отладчик Visual Studio.
Создание и запуск приложения непосредственно из Visual Studio
Выберите конфигурацию
Debug
(Отладка).Выберите платформу
Any CPU
(Любой ЦП).Выберите для проекта
DynamoSandbox
.Нажмите
Start
(Запуск), чтобы начать процесс отладки.
Кроме того, можно выполнить отладку уже запущенного процесса Dynamo для устранения неполадки, связанной с открытым графиком или пакетом. Для этого необходимо открыть исходные файлы проекта в Visual Studio и присоединить их к выполняющемуся процессу Dynamo с помощью элемента меню отладки Attach to Process
(Присоединить к процессу).
Присоединение выполняющегося процесса к Visual Studio
Выберите
Debug > Attach to Process...
(Отладка > Присоединить к процессу)Выберите
DynamoSandbox.exe
.Выберите
Attach
(Присоединить).
В обоих случаях мы подключаем отладчик к процессу, который необходимо отладить. Можно задать точки прерывания в коде до или после запуска отладчика. Процесс приостановится непосредственно перед выполнением этой строки кода. Если во время отладки возникло неперехваченное исключение, Visual Studio перейдет к месту его возникновения в исходном коде. Это эффективный метод обнаружения простых сбоев, необработанных исключений и для понимания хода выполнения приложения.
При отладке DynamoSandbox мы устанавливаем точку прерывания в конструкторе узла Color.ByARGB. В результате процесс Dynamo приостанавливается при создании узла. Если этот узел вызвал исключение или сбой в работе Dynamo, можно пошагово выполнить каждую строку в конструкторе, чтобы найти, где возникла проблема.
Точка прерывания
Стек вызовов, отображающий выполняемую в данный момент функцию и предыдущие вызовы функции.
В следующем разделе, Сборка DynamoRevit на основе исходного кода, мы рассмотрим конкретный пример отладки и объясним, как задать точки прерывания, пошагово выполнить код и прочитать стек вызовов.
Поскольку исходный код Dynamo размещен на Github, проще всего обновлять локальные исходные файлы с помощью команд Git.
В командной строке выберите в качестве текущего каталога репозиторий Dynamo:
cd C:\Users\username\Documents\GitHub\Dynamo
Замените
"username"
на ваше имя пользователя
Используйте следующую команду для извлечения последних изменений:
git pull origin master
Здесь видно, что локальный репозиторий был обновлен с учетом изменений в удаленном репозитории.
Помимо извлечения обновлений нужно знать еще о четырех рабочих процессах Git.
Создайте вилку репозитория Dynamo, чтобы получить копию, отдельную от оригинала. Внесенные здесь изменения не повлияют на исходный репозиторий, но мы можем извлекать обновления и отправлять запросы на слияние. Создание вилок — это один из самых популярных способов разработки проектов с открытым исходным кодом на GitHub. Если вы хотите предложить улучшения для Dynamo, ознакомьтесь с этим методом.
Ветвь позволяет работать над новыми и экспериментальными функциями отдельно от других ветвей. Этот подход упрощает отправку запросов на слияние.
Выполняйте фиксацию после каждой выполненной задачи и изменения, которое может потребоваться отменить. Фиксация изменений записывается в репозиторий и отображается при отправке запроса на слияние в основное хранилище Dynamo.
Создавайте запросы на внесение изменений, чтобы предложить изменения для главного репозитория Dynamo.
Команда Dynamo предоставляет специальные инструкции по созданию запросов на слияние. Дополнительные сведения см. в разделе «Запросы на слияние» этого руководства.
Список команд Git см. на странице документации.