Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Пользовательские узлы создаются путем помещения стандартных и созданных разработчиками узлов в так называемый пользовательский узел Dynamo, который можно рассматривать как своего рода контейнер. При запуске такого узла-контейнера в графике происходит запуск всех содержащихся в нем компонентов. В результате получается удобная комбинация узлов для многократного использования и предоставления другим пользователям.
Если в графике присутствует несколько копий пользовательского узла, их все можно отредактировать одновременно, изменив базовый экземпляр этого узла. Это позволяет с легкостью редактировать график и адаптировать его к изменениям, которые могут возникнуть в проекте или рабочем процессе.
Главное преимущество пользовательских узлов — удобство совместной работы. Например, если опытный программист создает в Dynamo сложный график, который затем требуется передать проектировщику, не работавшему с Dynamo, то программист может упростить представление графика и сделать его максимально доступным для проектировщика. Пользовательский узел-контейнер, в который помещается график, можно открывать для редактирования его содержимого, однако внешний вид контейнера при этом может оставаться простым и аккуратным. Таким образом, пользовательские узлы позволяют делать графики Dynamo лаконичными и интуитивно понятными.
Создавать пользовательские узлы в Dynamo можно самыми разными способами. В примерах, которые приведены в этой главе, пользовательские узлы создаются с помощью функций интерфейса Dynamo. Программисты, интересующиеся возможностями форматирования в C# или Zero Touch, могут ознакомиться с подробным обзором на этой странице справки Wiki по Dynamo.
Перейдите в среду пользовательского узла, чтобы создать простой узел для расчета процентного соотношения. Среда пользовательского узла отличается от среды графика Dynamo, но работа в ней осуществляется на основе тех же принципов. Итак, пора создать первый пользовательский узел.
Чтобы создать пользовательский узел с нуля, запустите Dynamo и выберите «Пользовательский узел» или используйте сочетание клавиш CTRL + SHIFT + N в рабочей области.
Задайте имя, описание и категорию в диалоговом окне «Свойства пользовательского узла».
Имя: Percentage
Описание: расчет процентного соотношения между двумя значениями.
Категория: Math.Functions
Откроется рабочая область с желтым фоном, указывающим на то, что вы находитесь в среде пользовательского узла. В этом окне можно получить доступ ко всем стандартным узлам Dynamo, а также к узлам ввода и вывода, которые используются для обозначения данных, поступающих в пользовательский узел на входе и получаемых из него на выходе. Их можно найти в разделе «Input > Basic».
Inputs: узлы Input используются для настройки портов ввода пользовательского узла. Синтаксис узла ввода: имя_ввода : тип_данных = значение_по_умолчанию (необязательно).
Outputs: аналогично узлам ввода узлы вывода используются для настройки портов вывода пользовательского узла. К портам ввода и вывода можно добавлять пользовательские комментарии для указания типа входных и выходных данных. Подробную информацию см. в разделе Создание пользовательских узлов.
Этот пользовательский узел можно сохранить в файле DYF (вместо стандартного формата DYN), после чего он автоматически станет доступен в текущем и будущих сеансах. Пользовательский узел находится в разделе Add-ons библиотеки.
После создания первого пользовательского узла можно переходить к дальнейшим разделам, в которых подробнее рассматриваются функциональные возможности пользовательских узлов и процесс публикации типовых рабочих процессов. В следующем разделе представлен процесс разработки пользовательского узла, позволяющего переносить геометрию с одной поверхности на другую.
Готовые узлы, доступные в библиотеке Dynamo, поддерживают широкий спектр функциональных возможностей. Если требуются дополнительные возможности, например для внедрения повторяющихся процедур или разработки особого графика для демонстрации коллегам, в Dynamo можно создать собственные пользовательские узлы и пакеты.
Вы создали пользовательский узел и применили его к определенному процессу на графике Dynamo. Это очень полезный узел, поэтому его надо сохранить в библиотеке Dynamo для использования в других графиках. Для этого нужно опубликовать узел локально. Этот процесс аналогичен публикации пакета, который будет рассмотрен подробнее в следующей главе.
Узел, опубликованный локально, станет доступен в библиотеке Dynamo после запуска нового сеанса. Если пользовательский узел не опубликован, его необходимо разместить в папке графика Dynamo, ссылающегося на этот узел (либо этот узел нужно импортировать в Dynamo с помощью меню Файл > Импорт библиотеки).
Пользовательские узлы и пакеты из Dynamo Sandbox можно публиковать в версии 2.17 и более поздних, если они не имеют зависимостей основного API. В более ранних версиях пользовательские узлы и пакеты можно публиковать только в Dynamo for Revit и Dynamo for Civil 3D.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Продолжайте работу с пользовательским узлом, созданным в предыдущем разделе. После открытия пользовательского узла PointsToSurface график отображается в редакторе пользовательских узлов Dynamo. Пользовательский узел также можно открыть, дважды щелкнув его в редакторе графиков Dynamo.
Чтобы опубликовать пользовательский узел локально, щелкните правой кнопкой мыши в рабочей области и выберите Опубликовать данный пользовательский узел...
Введите все необходимые сведения, как показано на изображении выше, и выберите Опубликовать локально. Обратите внимание, что в поле «Группа» задается основной элемент, который будет доступен в меню Dynamo.
Выберите папку для хранения всех пользовательских узлов, которые планируется опубликовать локально. Приложение Dynamo будет проверять эту папку каждый раз при загрузке, поэтому она должна находиться в постоянном расположении. Перейдите к этой папке и нажмите Выбрать папку. Пользовательский узел Dynamo опубликован локально и теперь будет отображаться в библиотеке Dynamo при каждой загрузке программы.
Чтобы проверить расположение папки пользовательского узла, откройте меню Dynamo > Настройки > Параметры пакета > Пути к узлу и пакету.
В этом окне отображается список путей.
Documents\DynamoCustomNodes... — расположение пользовательских узлов, которые были опубликованы локально.
AppData\Roaming\Dynamo... — путь по умолчанию к пакетам Dynamo, установленным из интернета.
Рекомендуется переместить путь к локальной папке вниз по списку (для этого щелкните стрелку вниз на панели слева от строки с путем). Верхняя папка всегда по умолчанию используется как расположение для установки пакетов. Поэтому если в качестве верхней папки будет указан путь для установки пакетов Dynamo, все полученные через интернет пакеты будут храниться отдельно от узлов, опубликованных локально
Порядок путей к папкам изменен, чтобы в качестве пути по умолчанию в Dynamo использовалась папка установки пакетов.
Перейдите в эту локальную папку. Исходный пользовательский узел находится в папке .dyf, имя которой является расширением для файлов пользовательских узлов Dynamo. Если отредактировать файл в этой папке, соответствующий узел будет обновлен в пользовательском интерфейсе. Кроме того, можно добавить дополнительные узлы в главную папку DynamoCustomNode, и после перезапуска Dynamo они появятся в библиотеке.
Теперь при каждой загрузке Dynamo узел PointsToSurface будет отображаться в группе DynamoPrimer библиотеки Dynamo.
После создания пользовательских узлов необходимо упорядочить и опубликовать их в формате пакетов. Пакеты упрощают хранение узлов, а также позволяют с легкостью делиться ими с другими пользователями Dynamo.
В Dynamo доступно большое количество базовых узлов, позволяющих решать широкий спектр задач визуального программирования. Однако иногда создание пользовательских узлов позволяет прийти к более быстрому, оригинальному или удобному для совместного использования решению. Такие узлы можно многократно использовать в разных проектах. Они позволяют упростить и очистить графики. Опубликовав их в Package Manager, этими узлами можно поделиться с другими пользователями Dynamo по всему миру.
В Dynamo предусмотрено несколько способов создания пользовательских узлов. Их можно создавать с нуля на основе существующего графика или непосредственно на языке C#. В этом разделе рассматривается создание пользовательского узла в интерфейсе Dynamo на основе существующего графика. Этот метод идеально подходит для очистки рабочего пространства, а также для упаковки последовательности узлов с целью их повторного использования в другом месте.
На изображении ниже точка одной поверхности сопоставляется с другой точкой с помощью UV-координат. Этот принцип будет использоваться для создания панелей поверхности, ссылающихся на кривые в плоскости XY. В данном случае сформируем прямоугольные панели, но этим же способом можно создавать разнообразные панели с использованием UV-наложения. Это отличная возможность для разработки пользовательских узлов, так как данную процедуру можно повторять в этом же графике или в других рабочих процессах Dynamo.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Начните с создания графика, который будет вложен в пользовательский узел. В этом примере с помощью UV-координат мы создадим график, который сопоставляет полигоны базовой поверхности с целевой поверхностью. Эта процедура UV-наложения используется часто, благодаря чему хорошо подходит для создания пользовательских узлов. Дополнительную информацию о поверхностях и UV-пространстве см. на странице Поверхность. Готовый график — _UVmapping\Custom-Node.dyn из скачанного ранее файла ZIP.
Code Block. Используйте эту строку для создания диапазона из 10 чисел от –45 до 45
45..45..#10;
.Point.ByCoordinates. Соедините выходные данные узла Code Block с входными данными x и y, выбрав в качестве переплетения перекрестную ссылку. При этом будет создана сетка точек.
Plane.ByOriginNormal. Соедините выходные данные Point с входными данными origin, чтобы создать плоскость в каждой из точек. Будет использован вектор нормали по умолчанию (0,0,1).
Rectangle.ByWidthLength. Соедините плоскости из предыдущего шага с выходными данными plane и с помощью узла Code Block со значением 10 задайте ширину и длину.
При этом появится сетка прямоугольников. Сопоставьте эти прямоугольники с целевой поверхностью, используя UV-координаты.
Polygon.Points. Соедините выходные данные Rectangle.ByWidthLength из предыдущего шага с входными данными polygon, чтобы извлечь угловые точки каждого прямоугольника. Именно эти точки будут сопоставляться с целевой поверхностью.
Rectangle.ByWidthLength. С помощью узла Code Block со значением 100 задайте ширину и длину прямоугольника. Это будет граница базовой поверхности.
Surface.ByPatch. Соедините Rectangle.ByWidthLength из предыдущего шага с входными данными closedCurve для создания базовой поверхности.
Surface.UVParameterAtPoint. Соедините выходные данные Point узла Polygon.Points с выходными данными Surface узла Surface.ByPatch для получения параметра UV в каждой точке.
Теперь, имея базовую поверхность и набор UV-координат, можно импортировать целевую поверхность и сопоставить точки между поверхностями.
File Path. Выберите путь к файлу поверхности, которую требуется импортировать. Файл должен иметь тип SAT. Нажмите кнопку Обзор... и перейдите к файлу UVmapping_srf.sat из скачанного ранее файла ZIP.
Geometry.ImportFromSAT. Для импорта поверхности присоедините путь к файлу. При этом в области предварительного просмотра геометрии должна появиться импортированная поверхность.
UV. Соедините выходные данные параметра UV с узлами UV.U и UV.V.
Surface.PointAtParameter. Присоедините импортированную поверхность, а также координаты u и v. Теперь на целевой поверхности должна появиться сетка 3D-точек.
Последний шаг — построение прямоугольных участков поверхности с помощью 3D-точек.
PolyCurve.ByPoints. Соедините точки на поверхности, чтобы построить сложную кривую через точки.
Boolean. Добавьте в рабочее пространство узел Boolean и соедините его с входными данными connectLastToFirst, задав значение True, чтобы замкнуть сложные кривые. При этом должны появиться прямоугольники, сопоставленные с поверхностью.
Surface.ByPatch. Соедините сложные кривые с входными данными closedCurve для создания участков поверхности.
Теперь выберите узлы, которые необходимо вложить в пользовательский узел, учитывая, какие входные и выходные данные должны быть у конечного узла. Пользовательский узел должен быть максимально гибким и пригодным для сопоставления любых полигонов, а не только прямоугольников.
Выберите следующие узлы (начиная с Polygon.Points), щелкните правой кнопкой мыши рабочее пространство и выберите «Создание пользовательского узла».
В диалоговом окне «Свойства пользовательского узла» присвойте пользовательскому узлу имя, введите описание и укажите категорию.
Имя: MapPolygonsToSurface
Описание: сопоставление полигонов из базы с целевой поверхностью
Категория в разделе «Надстройки»: Geometry.Curve
Пользовательский узел в значительной мере очистил рабочее пространство. Обратите внимание, что входным и выходным данным были присвоены имена, соответствующие исходным узлам. Отредактируйте пользовательский узел, чтобы сделать имена более описательными.
Дважды щелкните пользовательский узел, чтобы отредактировать его. Откроется рабочее пространство с желтым фоном, представляющее собой внутреннюю часть узла.
Inputs. Измените имена входных параметров, задав baseSurface и targetSurface.
Outputs. Добавьте дополнительный выходной параметр для сопоставленных многоугольников.
Сохраните пользовательский узел и вернитесь в исходное рабочее пространство. Внесенные изменения отражаются в узле MapPolygonsToSurface.
Для наглядности можно добавить к узлу Пользовательские комментарии. В комментариях можно указать сведения о типах входных и выходных данных или разъяснить функции узла. Комментарии отображаются при наведении курсора на входной или выходной параметр пользовательского узла.
Дважды щелкните пользовательский узел, чтобы отредактировать его. Снова откроется рабочее пространство с желтым фоном.
Начните редактировать блок Code Block Input. Чтобы создать комментарий, введите символы «//», а затем текст комментария. Добавьте любые пояснения к узлу. В данном случае будет дано описание входного параметра targetSurface.
Кроме того, задайте значение по умолчанию для входного параметра inputSurface, указав это значение в качестве типа входных данных. В данном случае в качестве значения по умолчанию будет задан исходный набор Surface.ByPatch.
Комментарии также можно применить к выходным параметрам.
Отредактируйте текст блока «Code Block» Output. Введите «//», а затем текст комментария. Добавьте пояснения к выходным параметрам Polygons и surfacePatches путем ввода для них подробного описания.
Наведите курсор на пользовательский узел Inputs, чтобы просмотреть комментарии.
Так как для входного параметра inputSurface задано значение по умолчанию, при запуске определения можно не вводить значение поверхности.
В Dynamo представлено огромное количество готовых функций, а также имеется обширная библиотека пакетов, которая позволяет существенно расширить возможности Dynamo. Пакет — это набор пользовательских узлов или дополнительных функций. Dynamo Package Manager — это портал для сообщества пользователей, где можно скачать любые пакеты, которые были опубликованы в интернете. Эти инструментарии разрабатываются сторонними поставщиками и предназначены для расширения базовых функций Dynamo, доступных каждому пользователю по первому требованию.
Проекты с открытым исходным кодом, такие как Dynamo, активно развиваются благодаря подобному участию сообщества. Благодаря узкоспециализированным сторонним разработчикам Dynamo может использоваться в самых различных отраслях. По этой причине команда Dynamo сконцентрировала свои усилия на оптимизации разработки и публикации пакетов (подробнее эта тема будет обсуждаться в следующих разделах).
Самый простой способ установки пакета — воспользоваться пунктом меню «Пакеты» в интерфейсе Dynamo. Перейдем к этому пункту и установим пакет. В этом небольшом примере будет установлен популярный пакет для создания прямоугольных панелей на сетке.
В Dynamo выберите Пакеты > Package Manager...
В строке поиска введите «quads from rectangular grid». Через некоторое время отобразятся все пакеты, соответствующие поисковому запросу. Выберем первый пакет с соответствующим именем.
Нажмите кнопку «Установить», чтобы добавить пакет в библиотеку, а затем подтвердите действие. Готово!
Обратите внимание, что в библиотеке Dynamo появилась группа с именем buildz. Это имя разработчика пакета, а в группе содержится пользовательский узел. Его можно сразу использовать.
Используйте узел Code Block для быстрого определения прямоугольной сетки, вывода результата в узел Polygon.ByPoints, а затем узел Surface.ByPatch для просмотра списка только что созданных прямоугольных панелей.
В приведенном выше примере описан пакет с одним пользовательским узлом. Та же самая процедура используется для скачивания пакетов с несколькими пользовательскими узлами и вспомогательными файлами данных. Продемонстрируем это на примере более крупного пакета: Dynamo Unfold.
Как и в приведенном выше примере, выберите Пакеты > Package Manager...
На этот раз выполним поиск по слову DynamoUnfold. Когда пакеты отобразятся, скачайте их, нажав кнопку «Установить», чтобы добавить Dynamo Unfold в библиотеку Dynamo.
В библиотеке Dynamo появилась группа DynamoUnfold с несколькими категориями и пользовательскими узлами.
Рассмотрим структуру файлов и папок пакета.
Сначала выберите «Пакеты» > «Package Manager» > «Установленные пакеты».
Рядом с DynamoUnfold выберите меню параметров.
Затем нажмите «Показать корневую папку», чтобы открыть корневую папку для этого пакета.
Откроется корневая папка пакета. Обратите внимание, что в ней содержится три папки и файл.
В папке bin находятся файлы DLL. Этот пакет Dynamo был разработан с помощью функции Zero-Touch, поэтому пользовательские узлы хранятся в этой папке.
В папке dyf хранятся пользовательские узлы. Так как данный пакет был разработан без пользовательских узлов Dynamo, папка пуста.
В папке extra хранятся дополнительные файлы, включая файлы примеров.
Файл pkg — это базовый текстовый файл, определяющий параметры пакета. Пока мы не будем его рассматривать.
Если открыть папку extra, в ней можно увидеть несколько файлов примеров, которые были скачаны при установке. Если пакет сопровождается файлами примеров (что бывает не всегда), их следует искать в этой папке.
Откроем файл SphereUnfold.
Нажав после этого кнопку «Запуск» в решателе, получим развернутую сферу. Файлы примеров, подобные этим, используются для обучения работе с новыми пакетами Dynamo.
В Package Manager можно выполнять поиск пакетов с помощью параметров сортировки и фильтрации на вкладке «Поиск пакетов». Существует несколько фильтров: по главной программе, статусу (новый, исключенный или неисключенный), а также по наличию зависимостей в пакете.
Сортировка пакетов позволяет определить пакеты с наивысшей оценкой или наиболее часто скачиваемые пакеты, а также найти пакеты с последними обновлениями.
Чтобы узнать подробнее о каждом пакете, нажмите «Просмотр сведений». При этом в Package Manager открывается боковая панель, на которой представлены такие сведения, как управление версиями и данные о зависимостях, URL-адрес веб-сайта или репозитория, сведения о лицензии и т. д.
Еще один способ найти пакеты Dynamo — воспользоваться веб-сайтом Dynamo Package Manager. Здесь можно найти статистику по пакетам и рейтинги разработчиков. Кроме того, из Dynamo Package Manager можно скачивать файлы пакетов Dynamo, но делать это непосредственно из Dynamo проще.
Если требуется узнать, где хранятся файлы пакетов, в верхней части окна навигации выберите «Dynamo» > «Настройки» > «Параметры пакета» > «Пути к узлу и файлу пакета», чтобы найти текущую корневую папку.
По умолчанию пакеты устанавливаются в следующей папке: C:/Users/[имя пользователя]/AppData/Roaming/Dynamo/[версия Dynamo.
Сообщество Dynamo постоянно развивается. Если периодически посещать портал Dynamo Package Manager, можно обнаружить там новые интересные разработки. В следующих разделах пакеты Dynamo будут рассматриваться более подробно и не только с точки зрения конечного пользователя, но и в контексте их самостоятельной разработки.
Dynamo Mesh Toolkit содержит инструменты для импорта сетей из внешних файлов других форматов, создания сетей из геометрических объектов Dynamo и построения сетей вручную по вершинам и индексам. В библиотеке также содержатся инструменты для редактирования и восстановления сетей, а также для извлечения горизонтальных срезов, используемых в ходе изготовления изделий.
Пакет Dynamo Mesh Toolkit — это результат непрерывной работы специалистов Autodesk, направленной на исследование сетей. В ближайшие годы функциональные возможности пакета будут постоянно улучшаться и пополняться. Разработчики Dynamo с нетерпением ждут ваших отзывов и предложений по новым функциям, а также сообщений об обнаруженных ошибках.
В Dynamo в верхней строке меню выберите «Пакеты» > «Package Manager». В поле поиска введите MeshToolkit одним словом (без пробелов). Нажмите кнопку «Установить» и подтвердите действие, чтобы начать скачивание. Проще простого.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
В этом примере рассматривается работа с узлом Intersect в составе MeshToolkit. Вам потребуется импортировать сеть, а затем рассечь ее с использованием нескольких входных плоскостей для получения срезов. Это первый этап подготовки модели изделия к изготовлению с помощью лазерной или водоструйной резки либо фрезерного станка с ЧПУ.
Для начала откройте в Dynamo файл Mesh-Toolkit_Intersect-Mesh.dyn.
File Path: найдите файл сети для импорта (stanford_bunny_tri.obj). Поддерживаются файлы MIX и OBJ.
Mesh.ImportFile: соедините этот узел с узлом File Path, чтобы импортировать сеть.
Point.ByCoordinates: создайте точку, которая станет центром дуги.
Arc.ByCenterPointRadiusAngle: создайте дугу на основе заданной точки. Эта кривая будет использоваться для размещения серии плоскостей. __ Параметры: __
radius: 40, startAngle: -90, endAngle:0
Создайте серию плоскостей, ориентированных вдоль дуги.
Code Block: создайте 25 чисел в диапазоне от 0 до 1.
Curve.PointAtParameter: соедините порт вывода Arc с портом ввода curve, а порт вывода Code Block — с портом ввода param, чтобы получить набор точек вдоль кривой.
Curve.TangentAtParameter: соедините порты этого узла аналогично портам предыдущего.
Plane.ByOriginNormal: соедините порт вывода Point с портом ввода origin, а порт вывода Vector — с портом ввода normal, чтобы создать набор плоскостей на основе полученных точек.
Рассеките сеть с помощью этих плоскостей.
Mesh.Intersect: плоскости рассекают импортированную сеть, в результате чего создается набор контуров, состоящих из сложных кривых. Щелкните правой кнопкой мыши узел и задайте для переплетения значение «Самый длинный».
PolyCurve.Curves: сложные кривые разбиваются на свои фрагменты кривых.
Curve.EndPoint: извлеките значения конечных точек для каждой кривой.
NurbsCurve.ByPoints: постройте NURBS-кривую на основе полученных точек. Добавьте узел Boolean и установите для него значение True, чтобы замкнуть кривые.
Теперь отключите предварительный просмотр для некоторых узлов, таких как Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal и Arc.ByCenterPointRadiusAngle, чтобы лучше рассмотреть результат.
Surface.ByPatch: создайте участки поверхности для каждого контура, чтобы сформировать срезы сети.
Добавьте второй набор срезов для получения «вафельного» эффекта.
Как вы могли заметить, операции пересечения при работе с сетями выполняются гораздо быстрее, чем при работе с аналогичным телом. Использование сетей позволяет ускорить многие рабочие процессы, подобные представленному в этом упражнении.
В предыдущих разделах мы подробно рассмотрели процесс настройки пакета MapToSurface с использованием пользовательских узлов и файлов примеров. Но как опубликовать пакет, разработка которого была выполнена на локальном компьютере? В этом примере мы рассмотрим процесс публикации пакета из набора файлов в локальной папке.
Существует множество способов публикации пакетов. Мы рекомендуем придерживаться следующего процесса: сначала опубликуйте пакет на локальном компьютере, там же выполните его разработку и, наконец, опубликуйте пакет в интернете. В рамках примера мы будем работать с папкой, содержащей все файлы пакета.
Если пакет MapToSurface уже был установлен в рамках предыдущего урока, его необходимо удалить, прежде чем приступать к публикации в рамках этого урока, чтобы избежать дублирования пакетов.
Сначала выберите «Пакеты» > «Package Manager» > «Установленные пакеты», рядом с MapToSurface щелкните значок с вертикальными точками и нажмите «Удалить».
Перезапустите Dynamo. В окне Управление пакетами убедитесь, что пакет MapToSurface отсутствует. Теперь все готово к началу работы.
Пользовательские узлы и пакеты из Dynamo Sandbox можно публиковать в версии 2.17 и более поздних, если они не имеют зависимостей основного API. В более ранних версиях пользовательские узлы и пакеты можно публиковать только в Dynamo for Revit и Dynamo for Civil 3D.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Это первая версия данного пакета. Все файлы примеров и пользовательские узлы размещены в одной папке. Поскольку папка готова к использованию, можно сразу приступать к выгрузке в Dynamo Package Manager.
Эта папка содержит пять пользовательских узлов (DYF).
В ней также есть пять файлов примеров (DYN) и один импортированный файл векторов (SVG). Эти файлы будут задействованы в рамках вводных упражнений по обучению работе с пользовательскими узлами.
В Dynamo выберите Пакеты > Package Manager > Опубликовать новый пакет.
На вкладке Публикация пакета заполните соответствующие поля в левой части окна.
Теперь добавим файлы пакета. Можно добавлять файлы по одному или целыми папками, выбрав «Добавить папку» (1). Чтобы добавить файлы, отличные от файлов DYF, в окне браузера выберите тип файлов Все файлы (.). Обратите внимание, что будут добавлены все файлы — и файлы пользовательских узлов (DYF), и файлы примеров (DYN). При публикации пакета программа Dynamo автоматически классифицирует их по категориям.
После выбора папки MapToSurface в Package Manager отобразится ее содержимое. Если вы отправляете собственный пакет со сложной структурой папок и не хотите, чтобы программа Dynamo вносила изменения в структуру папок, можно включить параметр «Сохранить структуру папок». Этот параметр предназначен для опытных пользователей. Если пакет не настроен особым образом, лучше не устанавливать этот флажок и позволить Dynamo упорядочить файлы требуемым образом. Нажмите «Далее», чтобы продолжить.
Здесь можно просмотреть, как Dynamo организует файлы пакетов перед публикацией. Нажмите кнопку «Готово» для продолжения.
Нажмите кнопку «Опубликовать локально» (1) для публикации пакета. Обратите внимание, что нужно нажать именно Опубликовать локально, а не Публикация в Интернете, чтобы избежать появления повторяющихся пакетов в Package Manager.
После публикации пользовательские узлы должны быть доступны в группе DynamoPrimer или в библиотеке Dynamo.
Теперь перейдем в корневую папку и посмотрим, как только что созданный пакет был отформатирован в Dynamo. Для этого выберите вкладку «Установленные пакеты», рядом с MapToSurface щелкните значок с вертикальными точками и выберите «Показать корневую папку».
Обратите внимание, что поскольку пакет был опубликован локально, корневая папка находится в локальной папке пакета. Dynamo ссылается на эту папку для чтения пользовательских узлов. Поэтому при локальной публикации пакета важно указывать постоянную папку (а не рабочий стол, например). Структура папок пакета Dynamo выглядит следующим образом.
В папке bin хранятся файлы DLL, созданные с помощью библиотек C# или Zero-Touch. В этот пакет такие файлы не входят, поэтому данная папка пуста.
В папке dyf хранятся пользовательские узлы. Открыв ее, можно просмотреть все пользовательские узлы (файлы DYF), входящие в пакет.
В папке extra хранятся все дополнительные файлы. Сюда входят файлы Dynamo (DYN), а также дополнительные файлы других форматов (SVG, XLS, JPEG, SAT и т. д.).
Файл PKG — это стандартный текстовый файл, определяющий параметры пакета. Он создается в Dynamo автоматически, но если требуется подробная настройка, то параметры можно отредактировать.
Примечание. Данная процедура предназначена только для публикации пакетов, разработанных пользователями.
Когда все будет готово для публикации, в окне «Пакеты» > «Package Manager» > «Установленные пакеты» нажмите кнопку справа от пакета, который требуется опубликовать, и выберите «Опубликовать».
Если требуется обновить ранее опубликованный пакет, выберите «Публикация версии», и приложение Dynamo обновит пакет в интернете с учетом новых файлов в корневой папке этого пакета. Проще простого.
Если файлы в корневой папке опубликованного пакета были изменены, можно также опубликовать новую версию этого пакета, выбрав вариант Публикация версии... на вкладке Мои пакеты. Эта функция позволяет с легкостью вносить в содержимое необходимые обновления и обмениваться данными с сообществом пользователей. Пользоваться функцией Публикация версии могут только разработчики соответствующего пакета.
Dynamo поддерживает различные способы создания пакетов как с целью личного использования, так и для обмена с участниками сообщества Dynamo. Ниже рассматривается структура пакетов на примере разбора содержимого существующего пакета. Данный пример основан на упражнениях предыдущей главы, где был создан набор пользовательских узлов для сопоставления геометрии одной поверхности Dynamo с другой с помощью UV-координат.
Для иллюстрации воспользуемся примером пакета для UV-наложения точек с одной поверхности на другую. Основные возможности инструмента были рассмотрены в разделе данного руководства. Приведенные ниже файлы показывают, как можно применить принцип UV-наложения к разработке набора инструментов для библиотеки с возможностью публикации.
На данном изображении точка одной поверхности сопоставляется с точкой другой поверхности с помощью UV-координат. Эта же концепция лежит в основе работы данного пакета, однако он рассчитан на более сложную геометрию.
В предыдущей главе рассматривались способы создания панелей поверхности в Dynamo на основе кривых, заданных в плоскости XY. В этой главе те же принципы рассматриваются более подробно, охватывая другие размеры и геометрические объекты. Чтобы показать, каким образом осуществлялась разработка пакета, он будет установлен в исходном состоянии. В следующем разделе будет рассматриваться публикация этого пакета.
В Dynamo выберите «Пакеты» > «Package Manager» и найдите пакет MapToSurface (одним словом,без пробелов). Нажмите кнопку «Установить», чтобы скачать и добавить пакет в библиотеку.
После установки пользовательские узлы должны быть доступны в разделе «Надстройки» > DynamoPrimer.
Теперь рассмотрим структуру пакета.
В разрабатываемом пакете есть пять пользовательских узлов, которые были созданы в качестве базовых. Ниже рассмотрим назначение каждого узла. Некоторые пользовательские узлы строятся на основе других пользовательских узлов, а графики имеют структуру, позволяющую другим пользователям легко понять их.
Перед нами простой пакет с пятью пользовательскими узлами. Ниже кратко рассматривается структура каждого из них.
Это базовый пользовательский узел, на основе которого создаются все остальные узлы сопоставления. Говоря простым языком, данный узел сопоставляет точку UV-координаты исходной поверхности с местоположением UV-координаты целевой поверхности. Поскольку точки представляют собой простейшие геометрические объекты, на основе которых строится более сложная геометрия, этот принцип можно использовать для сопоставления 2D- и даже 3D-геометрии одной поверхности с другой.
В данном случае для демонстрации преобразования сопоставляемых точек из одномерной геометрии в двухмерную используются обычные полигоны. Обратите внимание, что в этот пользовательский узел вложен узел PointsToSurface. Таким образом можно сопоставить точки каждого полигона с поверхностью, а затем заново сгенерировать полигон по этим точкам. При сохранении надлежащей структуры данных (список списков точек) полигоны будут располагаться отдельно после их уменьшения до набора точек.
Здесь работает тот же принцип, что и с узлом PolygonsToSurface. Однако вместо сопоставления полигональных точек сопоставляются управляющие точки NURBS-кривой.
OffsetPointsToSurface
Этот узел немного сложнее, но, как и узел PointsToSurface, сопоставляет точки одной поверхности с другой. Однако в этом случае узел учитывает точки, которые отсутствуют на исходной поверхности, вычисляет расстояние от них до ближайшего UV-параметра и сопоставляет это расстояние с нормалью целевой поверхности в соответствующей UV-координате. Это будет проще объяснить с помощью файлов примеров.
Это простой узел, который позволяет создать параметрическую поверхность на основе исходной сетки для сопоставления с волнистой поверхностью в файлах примеров.
Файлы примеров находятся в корневой папке пакета. Выберите «Package Manager» > «Установленные пакеты».
Рядом с MapToSurface нажмите значок с вертикальными точками и выберите «Показать корневую папку».
Затем перейдите в папку extra, в которой содержатся все файлы пакета, не являющиеся пользовательскими узлами. В этой папке хранятся файлы примеров (при наличии) для пакетов Dynamo. На снимках экрана ниже показаны принципы, реализованные в файлах примеров.
В данном файле, где используется похожий рабочий процесс, показан алгоритм сопоставления окружностей (или полигонов, представляющих окружности) одной поверхности с окружностями другой. При этом используется узел PolygonsToSurface.
Это более сложный файл примера, так как в нем используется узел NurbsCrvToSurface. Целевая поверхность смещена на заданное расстояние, а NURBS-кривая сопоставлена с исходной целевой поверхностью и смещенной поверхностью. К двум сопоставленным кривым применяется функция лофтинга для создания поверхности, толщина которой затем увеличивается. Полученное тело имеет неровность, соответствующую нормалям целевой поверхности.
В этом файле примера показано, как сопоставить исходную гофрированную полиповерхность с целевой поверхностью. Исходная и целевая поверхности представляют собой прямоугольную поверхность, которая проходит по сетке и поверхности вращения соответственно.
Исходная полиповерхность, сопоставленная с целевой поверхностью.
Так как с помощью пользовательских узлов можно сопоставлять различные типы кривых, последний файл ссылается на файл SVG, экспортированный из Illustrator, и сопоставляет импортированные кривые с целевой поверхностью.
В результате синтаксического анализа файла SVG кривые преобразуются из формата XML в сложные кривые Dynamo.
Импортированные кривые сопоставляются с целевой поверхностью. Это позволяет явным образом (с помощью указателя) создавать панели поверхности в приложении Illustrator, импортировать их в Dynamo и применять к целевой поверхности.
В упражнении ниже демонстрируются некоторые базовые операции с сетями, выполняемые с помощью Mesh Toolkit. В этом упражнении сеть рассекается на несколько частей при помощи плоскостей, что при использовании тел потребовало бы больших вычислительных мощностей. Сеть, в отличие от тела, имеет заданное «разрешение». Кроме того, она определяется не математически, а топологически. Благодаря этому определение сети можно адаптировать в соответствии с поставленной задачей. Дополнительные сведения о взаимосвязях сетей и тел см. в разделе данного руководства. Подробный обзор пакета Mesh Toolkit см. на . Выполните следующее упражнение, чтобы узнать, как использовать этот пакет на практике.
В этом файле демонстрируется, как с помощью узла PointsToSurface создавать панели поверхности на основе сетки из прямоугольников. Этот принцип вам, скорее всего, уже знаком, так как аналогичный рабочий процесс был представлен в .
Импорт Zero-Touch — это метод, позволяющий легко и быстро импортировать библиотеки C# одним щелчком мыши. Приложение Dynamo считывает общие методы из файла DLL и преобразует их в узлы Dynamo. Функцию Zero-Touch можно использовать для разработки пользовательских узлов и пакетов, а также для импорта внешних библиотек в среду Dynamo.
Файлы DLL
Узлы Dynamo
Zero-Touch позволяет импортировать библиотеки, в том числе разработанные не в Dynamo, и создавать наборы новых узлов. Эта функция является воплощением принципа кросс-платформенности, на котором основывается проект Dynamo.
В этом разделе показан процесс импорта сторонней библиотеки с помощью функции Zero-Touch. Дополнительные сведения о разработке пользовательской библиотеки Zero-Touch см. на странице справки Wiki по работе с Dynamo.
Пакеты Zero-Touch являются хорошим дополнением к пользовательским узлам. В таблице ниже приведены некоторые пакеты, в которых используются библиотеки C#. Дополнительные сведения о пакетах см. в разделе Пакеты приложения.
В этом примере мы рассмотрим процесс импорта внешней библиотеки AForge в формате DLL. AForge — это мощная библиотека, поддерживающая широкий спектр функциональных возможностей — от обработки изображений до искусственного интеллекта. При выполнении приведенных ниже упражнений по обработке изображений мы будет обращаться к классу Imaging этой библиотеки.
Для начала скачайте AForge. На странице загрузки AForge нажмите [ Download Installer ], дождитесь завершения загрузки и выполните установку.
Создайте новый файл в Dynamo и выберите «Файл» > «Импорт библиотеки...».
Затем найдите файл DLL.
В появившемся окне перейдите к подпапке Release в папке установки AForge. Путь к папке, скорее всего, будет выглядеть таким образом: C:\Program Files (x86)\AForge.NET\Framework\Release.
AForge.Imaging.dll: в рамках данного примера нам требуется только этот файл библиотеки AForge. Выберите этот файл DLL и нажмите Открыть.
В Dynamo на панели инструментов «Библиотека» должна появиться группа узлов AForge. Теперь библиотека для работы с изображениями AForge доступна непосредственно в приложении для визуального программирования.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Выполнив импорт библиотеки, можно приступать к первому несложному упражнению (01-EdgeDetection.dyn). Сначала мы выполним базовую обработку стандартного изображения и посмотрим, как AForge осуществляет фильтрацию изображений. Затем мы воспользуемся узлом Watch Image для отображения результатов и применим к изображению фильтры Dynamo, аналогичные фильтрам приложения Photoshop.
Для импорта изображений добавьте узел File Path в рабочую область и выберите файл soapbubbles.jpg в папке материалов для упражнения (источник изображения: flickr).
Узел File Path предоставляет путь к выбранному изображению в виде строки. Теперь необходимо преобразовать его в пригодный для использования файл изображения в Dynamo.
Используйте узел File From Path, чтобы преобразовать путь к файлу в изображение в среде Dynamo.
Соедините узел File Path с узлом File.FromPath.
Чтобы преобразовать файл в изображение, используйте узел Image.ReadFromFile.
Наконец, чтобы увидеть результат, перетащите узел Watch Image в рабочую область и соедините его с Image.ReadFromFile. Мы еще не воспользовались библиотекой AForge, но уже успешно импортировали изображение в Dynamo.
В разделе AForge.Imaging.AForge.Filters (в меню навигации) доступен широкий выбор фильтров. Мы воспользуемся одним из них, чтобы обесцветить изображение в соответствии с пороговыми значениями.
Перетащите в рабочую область три регулятора и задайте для них диапазоны от 0 до 1 с шагом 0,01.
Добавьте в рабочую область узел Grayscale.Grayscale. Это фильтр AForge, который позволяет применить к изображению оттенки серого. Соедините три регулятора, добавленные в шаге 1, с элементами cr, cg и cb. Задайте для верхнего и нижнего регуляторов значение 1, а для среднего — 0.
Чтобы применить оттенки серого, нам нужно задать действие, которое будет выполняться с изображением. Для этого используется узел BaseFilter.Apply. Соедините выходной параметр image с входным параметром image, а выходной параметр Grayscale.Grayscale с входным параметром baseFilter.
Соедините этот узел с новым узлом Watch Image, и вы получите обесцвеченное изображение.
Благодаря заданию пороговых значений для красного, зеленого и синего цветов можно управлять тем, как именно будет обесцвечиваться изображение. Пороговые значения задаются через входные параметры узла Grayscale.Grayscale. Обратите внимание, что изображение выглядит довольно тусклым. Это вызвано тем, что для регулятора зеленого цвета задано значение 0.
Задайте для верхнего и нижнего регуляторов значение 0, а для среднего — 1. В результате полученное обесцвеченное изображение становится более контрастным.
Теперь применим к полученному обесцвеченному изображению еще один фильтр. Поскольку изображение обладает определенной контрастностью, мы попробуем применить к нему функцию выделения границ.
Добавьте узел SobelEdgeDetector.SobelEdgeDetector в рабочую область.
Соедините его с узлом BaseUsingCopyPartialFilter.Apply и соедините обесцвеченное изображение с входным параметром изображения этого узла.
В результате мы получаем новое изображение, в котором оператор Собеля выделил все обнаруженные границы.
В результате применения инструмента выделения границ мы получили увеличенное изображение пузырьков, границы которых выделены с помощью пикселей. В библиотеке AForge есть инструменты, которые позволяют использовать подобные результаты для создания геометрии Dynamo. Мы рассмотрим их в следующем упражнении.
Теперь, когда мы ознакомились с базовыми возможностями обработки изображений, можно приступить к использованию изображений для создания геометрии Dynamo. Ваша минимальная задача в рамках этого упражнения — выполнить так называемую быструю трассировку изображения с помощью AForge и Dynamo. Пока что в целях простоты мы ограничимся извлечением прямоугольников из опорного изображения, однако в AForge доступны инструменты и для более сложных операций. В этом упражнении мы используем файл 02-RectangleCreation.dyn из загруженного набора материалов для упражнения.
С помощью узла File Path задайте путь к файлу grid.jpg в папке материалов для упражнения.
Соедините последовательно оставшиеся узлы, как показано выше, чтобы отобразить грубую параметрическую сетку.
На следующем шаге мы зададим белые прямоугольники из этого изображения в качестве опорных объектов и преобразуем их в геометрию Dynamo. Библиотека AForge включает множество мощных инструментов компьютерного распознавания образов. В этом упражнении будет использован один из ключевых инструментов под названием BlobCounter.
После добавления узла BlobCounter в рабочую область необходимо выполнить обработку изображения (аналогично использованию инструмента BaseFilter.Apply в предыдущем упражнении).
К сожалению, найти узел обработки изображений Process Image в библиотеке Dynamo может быть затруднительно. Это связано с тем, что эта функция может быть не видна в исходном коде библиотеки AForge. Чтобы обойти эту проблему, потребуется временное решение.
Добавьте узел Python в рабочую область и вставьте в него следующий код. Этот код позволяет импортировать библиотеку AForge, а затем обработать импортированное изображение.
При соединении порта вывода image с портом ввода узла Python последний выдает результат AForge.Imaging.BlobCounter.
Следующие шаги включают в себя операции, требующие определенного опыта работы с API-интерфейсом обработки изображений AForge. Это не значит, что для работы с Dynamo обязательно нужно обладать этими знаниями. Мы сделали это в целях демонстрации гибких возможностей работы с внешними библиотеками в среде Dynamo.
Соедините порт вывода узла сценария Python с узлом BlobCounterBase.GetObjectRectangles. При этом объекты изображения считываются в соответствии с заданным пороговым значением, после чего квантифицированные прямоугольники извлекаются из пиксельного пространства.
Добавьте еще один узел Python в рабочую область, соедините его с узлом GetObjectRectangles и введите в него код, указанный ниже. В результате создается упорядоченный список объектов Dynamo.
Добавьте узел Transpose к порту вывода узла Python из предыдущего шага. Создаются четыре списка, содержащие значения координат X и Y, а также ширины и высоты для каждого прямоугольника.
С помощью узла Code Block упорядочим данные таким образом, чтобы их можно было использовать в узле Rectangle.ByCornerPoints (см. код ниже).
Вы увидите массив прямоугольников, представляющих белые квадраты на изображении. Таким образом, с помощью программирования мы смогли выполнить операцию, аналогичную быстрой трассировке в программе Adobe Illustrator.
Теперь нам нужно удалить из изображения все лишнее. Увеличив масштаб, вы увидите маленькие прямоугольники, которые требуется удалить.
Теперь напишем коды, чтобы избавиться от ненужных прямоугольников.
Вставьте узел Python между узлом GetObjectRectangles и другим узлом Python. Приведенный ниже код для этого узла позволяет удалить все прямоугольники, размер которых меньше заданного значения.
Удалив лишние прямоугольники, мы можем поэкспериментировать и создать поверхность из прямоугольников, а затем выдавить их на глубину, соответствующую их площади.
Наконец, измените значение both_sides на false, чтобы получить выдавливание в одном направлении. Если залить то, что у нас здесь получилось, эпоксидной смолой, то у нас был бы модный столик в стиле хай-тек.
Мы выполнили несколько простых упражнений, однако процедуры, которые здесь рассматривались, можно использовать гораздо более интересным образом для самых разных целей. Возможности компьютерного распознавания образов применимы в широчайшем спектре процессов, таких как сканирование штрихкодов, подгонка перспективы, наложение данных проекции, дополненная реальность и многое другое. Дополнительные темы по работе с библиотекой AForge, связанные с этим упражнением, см. в данной статье.
Логотип/изображение
Имя