Věc, se kterou se setkal asi každý uživatel Revitu – číslování komponent. Máte již hotový model, ale pro vytvoření výkazu a správného označení na výkrese potřebujete hromadně očíslovat veškeré komponenty podle určitého pravidla. U větších staveb může algoritmizace číslování ušetřit nemálo času. V tomto článku si ukážeme, jak takový skript jednoduše vytvořit pro číslování dveří v programovacím doplňku Dynamo verze 1.3.0 dle Y souřadnic komponent projektu v Revitu.
Funkce Dynamo skriptu
Následující Dynamo skript bude mít funkce:
- Vybere všechny dveře v projektu
- Rozdělí a seřadí dveře podle podlaží do skupin
- V každé skupině seřadí dveře podle Y souřadnice projektu
- Zapíše do parametru “Označení” všech dveří číselnou hodnotu v závislosti na poloze Y a podlaží
- Před první (suterénní) podlaží vloží prefix S
Tvorba Dynamo skriptu
Samotný skript využívá základní uzly, které lze v Dynamu nalézt. Pro zadávání číselných hodnot a názvů parametrů využijeme tzv. Kódové bloky (Code Block). Samotný skript je k dispozici ke stažení na konci tohoto článku. Pro pochopení, jak skript funguje a jak takovéto skripty tvořit, nyní popíši postup jeho tvorby.
Categories
Začneme s vložením uzlu pro výběr elementů podle kategorie. V našem případě volíme kategorii “Dveře”. Pokud budete potřebovat vybrat jinou kategorii, stačí hodnotu v uzlu zaměnit za jinou kategorii v rolovacím seznamu.
All Elements of Category
K uzlu Categories připojíme uzel, který nám umožňuje vybrat všechny elementy zvolené kategorie.
List.GroupByKey
Nyní musíme rozdělit a seřadit vybrané elementy podle jednotlivých pater. Po vybrání všech dveří v projektu využijeme uzel “List.GroupByKey” pro vytvoření skupin dle zadané klíčové hodnoty. Vstupem do uzlu je seznam vybraných elementů a hodnota podle které se seznam rozdělí do skupin.
Element.GetParameterValueByName
Pro definování hodnoty podle, které se seznam rozdělí do skupin vytvoříme nový uzel vstupních hodnot “Element.GetParameterValueByName”. Ten vybere hodnoty vybraného parametru ze všech vstupních elementů. To uděláme vstupem vybraných elementů a novým uzlem, který zadá název parametru ze kterého má brát hodnoty. Vytvoříme uzel se stringovou hodnotou (textový řetězec) “Podlaží”, což odpovídá názvu parametru, který máme v Revitu. V anglické verzi by to byla hodnota “Level”.
List.SortByKey
Po rozdělení seznamu do skupin budeme řadit tyto skupiny podle výškové hodnoty od nejnižší výšky podlaží po nejvyšší. To nám zajistí řazení podle skutečné výšky bez ohledu na název podlaží. K řazení použijeme uzel “List.SortByKey”. Vstupem do uzlu je seznam elementů a hodnoty podle kterých bude uzel řadit.
Level.Elevation
Pro stanovení řadící hodnoty použijeme uzel Level.Elevation. Vstupem bude seznam unikátních podlaží elementů z předchozího uzlu. Uzel seřadí podlaží podle hodnoty výškové úrovně.
Poté budeme mít vzestupně seřazený seznam podle výšky úrovní rozdělený do skupin.
Code Block “Číslo podlaží”
Jelikož máme nyní tolik skupin, kolik máme podlaží se dveřmi, vytvoříme kódový blok pro výběr jednotlivých skupin podle jejich čísla. Jelikož Dynamo pracuje s kódovými bloky psanými v programovacím jazyce Python, číslování skupin začíná od 0, nikoliv od 1. Hodnoty zapíšeme do řádků a oddělíme středníkem.
Poté budeme s tvorbou uzlů pokračovat pro každé podlaží zvlášť. Vytvoříme uzly pro výpočet jednoho podlaží. Tyto uzly ke konci budeme hromadně kopírovat pro ostatní podlaží.
List.GetItemAtIndex
Elementy seřazené a rozdělené do skupin budeme potřebovat oddělit podle jednotlivých podlaží. K tomu použijem uzel “List.GetItemAtIndex”. Vstupem do uzlu jsou skupiny elementů a číselná hodnota, kterou skupinu elementů má uzel vybrat. Pro vybrání elementů nejnižšího podlaží vložíme jako indexový vstup číslo “0”, pro druhé nejnižší podlaží číslo “1” a tak dále.
List.Join
Pokud používáme pomocná podlaží či mezipodlaží u kterých budeme chtít zachovat stejné číslování, použijeme uzel “List.Join”, kterým spojíme skupiny dohromady.
List.SortByKey
Nyní budeme řadit elementy podle Y souřadnice. Použijeme opět uzel “List.SortByKey”. V tomto místě můžeme změnit řazení podle jakéhokoliv pravidla, které zrovna budeme potřebovat. Například podle šířky dveří, výšky, plochy atd.
FamilyInstance.Location
Vstupní hodnotou řazení bude Y souřadnice, která vychází ze souřadnic umístění komponenty dveří. Ty zjistíme pomocí uzlu FamilyInstance.Location.
Point.Y
Protože předchozí uzel získal souřadnice elementů XYZ, potřebujeme vybrat pouze Y souřadnici. K tomu slouží uzel Point.Y.
Element.SetParameterByName
Nyní máme vybrané elementy skupiny jednoho podlaží, seřazené podle souřadnice Y. Pro očíslování použijeme uzel “Element.SetParameterByName”. Tento uzel zapíše zvolenou hodnotu do zvoleného parametru zvoleným elementům.
String
Elementy máme. Volbu parametru provedeme pomocí uzlu “String” do kterého vložíme jako hodnotu název parametru “Označení” (anglicky “Mark”).
Range
Pro utvoření hodnot, které chceme zapisovat vytvoříme pomocí uzlu “Range” rozmezí číselných hodnot (v případě nejnižšího podlaží od hodnoty 001 do hodnoty 099 s krokem 1).
List.Create + String from Object
Z tohoto rozmezí uděláme seznam, který převedeme na strigové hodnoty.
String.Insert
Jelikož se jedná o nejnižší podlaží a v našem případě je nejnižší podlaží suterén, vložíme ke každému tomuto číslu prefix “S”, který bude označovat, že se jedná o dveře v suterénu.
Propojení uzlu Element.SetParameterByName
V poslední řadě už jen spojíme vše do uzlu, který zapíše hodnoty do parametru “Označení”(anglicky “Mark”) všem seřazeným elementům, které prošly filtrem.
Nyní máme funkční skript pro číslování všech dveří v nejnižším podlaží hotový. Pro číslování dveří na dalších podlaží stačí poslední řadu uzlů jen zkopírovat, přiřadit další číslo z číselné řady podlaží a definovat nové rozmezí čísel spolu s prefixem. Skript po spuštění očísluje všechny elementy kategorie dveří podle jejich podlaží a Y souřadnice projektu.
Závěr
Na tomto praktickém příkladu jsme si ukázali praktické využití vizuálního programovacího doplňku pro Revit – Dynamo. Skript lze při pochopení principů Dynama snadno modifikovat. Je možné na příklad jednoduše změnit kategorii elementů nebo pravidlo, podle kterého jsou elementy číslovány. Jelikož lze skript spustit v jakýchkoli projektech, kde se počet elementů může pohybovat řádově ve stovkách až tisícovkách, jedná se o efektivní způsob úspory času při číslování.