Dynamo för Revit Visuell programmering I Dynamo jobbar man med visuell, eller grafisk, programmering som till skillnad från textbaserad programmering är uppbyggd som ett flödesschema. Programmeringen sker genom att använda färdiga moduler, så kallade noder, som innehåller förprogrammerade funktioner. Exempel på texbaserad programmering: Exempel på visuell programmering: Function Handla (){ var ArtNR, PrisVara, Pengar; var Vara; Index, Inköp; Index = 1; While (Index < Inköpslista){ ArtNR =Inköp.GetItem(Index)); Vara = GetVara(ArtNR); PrisVara = Vara.Pris; If (pengar < PrisVara){ Exit; } // End if Kundkorg.Append(Vara); Index = Index +1 }// End While Exit; }// End Handla I ovanstående exempel är det betydligt lättare för de som inte är insatta i tradiontionell programmering att följa flödet i den visuella versionen. Dynamo fungerar på liknande sätt: färdiga funktioner kopplas ihop som i ett flödesschema. Det går att skapa egna noder genom att kombinera befintliga noder eller NTI 2018 1
skriva egna med traditionell texbaserad programmering. Dynamo använder Phyton Script för detta. Dynamo finns som fristående applikation och som plugin till Revit. Exempel: Rumsinformation i 3D-samordning I nedanstående exempel har Dynamo använts för att lösa ett problem med rumsinformation i 3Dsamordning. De flesta samordningsprogram tar inte med texter vid import av modeller vilket gör det svårt att se namn, nummer o.s.v. som de olika rummen har. Ett sätt att lösa det är att skapa ett objekt i alla rum som visar information om rummet som ett 3D-objekt. I Revit kallas den funktionen för Model Text. För att få ut informationen i 3D behövs en familj med en instans-parameter för textinnehållet. I det här fallet har familjen TextInRoom (Generic Model) infogats i projektet. Familjen har en instansparameter som heter ModelText. Den har värdet KÖK ifyllt. Den informationen kommer från rummet. Dynamo har ett eget gränssnitt som startas från panelen Visual Programming i fliken Manage. 2 NTI 2018
Nedan visas gränsnittet i Dynamo med några ihopkopplade noder: Första delen ser ut så här. Alla element av kategorin Rooms hämtas ur projektet med noden Categories. Detta skapar en lista av Elements, som består av alla rum i projektet. NTI 2018 3
Dynamo skapar automatiskt listor, om utgången av en node resulterar i flera objekt. För att kontrolllera resultat av en node, finns en speciell Watch-node, som visar resultatet från andra noder. Så här ser Watch-noden ut när den är kopplad till utgången av All Elements of Category. Den visar ID-numren för alla rum och totalt antal objekt i listan. Den här listan används till två saker, dels för rummets placering i projektet och dels för att hämta information ur respektive rum. I det här fallet är det rummets namn som hämtas. Nu skapas ytterligare två listor, en med koordinater, där rummen finns, och en med rummens namn. Listan med koorddinaterna används för att placera en instans av familjen TextInRoom i varje rum. Notera att koordinaterna från Room.Location presenteras i formatet Point (X,Y;Z) medan noden som placerar instanserna av familjen TextInRoom vill ha X och Y som separata värden. Noderna Point.X och Point.Y separerar X- respektyve Y-värdet ur Point-formatet. Z-värdet används inte i det här fallet, då 3Dtexten placeras på 0-höjd. Numersika värden har noll som förvalt värde. 4 NTI 2018
Noden Family Types anpassas till 3Dtext-familjens namn och typ. I det här fallet heter familjen TextInRoom och har ingen typ, då blir typnamnet samma som familjens namn. Så här blir resultatet av Element.GetParameterValueByName. Den visar alla rummens namn. Listan med rumsnamn används av noden Element.SetParameterByName, för att fylla i rumsnamnet i 3D-texten, via parametern ModelText, i familjen TextInRoom. Hela grafen (utan Watch-noder) ser ut så här: NTI 2018 5