Принципы взаимодействия структур
Основными структурами данных в Grasshopper являются список и дерево данных. Эти структуры всегда взаимодействуют друг с другом. Совместная работа двух, трех или более структур (но как правило всё-таки двух) является в определённом смысле сутью работы Grasshopper.
Данная тема требует подробного теоретического раскрытия с объёмной практической частью, ввиду того, что у новичков (даже у пользователей с опытом) отсутствует понимание принципа взаимодействия структур, либо является фрагментарным. Этот урок, разбитый на несколько шагов позволит вам в более полной мере понять данную тему и начать подходить к созданию алгоритмов более осознанно.
В Grasshopper существует три принципа взаимодействия структур, такие как списки:
1) По самому длинному списку или Longest list;
2) По самому короткому списку или Shortest list;
3) Взаимодействие всех элементов или Cross reference.
Рассмотрим данные принципы на примере взаимодействия двух точек и списка точек.
Обратите внимание на изображении выше, что в списке, поданного во входной разъём List есть повторяющиеся элементы, а конкретно цифры 1 и 4. В Set мы получаем список уникальных значений без повторяющихся цифр. В Map выводится карта индексов элементов List. Map может быть полезен в дальнейшем для обращения к изначальному списку.
В следующем примере в качестве элементов List подаётся текстовый список:
Обратите внимание на повторяющиеся значения элементов List. На первый взгляд невозможно понять какие элементы содержатся в списке. Фрагмент списка содержит текстовые значения Apple, Orange и Kiwi, однако нельзя быть уверенным, есть ли иные элементы. Список может быть очень большим, например длинной в 1000 элементов и более. Так каким же образом понять какие элементы содержатся в нём? В таком случае Create Set позволяет вычислить уникальные значения.
В конечном итоге в списке уникальных значений всего 3.
Так же интересной задачей может быть исключение дублирующихся точек. Обычно для этих целей используется нод Cull Duplicates или нод из плагина Kangaroo 2 Remove duplicate pts. Однако данную задачу можно решить при помощи Create Set. В некоторых случаях, возможно, это будет отличным решением.
Например, есть n-ое количество дублирующихся точек. В окне Rhino невозможно увидеть где точки дублируются, а где нет:
Принципы взаимодействия списков
При визуализации списка точек при помощи панели можно увидеть, что действительно, в списке есть дублирующиеся точки. Длина списка = 40 точкам, хотя на экране Rhino всего 14 точек.
Для избавления от дубликатов достаточно провести список точек через Create Set: