Sets / List
Что такое списки?
Все типы данных в Grasshopper хранятся в виде списка (или группы списков). Понятие списка лежит в основе того, из-за чего мы работаем в Grasshopper. В нём заключена главная мощь и в тоже самое время главная трудность в понимании работы в Grasshopper. Не так сложно понять что такое список, как то, как списки или группы списков взаимодействуют друг с другом. Прежде чем приступать к краеугольному камню работы в Grasshopper предлагаем разобрать что такое список и каковы его наиболее важные свойства.
Список точек, визуализированный при помощи панели (Panel)
И так, на изображении выше изображён список точек. При помощи панели мы как бы заглядываем в содержимое нода Point.

На изображении ниже показано месторасположение нода Panel. Панель находится в первом базовом разделе Params, далее в подразделе Input. В раскрывающемся списке можно выбрать панель и разместить на холсте.
Панель вытягивается на холст Grasshopper и далее при щелчке два раза по нему левой кнопкой мыши вы можете помимо просмотра содержимого нода, хранящегося в виде списка или дерева данных, ввести данные, например написать что-то:
И так, что же такое список? Список это некоторый абстрактный тип данных, который содержит в себе упорядоченный набор элементов. Элементы списка могут встречаться более одного раза, в отличии от множеств.

Почему список? Дело в том, что данные должны как-то храниться в памяти ПК, структурироваться и визуализироваться для конечного пользователя. Любые данные, будь то числа, булевые значения, геометрические объекты, такие как точки, поверхности и объемные тела структурируются и хранятся в Grasshopper в виде списка или групп списков, которые называют деревьями данных (о них поговорим чуть позже). И это единственный эффективный способ.В виде списка хранятся не только несколько элементов, но так же и один элемент уже является списком. Понятно, что список с одним элементом не совсем вяжется с обычной житейской логикой (как же может существовать список, например продуктов с одним видом продукта?), но в Grasshopper мы имеем дело с визуальным программированием и логика здесь точно такая же как и в программировании, поэтому и со списками тоже самое.
1. Единичный элемент в Grasshopper так же является списком, то есть списком с одним элементом. Именно так стоит воспринимать единичные элементы.
Обратите внимание на 3д изображении цилиндра ниже и его представление в панели. В окне Grasshopper справа в панели цилиндр представлен в виде списка с одним элементом и он находится в списке под индексом 0. Так же в панели всегда описывается тип геометрии. Фактически выбирая нод Cylinder в Grasshopper мы строим список с одним цилиндром. С точки зрения Rhino это тип поверхностей Untrimmed surface (неподрезанная поверхность) с индексом 0 в списке.
Панель состоит из ряда элементов, которые необходимо обязательно рассмотреть:
И так давайте рассмотрим элементы панели на изображении выше:
1. Холст панели (Panel), визуализирующий список (или дерево данных);
2. Индекс элемента списка (нумерация элементов списка, начинающаяся не с единицы 1, а с нуля 0) ;
3. Непосредственно элемент списка (в данном случае это координаты точки);
4. Нод Point;
5. Связь нода Point и панели.

На изображении выше в панели визуализируется содержимое нода Point. Обратите внимание на то, что каждый элемент индексируется (индексация это все равно что маркировка некоторых объектов). Индексация показывает порядок списка.
2. Индексация элементов списка всегда начинается с нуля 0. Это связано с концепцией программирования.
Порядок в списках
В списках очень важен порядок расположения элементов - от него зависят процессы и корректное построение геометрии. Рассмотрим важное понятие порядка на некоторых примерах.
Порядок размещения элементов в списке влияет на конечный результат построения. Например полилиния или прямоугольник не могут быть построены корректно, если в списке нарушен порядок точек (кстати с подобным вы будете сталкиваться постоянно: как выстроить порядок, как его вернуть, когда он утрачен).

Мы уже неоднократно рассмотрели точки, визуализированные в панели, которые хранятся в виде списка в ноде Point. Графически они выглядят следующим образом:
На данном скриншоте можно наблюдать графическое отображение точек. Однако на изображении не понятен порядок точек. Чтобы понять порядок, необходимо дополнительно визуализировать индексы данных точек:
На данном скриншоте можно наблюдать графическое отображение точек. Однако на изображении не понятен порядок точек. Чтобы понять порядок, необходимо дополнительно визуализировать индексы данных точек:
На изображении выше можно видеть цифры рядом с точками. Они обозначают индексы, иначе говоря место в списке, или нумерацию точек. Обратите внимание на то, как панель визуализирует структуру данных, хранящихся в списке:
Точка с индексом 0 графически находится в левом нижнем углу, а в панели она находится первой в списке. Это значит, что данная точка является первой в структуре и именно с нее начинается работа нода Point и именно с нее начнётся любое действие. Далее действие будет совершаться с точкой с индексом 1 и так далее до конца списка. В качестве примера рассмотрим построение полилинии через данные точки (используем простой нод Polyline, строящий полилинию через точки):
Обратите внимание на геометрию полилинии: она начинает строится с точки с индексом 0, далее с индексом 1, далее с индексом 2. Таким образом полилиния строится исходя из порядка точек списка, начиная с самой верхней точки списка и заканчивая самой нижней. На изображении ниже последовательность дополнительно показана при помощи стрелок на участках полилинии:
Если же мы каким-либо образом перемешаем список, например при помощи нода Jitter (случайно перемешивает список), то результат может получится самым неожиданным:
Как можно видеть, при нарушении порядка списка (даже при помощи простого перемешивания), нарушается изначальный смысл геометрического построения, поэтому за списками и порядком в списке нужно следить и к построению подходить осмысленно.
Оцените этот урок и помогите тем самым сделать его лучше.