pondělí 3. října 2016

DYNAMO a jeho praktické využití: jak přejmenovat řadu podlaží jedním kliknutím


V dnešním článku bychom si nadefinovali algoritmus v aplikaci Dynamo, který nám umožní přejmenovat n-podlaží vytvořených v Revitu pouze jedním kliknutím. Tento algoritmus pravděpodobně nevyužije každý, jelikož je zcela bezpředmětné ho aplikovat na objekty o třech podlažích, ale více než jeho použitelnost v praxi je zajímavý v tom, že názorně ukazuje myšlenkové pochody sestavování algoritmu v Dynamu a to je alfa a omega celé aplikace.

Pokud už nějakou dobu pracujete s aplikací Revit, tak jste si mohli povšimnout, že při vytvoření nového podlaží se vždy daná komponenta pojmenuje jako „podlaží n“, i přesto, že podlaží vytvořené před ním nese zápis např. „2NP“. Revit v tomto případě nedokáže držet kontinuitu zápisu, proto nám nezbývá nic jiného než každé podlaží manuálně přejmenovat. Se vstupem Dynama do světa Revitu už je nasnadě se zamyslet nad tím, zdali není od věci si tvorbu virtuálního modelu urychlit například tím, že si vytvoříme algoritmus, který nám tuto manuální práci s přejmenováváním podlaží urychlí.

Pro sestavení algoritmu je nejdříve nutné si vytvořit několik podlaží v libovolném pohledu Revitu. Na konkrétním počtu nesejde, ale doporučuji, aby jich bylo pro ukázku více než 20. První podlaží je systémové podlaží a je vázané na zeměměřičský bod, druhé podlaží by mělo být již vázané na základní bod projektu, a proto je vhodné toto podlaží rozkopírovat přes nástroj Pole. Při použití nástroje pole nezapomeňte odznačit možnost seskupit a asociovat na řádku možností, jinak se vám všechna vytvořená podlaží seskupí do skupiny a to v tomto případě není žádoucí. Po vytvoření podlaží je důležité je ještě zanést do prohlížeče projektu, jelikož nástroj pole pouze rozkopíruje symboly podlaží, ale k těm je ještě nutné vytvořit náhledy na daná podlaží. Na kartě Pohled klikněte na nástroj Půdorysné pohledy, který se nachází na panelu Vytvořit. Daný nástroj obsahuje několik dílčích nástrojů - nás v této chvíli bude zajímat pouze jediný a tím je nástroj Půdorys. Se Shiftem si vyberte všechna podlaží a potvrďte výběr tlačítkem OK. Po potvrzení se nám vytvoří náhledy na jednotlivá podlaží a zanesou se do prohlížeče projektu. Nyní nám už nezbývá nic jiného než nastartovat aplikaci Dynamo a začít se sestavováním algoritmu.

Program Dynamo, který je již součástí Revitu 2017, naleznete na kartě Správa na panelu Vizuální programování. Pokud používáte nižší verzi Revitu, je nutné si tento doplněk stáhnout ze stránek vývojového týmu, nainstalovat a následně se bude zobrazovat na kartě Doplňky.

Do plochy grafu si zaneseme následující uzly:

1.) Element Types: Cesta k uzlu: Revit > Selection > Element Types; Tento uzel vybere všechny typy prvků - v našem případě budeme ve vyhledávacím menu daného uzlu hledat prvek podlaží. Daný uzel pracuje pouze s anglickými názvy prvků, proto vyhledáme název Level.
2.) All Elements of Type: Cesta k uzlu: Revit > Selection > All Elements of Type; Tento uzel získá z otevřeného dokumentu všechny prvky zvoleného typu, tzn., načte všechna vytvořená podlaží z projektu.

Nyní můžete do algoritmu vložit dotaz pro vypsání načtených prvků do Dynama. Klikněte na pravé tlačítko myši a vepište do řádku pro vyhledávání název uzlu Watch, který po zanesení do grafu napojte na uzel All Elements of Type. Nyní po spuštění operace vidíte přehledný list prvků načtených do Dynama. Všimněte si, že součásti výčtu prvků jsou i podlaží 1NP a 2NP, tyto podlaží nechceme zahrnout do výpisu podlaží, která budou určena k přejmenování, proto zmíněná podlaží z daného listu vyselektujeme následujícím postupem. Do grafu si zaneseme následující uzly:

3.) List.RemoveItemAtIndex: Cesta k uzlu: Core > List > List.RemoveItemAtIndex; Tento uzel odstraní položky z daného seznamu v našem případě položky 0 až 1, které reprezentují podlaží 1NP a 2NP.
4.) Code Block: Cesta k uzlu: dvojklik do pracovní plochy; Do uzlu zadáme hodnotu 0..1
V této pozici by měl mít algoritmus tuto podobu:


Seznam, který nám nabízí uzel List.RemoveItemAtIndex popisuje jednotlivá podlaží, ale pro další práci potřebujeme pouze vypsat názvy jednotlivých podlaží, s tím nám pomůže následující uzel:

5.) Level.Name: Cesta k uzlu: Revit > Elements > Level > Name; Tento uzel vyselektuje pouze názvy jednotlivých podlaží.

V této chvíli budeme hledat uzel, který nám odstraní ve všech položkách slovo „podlaží“.

6.) String.Replace: Cesta k uzlu: Core > String > Replace; Tento uzel má schopnost nahradit text v daném seznamu za jiný text, v našem případě zaměníme slovo „podlaží“ za prázdný výraz ““. Daný uzel má následující dva vstupy, které je potřeba spojit s patřičnými instrukcemi. První vstup searchFor vyžaduje např. Code Block s názvem slova „podlaží“, druhý vstup replaceWith vyžaduje opět např. Code Block s prázdným výrazem ““.


Po spuštění operace daný uzel String.Replace odstraní ve všech položkách seznamu slovo „podlaží“.

Nyní potřebujeme vytvořit zcela nový seznam, který bude mít stejný počet položek jako seznam v uzlu List.RemoveItemAtIndex a současně všechny dané položky budou obsahovat název „NP“. Do grafu si vložíme následující uzel:

7.) List.Cycle: Cesta k uzlu: Core > List > Cycle; Tento uzel vytvoří nový seznam zřetězením kopií daného seznamu, do vstupu List propojíme Code Block do kterého zapíšeme výraz „NP“. Druhý vstup daného uzlu je Amount, zde daný uzel potřebuje vědět, kolik položek v novém seznamu má vytvořit, pokud v této chvíli propojíte daný uzel s uzlem List.RemoveItemAtIndex, nedostaví se kýžený efekt, je nutné do grafu vložit následující uzel:
8.) Count: Cesta k uzlu: Core > List > Count; Tento uzel vypíše celým číslem počet položek z uzlu List.RemoveItemAtIndex.




V této chvíli máme dva seznamy, které bychom měli spolu propojit, jeden seznam definuje seznam číselných hodnot a druhý seznam definuje výraz „NP“. S tímto problémem nám pomohou následující dva uzly:

9.) List.Combine: Cesta k uzlu: Core > List > Cycle; Tento uzel jednoduše řečeno použije kombinátor pro každý prvek ve dvou posloupnostech. Daný uzel bude fungovat pouze za předpokladu, pokud se propojí s následujícím uzlem:
10.) String.Concat: Cesta k uzlu: Core > String > Concat; Tento uzel zřetězí více řetězců do jediného řetězce. Je nutné v daném uzlu přidat hodnotu string1.


V této chvíli propojíme uzel String.Replace se vstupem list1 uzlu List.Combine a uzel List.Cycle  s druhým vstupem list2 uzlu List.Combine.

Poslední uzel, který nám zbývá vložit do grafu, není standardně součástí instalace aplikace Dynamo, je tedy nutné si ho stáhnout. Ke stahovatelnému obsahu se lze dostat přes kartu Balíčky > Vyhledat balíčky…, do políčka vyhledávání vypíšeme název balíčku Clockwork. Po stažení se nám balíček přidá do knihovny Dynama.

11.) Element.SetName: Cesta k uzlu: Clockwork > Revit > Elements > Element > Set.Name; Tento uzel přepíše názvy všech načtených podlaží do Dynama. Po stisknutí tlačítka spustit operaci, se všechny podlaží v Revit přejmenují.

Výsledný algoritmus musí mít následující podobu:


Videoukázka:


Žádné komentáře:

Okomentovat