Вкладка List

Ноды по работе со списками. Списки - это коллекции объектов (чисел, строк, элементов Revit, других списков), имеющие простую или сложную структуру.

Вкладка Generate

Вкладка Generate предназначена для генерации новых списков. Здесь можно создать новый пустой список, объединить существующие списки в один новый, а также сгенерировать числовую последовательность.

List.Combinations

Описание

Нод по созданию уникальных комбинаций элементов. В качестве исходных данных узел принимает список элементов и числовое значение, обозначающее длину подсписка каждой отдельной комбинации. Далее, для каждого элемента списка создается комбинация со всеми другими элементами. Если при этом в слот replace подать значение true, то комбинации будут создаваться не только со всеми остальными элементами, но и с исходным тоже.

Разный порядок элементов в одной комбинации не делает ее уникальной. Если брать пример выше, то мы не увидим две комбинации вида ["A","B"] и ["B","A"], на выходе данный нод выдаст лишь одну из них.Чтобы уникальность порядка элементов в комбинации тоже учитывалась, следует использовать другой нод -List.Permutations.

Входные и выходные слоты

list
length
replace
comb
list

Список элементов для создания комбинаций из них

Тип и структура данных

Направление

Значение по умолчанию

var[]..[]

In

length

Количество элементов в одной комбинации

Тип и структура данных

Направление

Значение по умолчанию

int

In

replace

Включение/отключение режима, при котором комбинации будут создаваться не только с соседними, но и с исходным элементом

Тип и структура данных

Направление

Значение по умолчанию

bool

In

false

comb

Выдает список полученных комбинаций

Тип и структура данных

Направление

Значение по умолчанию

var[]..[]

Out

Примеры практического применения

Цвета на фасаде
Цвета на фасаде

Для каждого фасада нужно подобрать по 3 разных цвета. К какому именно элементу применен цвет - не важно. Но нужно понять, сколько можно сделать уникальных сочетаний цветов из предложенного списка.

С увеличением числа цветов возрастает количество их уникальных сочетаний

Вкладка Modify

На вкладке Modify расположены ноды, которые берут исходный список и модифицируют его тем или иным образом. Например, выкидывают из списка каждый второй элемент, убирают элементы из списка по какому-либо правилу, модифицируют его структуру (делают более плоским или наоборот).

List.FilterByBoolMask

Описание

Один из самых распространенных нодов по фильтрации списков. Он по очереди перебирает все элементы списка и каждый из них помещает либо в слот in, либо в слот out. Решение о том, в какой из двух слотов отправить элемент узел принимает на основе списка из значений типа bool, в котором для каждого элемента есть ответ "да или нет" (т.е. отправить ли элемент в in или в out).

По сути, то, что происходит в этом ноде, более корректно было бы назвать группировкой на "хороших" и "плохих". Ведь из исходного списка элементов на выходе ничего не исчезает, как мы привыкли это видеть при классической фильтрации. Просто он разбивается на две группы.

Проверка списка чисел на четность. В in попадают четные числа, в out - нечетные

Количество элементов в исходном списке и списке масок должно быть одинаковым и иметь одинаковую структуру! Только в этом случае у программы будет "ответ" для каждого элемента и она сможет корректно отфильтровать список.

Входные и выходные слоты

list
mask
in
out
list

В этот слот подается список, который мы хотим отфильтровать.

Тип и структура данных

Направление

Значение по умолчанию

var[]..[]

In

mask

В этот слот подается список булевских значений, на основе который будет происходить распределение элементов по двум выходным слотам. Структура списка и количество значений bool, которые мы подаем в данный слот, должны в точности повторять структуру и количество элементов в исходном списке!

Тип и структура данных

Направление

Значение по умолчанию

bool[]..[]

In

in

Выходной слот для всех элементов, для которых программа нашла значение true в слоте mask

Тип и структура данных

Направление

Значение по умолчанию

var[]..[]

Out

out

Выходной слот для всех элементов, для которых программа нашла значение false в слоте mask

Тип и структура данных

Направление

Значение по умолчанию

var[]..[]

Out

Примеры практического применения

Описание

1.

Получение всех экземпляров стен одного типоразмера

2.

Удаление из списка элемента с минимальным (максимальным) значением

Пример 1
Пример 2
Пример 1

Получение всех экземпляров стен одного типоразмера

В Dynamo для Revit нет базовых нодов, которые позволили бы нам сразу получить список всех экземпляров стен конкретного типоразмера. Чтобы выполнить данную задачу, воспользуемся фильтрацией:

  1. Получим полный список всех экземпляров стен в проекте

  2. Сравним значение имени их типоразмера с эталонным ("PR-150"), получим список значений типа bool (булевскую маску)

  3. Отфильтруем исходный список экземпляров стен, используя полученную маску

Мы получили список всех экземпляров стен типоразмера "PR-150"

Пример 2

Удаление из списка элемента с минимальным (максимальным) значением

Часто из списка элементов нужно исключать те, которые имеют какое-либо минимальное (максимальное) значение своего параметра или свойства. В данном конкретном примере у нас есть список векторов. И необходимо исключить из него самый короткий из них. Для этого мы:

  1. Получаем значения длин векторов;

  2. С помощью нода List.MinimumItem получаем наименьшее значение;

  3. Сравниваем все значения с минимальным;

  4. Получаем маску и фильтруем исходный список элементов.

Вектор с минимальным значением длины попал в выходной слот in, а остальные вектора ушли в out!

2020 © BIM Planet