Многомерные списки
Добавим еще больше уровней в иерархию и углубимся в нашу кроличью нору. Структура данных может быть гораздо более объемной, чем простой двумерный список списков. Поскольку списки являются самостоятельными элементами в Dynamo, мы можем создать данные с практически неограниченным количеством измерений.
Это похоже на матрешку. Каждый список можно рассматривать как один контейнер, который содержит несколько элементов. Каждый список обладает собственными свойствами и рассматривается как отдельный объект.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-fb4084dc70c780726e680dd632ad6e7e191fa610%252F145493363_fc9ff5164f_o.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f21856ec&sv=1)
Набор матрешек (фотография предоставлена Zeta) является аналогией многомерных списков. Каждый слой представляет список, и каждый список содержит элементы. В Dynamo каждый контейнер может содержать несколько контейнеров (представляющих элементы каждого списка).
Многомерные списки сложно объяснить визуально, но в данном разделе есть несколько упражнений, которые помогут вам разобраться в работе со списками, число измерений которых превышает два.
Сопоставление и комбинации
Сопоставление — возможно, самый сложный аспект управления данными в Dynamo, особенно когда речь идет о сложных иерархических структурах, состоящих из списков. В рамках приведенных ниже упражнений мы рассмотрим случаи, в которых следует использовать сопоставление и комбинации при работе с многомерными данными.
Основные сведения по работе с узлами List.Map и List.Combine можно найти в предыдущем разделе. Эти узлы будут использованы для работы со сложной структурой данных в последнем из приведенных ниже упражнений.
Упражнение. Двумерные списки. Основы
Скачайте файл с примером, щелкнув ссылку ниже.
Полный список файлов с примерами можно найти в приложении.
Это первое из трех упражнений, направленных на работу с импортированной геометрией. От упражнения к упражнению структура данных будет усложняться.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-9d74729496e2dc2eb227901f738d9fd29043565d%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520basic%252001.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=9ed69d87&sv=1)
Начнем с файла SAT, расположенного в папке с файлами для упражнения. Добавим его в приложение с помощью узла File Path.
Узел Geometry.ImportFromSAT импортирует геометрию в Dynamo и отображает ее в виде двух поверхностей.
Для простоты в этом упражнении вы будете работать только с одной поверхностью.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-cdb927b62ce65ec032cd17c423773bbd14ed1edb%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520basic%252002.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=c431b53b&sv=1)
Чтобы выбрать верхнюю поверхность, задайте индекс 1. Для этого добавьте узел List.GetItemAtIndex.
Отключите предварительный просмотр геометрии в области предварительного просмотра Geometry.ImportFromSAT.
Теперь нужно преобразовать поверхность в сетку точек.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-b7cadac935ce552f9ae9eb6ca5fc00e2c6621d52%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520basic%252003.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=11ed17f6&sv=1)
1. С помощью узла Code Block вставьте две следующие строки кода:
0..1..#10;
0..1..#5;
.2. Используя узел Surface.PointAtParameter, соедините два значения Code Block с входными параметрами «u» и v. Задайте для параметра Переплетение этого узла значение Векторное произведение.
3. Полученная структура данных отображается в области предварительного просмотра Dynamo.
Затем используйте точки из последнего шага для создания десяти кривых вдоль поверхности.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-52fcc28597e14cca9c873da1d8c7860c9f068565%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520basic%252004.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=c384f121&sv=1)
Чтобы отобразить структуру данных, соедините узел NurbsCurve.ByPoints с портом вывода узла Surface.PointAtParameter.
Для получения более четкого результата можно отключить предварительный просмотр в узле List.GetItemAtIndex.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-0aea8a65b9f69c7988c69130135e43e2c96717d6%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520basic%252005.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b6ff75fc&sv=1)
Базовый узел List.Transpose позволяет поменять местами столбцы и строки в списке списков.
При соединении порта вывода узла List.Transpose с узлом NurbsCurve.ByPoints вы получите пять кривых, идущих горизонтально вдоль поверхности.
Для получения того же результата можно отключить предварительный просмотр в узле NurbsCurve.ByPoints на предыдущем шаге.
Упражнение. 2D-списки. Для опытных пользователей
Усложним задачу. Предположим, что нам нужно выполнить определенное действие с кривыми, которые мы получили в предыдущем упражнении. Например, нужно связать эти кривые с другой поверхностью и выполнить лофтинг между ними По сути, логика остается прежней, но задача требует более внимательной работы со структурой данных.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-5ac1cda841e932c02d7ee4de6bec7586b63b517b%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252001.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b2285c3c&sv=1)
Начнем с операции, уже знакомой вам по предыдущему упражнению. Изолируйте верхнюю поверхность импортированной геометрии с помощью узла List.GetItemAtIndex.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-c816d58070d6b7d69ce43c0ca58a7ff67b373dfe%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252002.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=1ec9cc76&sv=1)
Используя узел Surface.Offset, задайте значение 10, чтобы сместить поверхность.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-ba37e89dcd0d7c8c82d12551b365af493449e7d9%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252003.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f0e34873&sv=1)
Как и в предыдущем упражнении, добавьте узел Code Block с двумя следующими строками кода:
0..1..#10;
0..1..#5;
.Соедините порты вывода этого узла с двумя узлами Surface.PointAtParameter и задайте для параметра Переплетение каждого из них значение Векторное произведение. Один из этих узлов соединен с исходной поверхностью, а второй — с поверхностью смещения.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-6a800a03006af54f1ef3d6171f573636396e9911%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252004.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4e6a3e20&sv=1)
Отключите предварительный просмотр этих поверхностей.
Как и в предыдущем упражнении, соедините порты вывода с двумя узлами NurbsCurve.ByPoints. В результате отображаются кривые, соответствующие двум поверхностям.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-3e44d723d2a8116b1da1a409c5d99497c32b67f9%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252005.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=316d816d&sv=1)
С помощью узла List.Create можно объединить два набора кривых в один список списков.
В результате создаются два списка с десятью элементами, каждый из которых представляет собой связанный набор NURBS-кривых.
С помощью узла Surface.ByLoft можно создать визуальное представление этой структуры данных. Узел выполняет лофтинг для всех кривых в каждом списке.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-f053d295ef18a21affdb7d37a2b23fd6c36f266f%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252006.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=38bd7242&sv=1)
Отключите предварительный просмотр узла Surface.ByLoft на предыдущем шаге.
Как вы помните, узел List.Transpose позволяет поменять местами столбцы и строки в списке списков. В результате использования этого узла два списка из десяти кривых каждый преобразуются в десять списков из двух кривых каждый. Теперь каждая NURBS-кривая связана с соседней кривой на другой поверхности.
С помощью узла Surface.ByLoft мы получили реберную конструкцию.
Далее демонстрируется альтернативный процесс получения этого результата
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-3c19b0ddcbaec3267d431d0ac9041bcaf64dfada%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252007.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=947676d1&sv=1)
Перед началом отключите предварительный просмотр Surface.ByLoft во избежание путаницы.
Вместо узла List.Transpose можно использовать узел List.Combine. Он выполняет роль «комбинатора» для каждого вложенного списка.
В данном случае мы используем List.Create в качестве «комбинатора» для создания списка по каждому элементу во вложенных списках.
Добавив узел Surface.ByLoft, мы получаем те же поверхности, что и на предыдущем шаге. В данном случае узел Transpose является более простым вариантом, но при работе с еще более сложной структурой данных надежнее будет использовать узел List.Combine.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-be5e911184caf5b23d254069c6845e826c1c7596%252Fn-dimensional%2520lists%2520-%25202d%2520lists%2520advance%252008.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f64955e8&sv=1)
Вернемся на несколько шагов назад. Если вы хотите изменить ориентацию кривых в реберной конструкции, узел List.Transpose следует применить до соединения с узлом NurbsCurve.ByPoints. В результате столбцы и строки поменяются местами, и мы получим пять горизонтальных ребер.
Упражнение. Трехмерные списки
Продолжаем усложнять задачи. В этом упражнении мы используем обе импортированные поверхности, чтобы создать сложную иерархическую структуру данных. По сути, вам предстоит выполнить то же самое действие, пользуясь той же самой логикой, что и ранее.
Вернемся к файлу, импортированному в предыдущем упражнении.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-14f65e9931c80ab6ab7dd61516c449000da45705%252Fn-Dimensional-Lists%2520-%25203d%2520list%252001.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ca77d80e&sv=1)
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-76e88f008839a3e03e3349b051f683c61fad239c%252Fn-Dimensional-Lists%2520-%25203d%2520list%252002.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=da7945aa&sv=1)
Как и в предыдущем упражнении, используйте узел Surface.Offset, чтобы задать значение смещения, равное 10.
Обратите внимание, что добавление узла смещения привело к созданию двух поверхностей.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-f668fe094ceb528fa3e5c45ddd961d8aebf22ea7%252Fn-Dimensional-Lists%2520-%25203d%2520list%252003.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2f532dcc&sv=1)
Как и в предыдущем упражнении, добавьте узел Code Block с двумя следующими строками кода:
0..1..#20;
0..1..#20;
.Соедините порты вывода этого узла с двумя узлами Surface.PointAtParameter и задайте для параметра «Переплетение» каждого из них значение Векторное произведение. Один из этих узлов соединен с исходными поверхностями, а второй — с поверхностями смещения.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-7d5f52fe875a664f4517edbf6e54447554ca10da%252Fn-Dimensional-Lists%2520-%25203d%2520list%252004.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=76e08f8d&sv=1)
Как и в предыдущем упражнении, соедините порты вывода с двумя узлами NurbsCurve.ByPoints.
Посмотрите на выходные данные узла NurbsCurve.ByPoints и обратите внимание, что они представляют собой список, состоящий из двух списков, что является более сложной структурой, чем в предыдущем упражнении. Данные упорядочиваются по базовой поверхности, поэтому в структуру данных добавлен еще один уровень.
Обратите внимание, что структура данных в узле Surface.PointAtParameter стала более сложной. В нем представлен список, состоящий из списков списков.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-ffc42223be8452fbd2bd00724c8972e778fe1979%252Fn-Dimensional-Lists%2520-%25203d%2520list%252005.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=153b246a&sv=1)
Перед продолжением отключите предварительный просмотр существующих поверхностей.
С помощью узла List.Create объедините NURBS-кривые в одну структуру данных, чтобы создать список, состоящий из списков списков.
При подключении узла Surface.ByLoft мы получаем новую версию исходных поверхностей, так как они остаются в собственном списке в соответствии с исходной структурой данных.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-15b41fc570deb7a66355a291f9d6cc6d0876474f%252Fn-Dimensional-Lists%2520-%25203d%2520list%252006.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=714d702b&sv=1)
В предыдущем упражнении мы использовали узел List.Transpose для создания реберной конструкции. В этом случае данная функция не подходит. Перенос следует использовать с двумерными списками, но мы имеем дело с трехмерным списком, поэтому перестановка столбцов и строк не сработает. Поскольку списки являются объектами, то узел List.Transpose выполнит перестановку между списками с вложенными списками, но она не затронет NURBS-кривые в списках на уровень ниже.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-f2544da14c78f13c666bd91cdf54b400c7cd85dd%252Fn-Dimensional-Lists%2520-%25203d%2520list%252007.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=87f02f06&sv=1)
В этом случае List.Combine является более подходящим инструментом. При работе с более сложными структурами данных используются узлы List.Map и List.Combine.
Используя List.Create в качестве «комбинатора», создайте структуру данных, которая лучше подойдет для ваших целей.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-566d088515b057fc5051fedaff3c6f4049c0124e%252Fn-Dimensional-Lists%2520-%25203d%2520list%252008.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5119594d&sv=1)
Структуру данных все еще требуется перенести на один уровень вниз по иерархии. Для этого используйте узел List.Map. Его работа аналогична узлу List.Combine, однако в нем используется только один список входных данных, а не два или больше.
К узлу List.Map будет применена функция List.Transpose, которая меняет местами столбцы и строки вложенных списков в главном списке.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-018fd1ec8b307957b1b8a68dda1e4854b04f82be%252Fn-Dimensional-Lists%2520-%25203d%2520list%252009.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=33d52046&sv=1)
Наконец, выполните лофтинг между NURBS-кривыми с использованием соответствующей иерархии данных, чтобы получить реберную конструкцию.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-8df44aa8051c7e0e6217c51699c52d5f57a9af0b%252Fn-Dimensional-Lists%2520-%25203d%2520list%252010.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4c8f2dbb&sv=1)
Добавим глубину геометрии с помощью узла Surface.Thicken с входными параметрами, как показано на изображении.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-d1003c363054d571127c2136ab90fac18b433516%252Fn-Dimensional-Lists%2520-%25203d%2520list%252011.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b6ae9c62&sv=1)
Будет полезно добавить поверхность, поддерживающую конструкцию, поэтому добавьте еще один узел Surface.ByLoft и используйте в качестве входного параметра первый вывод узла NurbsCurve.ByPoints из предыдущего шага.
Чтобы не перегружать экран, отключите предварительный просмотр этих узлов. Щелкните узел правой кнопкой мыши и снимите флажок «Предварительный просмотр», чтобы лучше рассмотреть результат.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-b345eb37b536be35c785fc901bd2f86883547d0c%252Fn-Dimensional-Lists%2520-%25203d%2520list%252012.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b81404be&sv=1)
Теперь увеличьте толщину выбранных поверхностей.
В результате мы получили нечто, похожее на слегка неустойчивое кресло-качалку. Зато сколько данных ушло на его создание!
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-ad798b2a8743a31c45c3a09fb435c9d266a64276%252Fn-Dimensional-Lists%2520-%25203d%2520list%252013.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=a3577c9a&sv=1)
Наконец, изменим направление бороздок. Для этого выполните процедуру, аналогичную преобразованию, которое вы уже использовали ранее.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-b2a8d6cf63d207d1d2e96460ba415bc912bce80b%252Fn-Dimensional-Lists%2520-%25203d%2520list%252014.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8c648987&sv=1)
Чтобы заполнить еще один уровень иерархии, используйте узел List.Map с функцией List.Tranpose, чтобы изменить направление NURBS-кривых.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-5c066e2597c697a1ae9f62e0087638d49458abbc%252Fn-Dimensional-Lists%2520-%25203d%2520list%252015.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=a65f1ba&sv=1)
Если требуется увеличить количество канавок, то данные узла Code Block можно изменить на следующие:
0..1..#20;
0..1..#30;
.
Если первая версия кресла-качалки была обтекаемой, то вторая получилась более похожей на колесо внедорожника.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-3a0092cbaedc89fdd26f17418b1468f668ad6a3d%252Fn-Dimensional-Lists%2520-%25203d%2520list%252016.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d6f12b0f&sv=1)
Last updated