Зачем использовать текстовое программирование в среде визуального программирования Dynamo? У визуального программирования много преимуществ. Оно позволяет создавать программы в интуитивно-понятном визуальном интерфейсе, не обладая навыками работы со специальным синтаксисом. Однако визуальная программа может оказаться перегруженной, а порой и недостаточно функциональной. Для сравнения, в Python реализованы гораздо более доступные способы записи условных выражений (если/то) и создания циклов. Python — это мощный инструмент, который позволяет расширить возможности Dynamo и заменить большое количество узлов компактными строками кода.
Визуальная программа
Текстовая программа
Подобно блокам кода узлы Python представляют собой интерфейс сценариев в среде визуального программирования. Узел Python находится в библиотеке в разделе Script > Editor > Python Script.
Двойной щелчок на узле приводит к открытию редактора сценариев Python (можно также щелкнуть узел правой кнопкой мыши и выбрать команду Редактировать...). Сверху находится подсказка, которая поможет обратиться к нужным библиотекам. Входные данные хранятся в массиве IN. Значения возвращаются в Dynamo путем назначения им переменной OUT.
Библиотека Autodesk.DesignScript.Geometry позволяет использовать точечные обозначения, аналогичные блокам кода (узлам Code Block). Дополнительные сведения о синтаксисе Dynamo см. в файле https://github.com/DynamoDS/DynamoPrimerNew/blob/master-rus/coding-in-dynamo/7_code-blocks-and-design-script/7-2_design-script-syntax.md, а также в Руководстве по DesignScript (чтобы скачать этот файл PDF, щелкните правой кнопкой мыши ссылку и выберите «Сохранить как»). При вводе определенного типа геометрии (например Point), отображается список методов, доступных для создания и запроса точек.
Методы включают в себя конструкторы (например, ByCoordinates), действия (например, Add) и запросы (например, координаты X, Y и Z).
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
В этом примере мы напишем сценарий Python для создания образцов на основе твердотельного модуля и преобразуем этот сценарий в пользовательский узел. Сначала создадим твердотельный модуль с помощью узлов Dynamo.
Rectangle.ByWidthLength. Создайте прямоугольник, который будет служить основой твердого тела.
Surface.ByPatch. Соедините прямоугольник с входным параметром closedCurve для создания нижней поверхности.
Geometry.Translate. Соедините прямоугольник с входным параметром geometry для его перемещения вверх, используя блок кода для указания толщины основания тела.
Polygon.Points. Запросите извлечение угловых точек из преобразованного прямоугольника.
Geometry.Translate. Используйте блок кода для создания списка из четырех значений, соответствующих четырем точкам, перемещающим один угол тела вверх.
Polygon.ByPoints. С помощью преобразованных точек воссоздайте верхний полигон.
Surface.ByPatch. Присоедините полигон для создания верхней поверхности.
Теперь, имея в распоряжении верхнюю и нижнюю поверхности, выполним лофтинг между двумя профилями, чтобы создать стороны тела.
List.Create. Соедините нижний прямоугольник и верхний полигон с входными параметрами индекса.
Surface.ByLoft. Выполните лофтинг двух профилей для создания сторон тела.
List.Create. Соедините верхнюю, боковую и нижнюю поверхности с входными параметрами индекса для создания списка поверхностей.
Solid.ByJoinedSurfaces. Соедините поверхности для создания твердотельного модуля.
Теперь, получив твердое тело, перетащите в рабочее пространство узел сценария Python.
Чтобы добавить дополнительные входные параметры к узлу, закройте редактор и щелкните значок «+» на узле. Входным параметрам присваиваются имена IN[0], IN[1] и т. д. Это говорит о том, что они представляют элементы в списке.
Начнем с определения входных и выходных параметров. Дважды щелкните узел, чтобы открыть редактор Python. Используйте приведенный ниже код, чтобы изменить код в редакторе.
Смысл этого кода будет понятен позже по мере выполнения упражнения. Далее необходимо подумать о том, какая информация необходима для создания массива на основе имеющегося твердотельного модуля. Во-первых, необходимо знать размеры тела, чтобы определить расстояние переноса. Из-за ошибки, связанной с ограничивающей рамкой, для ее создания необходимо использовать геометрию кривой кромки.
Посмотрите, как выглядит узел Python в Dynamo. Обратите внимание, что используется тот же синтаксис, что и в заголовках узлов Dynamo. Ознакомьтесь с кодом, приведенным ниже.
Поскольку твердотельные модули будут не только преобразовываться, но и поворачиваться, воспользуемся операцией Geometry.Transform. Если посмотреть на узел Geometry.Transform, становится понятно, что для преобразования тела потребуется исходная система координат и целевая система координат. В качестве первой выступает контекстная система координат тела, а в качестве второй — система координат, которая различна для каждого модуля массива. Таким образом, чтобы система координат каждый раз преобразовывалась по-разному, необходимо перебирать значения координат по осям X и Y.
Нажмите кнопку «Выполнить», а затем сохраните код. Соедините узел Python с существующим сценарием следующим образом.
Соедините выходные данные узла Python с узлом Solid.ByJoinedSurfaces в качестве первого порта ввода и используйте узел Code Block для определения других входных данных.
Создайте узел Topology.Edges и используйте в качестве входных данных выходные данные узла Python.
Наконец, создайте узел Edge.CurveGeometry и в качестве входных данных используйте выходные данные Topology.Edges.
Попробуйте изменить начальное значение для создания различных образцов. Кроме того, можно изменять параметры самого твердотельного модуля для получения различных эффектов.
Создав нужный сценарий Python, сохраним его как пользовательский узел. Выберите узел сценария Python, щелкните правой кнопкой мыши рабочее пространство и выберите «Создание пользовательского узла».
Присвойте имя, добавьте описание и категорию.
При этом откроется новое рабочее пространство для редактирования пользовательского узла.
Inputs. Измените имена входных параметров, сделав их более описательными, и добавьте типы данных и значения по умолчанию.
Output: измените имя узла Output.
Сохраните узел в виде файла DYF. В пользовательском узле отобразятся внесенные изменения.