Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
В этом разделе рассматриваются основные узлы, доступные в библиотеке Dynamo, которые помогут создать собственную визуальную программу на профессиональном уровне.
Геометрия для вычислительного проектирования: принципы работы с геометрическими элементами в Dynamo. Изучите несколько способов создания простых или сложных геометрий на основе примитивов.
Компоновочные блоки программ: сведения о том, что такое данные и каковы основные типы данных, которые можно использовать в программе. Узнайте больше о том, как внедрять математические и логические операции в рабочий процесс проектирования.
Проектирование на основе списков: сведения о том, как управлять структурами данных и координировать их. Узнайте больше о понятии списка и используйте его для эффективного управления проектными данными.
Словари в Dynamo: сведения о том, что такое словари. Узнайте, как использовать словари для поиска конкретных данных и значений из набора существующих результатов.
В этом указателе представлена дополнительная информация обо всех узлах, используемых в учебнике, а также о других компонентах, которые могут оказаться полезными. Это лишь краткое описание некоторых из 500 узлов Dynamo.
СОЗДАНИЕ
Color.ByARGB Создание цвета путем комбинирования альфа-компонента с красным, зеленым и синим компонентами.
Цветовой диапазон Получение цвета на основе цветового градиента между начальным и конечным цветом.
ДЕЙСТВИЯ
Color.Brightness Получение значения яркости для данного цвета.
Color.Components Вывод списка компонентов цвета в следующем порядке: альфа, красный, зеленый, синий.
Color.Saturation Получение значения насыщенности для данного цвета.
Color.Hue Получение значения оттенка для данного цвета.
ЗАПРОС
Color.Alpha Поиск альфа-компонента цвета (от 0 до 255).
Color.Blue Поиск синего компонента цвета (от 0 до 255).
Color.Green Поиск зеленого компонента цвета (от 0 до 255).
Color.Red Поиск красного компонента цвета (от 0 до 255).
СОЗДАНИЕ
GeometryColor.ByGeometryColor Отображение геометрии с помощью цвета.
ДЕЙСТВИЯ
View.Watch Визуализация выходных данных узла.
View.Watch 3D Динамический предварительный просмотр геометрии.
ДЕЙСТВИЯ
Логическое Выбор между значениями True и False.
Code Block Непосредственная разработка кода DesignScript.
Directory Path Выбор папки в системе и получение пути к ней.
File Path Выбор файла в системе и получение его имени.
Integer Slider Регулятор, создающий целые значения.
Number Создание числа.
Number Slider Регулятор, создающий числовые значения.
String Создание строки.
Object.IsNull Определение того, имеет ли данный объект нулевое значение.
СОЗДАНИЕ
List.Create Создание нового списка из заданных входных значений.
List.Combine Применение комбинатора к каждому элементу в двух последовательностях.
Number Range Создание последовательности чисел в заданном диапазоне.
Number Sequence Создание последовательности чисел.
ДЕЙСТВИЯ
List.Chop Разделение списка на набор списков, содержащих заданное количество элементов.
List.Count Получение количества элементов, хранящихся в данном списке.
List.Flatten Выравнивание вложенного списка списков по определенному количественному значению.
List.FilterByBoolMask Фильтрация последовательности путем поиска соответствующих индексов в отдельном списке логических операций.
List.GetItemAtIndex Получение элемента из данного списка, расположенного по заданному индексу.
List.Map Применение функции ко всем элементам списка с созданием нового списка на основе результатов.
List.Reverse Создание нового списка, содержащего элементы из заданного списка, расположенные в обратном порядке.
List.ReplaceItemAtIndex Замена элемента из данного списка, расположенного по заданному индексу.
List.ShiftIndices Смещение индексов в списке вправо на заданную величину.
List.TakeEveryNthItem Извлечение элементов из данного списка по индексам, которые являются множителями заданного значения, после заданного смещения.
List.Transpose Перестановка строк и столбцов в списке списков. Если некоторые строки короче других, то в конечный массив в качестве заполнителей вставляются нулевые значения, чтобы он оставался прямоугольным.
ДЕЙСТВИЯ
If Условное выражение. Проверка логического значения тестового ввода. Если тестовый ввод истинен, в результате выводится значение True; в противном случае выводится значение False.
ДЕЙСТВИЯ
Math.Cos Нахождение косинуса угла.
Math.DegreesToRadians Преобразование единиц угла из градусов в радианы.
Math.Pow Возведение числа в заданную степень.
Math.RadiansToDegrees Преобразование единиц угла из радианов в градусы.
Math.RemapRange Корректировка диапазона списка чисел при сохранении коэффициента распределения.
Math.Sin Поиск синуса угла.
Formula Оценка математических формул. Для оценки используется NCalc. См. раздел http://ncalc.codeplex.com
Map Сопоставление значения с диапазоном входных данных.
ДЕЙСТВИЯ
String.Concat Объединение нескольких строк в одну.
String.Contains Определение того, содержит ли данная строка подстроку.
String.Join Объединение нескольких строк в одну со вставкой заданного разделителя между объединяемыми строками.
String.Split Разделение одной строки на список строк, деления которого определяются заданными строками-разделителями.
String.ToNumber Преобразование строки в целое или двойное число.
СОЗДАНИЕ
Circle.ByCenterPointRadius Построение окружности с входным центром и радиусом в плоскости XY мировой системы координат с осью Z мировой системы координат в качестве нормали.
Circle.ByPlaneRadius Создание окружности с входным центром в начале координат плоскости, находящейся в заданной плоскости, с заданным радиусом.
СОЗДАНИЕ
CoordinateSystem.ByOrigin Создание объекта CoordinateSystem с началом координат во входной точке, с осями X и Y, соответствующими осям X и Y МСК.
CoordinateSystem.ByCyclindricalCoordinates Создание объекта CoordinateSystem с заданными параметрами цилиндрических координат относительно заданной системы координат.
СОЗДАНИЕ
Cuboid.ByLengths Создание кубоида с центром в начале координат МСК с определенной шириной, длиной и высотой.
Cuboid.ByLengths (origin)
Создание кубоида с центром во входной точке с определенной шириной, длиной и высотой.
Cuboid.ByLengths (coordinateSystem)
Создание кубоида с центром в начале координат МСК с определенной шириной, длиной и высотой.
Cuboid.ByCorners
Создание пролета кубоида от нижней до верхней точки.
Cuboid.Length
Возврат входных размеров кубоида, а НЕ фактических размеров мирового пространства. **
Cuboid.Width
Возврат входных размеров кубоида, а НЕ фактических размеров мирового пространства. **
Cuboid.Height
Возврат входных размеров кубоида, а НЕ фактических размеров мирового пространства. **
BoundingBox.ToCuboid
Получение ограничивающей рамки в виде твердотельного кубоида.
** Другими словами, при создании кубоида длиной 10 по ширине (ось X) и преобразовании его в систему координат с 2-кратным масштабированием по оси X, его ширина останется равной 10. ASM не позволяет извлекать вершины тела в каком-либо предсказуемом порядке, поэтому после преобразования определить размеры невозможно.
ДЕЙСТВИЯ
Curve.Extrude (расстояние) Выдавливание кривой в направлении вектора нормали.
Curve.PointAtParameter Получение точки на кривой по заданному параметру между StartParameter() и EndParameter().
ДЕЙСТВИЯ
Geometry.DistanceTo Получение расстояния от этого до другого геометрического объекта.
Geometry.Explode Расчленение составных или неразделенных элементов на компоненты.
Geometry.ImportFromSAT Список импортированных геометрических объектов.
Geometry.Rotate (basePlane) Поворот объекта относительно начала координат плоскости и нормали на заданное количество градусов
Geometry.Translate Перенос любого типа геометрии на заданное расстояние в заданном направлении.
СОЗДАНИЕ
Line.ByBestFitThroughPoints Создание линии, максимально приближенной к графику рассеяния точек.
Line.ByStartPointDirectionLength Построение прямой линии от начальной точки в направлении вектора на заданную длину.
Line.ByStartPointEndPoint Построение прямой линии между двумя заданными точками.
Line.ByTangency Создание линии, касательной к исходной кривой, расположенной в точке параметра исходной кривой.
QUERY
Line.Direction Направление кривой.
Создание
NurbsCurve.ByControlPoints Создание объекта BSplineCurve с использованием явно заданных управляющих точек.
NurbsCurve.ByPoints Создание элемента BSplineCurve путем интерполяции между точками.
Создание
NurbsSurface.ByControlPoints Создание объекта NurbsSurface по явно заданным управляющим точкам с заданными значениями кривизны U и V.
NurbsSurface.ByPoints Создание объекта NurbsSurface с заданными интерполированными точками и значениями кривизны U и V. Полученная поверхность проходит через все точки.
СОЗДАНИЕ
Plane.ByOriginNormal Создание плоскости с центром в корневой точке с входным вектором нормали.
Plane.XY Создание плоскости XY в МСК.
СОЗДАНИЕ
Point.ByCartesianCoordinates Построение точки в заданной системе координат с тремя декартовыми координатами.
Point.ByCoordinates (2d) Построение точки в плоскости XY по двум заданным декартовым координатам. Координата Z равна 0.
Point.ByCoordinates (3d) Построение точки по трем заданным декартовым координатам.
Point.Origin Получение точки начала координат (0,0,0).
ДЕЙСТВИЯ
Point.Add Добавление вектора к точке. Аналогично Translate (вектор).
QUERY
Point.X Получение координаты точки по оси X.
Point.Y Получение координаты точки по оси Y.
Point.Z Получение координаты точки по оси Z.
СОЗДАНИЕ
Polycurve.ByPoints Создание объекта PolyCurve из последовательности линий, соединяющих точки. Последняя точка замкнутой кривой должна находиться в том же месте, что и начальная точка.
СОЗДАНИЕ
Rectangle.ByWidthLength (плоскость) Построение прямоугольника с центром во входном корне плоскости с входной шириной (расстояние по оси плоскости X) и длиной (расстояние по оси плоскости Y).
СОЗДАНИЕ
Sphere.ByCenterPointRadius Создание твердотельного шара с заданным радиусом с центром во входной точке.
СОЗДАНИЕ
Surface.ByLoft Создание поверхности посредством лофтинга между входными кривыми поперечного сечения.
Surface.ByPatch Создание поверхности путем заполнения пространства внутри замкнутой границы, заданной входными кривыми.
ДЕЙСТВИЯ
Surface.Offset Смещение поверхности в направлении нормали поверхности на заданное расстояние.
Surface.PointAtParameter Получение точки с заданными параметрами U и V.
Surface.Thicken Утолщение поверхности до формирования тела с выдавливанием в направлении нормалей поверхности с обеих сторон поверхности.
СОЗДАНИЕ
UV.ByCoordinates Создание UV из двух двойных значений.
СОЗДАНИЕ
Vector.ByCoordinates Построение вектора на основе трех евклидовых координат.
Vector.XAxis Получение канонического вектора оси X (1,0,0).
Vector.YAxis Получение канонического вектора оси Y (0,1,0).
Vector.ZAxis Получение канонического вектора оси Z (0,0,1).
ДЕЙСТВИЯ
Vector.Normalized Получение нормализованной версии вектора.
СОЗДАНИЕ
CoordinateSystem.ByOrigin Создание объекта CoordinateSystem с началом координат во входной точке, с осями X и Y, соответствующими осям X и Y МСК.
CoordinateSystem.ByCyclindricalCoordinates Создание объекта CoordinateSystem с заданными параметрами цилиндрических координат относительно заданной системы координат.
+ Сложение
- Вычитание
* Умножение
/ Деление
% При модульном делении выполняется поиск остатка первых введенных данных после деления на вторые.
< Меньше, чем
> Больше, чем
== Проверка равенства двух значений.
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Изначально приложение Dynamo задумывалось как надстройка Revit для информационного моделирования зданий, однако со временем оно стало самостоятельным многофункциональным решением. В первую очередь Dynamo — это платформа, позволяющая проектировщикам изучать процессы визуального программирования, устранять возникающие проблемы и создавать собственные инструменты. Знакомство с приложением Dynamo следует начать с изучения того, что оно из себя представляет и как именно его можно использовать.
Данное руководство включает главы, составленные Mode Lab. В этих главах основное внимание уделяется принципам, которые позволят вам приступить к разработке собственных визуальных программ в Dynamo, а также полезным советам по повышению эффективности использования Dynamo.
Данное руководство предназначено для пользователей с самыми разными навыками и опытом. В указанных ниже разделах можно найти общие сведения о настройке Dynamo, пользовательском интерфейсе и ключевых понятиях. Начинающим пользователям рекомендуется изучить следующие темы:
Для более глубокого понимания каждого элемента, например конкретных узлов и понятий, лежащих в их основе, представлена отдельная глава.
Для ознакомления с рабочими процессами Dynamo мы добавили несколько графиков в раздел «Примеры рабочих процессов». При создании собственных графиков Dynamo следуйте прилагаемым инструкциям.
В последующих главах, посвященных Dynamo, рассматриваются более специализированные упражнения. Упражнения обычно приводятся в последнем разделе на каждой странице.
То, чем Dynamo является сегодня, — во многом заслуга постоянного круга активных пользователей и профессиональных программистов, помогающих приложению развиваться. Станьте участником нашего сообщества: читайте блог, публикуйте результаты своей работы в галерее или обсуждайте Dynamo с другими пользователями на форуме.
Приложение Dynamo задумывалось как средство визуального программирования для проектировщиков, в котором можно создавать инструменты для работы с внешними библиотеками или любой программой Autodesk с API. Dynamo Sandbox позволяет создавать программы в среде песочницы, но экосистема, в которой существует Dynamo, постоянно пополняется и расширяется.
Исходный код проекта является открытым, благодаря чему расширять функциональность приложения можно настолько, насколько хватит фантазии. Посетите страницу проекта Dynamo на сайте GitHub и просмотрите текущие проекты пользователей, занимающихся адаптацией Dynamo.
Просматривайте интересные проекты, создавайте Fork-копии и адаптируйте Dynamo под свои потребности.
Dynamo — это платформа визуального программирования с открытым исходным кодом для проектировщиков.
Представляем Dynamo Primer — исчерпывающее руководство по визуальному программированию в Autodesk Dynamo. Это активный проект, целью которого является распространение сведений по основам программирования. Здесь содержатся практические советы по проектированию на основе правил, рассматриваются такие темы, как работа с вычислительной геометрией, применение программирования в различных направлениях деятельности, а также многие другие возможности платформы Dynamo.
Преимущество Dynamo заключается в широком спектре поддерживаемых операций, связанных с проектированием. Dynamo предлагает широкий спектр возможностей по началу работы.
Познакомьтесь с принципами визуального программирования.
Соедините между собой рабочие процессы из разных программ.
Участвуйте в жизни активного сообщества пользователей, программистов и разработчиков.
Разрабатывайте проект на платформе с открытым исходным кодом, чтобы способствовать его постоянному улучшению.
Чтобы не потеряться среди этих увлекательных возможностей, требуется руководство по работе с Dynamo, отвечающее потребностям пользователей на всех перечисленных уровнях, от новичков до опытных. Это и есть Dynamo Primer.
Подробные сведения о преимуществах данного руководства Primer приведены в руководстве пользователя.
Мы постоянно работаем над улучшением Dynamo, поэтому некоторые функции могут на вид отличаться от представленных в этом руководстве. Однако все функциональные изменения будут отражены наглядно и точно.
Проект Dynamo Primer открыт для всех. Мы стремимся предоставлять качественную информацию и будем рады вашим отзывам. Если вы хотите сообщить о какой-либо проблеме, опубликуйте свой вопрос на соответствующей странице GitHub: https://github.com/DynamoDS/DynamoPrimer/issues.
Если вы хотите предложить новый раздел, правки или другие изменения по этому проекту, ознакомьтесь с нашим хранилищем на GitHub: https://github.com/DynamoDS/DynamoPrimer.
Dynamo Primer — это проект с открытым исходным кодом, который был инициирован Мэттом Джезиком (Matt Jezyk) и группой по разработке Dynamo в компании Autodesk.
Первая версия этого руководства была составлена специалистами Mode Lab. Мы выражаем им благодарность за то, что положили начало этому ценному ресурсу.
Обновление этого руководства в соответствии с изменениями, внесенными в Dynamo 2.0, было выполнено Джоном Пирсоном (John Pierson) из компании Parallax Team.
Обновление этого руководства в соответствии с изменениями, внесенными в Dynamo 2.13, было выполнено специалистами Matterlab.
Обновление этого руководства в соответствии с изменениями, внесенными в Dynamo 2.17, было выполнено специалистами Archilizer.
Обновление этого руководства в соответствии с изменениями, внесенными в Dynamo for Civil 3D, было выполнено специалистами Wood Rodgers.
Выражаем особую благодарность Иэну Кио (Ian Keough) за то, что положил начало проекту Dynamo.
Мы благодарим Мэтта Йежика (Matt Jezyk), Иэна Кио (Ian Keough), Зака Крона (Zach Kron), Рэйсель Амур (Racel Amour) и Колина МакКрона (Colin McCrone) за активную совместную работу и возможность принять участие в широком спектре проектов Dynamo.
Dynamo Последнюю стабильную версию Dynamo можно найти на следующих веб-сайтах.
http://dynamobim.com/download/ или http://dynamobuilds.com
* Примечание. Начиная с версии Revit 2020, Dynamo включается в комплект установки Revit, поэтому устанавливать Dynamo вручную не требуется. Подробные сведения см. в этом блоге.
DynamoBIM. Веб-сайт DynamoBIM — это наилучшее место для получения дополнительной информации, поиска обучающих материалов и общения на форумах.
http://dynamobim.org
Страница Dynamo на GitHub. Dynamo — это проект разработки с открытым исходным кодом, размещенный на GitHub. Если вы хотите внести свой вклад в работу над ним, посетите DynamoDS.
https://github.com/DynamoDS/Dynamo
Контактная информация. Если вы обнаружите какую-либо проблему в этом документе, сообщите нам об этом.
Dynamo@autodesk.com
Copyright 2023 Autodesk
Лицензировано Apache License, Version 2.0 («Лицензия»); использовать только в совокупности с Лицензией. Копию Лицензии можно получить по следующему адресу:
http://www.apache.org/licenses/LICENSE-2.0
За исключением случаев, предусматриваемых соответствующим законом или заключенным в письменном виде соглашением, программное обеспечение, распространяемое на условиях Лицензии, распространяется «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО УСЛОВИЙ И ГАРАНТИЙ, выраженных в явной форме или подразумеваемых. Текст Лицензии содержит точные разъяснения разрешенного и запрещенного использования программных продуктов на условиях Лицензии.
Dynamo — это приложение для визуального программирования, которое можно скачать и запустить в автономном режиме «песочницы» или в качестве подключаемого модуля для другого программного обеспечения, например Revit, FormIt или Civil 3D.
Подробнее о различиях между Dynamo Core/Revit/Sandbox.
Dynamo предоставляет доступ к процессу визуального программирования, который позволяет создавать пользовательские алгоритмы путем определения связей между элементами, образующими последовательность действий. Эти алгоритмы можно применять для широкого спектра задач — от обработки данных до создания геометрии, — и все это в реальном времени без написания единой строчки code
.
Узлы и провода — это ключевые компоненты Dynamo для поддержки процесса визуального программирования. Это позволяет установить прочные визуальные и системные взаимосвязи между частями проекта. Соединение узлов щелчком мыши при разработке проекта позволяет оптимизировать рабочий процесс.
Приложение Dynamo является надежным помощником в решении самых разных задач, начиная с использования средств визуального программирования для проектирования рабочих процессов и заканчивая разработкой специализированных инструментов.
Пользовательский интерфейс Dynamo разделен на пять основных областей. В следующих разделах подробно рассматривается рабочее пространство и библиотека.
Меню
Панель инструментов
Библиотека
Рабочее пространство
Панель выполнения
Здесь указаны меню для основных функций приложения Dynamo. Как и в большинстве программ Windows, первые два меню связаны с управлением файлами, операциями выбора и редактированием содержимого. В остальных меню содержатся функции, присущие именно Dynamo.
Общие сведения и настройки можно найти в раскрывающемся меню Dynamo.
О программе: данные о версии Dynamo, установленной на компьютере.
Соглашение о сборе данных об использовании: возможность принять участие в обмене пользовательскими данными для улучшения работы Dynamo или отказаться от него.
Настройки: параметры, такие как точность десятичных знаков в приложении и качество визуализации геометрии.
Выход из Dynamo
При возникновении вопросов по работе программы воспользуйтесь меню Справка. Для доступа к справочным веб-сайтам Dynamo можно использовать веб-браузер.
Начало работы: краткое введение в работу с приложением Dynamo.
Интерактивные руководства.
Образцы: файлы примеров для справки.
Словарь Dynamo: ресурс с документацией по всем узлам.
Веб-сайт Dynamo: просмотр проекта Dynamo на GitHub.
Проект Dynamo Wiki: переход на страницу справки Wiki, посвященную методам разработки с помощью API Dynamo, вспомогательных библиотек и инструментов.
Показ начальной страницы: возврат на начальную страницу Dynamo при работе с документом.
Отчет об ошибке: создание инцидента на веб-сайте GitHub.
Панель инструментов Dynamo содержит ряд кнопок для быстрого доступа к файлам, а также команды «Отменить» [CTRL+Z] и «Повторить [CTRL+Y]». Справа находится еще одна кнопка, с помощью которой можно экспортировать снимок рабочего пространства, что часто требуется при работе с документацией и совместном использовании данных.
Библиотека Dynamo — это набор функциональных библиотек, каждая из которых содержит узлы, сгруппированные по категориям. Она содержит базовые библиотеки, которые добавляются при установке Dynamo по умолчанию. В рамках этой процедуры мы продолжим знакомство с ее использованием. Мы рассмотрим, как расширить базовые функции с помощью пользовательских узлов и дополнительных пакетов. В разделе Библиотека содержатся подробные инструкции по использованию.
Рабочее пространство позволяет создавать визуальные программы и изменять настройки предварительного просмотра для отображения 3D-геометрии. Дополнительные сведения см. в разделе Рабочее пространство.
Обеспечивает запуск сценария Dynamo. Щелкните значок раскрывающегося списка на кнопке «Выполнение», чтобы переключиться между различными режимами.
«Автоматически»: сценарий запускается автоматически. Изменения применяются в реальном времени.
«Вручную»: сценарий выполняется только при нажатии кнопки «Запуск». Используется при внесении изменений в сложный и крупный сценарий.
«Периодически»: по умолчанию этот параметр неактивен. Он становится доступен только при использовании узла DateTime.Now. С его помощью можно настроить автоматическое выполнение сценария с заданным интервалом.
Dynamo — это активный проект разработки с открытым исходным кодом. Ознакомьтесь со списком программ, поддерживающих Dynamo
Dynamo поставляется в комплекте с таким программным обеспечением, как Revit 3D, FormIt, Civil 3D и т. д.
Дополнительные сведения об использовании Dynamo с конкретным программным обеспечением см. в следующих разделах.
Чтобы использовать Dynamo как автономное приложение, продолжите чтение статьи для ознакомления с инструкциями по скачиванию Dynamo Sandbox.
Приложение Dynamo доступно на веб-сайте Dynamo. Официальные, предыдущие и предварительные версии доступны на странице загрузки. Перейдите на страницу скачивания Dynamo и нажмите кнопку Загрузить, чтобы получить официальную версию.
Чтобы получить предшествующую или последнюю версию, перейдите в нижний раздел на той же странице.
Новейшие разработки включают в себя новые экспериментальные возможности, которые еще не прошли полную проверку, поэтому могут функционировать нестабильно. С помощью этой версии можно обнаружить ошибки или проблемы, помочь нам улучшить приложение, сообщив о проблемах нашей команде.
Для начинающих пользователей рекомендуется официальная стабильная версия.
Перед запуском любой скачанной версии необходимо распаковать содержимое в выбранную папку.
Скачайте и установите на компьютер программу 7zip для выполнения этого шага.
Щелкните правой кнопкой мыши файл ZIP и выберите Извлечь все.
Выберите папку для распаковки всех файлов.
В выбранной папке дважды щелкните файл DynamoSandbox.exe, чтобы запустить его.
Отображается следующий экран запуска DynamoSandbox.
Поздравляем! Настройка DynamoSandbox завершена.
Геометрия — это дополнительная функция в Dynamo Sandbox, доступная только пользователям с действующей подпиской или лицензией на следующие программные продукты Autodesk: Revit, Robot Structural Analysis, FormIt и Civil 3D. Геометрия позволяет импортировать, создавать, редактировать и экспортировать геометрию из Dynamo Sandbox.
Узлы Dynamo — это объекты, путем соединения которых создается визуальная программа. Каждый узел выполняет ту или иную операцию. Это может быть как простая операция, например хранение числа, так и более сложная, например создание или запрос геометрического объекта.
Большинство узлов Dynamo состоит из пяти частей. За некоторыми исключениями (например, входные узлы) в большинстве своем узлы имеют следующую структуру.
Имя: имя узла, имеющее формат
Category.Name
.Основная часть узла: если щелкнуть ее правой кнопкой мыши, отобразятся параметры, действующие на уровне узла.
Порты (ввода и вывода): разъемы для проводов, передающих входные данные для узла, а также результаты выполненной узлом операции.
Значение по умолчанию: щелкните порт ввода правой кнопкой мыши. Для некоторых узлов заданы значения по умолчанию, которые можно использовать или игнорировать.
Значок переплетения: значение параметра «Переплетение», заданное для совпадающих входных данных списка (подробные сведения см. далее).
Порты — это вводы и выводы узлов, играющие роль разъемов для проводов. В порты, расположенные слева, поступают входящие данные, а из портов, расположенных справа, передаются далее результаты выполненной операции.
Каждый порт рассчитан на прием данных определенного типа. Если соединить с портами узла Point.ByCoordinates число, например 2.75, то операция выполнится успешно и будет создана точка. Но если вместо числа соединить с тем же портом текстовое значение, например Red, это приведет к ошибке.
Совет. Наведите курсор на порт, чтобы увидеть подсказку о требуемом типе данных.
Метка порта
Подсказка
Тип данных
Значение по умолчанию
Для демонстрации состояния выполнения операций в узлах визуальной программы в Dynamo используются разные цвета. Иерархия состояний определяется следующим образом: ошибка > предупреждение > информация > просмотр.
Если навести курсор на имя или порты, либо щелкнуть их правой кнопкой мыши, отобразятся дополнительные сведения и параметры.
Соответствующие входные данные: если над входными портами узла отображаются синие вертикальные полосы, это означает, что узел правильно подключен, и в него поступают входные данные нужного типа.
Несоответствующие входные данные: если над одним или несколькими входными портами узла отображается красная вертикальная полоса, нужно подключить эти порты так, чтобы в них поступали входные данные нужного типа.
Функция: это узел, выводом которого является функция и порт вывода которого помечен серой вертикальной полосой.
Выбранный: выбранные узлы выделяются голубой рамкой по периметру.
Замороженный: замороженными являются полупрозрачные синие узлы, и выполнение операций таких узлов приостановлено.
Предупреждение: желтый цвет строки состояния под узлом указывает на состояние предупреждения. Это значит, что в узле отсутствуют входные данные либо используются неверные типы данных.
Ошибка: красный цвет строки состояния под узлом указывает на то, что в узле произошла ошибка.
Сведения: синий цвет строки состояния под узлом указывает на информационное состояние, которое обозначает наличие полезных сведений об узлах. Переход к этому состоянию может быть вызван значением, близким к максимальному значению, поддерживаемому узлом, либо таким использованием узла, при котором может пострадать производительность, и т. д.
Совет. Используя информацию из подсказки, проверьте узлы, предшествующие текущему, на наличие ошибок в типе или структуре требуемых данных.
Подсказка с предупреждением: не указанные данные или значение Null не могут использоваться как данные типа Double (то есть, число).
Используйте узел Watch, чтобы просмотреть входные данные.
Узел Number, предшествующий текущему, передает на выходе текстовое значение Red, а не число.
В некоторых случаях может потребоваться предотвратить выполнение операций определенных узлов в визуальной программе. Это можно сделать, заморозив узел. Этот параметр доступен в контекстном меню узла.
При замораживании узла также замораживаются следующие за ним узлы. Другими словами, все узлы, которые зависят от вывода замороженного узла, также будут заморожены.
Провода соединяют друг с другом узлы, создавая тем самым связи и обеспечивая поток выполнения операций в рамках визуальной программы. Их можно воспринимать как настоящие электрические провода, передающие заряды (данные) от одного объекта к другому.
Каждый провод соединяет порт вывода одного узла с портом ввода другого. Такой порядок подключения определяет направление потока данных в визуальной программе.
Порты ввода находятся слева от узлов, а порты вывода — справа, поэтому можно сказать, что поток выполнения операций в программе направлен слева направо.
Для создания провода нужно щелкнуть сначала порт одного узла, а затем порт другого узла, чтобы установить соединение. В процессе создания соединения провод отображается пунктирной линией, после чего становится сплошным.
Данные всегда проходят по проводам в направлении от вывода к вводу, однако последовательность выбора соединяемых портов не играет роли и может быть любой.
Зачастую при работе над визуальной программой возникает необходимость в корректировке потока выполнения операций путем редактирования проводов, играющих роль соединительных элементов. Чтобы отредактировать провод, щелкните порт ввода подсоединенного узла. Далее выберите один из следующих вариантов:
Чтобы изменить подключение к порту ввода, щелкните другой порт ввода.
Чтобы удалить провод, перетащите его в сторону от узла, а затем щелкните в рабочем пространстве.
Чтобы повторно соединить несколько проводов, щелкните нужные элементы при нажатой клавише SHIFT.
Чтобы дублировать провод, щелкните нужный элемент при нажатой клавише CTRL.
По умолчанию провода отображаются при просмотре как серые прерывистые линии. При выборе узла все подключенные к нему провода выделяются голубым цветом, как и сам узел.
Выделенный провод
Провод по умолчанию
Скрытие проводов по умолчанию
Если требуется скрыть провода на графике, снимите флажок «Показать соединители» в меню «Просмотреть» > «Соединители».
В данном случае бледно-голубым цветом будут отображаться только выбранные узлы и соединенные с ними провода.
Чтобы скрыть только выбранный провод, щелкните правой кнопкой мыши вывод узла и выберите «Скрыть провода».
«Создать»: создание нового файла DYN.
«Открыть»: открытие существующего файла DYN (рабочее пространство) или DYF (пользовательский узел).
«Сохранить»/«Сохранить как»: сохранение активного файла DYN или DYF.
«Отменить»: отмена последнего действия.
«Повторить»: повтор действия.
«Экспорт рабочего пространства в виде изображения»: экспорт видимого рабочего пространства в виде файла PNG.
Чтобы начать работу, запустите данную программу на панели инструментов. В зависимости от используемого программного обеспечения, значок запуска обычно находится на вкладке «Меню» > Управление. Щелкните значок Dynamo , чтобы запустить программу.
Просмотр откл.: серый цвет строки состояния под узлом и значок глаза указывают на то, что просмотр геометрии для этого узла отключен.
Если визуальная программа содержит предупреждения или ошибки, то Dynamo предоставляет подробную информацию о проблеме. Над именем каждого желтого узла отображается подсказка. Наведите курсор на значок подсказки с предупреждением или ошибкой , чтобы узнать подробности.
Dynamo — это среда визуального программирования, которая позволяет пользователям создавать процессы обработки данных. Данные — это числа или текст. Но это также и геометрия. С точки зрения компьютера, геометрия (иногда ее также называют вычислительной геометрией) — это данные, которые можно использовать для создания эстетичных, детализированных или высокопроизводительных моделей. Для этого нужно сначала внимательно изучить различные типы геометрии, доступные для использования.
Рабочее пространство Dynamo состоит из четырех основных элементов.
Все активные вкладки
Режим предварительного просмотра
Элементы управления масштабированием/панорамированием
Узел в рабочем пространстве
При открытии нового файла по умолчанию открывается новое исходное рабочее пространство.
Можно создать пользовательский узел и открыть его в рабочем пространстве пользовательского узла.
В каждом окне Dynamo можно использовать только одно исходное рабочее пространство, однако на вкладках можно открыть несколько рабочих пространств пользовательского узла.
Существует три способа переключения между режимами предварительного просмотра.
a. Использование значков в верхней части экрана справа
b. Щелчком правой кнопкой мыши в рабочем пространстве
Переключение из режима 3D-просмотра в режим предварительного просмотра графика
Переключение из режима предварительного просмотра графика в режим 3D-просмотра
c. С помощью горячей клавиши (CTRL + B)
Для навигации в любом рабочем пространстве можно использовать значки или мышь.
a. В режиме Предварительный просмотр графика
Использование значков:
Использование мыши:
Щелчок левой кнопкой мыши — выбор
Щелчок левой кнопкой мыши и перетаскивание — выбор нескольких точек
Прокрутка колесика вперед/назад — увеличение/уменьшение
Перетаскивание с удерживаемой средней кнопкой мыши — панорамирование
Щелчок правой кнопкой мыши в любом месте активного окна — открытие окна поиска в активном окне
b. В режиме 3D-просмотра
Использование значков:
Использование мыши:
Прокрутка колесика вперед/назад — увеличение/уменьшение
Перетаскивание с удерживаемой средней кнопкой мыши — панорамирование
Щелчок правой кнопкой мыши и перетаскивание — вращение
Щелкните левой кнопкой мыши, чтобы выбрать какой-либо узел.
Чтобы выбрать несколько узлов, щелкните и перетащите указатель для создания рамки выбора.
Точка определяется одним или несколькими значениями, которые называют координатами. Количество значений координат, необходимых для определения точки, зависит от системы координат или контекста, в котором она находится.
Самый распространенный тип точки в Dynamo существует в трехмерной мировой системе координат и имеет три координаты: [X,Y,Z] (3D-точка в Dynamo).
2D-точка в Dynamo имеет две координаты — [X,Y].
Параметры кривых и поверхностей являются непрерывными и выходят за пределы заданной геометрии. Поскольку формы, определяющие параметрическое пространство, находятся в трехмерной мировой системе координат, параметрическую координату можно всегда легко преобразовать в «мировую». Например, точка [0.2, 0.5] на поверхности соответствует точке [1.8, 2.0, 4.1] в системе мировых координат.
Точка в предполагаемой системе мировых координат XYZ.
Точка, представленная относительно заданной системы координат (цилиндрической).
Точка, представленная координатами UV на поверхности.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Если геометрия — это язык модели, то точки — ее алфавит. Точки являются основой для создания всех прочих объектов геометрии. Для создания кривой требуется не менее двух точек, для создания полигона или грани сети — не менее трех и т. д. Определение положения, порядка и связей между точками (например, с помощью функции синуса) позволяет работать с геометрией более высокого порядка, в том числе с такими элементами, как окружности или кривые.
Окружность, построенная с помощью функций
x=r*cos(t)
иy=r*sin(t)
.Синусоидальная кривая, построенная с помощью функций
x=(t)
иy=r*sin(t)
.
Точки также могут существовать в двумерной системе координат. В зависимости от типа рабочего пространства, могут использоваться различные буквенные обозначения — [X,Y] на плоскости или [U,V] на поверхности.
Точка в евклидовой системе координат: [X,Y,Z]
Точка в системе координат параметров кривой: [t]
Точка в системе координат параметров поверхности: [U,V]
Кривые — это первый из рассматриваемых здесь типов геометрических данных с привычным набором свойств, определяющих форму объекта (степень изгиба, длина и т. д.). Следует помнить, что основной единицей при построении любых объектов — от отрезка до сплайна и всех прочих типов кривых — остаются точки.
Отрезок
Полилиния
Дуга
Окружность
Эллипс
NURBS-кривая
Сложная кривая
NURBS — это модель, используемая для точного представления кривых и поверхностей. Создайте синусоидальную кривую в Dynamo с помощью двух различных методов создания кривых NURBS и сравните результаты.
Узел NurbsCurve.ByControlPoints в качестве управляющих точек использует список точек.
Узел NurbsCurve.ByPoints создает кривую по списку точек.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Под термином кривая обычно понимаются все типы криволинейных форм (даже если они являются прямолинейными). Таким образом, кривая — это родительская категория, в которую входят все эти типы форм: отрезки, окружности, сплайны и т. д. В техническом плане кривая описывает все возможные точки, которые можно найти, путем ввода параметра «t» в набор простых (x = -1.26*t, y = t
) или высших математических функций. Независимо от типа кривой, искомым свойством является данный параметр, условно обозначаемый как «t». Кроме этого, все кривые, независимо от своей формы, также имеют начальную и конечную точки, которые соответствуют минимальному и максимальному значениям «t», используемым для создания кривой. Это также позволяет определить направленность кривой.
Важно помнить, что в Dynamo область значений «t» для кривой охватывает диапазон от 0,0 до 1,0.
Все кривые также имеют ряд свойств или характеристик, которые можно использовать для их описания или анализа. Если расстояние между начальной и конечной точками равно нулю, кривая будет замкнутой. Кроме этого, каждая кривая имеет несколько управляющих точек. Если все эти точки расположены в одной плоскости, то кривая будет плоской. Некоторые свойства применяются ко всей кривой, другие — только к определенным точкам на кривой. Например, планарность является глобальным свойством, а вектор касательной при заданном значении — локальным.
Отрезки — это простейшая форма кривых. Хотя они могут не выглядеть изогнутыми, на самом деле, это кривые, у которых просто отсутствует кривизна. Существует несколько способов создания отрезков, наиболее простым из которых является создание отрезка от точки A до точки B. Форма отрезка AB заключена между этими точками, но математически она бесконечно продолжается в обоих направлениях.
При соединении двух отрезков создается полилиния. На этом изображении наглядно показано, что собой представляет управляющая точка. При изменении положения любой из этих точек изменится и форма полилинии. Если полилиния замкнута, получится полигон. Если длина всех ребер полигона одинакова, он будет правильным.
Постепенно усложняя параметрические функции, определяющие форму, можно построить не просто отрезок, но и дугу, окружность, эллиптическую дугу или эллипс, задав один или два радиуса. Отличие между дугой и окружностью или эллипсом состоит только в том, что последние две формы являются замкнутыми.
NURBS (неоднородные сплайны с рациональной основой ) — это математические представления, которые позволяют точно смоделировать любую форму: от простого двумерного отрезка, окружности, дуги или прямоугольника до сложнейшей трехмерной органичной кривой произвольной формы. Благодаря своей гибкости (плавной интерполяции, в зависимости от заданной степени, при относительно небольшом количестве управляющих точек) и точности (достигаемой за счет сложных математических вычислений) модели NURBS можно использовать в любом процессе, будь то презентация, анимация или производство.
Степень: степень кривой определяет диапазон влияния управляющих точек на кривую (чем выше степень, тем больше диапазон). Степень — это положительное целое число. Обычно это число 1, 2, 3 или 5, но вместо него может использоваться любое другое положительное целое число. NURBS-отрезки и полилинии обычно имеют степень 1, а кривые произвольной формы — степени 3 или 5.
Управляющие точки: список точек в количестве не меньшем, чем «степень + 1». Одним из самых простых способов изменения формы NURBS-кривой является перемещение ее управляющих точек.
Вес: с управляющими точками связано определенное число, которое называется весом. Обычно вес является положительным числом. Если для управляющих точек кривой установлен одинаковый вес (обычно 1), кривая называется нерациональной. В противном случае она считается рациональной. Большинство NURBS-кривых являются нерациональными.
Узлы: список чисел (степень+N-1), где N — количество управляющих точек. Узлы используются вместе со значениями веса для управления влиянием управляющих точек на итоговую кривую. Одной из функций узлов является создание точек излома в определенных точках кривой.
Степень = 1
Степень = 2
Степень = 3
Обратите внимание, что чем выше значение степени, тем больше управляющих точек используется для интерполяции полученной кривой.
Предварительный просмотр графика
Предварительный 3D-просмотр
Вписать
Увеличить
Уменьшить
Панорамирование
Вписать
Увеличить
Уменьшить
Панорамирование
Орбита
Отрезок состоит из набора точек. В каждом отрезке должно быть не менее 2 точек. Один из наиболее распространенных способов создания отрезка в Dynamo — использование Line.ByStartPointEndPoint
для создания отрезка в Dynamo.
Поверхность в модели используется для представления объектов, которые мы видим в нашем трехмерном мире. Несмотря на то, что кривые не всегда являются плоскими и по сути трехмерны, пространство, определяемое ими, всегда является одномерным. Поверхности позволяют придать модели дополнительное измерение, а также включают набор специальных свойств, которые можно использовать при выполнении других операций моделирования.
Импортируйте в Dynamo и проанализируйте объект Surface в конкретном параметре, чтобы узнать, какие сведения можно извлечь.
Surface.PointAtParameter возвращает объект Point в заданной координате UV.
Surface.NormalAtParameter возвращает вектор нормали в заданной координате UV.
Surface.GetIsoline возвращает изопараметрическую кривую в координате U или V (обратите внимание на порт ввода isoDirection).
Скачайте файлы примеров, щелкнув ссылку ниже.
Полный список файлов примеров можно найти в приложении.
Поверхность — это математическая форма, определяемая функцией и двумя параметрами. Вместо параметра t
, используемого для кривых, здесь для описания соответствующего пространства используются параметры U
и V
. Это означает, что при работе с геометрией этого типа появляются дополнительные данные для использования. Например, у кривых есть касательные векторы и плоскости нормали (которые могут поворачиваться или скручиваться вдоль кривой), а у поверхностей есть векторы нормали и касательные плоскости с последовательной ориентацией.
Поверхность
Изолиния U
Изолиния V
Координата UV
Перпендикулярная плоскость
Вектор нормали
Область поверхности: определяется как диапазон параметров (U,V), каждый из которых соответствует трехмерной точке на этой поверхности. Область в каждом измерении (U или V) обычно описывается двумя числами: (от U мин. до U макс.) и (от V мин. до V макс.).
Хотя поверхность может не выглядеть как прямоугольник, а некоторые ее участки могут отличаться более или менее плотным расположением изолиний, «пространство», определяемое областью поверхности, всегда является двумерным. В Dynamo всегда подразумевается, что область поверхности определяется диапазоном значений U и V, где минимальное значение равно 0.0, а максимальное — 1.0. У плоских или обрезанных поверхностей могут быть разные области.
Изолиния (или изопараметрическая кривая): кривая, определяемая постоянным значением для одного направления (U или V) на поверхности и областью значений для другого направления (V или U, соответственно).
Координата UV: точка в пространстве параметров UV, определяемая значениями U, V и иногда W.
Перпендикулярная плоскость: плоскость, перпендикулярная изолиниям U и V в заданной координате UV.
Вектор нормали: вектор, определяющий направление «вверх» относительно перпендикулярной плоскости.
Поверхности NURBS очень похожи на NURBS-кривые. Такую поверхность можно представить в виде сетки из NURBS-кривых, идущих в двух направлениях. Форма поверхности NURBS определяется набором управляющих точек и степенью сглаживания этой поверхности в направлениях U и V. Те же алгоритмы используются для вычисления формы, нормалей, касательных, кривизны и других свойств с помощью управляющих точек, весов и степени сглаживания.
В случае с поверхностями NURBS для геометрии подразумеваются два направления, поскольку эти поверхности являются прямоугольными сетками из управляющих точек, хотя они могут выглядеть совсем по-другому. Эти направления во многих случаях задаются произвольным образом на основе мировой системы координат, однако они часто используются для анализа моделей или создания других геометрических объектов на основе поверхности.
Степень сглаживания (U,V) = (3,3)
Степень сглаживания (U,V) = (3,1)
Степень сглаживания (U,V) = (1,2)
Степень сглаживания (U,V) = (1,1)
Полиповерхности состоят из нескольких поверхностей, кромки которых соединены. Полиповерхности обеспечивают более детализированные сведения, нежели простое двумерное определение UV, благодаря чему их можно использовать для перехода по соединенным формам посредством их топологии.
Термин «топология» в большинстве случаев используется для обозначения того, как различные элементы связаны и взаимодействуют друг с другом. В Dynamo топология (Topology) также является типом геометрии. Topology является родительской категорией таких объектов, как поверхности (Surface), полиповерхности (Polysurface) и тела (Solid).
Объединение поверхностей таким образом (иногда называемое замыканием) позволяет создавать более сложные формы, а также детализировать стыки. К кромкам объекта Polysurface можно применять операции сопряжения или фаски.
Для создания сложных моделей, которые невозможно получить из одной поверхности, или определения явного объема необходимо научиться работе с телами (и полиповерхностями). Даже для самого простого куба требуется целых шесть поверхностей, по одной на каждую грань. Тела позволяют получить доступ к двум ключевым концепциям, не доступным при работе с поверхностями, а именно к уточненным топологическим описаниям (граням, кромкам, вершинам) и логическим операциям.
Для изменения тел применяются логические операции. Попробуйте использовать несколько логических операций для создания шара с шипами.
Sphere.ByCenterPointRadius: создание базового объекта тела Solid.
Topology.Faces, Face.SurfaceGeometry: запрос граней тела и преобразование в геометрию поверхности (в данном случае сфера имеет только одну грань).
Cone.ByPointsRadii: построение конусов, используя точки на поверхности.
Solid.UnionAll: объединение конусов со сферой.
Topology.Edges: запрос кромок нового объекта Solid.
Solid.Fillet: сглаживание кромок шара с шипами.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Логические операции сложны, и их вычисление может занимать много времени. Замораживание можно использовать, чтобы приостановить выполнение операций в выбранных узлах, а также следующих за ними узлах.
1. Используйте контекстное меню, чтобы «заморозить» операцию объединения тел.
2. Выбранный узел и все следующие за ним узлы отображаются светло-серым полупрозрачным цветом, а все затронутые провода отображаются в виде прерывистых линий. Предварительный просмотр соответствующей геометрии также будет полупрозрачным. Теперь можно изменить значения в узлах, предшествующих выбранному, не перегружая приложение расчетом логической операции объединения.
3. Чтобы разморозить узлы, щелкните правой кнопкой мыши и снимите флажок «Заморозить».
4. Все затронутые узлы и изображения предварительного просмотра связанных геометрических объектов обновляются и возвращаются к стандартному виду.
Подробные сведения о замораживании узлов см. в разделе Узлы и провода.
Тела состоят из одной или нескольких поверхностей, внутри которых заключен объем, определенный замкнутым контуром, который отделяет то, что внутри тела, от того, что снаружи. Независимо от количества используемых поверхностей, для того чтобы объект считался телом, содержащийся в нем объем должен быть полностью замкнутым. Тела можно создавать путем объединения поверхностей или полиповерхностей либо с помощью таких операций, как лофтинг, сдвиг и вращение. Такие примитивы, как сфера, куб, конус и цилиндр, также являются телами. Объект Cube, у которого отсутствует хотя бы одна грань, считается полиповерхностью, которая уже не является телом, хотя и обладает многими аналогичными свойствами.
Плоскость состоит из одной поверхности и не является телом.
Сфера состоит из одной поверхности и является телом.
Конус состоит из двух соединенных поверхностей и является телом.
Цилиндр состоит из трех соединенных поверхностей и является телом.
Куб состоит из шести соединенных поверхностей и является телом.
Элементы, из которых состоят тела, делятся на три типа: вершины, кромки и грани. Грани — это поверхности, образующие тело. Кромки — это кривые, обозначающие области соединения смежных граней, а вершины — это начальные и конечные точки этих кривых. Эти элементы можно запросить с помощью узлов Topology.
Грани
Кромки
Вершины
Тела можно изменять путем применения скруглений и фасок к кромкам, чтобы тем самым сгладить острые углы. Операция фаски создает поверхность соединения между двумя гранями, а операция сопряжения сглаживает переход между гранями для сохранения касательности.
Твердотельный куб
Куб с фасками
Скругленный куб
Логические операции для тел — это методы, позволяющие объединить несколько тел в одно. Каждая логическая операция включает в себя четыре операции:
Пересечение двух или более объектов.
Разделение их в местах пересечения.
Удаление ненужных частей геометрии.
Объединение оставшихся частей.
Объединение: несколько тел объединяются в одно с удалением перекрывающихся частей.
Разность: одно тело вычитается из другого. Тело, которое вычитается, называется инструментом. Обратите внимание, что для сохранения обратного объема вычитаемое и подвергающееся вычитанию тела можно поменять местами.
Пересечение: при пересечении сохраняются только перекрывающиеся части двух тел.
UnionAll: операция объединения для сферы и повернутых наружу конусов.
DifferenceAll: операция разности для сферы и повернутых внутрь конусов.
Чтобы углубиться в процесс разработки визуальных программ, нам потребуется более тонкое понимание того, что представляют собой компоновочные блоки программ. В этой главе описываются основные понятия, относящиеся к данным, проходящим по проводам программы Dynamo.
Библиотека содержит все загруженные узлы, включая десять узлов по умолчанию, входящих в установочный пакет, а также все дополнительно загруженные пользовательские узлы и пакеты. Узлы в библиотеке организованы иерархически в виде библиотек, категорий и подкатегорий (если это необходимо).
Основные узлы: входят в установку по умолчанию.
Пользовательские узлы: сохраняйте часто используемые процедуры или специальные графики в качестве пользовательских узлов. Ими также можно поделиться с сообществом.
Узлы из Package Manager: коллекция опубликованных пользовательских узлов.
Мы рассмотрим иерархические категории узлов, способ быстрого поиска узлов в библиотеке, а также некоторые из часто используемых узлов.
Обзор узлов по категориям позволяет быстро разобраться в иерархии узлов, которые требуется добавить в рабочее пространство, а также найти узлы, которыми вы еще не пользовались.
Откройте библиотеку, щелкнув меню, чтобы развернуть каждую категорию и ее подкатегорию.
Начинать знакомство с программой рекомендуется с меню Geometry, так как в них представлено наибольшее количество узлов.
Библиотека
Категория
Подкатегория
Узел
Далее внутри подкатегории выполняется распределение узлов в зависимости от их функции: создание данных, выполнение действия или запрос данных.
Наведите указатель на узел, чтобы посмотреть подробные сведения, помимо его имени и значка. Такие подсказки позволяют быстро определить функции, выполняемые узлом, какие данные ему требуются на входе, и что он выдает на выходе.
Описание: описание узла на обычном языке.
Значок: увеличенная версия значка, используемого в меню библиотеки.
Входные данные: наименование, тип и структура данных.
Выходные данные: наименование, тип и структура данных.
Если вам с относительной точностью известно, какой узел необходимо добавить в рабочее пространство, введите ключевые слова в поле Поиск, чтобы найти все соответствующие узлы.
Щелчком выберите необходимый узел или нажмите клавишу ENTER, чтобы добавить выделенные узлы в центр рабочего пространства.
Поиск узлов можно выполнять не только по ключевым словам, но и по иерархии, разделяя ее уровни точкой в поле поиска, или с помощью узлов Code Block (в которых используется текстовый язык Dynamo).
Иерархия каждой библиотеки отражается в имени узлов, добавляемых в рабочее пространство.
При вводе тех или иных фрагментов расположения узла в библиотечной иерархии в формате library.category.nodeName
отображаются различные результаты.
library.category.nodeName
category.nodeName
nodeName
или keyword
В рабочем пространстве имя узла обычно представлено в формате category.nodeName
. Есть некоторые исключения, в частности, узлы категорий Input и View.
Соблюдайте осторожность при использовании узлов с одинаковыми именами и обращайте особое внимание на различия в категориях, к которым они относятся.
Узлы из большинства библиотек содержат формат категории.
Узлы Point.ByCoordinates
и UV.ByCoordinates
имеют одинаковое имя, но относятся к разным категориям.
К исключениям относятся встроенные функции, узлы Core.Input, Core.View и логические операторы.
В базовый комплект установки приложения Dynamo входят сотни узлов. Какие из них наиболее важны при разработке визуальных программ? Рассмотрим узлы, которые позволяют определить параметры программы (Input), отображать результаты действия, выполняемого тем или иным узлом (Watch), и задавать входные данные или функции с помощью горячей клавиши (Code Block).
Узлы Input — это ключевой инструмент, благодаря которому пользователи визуальных программ могут работать с основными параметрами. Ниже перечислены некоторые узлы, доступные в основной библиотеке.
Логический
Количество
String
Number Slider
Directory Path
Integer Slider
File Path
Узлы Watch играют важную роль в управлении потоком данных в визуальной программе. Результат работы узла можно увидеть в окне предварительного просмотра данных узла, наведя курсор на узел.
Элемент удобно просматривать в узле Watch.
Кроме того, результаты геометрии можно просмотреть с помощью узла Watch3D.
Оба этих узла находятся в категории видов основной библиотеки.
Совет. Иногда при работе с большим количеством узлов пользоваться функцией 3D-просмотра может быть неудобно. В этом случае можно снять флажок фонового просмотра в меню «Параметры» и использовать узел Watch3D для предварительного просмотра геометрии.
Узлы Code Block позволяют создавать блоки кода, состоящие из строк, разделенных запятыми. Это так же просто, как и с узлом X/Y
.
Кроме того, узлы Code Block можно использовать как горячую клавишу для ввода чисел или вызова другой функции узла. Для этого используется синтаксис, соответствующий соглашению об именовании для текстового языка Dynamo — DesignScript.
Ниже приведен простой пример (с инструкциями) по использованию Code Block в сценарии.
Дважды щелкните мышью для создания узла Code Block.
Введите Circle.ByCenterPointRadius(x,y);
.
Щелкните в рабочем пространстве, чтобы отменить выбор и автоматически добавить входные порты x
и y
.
Создайте узлы Point.ByCoordinates и Number Slider, затем соедините их с портами ввода в узле Code Block.
Результат выполнения визуальной программы отображается в виде окружности в окне 3D-просмотра.
Вектор — это представление величины и направления. Его можно изобразить в виде стрелки, которая движется в определенном направлении с заданной скоростью. Векторы являются ключевым компонентом при разработке моделей в Dynamo. Обратите внимание, что поскольку они относятся к категории вспомогательных средств, то при создании векторы не отображаются в области фонового просмотра.
В качестве замены вектору в области предварительного просмотра можно использовать отрезок.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Плоскость — это двумерная поверхность. Ее можно изобразить в виде плоской поверхности, уходящей в бесконечность. Каждая плоскость имеет исходную точку и направления по осям X, Y и Z (вверх).
Хотя плоскости являются абстрактными, они имеют исходную точку, что позволяет определить их положение в пространстве.
В Dynamo плоскости визуализируются в области фонового просмотра.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Система координат — это система для определения местоположения точек и других геометрических элементов. На изображении ниже показано, как это выглядит в Dynamo, и что представляет каждый цвет.
Хотя системы координат являются абстрактными, они имеют исходную точку, что позволяет определить их положение в пространстве.
В Dynamo системы координат визуализируются в области фонового просмотра в виде точки (начало координат) и линий, определяющих оси (согласно принятым нормам, ось X обозначается красным цветом, Y — зеленым, а Z — синим).
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Векторы, плоскости и системы координат составляют основную группу абстрактных типов геометрии. Они помогают задавать расположение, ориентацию и пространственный контекст для других геометрических объектов, определяющих формы. Представим себе человека, который находится в Нью-Йорке на пересечении 42-й улицы и Бродвея (система координат), стоит на тротуаре (плоскость) и смотрит на север (вектор). Мы только что описали местонахождение человека с помощью вспомогательных абстрактных средств. Таким же образом можно задать местонахождение любого объекта, от чехла телефона до небоскреба. Это контекст, необходимый для разработки любой модели.
Вектор — это геометрическая величина, описывающая направление и величину. Векторы являются абстрактными, т. е. они представляют собой некоторую величину, а не геометрический элемент. Векторы легко спутать с точками, поскольку они также состоят из списка значений. Однако существует одно важное отличие: точки описывают положение в заданной системе координат, а векторы описывают относительную разницу в положении, что аналогично понятию направления.
Если идея относительной разницы не вполне ясна, представьте, что вектор AB означает следующее: вы стоите в точке A и смотрите в точку B. Направление от одной точки (A) до другой (B) и будет вектором.
Рассмотрим подробнее структуру векторов на примере вектора AB.
Начальная точка вектора называется его началом.
Конечная точка вектора называется его концом или направлением.
Вектор AB и вектор BA — это два разных вектора, поскольку они указывают в противоположных направлениях.
Чтобы отдохнуть от слишком формальных и абстрактных определений вектора и посмеяться, посмотрите классическую комедию «Аэроплан!» (Airplane!), где есть следующая знаменитая цитата:
Roger, Roger. What's our vector, Victor? (Роджер, Роджер. Каков наш вектор, Виктор?)
Плоскости являются двумерной абстрактной вспомогательной геометрией. Плоскости по определению являются «плоскими» и бесконечно расширяются в двух направлениях. Обычно они визуализируются в виде небольшого прямоугольника в начале координат.
Но постойте, скажете вы. Начало координат? Как в системе координат, которая используется для моделирования в САПР?
Совершенно верно. В большинстве программ моделирования используются плоскости построения, или «уровни», с помощью которых определяется локальный двумерный контекст для создания черновиков чертежей. XY, XZ, YZ или, возможно, более знакомые вам «север», «юго-восток», «план» — все это плоскости, определяющие бесконечный «плоский» контекст. Плоскости не имеют глубины, но они помогают описать направление.
Если мы с вами освоили плоскости, то разобраться с системами координат нам не составит труда. Плоскость состоит из тех же компонентов, что и система координат, при условии что это стандартная евклидова система координат или система координат XYZ.
Однако имеются и другие альтернативные системы координат, например цилиндрические или сферические. Как будет показано в следующих разделах, системы координат можно также применять к другим типам геометрии для указания положения в пределах этой геометрии.
Можно добавить альтернативные системы координат — цилиндрические и сферические.
Числа являются самой простой формой данных, а самым простым способом связать эти числа между собой является математика. Начиная от элементарных операторов, таких как деление, и заканчивая тригонометрическими функциями и более сложными формулами, математика — отличный способ начать знакомство с отношениями и закономерностями в мире чисел.
Оператор — это набор компонентов, в которых используются алгебраические функции с двумя входными числовыми значениями, результатом которых является одно выходное значение (сложение, вычитание, умножение, деление и т. д.). Они находятся в разделе «Операторы» > «Действия».
Сложение (+)
var[]...[], var[]...[]
var[]...[]
Вычитание (–)
var[]...[], var[]...[]
var[]...[]
Умножение (*)
var[]...[], var[]...[]
var[]...[]
Деление (/)
var[]...[], var[]...[]
var[]...[]
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Объединяйте операторы и переменные для формирования более сложной связи с помощью формул. Используйте регуляторы для создания формулы, которой можно управлять с помощью входных параметров.
1. Создайте числовую последовательность, которая представляет собой «t» в параметрическом уравнении. Теперь нужен достаточно большой список для определения спирали.
Number Sequence. Определим последовательность чисел на основе трех входных параметров: start, amount и step.
2. На предыдущем шаге был создан список чисел для определения области параметрических компонентов. Создайте группу узлов, представляющих уравнение золотой спирали.
Золотая спираль определяется по следующей формуле:
На изображении ниже представлена золотая спираль в форме визуального программирования. Рассматривая группу узлов, обратите внимание на соответствие между визуальной программой и уравнением в записи.
a. Number Slider. Добавьте два регулятора чисел в рабочую область. Эти регуляторы будут задавать переменные a и b параметрического уравнения. Они представляют собой гибкую константу или параметры, которые можно настроить для получения желаемого результата.
b. Multiplication (*). Узел умножения обозначен звездочкой. Он будет часто использоваться для соединения умножаемых переменных
c. Math.RadiansToDegrees. Значения «t» необходимо преобразовать в градусы для их оценки в тригонометрических функциях. Следует помнить, что для оценки этих функций в Dynamo по умолчанию используются градусы.
d. Math.Pow. В качестве функции «t» и числа «e» этот узел создает последовательность Фибоначчи.
e. Math.Cos и Math.Sin. С помощью этих двух тригонометрических функций будут различаться координаты X и Y (соответственно) для каждой параметрической точки.
f. Watch. В качестве выходных данных отображается два списка, которые будут выступать в качестве координат x и y точек, используемых для формирования спирали.
Хотя набор узлов из предыдущего этапа будет выполнять поставленные задачи, этот процесс довольно трудоемкий. Для повышения эффективности работы ознакомьтесь с разделом DesignScript, в котором показано, как в одном узле разместить строку выражений Dynamo. На последующих этапах рассмотрим использование параметрического уравнения для построения спирали Фибоначчи.
Point.ByCoordinates. Соедините верхний узел умножения с входным параметром «x», а нижний — с входным параметром «y». На экране отобразится параметрическая спираль, проходящая через точки.
Polycurve.ByPoints. Соедините узел Point.ByCoordinates из предыдущего шага с входным параметром points. Параметр connectLastToFirst можно оставить без входных данных, поскольку мы не будем создавать замкнутую кривую. Таким образом, получаем спираль, которая проходит через каждую точку, заданную на предыдущем шаге.
Спираль Фибоначчи создана. Продолжим работу и выполним еще два упражнения, которые назовем «Наутилус» и «Подсолнух». Продемонстрируем два варианта использования спирали Фибоначчи на примере этих представителей естественных систем.
Circle.ByCenterPointRadius. Узел окружности будет иметь те же входные данные, что и на предыдущем шаге. Значение радиуса по умолчанию равно 1.0, поэтому окружности создаются сразу. Четко видно, каким образом точки отклоняются от начала координат.
Number Sequence. Это исходный массив элементов «t». Если соединить его со значением радиуса узла Circle.ByCenterPointRadius, центры окружностей будут по-прежнему отклоняться дальше от начального положения, но радиус окружностей будет увеличиваться, создавая необычный график спирали Фибоначчи.
3D-изображение этого объекта будет выглядеть замечательно.
Массив. После создания раковины наутилуса перейдем к параметрическим сеткам. Используя основной угол вращения спирали Фибоначчи, создайте сетку Фибоначчи, а на ее основе — модель расположения семян цветка подсолнуха.
Начнем с того же шага, что и в предыдущем упражнении: создадим массив точек спирали с помощью узла Point.ByCoordinates.
![](../images/5-3/2/math-part IV-01.jpg)
Далее выполните следующие небольшие действия, чтобы создать последовательность спиралей с различным вращением.
a. Geometry.Rotate. Существует несколько вариантов узла Geometry.Rotate. Убедитесь, что выбран узел с входными параметрами geometry, basePlane и degrees. Соедините узел Point.ByCoordinates с входным параметром «geometry». Щелкните правой кнопкой мыши этот узел и убедитесь, что для переплетения задано значение «Векторное произведение».
b. Plane.XY. Соедините узел с входным параметром basePlane. Вращение будет выполняться вокруг начала координат, которое совпадает с основанием спирали.
c. Number Range. Для входного параметра значений градусов необходимо создать несколько вращений. Это можно быстро сделать с помощью компонента Number Range. Соедините его с входным параметром degrees.
d. Number. Чтобы задать диапазон чисел, добавьте три узла Number в рабочую область в вертикальном порядке. В нисходящей последовательности назначьте значения 0.0,360.0 и 120.0 соответственно. Они будут определять вращение спирали. Обратите внимание на результаты вывода из узла Number Range после соединения с ним трех узлов Number.
Полученное изображение начинает напоминать водоворот. Скорректируйте некоторые параметры Number Range и посмотрите, как изменятся результаты.
Измените размер шага в узле Number Range, задав вместо значения 120.0 значение 36.0. Обратите внимание, что при этом генерируется больше вращений, и, следовательно, создается более плотная сетка.
Измените размер шага в узле Number Range, задав вместо значения 36.0 значение 3.6. Получится более плотная сетка, а у спирали будет отсутствовать направление. Итак, мы создали подсолнух.
Списки помогают упорядочивать данные. В операционной системе компьютера существуют файлы и папки. Приложение Dynamo устроено аналогично, только роль файлов в нем играют элементы, а папок — списки. Как и в операционной системе, в Dynamo существует множество способов создания, изменения и запроса данных. В этой главе рассказывается о том, как управлять списками в Dynamo.
Формально строка — это последовательность символов, представляющих литеральную константу или переменную определенного типа. Однако на сленге программистов строкой называется любой текст. Мы уже говорили о том, как можно управлять параметрами с помощью целых и десятичных чисел. Аналогичным образом можно работать и с текстом.
Строки применяются в разных ситуациях, в том числе при настройке пользовательских параметров, аннотировании документации и анализе текстовых наборов данных. Узел String находится в разделе Core > Input Category.
Примеры узлов выше являются строками. В виде строки может быть представлено число, буква или целый массив текста.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
С помощью запроса строк можно быстро анализировать большие объемы данных. Поговорим о некоторых основных операциях, которые могут ускорить рабочий процесс и обеспечить совместимость программного обеспечения.
На следующем изображении показана строка данных из внешней электронной таблицы. Строка представляет вершины прямоугольника в плоскости XY. Рассмотрим подробнее некоторые операции по разделению строк в небольшом упражнении.
В качестве разделителя вершин прямоугольника используется точка с запятой («;»). При этом создается список, содержащий 3 элемента для каждой вершины.
Если нажать знак «+» посредине узла, будет создан новый разделитель.
Добавьте строку «,» в рабочую область и соедините ее с новым входным параметром separator.
Получится список из десяти элементов. Сначала в качестве разделителя узла используется значение separator0, а затем — separator1.
Хотя элементы списка на изображении выше выглядят как числа, в Dynamo они все так же считаются отдельными строками. Для создания точек тип соответствующих данных необходимо преобразовать из строкового в числовой. Для этого используется узел String.ToNumber.
Этот узел достаточно прост. Соедините результаты String.Split с входным параметром. Кажется, что выходные данные не изменились, но теперь типом данных будет number, а не string.
Добавив несколько дополнительных операций, вы создали треугольник на основе исходных строковых входных данных в начале координат.
Так как строка является типовым текстовым объектом, у нее есть множество применений. Рассмотрим основные действия в разделе Core > String Category в Dynamo.
На изображении представлен метод объединения двух строк по порядку. Берется каждая литеральная строка в списке и создается одна объединенная строка.
На следующем изображении показана операция объединения трех строк.
Нажатием кнопок «+/-» в центре узла можно добавлять или удалять строки.
На выходе получается одна объединенная строка с пробелами и знаками препинания.
Метод соединения очень похож на метод объединения, но в нем есть дополнительный слой пунктуации.
Пользователям, работающим с Excel, могут быть знакомы файлы CSV. CSV расшифровывается как comma-separated values — значения, разделенные запятыми. Чтобы создать данные с аналогичной структурой, в узле String.Join в качестве разделителя можно использовать запятую (или в данном случае два дефиса).
На следующем изображении показано соединение двух строк.
Входной параметр separator позволяет создать строку, выступающую в качестве разделителя соединенных строк.
В этом упражнении с помощью методов запроса строк и операций со строками мы разберем последнее четверостишие стихотворения американского поэта Роберта Фроста Stopping By Woods on a Snowy Evening. Хотя это не самый практичный пример, он поможет понять, как выполнять основные операции со строками в связном тексте с размером и рифмой.
Начнем с разделения строк четверостишия. Прежде всего, обратим внимание на то, что в стихотворении используются запятые. С помощью них можно будет разделить каждую строчку на отдельные элементы.
Исходная строка вставляется в узел String.
Для указания разделителя используется еще один узел String. В данном случае разделителем будет запятая.
В рабочую область добавляется узел String.Split, который соединяется с двумя строками.
На выходе строчки разделены на отдельные элементы.
Перейдем к самой интересной части стихотворения: последним двум строчкам. Исходное четверостишие представляло собой один элемент данных. Сперва эти данные были разделены на отдельные элементы. Теперь необходимо найти нужный нам текст. Хотя это можно осуществить, выбрав два последних элемента списка, в случае с целой книгой не обязательно прочитывать ее всю и выделять элементы вручную.
Вместо того чтобы выполнять поиск вручную, используйте узел String.Contains для поиска набора символов. Это аналогично команде «Найти» в текстовом редакторе. В этом случае при обнаружении подстроки в элементе возвращается значение «Истина» или «Ложь».
Для входного параметра searchFor определите подстроку, которую необходимо найти в четверостишии. Воспользуйтесь узлом String с текстом «And miles».
На выходе получим список значений «Истина» и «Ложь». Воспользуемся этой логикой для фильтрации элементов на следующем этапе.
Для отбора значений True и False используйте узел List.FilterByBoolMask. Выходной параметр in возвращает выражения с входным значением mask, для которых действительно значение «Истина», а выходной параметр out — выражения, для которых действительно значение «Ложь».
Результат на выходном параметре in соответствует ожиданиям, то есть мы получаем две последние строки четверостишия.
Теперь необходимо воссоздать повтор, объединив две строки вместе. Если посмотреть на результаты выполнения предыдущего шага, можно заметить, что в списке присутствуют два элемента.
С помощью двух узлов List.GetItemAtIndex можно изолировать элементы, используя значения 0 и 1 в качестве входных данных индекса.
На выходе из каждого узла получаем последние две строки, расположенные по порядку.
Для объединения этих двух элементов в один используйте узел String.Join.
После добавления узла String.Join становится понятно, что требуется разделитель.
Для создания разделителя добавьте узел String в рабочую область и введите запятую.
Конечный результат — объединение двух последних элементов в один.
Изолирование двух последних строк может показаться довольно трудоемким процессом. Это действительно так — операции со строками часто требуют предварительной подготовки. Однако эти операции масштабируемы и могут сравнительно легко применяться к большим наборам данных. Если работа с электронными таблицами и настройка совместимости осуществляются на параметрической основе, обязательно помните об операциях со строками.
Логика (а точнее условная логика) позволяет задать действие или набор действий в зависимости от результата проверки. После прохождения проверки выдается логическое значение True
или False
, которое можно использовать для управления ходом программы.
Числовые переменные могут хранить целый диапазон различных чисел. В логических переменных хранятся только два значения: «Истина» или «Ложь», да или нет, 1 или 0. Из-за ограниченной применимости логические операции можно не так часто встретить в расчетах.
Выражение «If» является ключевым для программирования. Если некое условие истинно, то происходит что-то одно; в противном случае происходит что-то другое. Действие, выполняемое после проверки с помощью данного выражения, зависит от логического значения. Существует несколько способов определения выражения If в Dynamo.
If (If)
test, true, false
результат
Formula (IF(x,y,z))
x, y, z
результат
Code Block ((x?y:z);)
X, Y, Z
результат
Рассмотрим краткий пример с каждым из этих трех узлов в действии, используя условное выражение If.
На этом изображении в узле boolean задано значение true. Это означает, что на выходе появится строка this is the result if true (это результат при истинном значении). Три узла, образующие выражение If, работают одинаково.
Напомним, что узлы работают одинаково. Если для boolean изменить значение на false, результатом будет число пи, как определено в исходном операторе If.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Используем логику, чтобы разделить список чисел на список четных и список нечетных чисел.
a. Number Range. Добавление диапазона чисел в рабочую область.
b. Numbers. Добавление трех узлов Number в рабочую область. Каждый узел Number должен иметь следующие значения: 0.0 для start, 10.0 для end и 1.0 для step
c. Output. На выходе получается список из 11 чисел в диапазоне от 0 до 10.
d. Modulo (%). Диапазон номеров в качестве входных данных для x и значение 2.0 в качестве входных данных для y. При этом рассчитывается остаток каждого числа в списке при делении на 2. На выходе из этого списка будет представлен список чередующихся значений 0 и 1.
e. Equality Test (==). Добавление в рабочую область проверки равенства. Соедините выходные данные modulo с входным параметром x, а значение 0.0 с входным параметром y.
f. Watch. В качестве выходных данных проверки равенства будет представлен список значений «Истина» (true) и «Ложь» (false). С помощью этих значений элементы будут разделяться в списке. 0 (или true) соответствует четным числам, а 1 (или false) — нечетным.
g. List.FilterByBoolMask. Этот узел отфильтровывает значения по двум разным спискам в зависимости от вводимого логического выражения. Соедините исходный диапазон чисел с входным параметром list, а выходной параметр проверки равенства с входным параметром mask. В выходных данных in представлены истинные значения, а в out — ложные.
h. Watch. В результате мы получили списки четных и нечетных чисел. Итак, с помощью логических операторов мы разделили списки по определенному признаку.
Применим логику из первого упражнения к моделированию.
2. За основу возьмем предыдущее упражнение с теми же узлами. Помимо изменения формата, единственными исключениями будут следующие.
a. Используйте узел Sequence с этими входными значениями.
b. Отсоединен входной параметр list от узла List.FilterByBoolMask. Эти узлы пока не нужны, но они потребуются позже.
3. Начнем с создания отдельной группы Graph, как показано на изображении выше. Эта группа узлов представляет собой параметрическое уравнение для определения линейной кривой. Примечания.
a. Первый регулятор Number Slider представляет частоту волны в диапазоне от 1 до 4 с шагом 0,01.
b. Второй регулятор Number Slider представляет амплитуду волны в диапазоне от 0 до 1 с шагом 0,01.
c. PolyCurve.ByPoints. Если скопировать приведенную выше схему узлов, на видовом экране предварительного просмотра Dynamo будет создана синусоидальная кривая.
При вводе данных используйте числовые узлы для более статических свойств и регуляторы чисел для более гибких свойств. Необходимо сохранить исходный диапазон чисел, который определяется в начале этого шага. Однако синусоидальная кривая, которую мы пытаемся создать, должна обладать определенной гибкостью. Перемещая регуляторы, можно видеть частотные и амплитудные изменения кривой.
4. Забежим немного вперед и посмотрим на конечный результат, чтобы представить, каким он должен быть. Первые два шага выполняются отдельно, теперь их нужно соединить. С помощью базовой синусоидальной кривой будет определяться местоположение компонентов молнии, а с помощью логики «истина/ложь» — элементы меньшего или большего размера.
a. Math.RemapRange. С помощью последовательности чисел, созданной на шаге 02, сформируем новую последовательность чисел, перенастроив диапазон. Исходные числа из шага 01 имеют диапазон от 0 до 100. С помощью входных параметров newMin и newMax диапазон значений изменяется на 0–1 соответственно.
5. Создайте узел Curve.PointAtParameter, а затем соедините выходной параметр Math.RemapRange из шага 04 с входным параметром param.
На этом шаге создаются точки вдоль кривой. Диапазон чисел был перенастроен на 0–1, так как входной параметр param ищет значения в этом диапазоне. Значение 0 соответствует начальной точке, а значение 1 — конечным точкам. Все промежуточные числа относятся к диапазону [0,1].
6. Соедините выходной параметр узла Curve.PointAtParameter с узлом List.FilterByBoolMask, чтобы разделить список четных и нечетных индексов.
a. List.FilterByBoolMask. Соедините узел Curve.PointAtParameter из предыдущего шага с входным параметром list.
b. Watch. Узел Watch для in и узел Watch для out показывают, что имеется два списка — c четными и нечетными индексами. Тот же самый порядок точек используется в кривой, что демонстрируется на следующем шаге.
7. Далее используйте результат вывода из узла List.FilterByBoolMask на шаге 05 для создания геометрий с размерами в соответствии с индексами.
Cuboid.ByLength. Для создания молнии вдоль синусоидальной кривой воспроизведите связи, представленные на изображении выше. В данном случае кубоид — это просто рамка, размер которой определяется в зависимости от точки кривой в центре рамки. Теперь логика деления «четные/нечетные» в модели должна быть понятной.
a. Список кубоидов с четными индексами.
b. Список кубоидов с нечетными индексами.
Готово! Вы только что запрограммировали процесс определения геометрических размеров в соответствии с логической операцией, показанной в этом упражнении.
Данные — это содержимое программы. Они передаются по проводам, предоставляя входные значения узлам, в которых затем обрабатываются и преобразуются в выходные данные новой формы. Давайте рассмотрим определение данных и их структуру, а затем начнем работу с данными в Dynamo.
Данные — это набор значений количественных и качественных переменных. Самая простая форма данных — это числа, например 0
, 3.14
и 17
. Однако существуют и другие типы данных: переменные, представляющие меняющиеся числа (height
); символы (myName
); геометрические объекты (Circle
); список элементов данных (1,2,3,5,8,13,...
).
В Dynamo данные добавляются (или передаются) в порты ввода узлов. Данные могут существовать без действий, однако они необходимы для обработки действий, которые представлены в форме узлов. Если узел добавлен в рабочее пространство, но не имеет входных данных, результатом будет функция, а не результат самого действия.
Простые данные
Данные и действие (узел), которое успешно выполняется.
Действие (узел) без входных данных возвращает типовую функцию.
Остерегайтесь значений null. Тип 'null'
указывает на отсутствие данных. Это абстрактное понятие, с которым можно, тем не менее, столкнуться при визуальном программировании. Если результат действия недопустим, узел возвращает нулевой объект.
Проверка наличия нулевых объектов и их удаление из структуры данных крайне важны для создания надежных программ.
При визуальном программировании можно очень быстро генерировать большие объемы данных, поэтому необходимы средства для управления их иерархией. Эту роль выполняют структуры данных — организационные схемы, в которых хранятся данные. Особенности структур данных и их использования зависят от языка программирования.
В Dynamo для построения иерархии данных используются списки. Они будут подробнее рассмотрены в следующих главах, пока же приведем только общие сведения.
Список — это набор элементов, размещенных в одной структуре данных:
У меня пять пальцев (элементы) на руке (список).
На моей улице (список) десять домов (элементы).
Узел Number Sequence определяет список чисел на основе входных данных start, amount и step. С помощью этих узлов было создано два отдельных списка из десяти чисел, один из которых охватывает диапазон 100–109, а другой — 0–9.
Узел List.GetItemAtIndex позволяет выбрать элемент в списке по определенному индексу. При выборе значения 0 будет получен первый элемент в списке (в данном случае — 100).
Та же процедура применительно ко второму списку дает значение 0 — первый элемент в списке.
Объединим оба списка в один с помощью узла List.Create. Обратите внимание, что узел создает список списков. Это меняет структуру данных.
При повторном использовании узла List.GetItemAtIndex с индексом 0 получаем первый список в списке списков. Это означает, что список рассматривается как элемент, в чем и состоит отличие от других языков программирования. В последующих главах операции со списками и структуры данных будут рассмотрены подробнее.
Главное, что следует помнить об иерархии данных в Dynamo — в случае со структурой данных списки рассматриваются как элементы. Другими словами, в Dynamo структура данных рассматривается сверху вниз. Что это означает? Рассмотрим пример.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
В первом примере создадим цилиндр с оболочкой, пройдя по ступеням геометрической иерархии, описанной в этом разделе.
1. Добавьте узел Point.ByCoordinates. После его добавления в рабочую область в начале координат сетки предварительного просмотра Dynamo появляется точка. Значения по умолчанию для выходных параметров x,y и z равны 0,0. В этом месте и была создана точка.
2. Plane.ByOriginNormal. Следующий шаг в построении геометрической иерархии — плоскость. Существует несколько способов построения плоскости. В этом случае в качестве входных данных используется начало координат и нормаль. Начало координат — это узел-точка, созданный на предыдущем шаге.
Vector.ZAxis. Это унифицированный вектор в направлении Z. Обратите внимание, что здесь входные данные отсутствуют, а есть только вектор со значением [0,0,1]. Он будет использоваться в качестве входных данных нормали для узла Plane.ByOriginNormal. В результате получается прямоугольная плоскость в области предварительного просмотра Dynamo.
3. Circle.ByPlaneRadius. Продвигаясь вверх по иерархии, создадим кривую из плоскости, полученной на предыдущем шаге. После соединения с узлом получаем окружность в начале координат. По умолчанию радиус в узле имеет значение 1.
4. Curve.Extrude. Теперь выполним выдавливание фигуры, задав глубину и двигаясь в третьем измерении. Этот узел создает поверхность из кривой путем выдавливания. По умолчанию расстояние в узле равно 1, а на видовом экране должен отображаться цилиндр.
5. Surface.Thicken. Этот узел создает замкнутое тело путем смещения поверхности на заданное расстояние и замыкания формы. По умолчанию значение толщины равно 1, а на видовом экране в соответствии с этими значениями отображается цилиндр с оболочкой.
6. Number Slider. Вместо использования значений по умолчанию для входных данных добавим в модель параметрические элементы управления.
Редактирование области. После добавления регулятора чисел в рабочую область щелкните значок в левом верхнем углу окна, чтобы отобразить параметры области.
Min/Max/Step. Задайте для параметров min, max и step значения 0, 2 и 0.01 соответственно. Это необходимо для управления размером всей геометрии.
7. Регуляторы чисел. Вместо входных значений по умолчанию скопируйте и вставьте этот регулятор чисел (выберите его, нажмите CTRL + C, затем CTRL + V) несколько раз, пока во всех входных параметрах со значениями по умолчанию не будут заданы регуляторы. Чтобы алгоритм действовал, некоторые значения регуляторов должны быть больше нуля (например, для увеличения толщины поверхности требуется глубина выдавливания).
8. В итоге с помощью регуляторов создан параметрический цилиндр с оболочкой. Попробуйте изменить некоторые из параметров, наблюдая за динамическим обновлением геометрических объектов на видовом экране Dynamo.
Регуляторы чисел. На следующем этапе мы добавили в рабочую область множество регуляторов, и теперь необходимо очистить интерфейс только что созданного инструмента. Щелкните один регулятор правой кнопкой мыши и выберите «Переименовать...». Замените имя каждого регулятора именем соответствующего параметра (толщина, радиус, высота и т. п.).
9. На данный момент создан цилиндр с толстыми стенками. Пока это только один объект. Теперь рассмотрим, как создать массив цилиндров, которые динамически связаны друг с другом. Для этого вместо одного объекта создадим список цилиндров.
Добавление (+). Наша цель — добавить ряд цилиндров возле уже имеющегося цилиндра. При вставке еще одного цилиндра рядом с текущим необходимо учитывать радиус цилиндра и толщину его оболочки. Это число можно получить, сложив два значения регуляторов.
10. Это более сложный шаг, поэтому рассмотрим его подробнее. Конечная цель — создать список чисел, определяющих местоположение каждого цилиндра в последовательности.
a. Умножение. Сначала умножим значение из предыдущего шага на 2. Это было значение радиуса, а цилиндр необходимо переместить на полный диаметр.
b. Number Sequence. С помощью этого узла создадим массив чисел. Сначала вставим узел умножения из предыдущего шага в качестве значения step. В качестве значения start можно указать 0.0, используя узел number.
c. Integer Slider. Чтобы задать значение amount, присоединим регулятор целых чисел. Он будет определять количество создаваемых цилиндров.
d. Выходные данные. В этом списке показано расстояние смещения каждого цилиндра в массиве, которое управляется параметрически с помощью первоначальных регуляторов.
11. Этот шаг достаточно прост: соедините последовательность из предыдущего шага с входным параметром x исходного узла Point.ByCoordinates. При этом регулятор pointX будет заменен, и его можно удалить. Теперь на видовом экране отображается массив цилиндров (убедитесь, что регулятор целых чисел имеет значение больше 0).
12. Цепь цилиндров по-прежнему динамически связана со всеми регуляторами. Перемещайте регуляторы, и вы увидите, как изменится картина.
Dynamo 2.0 включает новый тип данных — список, являющийся ответвлением типа данных словаря. Это нововведение может повлечь за собой существенные изменения в подходах к созданию и использованию данных в рамках рабочих процессов. До версии 2.0 словари и списки относились к одному типу данных. Если говорить коротко, то списки — это словари с целочисленными ключами.
Словарь — это тип данных, образуемый набором пар «ключ — значение». Ключ каждого набора является уникальным. Содержимое словаря не упорядочено. Поиск данных осуществляется с использованием ключа, а не по значению индекса, как в списке. В Dynamo 2.0 поддерживаются только строковые ключи.
Список — это тип данных, образуемый набором упорядоченных значений. В списках Dynamo в качестве индексов используются целочисленные значения.
В результате разделения словарей и списков словари получили своеобразный статус высшего класса: они позволяют легко и быстро хранить и находить значения, и для этого не нужно запоминать значения индекса или поддерживать строгую структуру списка на протяжении всего рабочего процесса. На этапе тестирования было выявлено значительное уменьшение размеров графиков при использовании словарей вместо нескольких узлов GetItemAtIndex
.
Синтаксис: обновления привели к изменениям в процессах запуска и использования словарей и списков в блоках кода.
В словарях используется следующий синтаксис: {key:value}
.
В списках используется следующий синтаксис: [value,value,value]
.
В библиотеку добавлены новые узлы, которые позволяют создавать, изменять и запрашивать словари.
Списки, созданные в блоках кода версии 1.x, при загрузке сценария автоматически обновляются до нового синтаксиса списка, в котором используются квадратные скобки [ ]
вместо фигурных { }
.
С точки зрения информатики как науки, словари, как и списки, являются наборами объектов. Элементы в списках хранятся с соблюдением определенного порядка. Содержимое словарей не упорядочивается. В словарях не используется последовательная нумерация (индексы). Вместо этого в них используются ключи.
На изображении ниже представлен пример возможного использования словаря. Во многих случаях словари используются для соотнесения двух элементов данных, которые могут не иметь прямой корреляции. В нашем случае испанский перевод английского слова соотносится с его оригиналом для поиска в дальнейшем.
Создайте словарь, чтобы связать два фрагмента данных.
Получите значение с помощью заданного ключа.
Цвет — это тип данных, который помогает создавать наглядные визуальные представления, а также отражать различия в результатах визуального программирования. При работе с абстрактными данными и численными переменными бывает трудно определить, что именно изменилось и в какой степени. Для решения этой проблемы можно использовать цвета.
Цвета в Dynamo создаются с использованием входных данных ARGB, что является сокращенным обозначением комбинации альфа-канала (Alpha) с красным (Red), зеленым (Green) и синим (Blue) каналами. Альфа-канал служит для задания прозрачности цвета, а остальные три канала используются как основные цвета для создания всего цветового спектра.
Цвета в таблице ниже запрашивают свойства, использованные для настройки итогового цвета: альфа, красный цвет, зеленый цвет и синий цвет. Обратите внимание, что узел Color.Components включает все четыре свойства в качестве портов вывода, поэтому его удобнее всего использовать для запроса свойств цвета.
Цвета в таблице ниже соответствуют цветовому пространству HSB. Разделение цвета на такие составляющие, как оттенок, насыщенность и яркость, является более понятным и привычным с точки зрения интерпретации цвета. Какого оттенка должен быть цвет? Насколько ярким он должен быть? Насколько светлым или темным? Отвечая на эти вопросы, мы тем самым разбиваем цвет на составляющие, то есть на оттенок, насыщенность и яркость соответственно.
Цветовой диапазон аналогичен узлу Remap Range из упражнения : он повторно сопоставляет список чисел с другой областью. Однако вместо сопоставления с областью чисел цветовой диапазон выполняет сопоставление с цветовым градиентом в соответствии со входными значениями в диапазоне от 0 до 1.
Текущий узел хорошо выполняет свои функции, но с ним может быть трудно добиться нужных результатов с первого раза. Чтобы уверенно работать с цветовым градиентом, стоит несколько раз опробовать его на практике в интерактивном режиме. Выполните небольшое упражнение, чтобы узнать, как настроить градиент, так чтобы цвета на выходе соответствовали заданным числам.
Определите три цвета. С помощью узла Code Block определите красный, зеленый и синий цвета, назначив каждому из них соответствующие сочетания значений 0 и 255.
Создайте список. Объедините три цвета в один список.
Определите индексы. Создайте список для определения положения ручек каждого цвета (в диапазоне от 0 до 1). Обратите внимание, что для зеленого цвета задано значение 0,75. Это смещает зеленый цвет на 3/4 вдоль горизонтального градиента в регуляторе цветового диапазона.
Code Block. Введите значения (от 0 до 1), которые будут преобразованы в цвета.
Узел Display.ByGeometry позволяет раскрашивать геометрию на видовом экране Dynamo. Это позволяет наглядно показывать различные типы геометрии, демонстрировать параметрические концепции и задавать условные обозначения для расчета при моделировании. В качестве входных данных здесь требуются только геометрия и цвет. Для создания градиента, как на изображении выше, порт ввода Color соединяется с узлом Range.
Узел Display.BySurfaceColors позволяет использовать цвет для сопоставления данных на поверхности. Это дает нам широкие возможности для визуализации данных, полученных с помощью таких типов дискретного анализа, как расчеты инсоляции и энергопотребления, а также анализ близости. Применение цвета к поверхности в Dynamo аналогично применению текстуры к материалу в других средах САПР. Выполните небольшое упражнение ниже, чтобы ознакомиться с этим инструментом.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
В этом упражнении основное внимание уделяется параметрическому управлению цветом параллельно с геометрией. Геометрия — стандартная спираль, определение которой выполнено ниже с помощью узла Code Block. Это простой и быстрый способ создания параметрической функции. Так как на данном уроке рассматривается работа с цветом (а не с геометрией), то Code Block идеально подходит для быстрого создания спирали без загромождения рабочей области. Мы будем использовать Code Block все чаще и чаще по мере изучения более сложных процессов.
Code Block: создайте два узла Code Block, используя приведенные выше формулы. Это быстрый параметрический метод создания спирали.
Point.ByCoordinates: соедините порты координат этого узла с тремя портами вывода узла Code Block.
Отображается массив точек, которые образуют спираль. Далее необходимо создать кривую, проходящую через точки, чтобы получить изображение спирали.
PolyCurve.ByPoints: соедините порт вывода Point.ByCoordinates с портом ввода points этого узла. Отображается спиральная кривая.
Curve.PointAtParameter: соедините порт вывода PolyCurve.ByPoints с портом ввода curve. Это требуется, чтобы создать параметрическую точку притяжения, которая перемещается вдоль кривой. Так как кривая вычисляет положение точки с помощью параметра, необходимо задать значение param в диапазоне от 0 до 1.
Number Slider: добавьте этот узел в рабочую область и измените значение min на 0,0, значение max на 1.0, а значение step на .01. Соедините порт вывода регулятора с портом ввода param узла Curve.PointAtParameter. Появляется точка, которая перемещается вдоль спирали в соответствии с положением регулятора (0 — в начальной точке, 1 — в конечной).
Создав опорную точку, мы можем сравнить расстояние от нее до исходных точек, определяющих геометрию спирали. Данное расстояние будет определять геометрию и цвет.
Geometry.DistanceTo: соедините порт вывода узла Curve.PointAtParameter с портом input этого узла. Соедините узел Point.ByCoordinates с входным параметром «geometry».
Watch: в результате мы получаем список значений расстояния от каждой точки спирали до опорной точки, перемещающейся вдоль кривой.
Следующий шаг — определение параметров на основе списка расстояний между точками спирали и опорной точкой. Эти значения расстояний будут использованы для определения радиусов сфер, размещаемых вдоль кривой. Чтобы обеспечить подходящий размер сфер, необходимо повторно сопоставить значения расстояния.
Math.RemapRange: соедините порт вывода узла Geometry.DistanceTo с портом ввода numbers.
Code Block: соедините узел Code Block со значением 0,01 с портом ввода newMin, а узел Code Block со значением 1 с портом ввода newMax.
Watch: соедините порт вывода Math.RemapRange с одним узлом, а порт вывода Geometry.DistanceTo — с другим. Сравните результаты.
Выполнив этого шаг, мы получили повторно сопоставленный список расстояний меньшего диапазона. При необходимости можно задать другие значения newMin и newMax. Новые значения будут повторно сопоставлены и будут иметь одинаковый коэффициент распределения в пределах области.
Sphere.ByCenterPointRadius: соедините порт вывода узла Math.RemapRange с портом ввода radius, а порт вывода исходного узла Point.ByCoordinates — с портом ввода centerPoint.
Измените значение числового регулятора и посмотрите, как при этом изменится размер сфер. Теперь у нас есть параметрический шаблон.
Размер сфер является представлением параметрического массива, определяемого опорной точкой, перемещающейся вдоль кривой. Применим эту же концепцию к радиусу сфер, чтобы определить их цвет.
Color Range: добавьте в рабочую область этот узел. При наведении указателя мыши на порт ввода value обратите внимание, что запрашиваемые числа находятся в диапазоне от 0 до 1. Необходимо повторно сопоставить числа, указанные для порта вывода узла Geometry.DistanceTo, чтобы они были совместимы с этой областью.
Sphere.ByCenterPointRadius: временно отключите предварительный просмотр узла (щелкните правой кнопкой мыши, а затем выберите «Предварительный просмотр»).
Math.RemapRange: эта процедура должна быть вам уже знакома. Соедините порт вывода узла Geometry.DistanceTo с портом ввода numbers.
Code Block: аналогично шагу выше задайте значение 0 для порта ввода newMin и 1 для порта ввода newMax. Обратите внимание, что в данном случае мы задаем два порта вывода для одного узла Code Block.
Color Range: соедините порт вывода узла Math.RemapRange с портом ввода value.
Color.ByARGB: этот блок позволит нам создать два цвета. Хотя процесс может показаться не самым очевидным, по сути, это то же самое, что и работа с цветами RGB в другом программном обеспечении. Просто здесь мы используем возможности визуального программирования.
Code Block: создайте два значения — 0 и 255. Соедините два порта вывода с двумя портами ввода Color.ByARGB в соответствии с изображением выше (или создайте другие цвета на свой выбор).
Color Range: порт ввода colors запрашивает список цветов. Необходимо создать этот список из двух цветов, заданных на предыдущем шаге.
List.Create:: объедините два цвета в один список. Соедините порт вывода этого узла с портом ввода colors узла Color Range.
Display.ByGeometryColor: соедините узел Sphere.ByCenterPointRadius с портом ввода geometry, а узел Color Range — с портом ввода color. К области кривой применяется мягкий цветовой градиент.
Если изменить в определении значение узла Number Slider, который мы изучили ранее, то цвета и размеры геометрии будут обновлены. Цвета и размер радиуса в данном случае связаны напрямую, и теперь между этими двумя параметрами существует и визуальная связь.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Сначала необходимо создать поверхность (или выбрать существующую поверхность в качестве опорной) для использования в качестве входных данных для узла Display.BySurfaceColors. В этом примере поверхность образуется путем лофтинга между синусоидой и косинусоидой.
Эта группа узлов создает точки вдоль оси Z с последующим смещением в соответствии с функциями синуса и косинуса. Затем два полученных списка точек используются для создания NURBS-кривых.
Surface.ByLoft: сформируйте интерполированную поверхность между NURBS-кривыми из списка.
File Path: выберите файл изображения, который будет использоваться в качестве образца для пиксельных данных на последующих этапах.
С помощью узла File.FromPath преобразуйте путь к файлу в файл, а затем передайте этот файл в узел Image.ReadFromFile, чтобы вывести изображение для использования в качестве образца.
Image.Pixels: используйте изображение в качестве входных данных и введите значение количества образцов, получаемых вдоль осей X и Y изображения.
Slider: задайте значения количества образцов для узла Image.Pixels.
Display.BySurfaceColors: сопоставьте массив значений цветов на поверхности со значениями по осями X и Y соответственно.
Просмотрите увеличенную предварительную версию итоговой поверхности с разрешением 400 x 300.
Определившись с тем, что такое список, поговорим о том, какие операции можно выполнять с ним. Представим список в виде колоды карт. Колода — это список, а каждая карта — элемент.
Какие запросы доступны в списке? Это возможность вызова существующих свойств.
Сколько карт в колоде? 52.
Количество мастей? 4.
Из какого материала они изготовлены? Бумага.
Какова их длина? 3,5 дюйма, или 89 мм.
Какова их ширина? 2,5 дюйма, или 64 мм.
Какие действия можно выполнять со списком? Это изменяет список в зависимости от конкретной операции.
Колоду можно перемешать.
Колоду можно отсортировать по значению.
Колоду можно отсортировать по масти.
Колоду можно разделить.
Колоду можно раздать отдельным игрокам.
Можно выбрать отдельную карту из колоды.
У всех перечисленных выше операций есть аналогичные узлы Dynamo для работы со списками типовых данных. На уроке ниже будут рассмотрены основные операции, которые можно выполнять со списками.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов с примерами можно найти в приложении.
На изображении ниже показан базовый график для построения линий между двумя окружностями с целью представления основных операций со списками. Далее рассматривается управление данными в списке и демонстрируются визуальные результаты с помощью действий со списком.
Начните с узла Code Block со значением
500;
.Соедините его с входным параметром «x» узла Point.ByCoordinates.
Соединим узел из предыдущего шага с входным параметром origin узла Plane.ByOriginNormal.
Соединим узел из предыдущего шага с входным параметром plane узла Circle.ByPlaneRadius
С помощью узла Code Block укажите значение
50;
в качестве значения параметра radius. Это будет первая окружность.С помощью узла Geometry.Translate переместим окружность вверх на 100 единиц в направлении Z.
С помощью узла Code Block задайте диапазон из десяти чисел от 0 до 1, используя следующую строку кода:
0..1..#10;
.Соединим блок кода из предыдущего шага с входным значением param двух узлов Curve.PointAtParameter. Соединим узел Circle.ByPlaneRadius с входным параметром curve верхнего узла, а узел Geometry.Translate с входным параметром curve узла под ним.
С помощью узла Line.ByStartPointEndPoint соедините два узла Curve.PointAtParameter.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Узел List.Count сравнительно прост: он подсчитывает количество значений в списке и возвращает это число. При работе со списками списков в использовании этого узла появляются дополнительные нюансы. О них мы поговорим в следующих разделах.
Узел **List.Count ****** возвращает количество линий в узле Line.ByStartPointEndPoint. В данном случае значение равно 10, что соответствует количеству точек, созданных с помощью исходного узла Code Block.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
List.GetItemAtIndex — основной способ запроса элемента в списке.
Сначала щелкните правой кнопкой мыши узел Line.ByStartPointEndPoint, чтобы отключить его предварительный просмотр.
С помощью узла List.GetItemAtIndex выбираем индекс 0 или первый элемент в списке линий.
Измените значение регулятора от 0 до 9, чтобы выбрать другой элемент с помощью List.GetItemAtIndex.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Узел List.Reverse располагает все элементы в списке в обратном порядке.
Для корректной визуализации обращенного списка линий создайте дополнительные линии, изменив значение узла Code Block на
0..1..#50;
.Создайте копию узла Line.ByStartPointEndPoint, вставьте узел List.Reverse между узлом Curve.PointAtParameter и вторым узлом Line.ByStartPointEndPoint.
Используйте узлы Watch3D для предварительного просмотра двух различных результатов. Первый узел показывает результат без обращенного списка. Линии соединяются вертикально с точками напротив. Второй узел показывает результат обращения списка, где все точки соединяются с точками напротив в обратном порядке.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов с примерами можно найти в приложении.
List.ShiftIndices — это удобный инструмент для создания скручиваний или спиралей и других подобных манипуляций с данными. Этот узел смещает элементы в списке на заданное количество индексов.
В том же сценарии, где был создан обращенный список, вставьте узел List.ShiftIndices между узлами Curve.PointAtParameter и Line.ByStartPointEndPoint.
С помощью узла Code Block укажите значение 1 для сдвига списка на один индекс.
Изменение незначительное, но все линии в нижнем узле Watch3D сместились на один индекс при соединении с другим набором точек.
Если увеличить значение в узле Block Code, например, до 30, в диагональных линиях появляется существенное различие. В данном случае сдвиг работает аналогично диафрагме камеры, закручивая исходную цилиндрическую форму.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов с примерами можно найти в приложении.
Узел List.FilterByBooleanMask удаляет определенные элементы на основе списка логических операций или значений «Истина»/«Ложь».
Чтобы создать список значений «Истина» или «Ложь», необходимо выполнить несколько дополнительных действий.
С помощью узла Code Block задайте выражение со следующим синтаксисом:
0..List.Count(list);
. Соединим узел Curve.PointAtParameter с входным параметром list. Этот процесс будет рассмотрен подробнее в главе о блоках кода, но в данном случае строка кода дает список, где представлены все индексы узла Curve.PointAtParameter.С помощью узла %** (модуль)** соедините выходной параметр узла Code Block с входным параметром x, а значение 4 с входным параметром y. Это позволит вычислить остаток при делении списка индексов на 4. Узел «Коэффициент» очень полезен при создании массивов. Все значения будут представлять собой возможный остаток от 4: 0, 1, 2, 3.
Благодаря узлу %** (модуль)** мы знаем, что значение 0 означает делимость индекса на 4 (0, 4, 8 и т. д.). С помощью узла == можно проверить делимость по значению 0.
Узел Watch выводит лишь следующий результат: массив истинных и ложных значений в виде true,false,false,false.....
Соедините этот массив с входным параметром mask обоих узлов List.FilterByBooleanMask.
Соедините узел Curve.PointAtParameter с входными параметрами list узла List.FilterByBooleanMask.
Выходными данными для Filter.ByBooleanMask будут_in_ и out. In — это значения, которым было присвоено значение маски true, а out — значения, которым было присвоено значение false. Соедините выходные параметры in с входными параметрами startPoint и endPoint узла Line.ByStartPointEndPoint, создав тем самым отфильтрованный список линий.
Узел Watch3D показывает, что количество линий меньше, чем количество точек. Отфильтровав только истинные значения, мы выбрали 25 % узлов.
Добавим еще больше уровней в иерархию и углубимся в нашу кроличью нору. Структура данных может быть гораздо более объемной, чем простой двумерный список списков. Поскольку списки являются самостоятельными элементами в Dynamo, мы можем создать данные с практически неограниченным количеством измерений.
Это похоже на матрешку. Каждый список можно рассматривать как один контейнер, который содержит несколько элементов. Каждый список обладает собственными свойствами и рассматривается как отдельный объект.
Набор матрешек (фотография предоставлена ) является аналогией многомерных списков. Каждый слой представляет список, и каждый список содержит элементы. В Dynamo каждый контейнер может содержать несколько контейнеров (представляющих элементы каждого списка).
Многомерные списки сложно объяснить визуально, но в данном разделе есть несколько упражнений, которые помогут вам разобраться в работе со списками, число измерений которых превышает два.
Сопоставление — возможно, самый сложный аспект управления данными в Dynamo, особенно когда речь идет о сложных иерархических структурах, состоящих из списков. В рамках приведенных ниже упражнений мы рассмотрим случаи, в которых следует использовать сопоставление и комбинации при работе с многомерными данными.
Основные сведения по работе с узлами List.Map и List.Combine можно найти в предыдущем разделе. Эти узлы будут использованы для работы со сложной структурой данных в последнем из приведенных ниже упражнений.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Это первое из трех упражнений, направленных на работу с импортированной геометрией. От упражнения к упражнению структура данных будет усложняться.
Начнем с файла SAT, расположенного в папке с файлами для упражнения. Добавим его в приложение с помощью узла File Path.
Узел Geometry.ImportFromSAT импортирует геометрию в Dynamo и отображает ее в виде двух поверхностей.
Для простоты в этом упражнении вы будете работать только с одной поверхностью.
Чтобы выбрать верхнюю поверхность, задайте индекс 1. Для этого добавьте узел List.GetItemAtIndex.
Отключите предварительный просмотр геометрии в области предварительного просмотра Geometry.ImportFromSAT.
Теперь нужно преобразовать поверхность в сетку точек.
1. С помощью узла Code Block вставьте две следующие строки кода:
0..1..#10;
0..1..#5;
.2. Используя узел Surface.PointAtParameter, соедините два значения Code Block с входными параметрами «u» и v. Задайте для параметра Переплетение этого узла значение Векторное произведение.
3. Полученная структура данных отображается в области предварительного просмотра Dynamo.
Затем используйте точки из последнего шага для создания десяти кривых вдоль поверхности.
Чтобы отобразить структуру данных, соедините узел NurbsCurve.ByPoints с портом вывода узла Surface.PointAtParameter.
Для получения более четкого результата можно отключить предварительный просмотр в узле List.GetItemAtIndex.
Базовый узел List.Transpose позволяет поменять местами столбцы и строки в списке списков.
При соединении порта вывода узла List.Transpose с узлом NurbsCurve.ByPoints вы получите пять кривых, идущих горизонтально вдоль поверхности.
Для получения того же результата можно отключить предварительный просмотр в узле NurbsCurve.ByPoints на предыдущем шаге.
Усложним задачу. Предположим, что нам нужно выполнить определенное действие с кривыми, которые мы получили в предыдущем упражнении. Например, нужно связать эти кривые с другой поверхностью и выполнить лофтинг между ними По сути, логика остается прежней, но задача требует более внимательной работы со структурой данных.
Начнем с операции, уже знакомой вам по предыдущему упражнению. Изолируйте верхнюю поверхность импортированной геометрии с помощью узла List.GetItemAtIndex.
Используя узел Surface.Offset, задайте значение 10, чтобы сместить поверхность.
Как и в предыдущем упражнении, добавьте узел Code Block с двумя следующими строками кода:
0..1..#10;
0..1..#5;
.Соедините порты вывода этого узла с двумя узлами Surface.PointAtParameter и задайте для параметра Переплетение каждого из них значение Векторное произведение. Один из этих узлов соединен с исходной поверхностью, а второй — с поверхностью смещения.
Отключите предварительный просмотр этих поверхностей.
Как и в предыдущем упражнении, соедините порты вывода с двумя узлами NurbsCurve.ByPoints. В результате отображаются кривые, соответствующие двум поверхностям.
С помощью узла List.Create можно объединить два набора кривых в один список списков.
В результате создаются два списка с десятью элементами, каждый из которых представляет собой связанный набор NURBS-кривых.
С помощью узла Surface.ByLoft можно создать визуальное представление этой структуры данных. Узел выполняет лофтинг для всех кривых в каждом списке.
Отключите предварительный просмотр узла Surface.ByLoft на предыдущем шаге.
Как вы помните, узел List.Transpose позволяет поменять местами столбцы и строки в списке списков. В результате использования этого узла два списка из десяти кривых каждый преобразуются в десять списков из двух кривых каждый. Теперь каждая NURBS-кривая связана с соседней кривой на другой поверхности.
С помощью узла Surface.ByLoft мы получили реберную конструкцию.
Далее демонстрируется альтернативный процесс получения этого результата
Перед началом отключите предварительный просмотр Surface.ByLoft во избежание путаницы.
Вместо узла List.Transpose можно использовать узел List.Combine. Он выполняет роль «комбинатора» для каждого вложенного списка.
В данном случае мы используем List.Create в качестве «комбинатора» для создания списка по каждому элементу во вложенных списках.
Добавив узел Surface.ByLoft, мы получаем те же поверхности, что и на предыдущем шаге. В данном случае узел Transpose является более простым вариантом, но при работе с еще более сложной структурой данных надежнее будет использовать узел List.Combine.
Вернемся на несколько шагов назад. Если вы хотите изменить ориентацию кривых в реберной конструкции, узел List.Transpose следует применить до соединения с узлом NurbsCurve.ByPoints. В результате столбцы и строки поменяются местами, и мы получим пять горизонтальных ребер.
Продолжаем усложнять задачи. В этом упражнении мы используем обе импортированные поверхности, чтобы создать сложную иерархическую структуру данных. По сути, вам предстоит выполнить то же самое действие, пользуясь той же самой логикой, что и ранее.
Вернемся к файлу, импортированному в предыдущем упражнении.
Как и в предыдущем упражнении, используйте узел Surface.Offset, чтобы задать значение смещения, равное 10.
Обратите внимание, что добавление узла смещения привело к созданию двух поверхностей.
Как и в предыдущем упражнении, добавьте узел Code Block с двумя следующими строками кода:
0..1..#20;
0..1..#20;
.Соедините порты вывода этого узла с двумя узлами Surface.PointAtParameter и задайте для параметра «Переплетение» каждого из них значение Векторное произведение. Один из этих узлов соединен с исходными поверхностями, а второй — с поверхностями смещения.
Как и в предыдущем упражнении, соедините порты вывода с двумя узлами NurbsCurve.ByPoints.
Посмотрите на выходные данные узла NurbsCurve.ByPoints и обратите внимание, что они представляют собой список, состоящий из двух списков, что является более сложной структурой, чем в предыдущем упражнении. Данные упорядочиваются по базовой поверхности, поэтому в структуру данных добавлен еще один уровень.
Обратите внимание, что структура данных в узле Surface.PointAtParameter стала более сложной. В нем представлен список, состоящий из списков списков.
Перед продолжением отключите предварительный просмотр существующих поверхностей.
С помощью узла List.Create объедините NURBS-кривые в одну структуру данных, чтобы создать список, состоящий из списков списков.
При подключении узла Surface.ByLoft мы получаем новую версию исходных поверхностей, так как они остаются в собственном списке в соответствии с исходной структурой данных.
В предыдущем упражнении мы использовали узел List.Transpose для создания реберной конструкции. В этом случае данная функция не подходит. Перенос следует использовать с двумерными списками, но мы имеем дело с трехмерным списком, поэтому перестановка столбцов и строк не сработает. Поскольку списки являются объектами, то узел List.Transpose выполнит перестановку между списками с вложенными списками, но она не затронет NURBS-кривые в списках на уровень ниже.
В этом случае List.Combine является более подходящим инструментом. При работе с более сложными структурами данных используются узлы List.Map и List.Combine.
Используя List.Create в качестве «комбинатора», создайте структуру данных, которая лучше подойдет для ваших целей.
Структуру данных все еще требуется перенести на один уровень вниз по иерархии. Для этого используйте узел List.Map. Его работа аналогична узлу List.Combine, однако в нем используется только один список входных данных, а не два или больше.
К узлу List.Map будет применена функция List.Transpose, которая меняет местами столбцы и строки вложенных списков в главном списке.
Наконец, выполните лофтинг между NURBS-кривыми с использованием соответствующей иерархии данных, чтобы получить реберную конструкцию.
Добавим глубину геометрии с помощью узла Surface.Thicken с входными параметрами, как показано на изображении.
Будет полезно добавить поверхность, поддерживающую конструкцию, поэтому добавьте еще один узел Surface.ByLoft и используйте в качестве входного параметра первый вывод узла NurbsCurve.ByPoints из предыдущего шага.
Чтобы не перегружать экран, отключите предварительный просмотр этих узлов. Щелкните узел правой кнопкой мыши и снимите флажок «Предварительный просмотр», чтобы лучше рассмотреть результат.
Теперь увеличьте толщину выбранных поверхностей.
В результате мы получили нечто, похожее на слегка неустойчивое кресло-качалку. Зато сколько данных ушло на его создание!
Наконец, изменим направление бороздок. Для этого выполните процедуру, аналогичную преобразованию, которое вы уже использовали ранее.
Чтобы заполнить еще один уровень иерархии, используйте узел List.Map с функцией List.Tranpose, чтобы изменить направление NURBS-кривых.
Если требуется увеличить количество канавок, то данные узла Code Block можно изменить на следующие:
0..1..#20;
0..1..#30;
.
Если первая версия кресла-качалки была обтекаемой, то вторая получилась более похожей на колесо внедорожника.
Список — это набор элементов или компонентов. Возьмем, к примеру, связку бананов. Каждый банан является элементом списка (или связки). Проще взять в руки связку бананов, чем брать бананы по одному. Точно так же работать с элементами, сгруппированными по параметрическим связям в структуре данных, проще, чем с отдельными элементами.
Когда мы идем в магазин, мы кладем все, что купили, в пакет. Этот пакет также является списком. Мы хотим испечь банановый кекс, и нам нужно три связки бананов (мы печем очень большой кекс). Пакет представляет собой список связок, а каждая связка представляет собой список бананов. Пакет — это список списков (двумерный), а банан — это простой список (одномерный).
В Dynamo данные в списках упорядочиваются, и первому элементу в каждом списке присваивается индекс 0. Ниже мы рассмотрим то, как задать список в Dynamo, а также то, как разные списки могут быть связаны друг с другом.
Первому элементу в списке всегда назначается индекс 0, а не 1, и поначалу это может показаться странным. Поэтому запомните, что, если речь идет о первом элементе в списке, подразумевается элемент с индексом 0.
Например, если бы вам потребовалось посчитать количество пальцев на правой руке, то вы бы начали считать с 1 до 5. Однако если бы вам потребовалось внести ваши пальцы в список, то приложение Dynamo назначило бы им индексы от 0 до 4. Это может показаться странным тем, кто только начинает заниматься программированием, однако индекс, отсчитываемые от нуля, является стандартным для большинства вычислительных систем.
Обратите внимание, что такой список по-прежнему включает пять элементов, просто в нем используется система отсчета от нуля, а не от единицы. Элементы списка не обязательно должны быть числами. Это могут быть данные любого типа, который поддерживается в Dynamo, например точки, кривые, поверхности, семейства и т. д.
a. Индекс
b. Точка
c. Элемент
Зачастую самым простым способом узнать тип данных в списке является подключение узла Watch к порту вывода другого узла. По умолчанию узел Watch автоматически отображает все индексы в левой части списка, а элементы данных — в правой.
Эти индексы играют ключевую роль при работе со списками.
При работе со списками требуемые входные и выходные данные различаются в зависимости от используемого узла Dynamo. Для примера возьмем список из пяти точек и соединим его порт вывода с двумя разными узлами Dynamo: PolyCurve.ByPoints и Circle.ByCenterPointRadius:
Порт ввода points узла PolyCurve.ByPoints выполняет поиск элемента "Point[]". Этот элемент представляет собой список точек.
Выходные данные узла PolyCurve.ByPoints — это элемент PolyCurve, созданный на основе списка из пяти точек.
Порт ввода centerPoint узла Circle.ByCenterPointRadius запрашивает элемент "Point".
Выходные данные Circle.ByCenterPointRadius представляют собой список из пяти окружностей, центры которых соответствуют точкам из исходного списка.
Узлы PolyCurve.ByPoints и Circle.ByCenterPointRadius используют одни и те же входные данные, однако узел Polycurve.ByPoints на выходе дает одну сложную кривую, а узел Circle.ByCenterPointRadius — пять окружностей с центрами в каждой точке. На интуитивном уровне это кажется понятным, так как сложная кривая строится путем соединения всех пяти точек, а окружности создают отдельную окружность в каждой точке. Что же происходит с данными?
При наведении указателя мыши на порт ввода points узла Polycurve.ByPoints можно увидеть, что этому порту требуется элемент Point[]. Обратите внимание на скобки в конце. Этот элемент представляет список точек, и чтобы создать сложную кривую, в качестве входных данных этому узлу требуется отдельный список точек для каждой кривой. В результате узел объединяет каждый список в одну сложную кривую.
Порт ввода centrePoint узла Circle.ByCenterPointRadius запрашивает элемент Point. Этому узлу требуется одна точка, являющаяся отдельным элементом, для определения центра окружности. Поэтому на основе тех же входных данных мы получаем пять отдельных окружностей. Знание различий в использовании входных данных в Dynamo помогает лучше понимать, как узлы распоряжаются данными.
Сопоставление данных является проблемой, для которой не существует четкого решения. Это происходит, когда узел получается доступ к входным данных разных размеров. Изменение алгоритма сопоставления данных может привести к существенным различиям в результатах.
Рассмотрим в качестве примера узел, который создает сегменты линий между точками (Line.ByStartPointEndPoint). У него есть два входных параметра, которые используются для представления координат точек:
Самый простой способ — попарно соединять входные данные с одинаковыми индексами, пока один из списков не закончится. Это алгоритм по самому короткому списку. Узлы Dynamo используют этот алгоритм по умолчанию.
Алгоритм переплетения по самому длинному списку соединяет все входные элементы, используя некоторые элементы повторно, пока не закончатся оба списка:
Наконец, при использовании метода «Векторное произведение» создаются все возможные соединения:
Как мы видим, прочертить линию через эти наборы точек можно разными способами. Параметры переплетения можно просмотреть, щелкнув центр узла правой кнопкой мыши и выбрав меню «Переплетение».
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Для изучении операций переплетения ниже мы воспользуемся этим базовым файлом, чтобы определить самый короткий и самый длинный списки, а также векторное произведение.
Измените настройку переплетения узла Point.ByCoordinates в графике выше, оставив остальные элементы без изменений.
При выборе Самый короткий список в качестве варианта переплетения (также является вариантом по умолчанию) мы получаем базовую диагональную линию, состоящую из пяти точек. Пять точек — это длина наименьшего списка. Таким образом, переплетение по самому короткому списку прекращается по достижении конца этого списка.
При изменении способа переплетения на Самый длинный список вы получите диагональную линию, которая имеет продолжение по вертикали. Аналогично схематическому изображению выше, последний элемент короткого списка используется повторно, пока не будет достигнут конец более длинного списка.
Изменив способ переплетения на Векторное произведение, вы получите все возможные соединения между списками, в результате чего создается сетка 5 х 10 точек. Эта структура данных эквивалентна векторному произведению, показанному в схематическом изображении выше, однако данные теперь являются списком списков. Путем соединения сложной кривой можно увидеть, что каждый список определяется значением X, в результате чего образуется ряд вертикальных линий.
Добавим еще один уровень в иерархию. Если взять колоду карт из первого примера и создать рамку, в которой будет находиться несколько колод, то эта рамка будет представлять собой список колод, а каждая колода — список карт. Это и есть список списков. В качестве аналогичного примера для этого раздела ниже представлен список столбиков монет, каждый из которых содержит список монет.
Какие запросы доступны в таком списке списков? Это возможность вызова существующих свойств.
Сколько всего типов монет? 2.
Какова ценность типов монет? $0.01 и $0.25.
Какие материалы используются для изготовления монет номиналом 0,25 долл. США? 75 % меди и 25 % никеля.
Какие материалы используются для изготовления цента? 97,5 % цинка и 2,5 % меди.
Какие действия можно выполнять со списком списков? Они приведут к изменению списка списков в зависимости от конкретной операции.
Выбрать один столбик из монет номиналом 1 или 25 центов.
Выбрать одну монету номиналом 1 или 25 центов.
Переупорядочить столбики.
Перемешать столбики.
Для каждой из перечисленных выше операций в Dynamo имеется аналогичный узел. Поскольку мы работаем с абстрактными данными, а не с физическими объектами, необходимо установить набор правил, определяющих порядок перемещения вверх и вниз по иерархии данных.
При работе со списками списков данные располагаются по слоям и имеют сложную структуру, но это дает возможность выполнять ряд уникальных параметрических операций. Остановимся подробнее на основных операциях, оставив другие для последующих занятий.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
В данном разделе необходимо усвоить один базовый принцип: Dynamo рассматривает сами по себе списки как объекты. Эта нисходящая иерархия разработана с учетом объектно-ориентированного программирования. Вместо выбора вложенных элементов с помощью, например, команды List.GetItemAtIndex в Dynamo будет выбран индекс основного списка в структуре данных. Этот элемент, в свою очередь, может быть другим списком. Рассмотрим этот вопрос подробнее на примере изображения ниже.
С помощью узла Code Block было задано два диапазона:
0..2; 0..3;
.Эти диапазоны соединены с узлом Point.ByCoordinates, а в качестве переплетения выбран вариант Cross Product (векторное произведение). При этом создается сетка точек, а в качестве выходных данных возвращается список списков.
Обратите внимание, что узел Watch содержит 3 списка с 4 элементами в каждом.
При использовании функции List.GetItemAtIndex с индексом 0 Dynamo выберет первый список и все его содержимое. Другие программы могут выбрать первый элемент каждого списка в структуре данных, но в Dynamo при работе с данными используется иерархия «сверху вниз».
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Функция Flatten удаляет все уровни в структуре данных. Это удобно, если для выполнения операции не требуется наличие иерархий данных, но имеются определенные риски, так как удаляется информация. В примере ниже показан результат выравнивания списка данных.
Вставьте одну строку кода для определения диапазона в узле Code Block:
-250..-150..#4;
.При вставке блока кода во входные данные x и y узла Point.ByCoordinates в качестве варианта переплетения укажем Cross Product (векторное произведение), чтобы получить сетку точек.
Узел Watch показывает наличие списка списков.
Узел PolyCurve.ByPoints создаст ссылки для каждого списка и построит соответствующую сложную кривую. Обратите внимание, что в области предварительного просмотра Dynamo отобразятся четыре сложные кривые, представляющие каждый ряд сетки.
После вставки функции Flatten перед узлом сложной кривой был создан один список для всех точек. Узел PolyCurve.ByPoints создает ссылку для списка, чтобы создать одну кривую, а так как все точки находятся в одном списке, получается одна зигзагообразная сложная кривая, которая проходит по всему списку точек.
Можно также выровнять изолированные уровни данных. С помощью узла List.Flatten можно указать определенное количество уровней данных, чтобы выполнить выравнивание от верхнего уровня иерархии. Это очень полезный инструмент при работе со сложными структурами данных, которые могут быть не всегда нужны в рабочем процессе. Еще один вариант — использовать узел Flatten в качестве функции в List.Map. Далее мы подробнее обсудим List.Map.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
При параметрическом моделировании бывает необходимо изменить структуру данных в существующем списке. С этой целью можно использовать множество других узлов, из которых Chop — самая базовая версия. С помощью функции Chop можно разделить список на вложенные списки с заданным количеством элементов.
Команда Chop (обрезка) делит списки на основе заданной длины списка. В некотором смысле обрезка обратна выравниванию: вместо упрощения структуры данных она добавляет в нее новые уровни. Это удобный инструмент для геометрических операций, таких как в примере ниже.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Узел List.Map/Combine позволяет применить заданную функцию к списку входных данных, но на один шаг вниз по иерархии. Набор комбинаций аналогичен команде Maps, за исключением наличия нескольких наборов входных данных, соответствующих входным данным заданной функции.
В качестве краткого введения рассмотрим узел List.Count из предыдущего раздела.
Узел List.Count подсчитывает все элементы в списке. Мы воспользуемся этим для демонстрации работы List.Map.
Вставьте следующие две строки кода в узел Code Block:
-50..50..#Nx; -50..50..#Ny;
.После ввода этих данных блок кода создаст два набора входных данных для Nx и Ny.
С помощью двух узлов Integer Slider задайте значения Nx и Ny путем их присоединения к Code Block.
Соедините каждую строку блока кода с соответствующими входными данными X и Y узла Point.ByCoordinates. Щелкните узел правой кнопкой мыши, выберите «Lacing» (переплетение), а затем Cross Product (векторное произведение). Будет создана сетка точек. Так как мы определили диапазон от -50 до 50, он охватывает сетку Dynamo по умолчанию.
Созданные точки отображаются в узле Watch. Обратите внимание на структуру данных. Мы создали список списков. Каждый список представляет собой ряд точек сетки.
Вставьте узел List.Count в выходные данные узла Watch из предыдущего шага.
Соедините узел Watch с выходными данными List.Count.
Обратите внимание, что узел List.Count выдает значение 5. Это значение равно переменной Nx, заданной в блоке кода. Почему?
Во-первых, в качестве основного входного параметра для создания списков в узле Point.ByCoordinates используется входной параметр «x». Если Nx равно 5, а Ny — 3, получается список, состоящий из 5 списков, в каждом из которых содержится 3 элемента.
Так как Dynamo рассматривает списки сами по себе как объекты, то узел List.Count применяется к основному списку в иерархии. В результате получается значение 5 (количество списков в главном списке).
С помощью узла List.Map спустимся на один шаг вниз по иерархии и на этом уровне выполним функцию.
Обратите внимание, что узел List.Count не имеет входных данных. Так как узел List.Count используется в качестве функции, он будет применен к каждому отдельному списку на один шаг вниз по иерархии. Пустые входные данные узла List.Count соответствуют входным данным списка в узле List.Map.
Результаты узла List.Count теперь выдают список из 5 элементов, в каждом из которых имеется значение 3. Это соответствует длине каждого вложенного списка.
В этом упражнении узел List.Combine используется, чтобы продемонстрировать, как его с его помощью можно применять функцию к отдельным спискам объектов.
Начните с настройки двух списков точек.
Используйте узел Sequence для создания 10 значений, каждое с увеличением на 10.
Соедините результат с входным параметром «x» узла Point.ByCoordinates. В Dynamo будет создан список точек.
Добавьте второй узел Point.ByCoordinates в рабочее пространство. Используйте тот же выходной параметр Sequence в качестве входного параметра «x», но используйте Interger Slider в качестве входного параметра «y» и задайте для него значение 31 (оно может быть любым, если не перекрывается первым набором точек), чтобы два набора точек не перекрывались друг другом.
Используйте List.Combine, чтобы применить функцию к объектам в 2 отдельных списках. В данном случае это будет простая функция рисования линий.
Добавьте узел List.Combine в рабочее пространство и соедините 2 набора точек в качестве входных данных list0 и list1.
Используйте узел Line.ByStartPointEndPoint в качестве входной функции для узла List.Combine.
После этого 2 набора точек с помощью функции Line.ByStartPointEndPoint архивируются или связываются вместе, и в Dynamo возвращаются 10 строк.
См. упражнение в многомерных списках для просмотра другого примера использования List.Combine.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
В отличие от List.Map функция List@Level позволяет выбрать необходимый уровень списка непосредственно на входном порте узла. Эту функцию можно применять ко всем поступающим входным данным узлов и получать доступ к уровням списков быстрее, чем при использовании других методов. Просто сообщите узлу, какой уровень списка требуется использовать в качестве входных данных, и он сам сделает все необходимое.
В этом упражнении с помощью функции List@Level изолируется определенный уровень данных.
Начнем с простой 3D-сетки точек.
Поскольку сетка создается с диапазоном для X, Y и Z, структура данных будет иметь 3 уровня: список X, список Y и список Z.
Эти уровни расположены на разной высоте (уровнях). Они указаны в нижней части марки предварительного просмотра. Столбцы уровня списка соответствуют данным списка выше, что позволяет быстрее найти нужный уровень.
Уровни списка располагаются в обратном порядке, так что данные самого низкого уровня всегда находятся на высоте L1. Благодаря этому графики будут функционировать запланированным образом, даже если что-то изменится в предыдущем алгоритме.
Чтобы использовать функцию List@Level, нажмите кнопку «>». В меню отобразятся два флажка.
Использовать уровни: этот вариант включает функцию List@Level. Если этот флажок установлен, можно с помощью мыши выбрать уровни списка входных данных, которые будут использованы узлом. С помощью этого меню можно быстро проверить различные конфигурации уровней, щелкая мышью выше или ниже.
Сохранить структуру списков: если установить этот флажок, можно будет сохранить структуру уровней этих входных данных. Иногда данные бывают сознательно разделены по вложенным спискам. Если установить этот флажок, можно сохранить структуру списка неизменной без какой-либо потери информации.
Благодаря этой простой 3D-сетке можно получить доступ к структуре списка и визуализировать ее, переключаясь между уровнями списка. Любая комбинация уровня списка и индекса возвращает собственный набор точек из исходного 3D-набора.
С помощью элемента @L2 в DesignScript можно выбрать только список на уровне 2. Список на уровне 2 с индексом 0 включает в себя только первый набор точек Y и возвращает только сетку XZ.
Если задать фильтр уровней L1, можно увидеть все содержимое первого уровня списка. Список на уровне 1 с индексом 0 включает в себя все 3D-точки в одноуровневом списке.
В аналогичном случае с L3 будут видны только точки третьего уровня списка. Список на уровне 3 с индексом 0 включает в себя только первый набор точек Z и возвращает только сетку XY.
В аналогичном случае с L4 будут видны только точки третьего уровня списка. Список на уровне 4 с индексом 0 включает в себя только первый набор точек X и возвращает только сетку YZ.
Несмотря на то, что данный конкретный пример можно также создать с помощью List.Map, функция List@Level существенно упрощает взаимодействие и доступ к данным узла. Ниже представлено сравнение методов List.Map и List@Level.
Оба метода предоставляют доступ к одним и тем же точкам, однако List@Level позволяет легко переключаться между слоями данных в одном узле.
Для доступа к сетке точек с помощью List.Map требуется добавить узел List.GetItemAtIndex в дополнение к List.Map. Для каждого нижестоящего уровня списка необходимо использовать дополнительный узел List.Map. В некоторых сложных списках для получения доступа к нужному уровню информации требуется включение в график значительного количества узлов List.Map.
В этом примере узел List.GetItemAtIndex с узлом List.Map возвращает тот же набор точек и ту же структуру списка, что и List.GetItemAtIndex со значением @L3.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Transpose (транспонирование) — это одна из основных функций при работе со списками списков. Как и в электронных таблицах, при транспонировании происходит перестановка столбцов и строк в структуре данных. Продемонстрируем это с помощью следующей базовой матрицы, а в следующем разделе покажем, как с помощью функции транспонирования создавать геометрические взаимосвязи.
Удалите узлы List.Count из предыдущего упражнения и перенесите их на геометрические объекты, чтобы увидеть, как структурированы данные.
Соедините узел PolyCurve.ByPoints с выходными данными узла Watch из узла Point.ByCoordinates.
На выходе отобразятся 5 сложных кривых, которые можно видеть в области предварительного просмотра Dynamo. Узел Dynamo выполняет поиск списка точек (в данном случае — списка списков точек) и создает из них одну сложную кривую. По сути, каждый список в структуре данных преобразован в кривую.
Узел List.Transpose переставляет все элементы со всеми списками в списке списков. Это может показаться сложным, но в Microsoft Excel используется точно такая же логическая схема транспонирования данных: перестановка столбцов со строками в структуре данных.
Обратите внимание на изменение в списках: после транспонирования структура, состоявшая из 5 списков с 3 элементами, изменилась на 3 списка с 5 элементами в каждом.
Кроме того, обратите внимание на изменение в геометрии: использование узла PolyCurve.ByPoints привело к появлению 3 сложных кривых в перпендикулярном направлении к исходным кривым.
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
В этом упражнении для редактирования поверхности используется логическая схема из предыдущего упражнения. Эту задачу можно решить интуитивным способом, однако при этом потребуется дополнительная навигация по структуре данных. Необходимо определить поверхность путем перемещения контрольной точки.
Начните со строки узлов выше. Создайте базовую поверхность, которая охватывает всю сетку Dynamo по умолчанию.
С помощью узла Code Block вставьте следующие две строки кода и соедините их с входными параметрами u и v узла Surface.PointAtParameter соответственно:
-50..50..#3;
-50..50..#5;
.Убедитесь, что для параметра Lacing (переплетение) узла Surface.PointAtParameter задано значение Cross Product (векторное произведение).
Узел Watch показывает, что имеется список из 3 списков, каждый из которых содержит 5 элементов.
На этом этапе следует запросить центральную точку в созданной сетке. Для этого выберите центральную точку в списке посередине. Логично, не так ли?
Чтобы убедиться в правильности выбора точки, можно щелкнуть элементы узла Watch для проверки правильности выбора элемента.
При помощи узла Code Block создайте базовую строку кода для запроса списка списков:
points[1][2];
С помощью функции Geometry.Translate переместите выбранную точку вверх в направлении оси Z на 20 единиц.
Кроме того, выберите ряд точек посередине с помощью узла List.GetItemAtIndex. Примечание. Как и при выполнении предыдущего шага, можно запросить список с помощью узла Code Block, используя строку
points[1];
.
Итак, мы успешно запросили центральную точку и переместили ее вверх. Теперь необходимо вставить эту перемещенную точку обратно в исходную структуру данных.
Сначала замените элемент списка, который был изолирован при выполнении предыдущего шага.
С помощью узла List.ReplaceItemAtIndex замените центральный элемент с помощью индекса 2 на замещающий элемент, соединенный с перемещенной точкой (Geometry.Translate).
Выходные данные показывают, что перемещенная точка была вставлена в набор входных данных элемента в середине списка.
После изменения списка необходимо вставить его обратно в исходную структуру данных — список списков.
Используя ту же логическую схему, заменим список в середине на измененный список с помощью узла List.ReplaceItemAtIndex.
Обратите внимание, что индекс этих двух узлов определяется узлами Code Block 1 и 2, что соответствует исходному запросу из узла Code Block (points[1][2]).
Если выбрать список с помощью index 1, то структура данных будет выделена в области предварительного просмотра Dynamo. Итак, мы успешно встроили перемещенную точку в исходную структуру данных.
Существует множество способов создания поверхности из этого набора точек. В данном случае необходимо создать поверхность за счет лофтинга кривых.
Создайте узел NurbsCurve.ByPoints и присоедините новую структуру данных для создания трех NURBS-кривых.
Соедините узел Surface.ByLoft с выходными данными из узла NurbsCurve.ByPoints. Получится модифицированная поверхность. Можно изменить исходное значение Z геометрии. Выполните преобразование и посмотрите, как изменится геометрия.
Словари представляют собой набор данных, который связан с другим объектом данных, известным как ключ. Словари позволяют выполнять поиск, удаление и вставку данных в коллекциях.
По сути, словарь является эффективным механизмом поиска данных.
Функции работы со словарями присутствовали во многих версиях Dynamo. В приложении Dynamo 2.0 представлен новый способ управления данными этого типа.
Благодаря этому использование логических операций для тел позволяет значительно сэкономить время. Существует три логические операции для тел, позволяющие определить, как части геометрии должны сохраняться.
В дополнение к этим трем операциям в Dynamo доступны узлы Solid.DifferenceAll и Solid.UnionAll для выполнения операций разности и объединения с несколькими телами.
Create: создание или построение геометрии с нуля. Например, окружности.
Action: выполнение действия с объектом. Например, масштабирование окружности.
Query: получение свойства уже существующего объекта. Например, получение радиуса окружности.
Фото предоставлено
Фотография предоставлена .
Фото предоставлено .
Примечание. Это упражнение было создано в предыдущей версии Dynamo. Большая часть функциональных возможностей List.Map была упразднена с добавлением функции List@Level . Дополнительные сведения см. в разделе ниже.
Примечание. Это упражнение было создано в предыдущей версии Dynamo. Большая часть функциональных возможностей List.Combine была упразднена с добавлением функции List@Level . Дополнительные сведения см. в разделе ниже.
Для определения списка в сокращенном языке блока кода используются квадратные скобки ([]). Это гораздо более быстрый и простой способ создания списков, чем с помощью узла List.Create. Узел Code Block подробно рассматривается в разделе . На изображении ниже показано, как можно задать список с несколькими выражениями с помощью блока кода.
Для упрощенного выбора определенных элементов, которые требуется извлечь из сложной структуры данных, в сокращенном языке узла Code Block используются квадратные скобки ([]). Узлы Code Block подробно рассматриваются в главе . На изображении ниже показано, как запросить список с несколькими типами данных с помощью блока кода.
Изображение предоставлено