После создания пользовательских узлов необходимо упорядочить и опубликовать их в формате пакетов. Пакеты упрощают хранение узлов, а также позволяют с легкостью делиться ими с другими пользователями Dynamo.
В 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» > «Установленные пакеты».
Затем нажмите «Показать корневую папку», чтобы открыть корневую папку для этого пакета.
Откроется корневая папка пакета. Обратите внимание, что в ней содержится три папки и файл.
В папке 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 будут рассматриваться более подробно и не только с точки зрения конечного пользователя, но и в контексте их самостоятельной разработки.
Рядом с DynamoUnfold выберите меню параметров.
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. На снимках экрана ниже показаны принципы, реализованные в файлах примеров.
В этом файле демонстрируется, как с помощью узла PointsToSurface создавать панели поверхности на основе сетки из прямоугольников. Этот принцип вам, скорее всего, уже знаком, так как аналогичный рабочий процесс был представлен в предыдущей главе.
В данном файле, где используется похожий рабочий процесс, показан алгоритм сопоставления окружностей (или полигонов, представляющих окружности) одной поверхности с окружностями другой. При этом используется узел PolygonsToSurface.
Это более сложный файл примера, так как в нем используется узел NurbsCrvToSurface. Целевая поверхность смещена на заданное расстояние, а NURBS-кривая сопоставлена с исходной целевой поверхностью и смещенной поверхностью. К двум сопоставленным кривым применяется функция лофтинга для создания поверхности, толщина которой затем увеличивается. Полученное тело имеет неровность, соответствующую нормалям целевой поверхности.
В этом файле примера показано, как сопоставить исходную гофрированную полиповерхность с целевой поверхностью. Исходная и целевая поверхности представляют собой прямоугольную поверхность, которая проходит по сетке и поверхности вращения соответственно.
Исходная полиповерхность, сопоставленная с целевой поверхностью.
Так как с помощью пользовательских узлов можно сопоставлять различные типы кривых, последний файл ссылается на файл SVG, экспортированный из Illustrator, и сопоставляет импортированные кривые с целевой поверхностью.
В результате синтаксического анализа файла SVG кривые преобразуются из формата XML в сложные кривые Dynamo.
Импортированные кривые сопоставляются с целевой поверхностью. Это позволяет явным образом (с помощью указателя) создавать панели поверхности в приложении Illustrator, импортировать их в Dynamo и применять к целевой поверхности.
Dynamo Mesh Toolkit содержит инструменты для импорта сетей из внешних файлов других форматов, создания сетей из геометрических объектов Dynamo и построения сетей вручную по вершинам и индексам. В библиотеке также содержатся инструменты для редактирования и восстановления сетей, а также для извлечения горизонтальных срезов, используемых в ходе изготовления изделий.
Пакет Dynamo Mesh Toolkit — это результат непрерывной работы специалистов Autodesk, направленной на исследование сетей. В ближайшие годы функциональные возможности пакета будут постоянно улучшаться и пополняться. Разработчики Dynamo с нетерпением ждут ваших отзывов и предложений по новым функциям, а также сообщений об обнаруженных ошибках.
В упражнении ниже демонстрируются некоторые базовые операции с сетями, выполняемые с помощью Mesh Toolkit. В этом упражнении сеть рассекается на несколько частей при помощи плоскостей, что при использовании тел потребовало бы больших вычислительных мощностей. Сеть, в отличие от тела, имеет заданное «разрешение». Кроме того, она определяется не математически, а топологически. Благодаря этому определение сети можно адаптировать в соответствии с поставленной задачей. Дополнительные сведения о взаимосвязях сетей и тел см. в разделе Геометрия для автоматизированного проектирования данного руководства. Подробный обзор пакета Mesh Toolkit см. на странице справки Wiki по 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 обновит пакет в интернете с учетом новых файлов в корневой папке этого пакета. Проще простого.
Если файлы в корневой папке опубликованного пакета были изменены, можно также опубликовать новую версию этого пакета, выбрав вариант Публикация версии... на вкладке Мои пакеты. Эта функция позволяет с легкостью вносить в содержимое необходимые обновления и обмениваться данными с сообществом пользователей. Пользоваться функцией Публикация версии могут только разработчики соответствующего пакета.
Импорт 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, связанные с этим упражнением, см. в данной статье.
Логотип/изображение
Имя