DYNAMO TIP #2: filtrování seznamu hodnot

V dnešním tipu si ukážeme možnosti filtrování seznamu hodnot v prostředí vizuálního programovacího nástroje Dynamo. Dříve než přistoupíme k jednotlivým uzlům, je nutné si vysvětlit, co všechno může reprezentovat hodnoty v seznamech. Nejčastěji se může jednat o načtené hodnoty z parametrů, jako například hodnoty z parametru Plocha, které načítáme z kategorie Místnosti.


Načítání parametrů do seznamu hodnot se neomezuje pouze na numerické parametry, lze načítat jednoduše i textové parametry, jako například hodnoty z parametru Název, které načítáme z kategorie Místnosti.


V načtených seznamech nemusí figurovat pouze hodnoty parametrů, může se jedna i o konkrétní objekty či celé kategorie, jako např. načtení kategorie Podlahy.


A právě u tohoto příkladu je důležité se zamyslet nad možností filtrování seznamu hodnot. Při načítání celé kategorie do Dynama se načtou podlahy, které v seznamu hodnot nevyžadujeme, např. potřebujete načíst pouze podlahy, které reprezentují jednotlivé skladby podlah, ale do seznamu se načtou i podlahy, které reprezentují nosné vodorovné konstrukce jako stropy či základové desky atd. V případě, kdy chcete pracovat pouze se skladbami podlah, je nutné daný seznam načtených hodnot vyfiltrovat.

Dynamo nabízí standardně pouze dva uzly, které umožňují filtrovat seznamy hodnot:

1. Uzel List.Filter


V případě tohoto uzlu je nutné správně specifikovat podmínku do vstupu Condition. Ukažme si funkčnost daného uzlu na příkladu při načtení kategorie Podlahy.

S uzlem List.Filter úzce souvisejí běžné operátory (<, >, ==, <=, >=). V případě, kdy chceme vyfiltrovat např. pouze určitou položku ze seznamu, použijeme operátor == a propojíme ho s uzlem Code Block, do kterého zapíšeme název dané položky v uvozovkách. Uzel List.Filter bude hledat právě danou položku v seznamu, kterou následně zařadí do výstupu in, a zbytek položek, které nesplňují danou podmínku, budou zařazeny do výstupu out. Viz obrázek.


Zde je nutné upozornit, že filtrujeme pouze název daného typu podlahy (viz uzel FloorType.Name), tzn., nejedná se o element podlahy, ze kterého bychom mohli získat další parametry. To je důležité si uvědomit. Pro filtrování načtených elementů Revitu je vhodné použít druhý uzel a tím je:

2. Uzel List.FilterByBoolMask


Tento uzel je o něco sofistikovanější při filtrování seznamu hodnot, jelikož k tomu využívá tzv. masku filtru. Daná maska filtru musí obsahovat stejný počet hodnot jako seznam, který pomocí ní chceme filtrovat. Pokud maska nebude obsahovat stejný počet, uzel List.FilterByBoolMask zahlásí chybu. Maska filtru obsahuje pouze dva typy hodnot, a to True a False. Ukažme si danou funkcionalitu na konkrétním případě.

Pokud máme seznam hodnot (0, 1, 2, 3, 4, 5), který potřebujeme vyfiltrovat podle nahodilého pořadí, je ideální si vytvořit masku filtru z hodnot True a False. To, v jakém indexu se bude nacházet hodnota True v masce filtru, bude mít vliv na to, jaká hodnota z filtrovaného seznamu se přesune do výstupu in v uzlu List.FilterByBoolMask, a ostatní hodnoty, které budou mít přiřazenou hodnotu False, budou zařazeny do výstupu out.



Komentáře