De volgorde van de nodes in een Dynamo graph bepaalt wanneer iets wordt uitgevoerd. Door de lacing, de verbinding tussen de nodes, wordt altijd de volgende node pas uitgevoerd als de voorgaande klaar is. Maar soms heb je niet een graph die uit één deel bestaat maar zijn er meerdere delen die iets moeten doen. Hoe houd je grip op de volgorde van uitvoeren?
Neem bijvoorbeeld mijn blog over het uitlezen van Exif data van een foto. Voordat je de locatie van de foto kunt uitlezen, moet er een Coordinate System zijn gekoppeld aan je tekening, omdat de Lat/Lon waarden geconverteerd moeten worden naar een geprojecteerde coördinaat. Anders krijg je een foutmelding in Dynamo als er geen Geo Location (het stukje van de tekening waar een Coordinate System in wordt bewaard) aanwezig is.

Dan kun je denken, ik voeg gewoon een paar nodes toe die een Coordinate System koppelen aan de tekening?

Ook dan is de volgorde bepalend waarin iets wordt uitgevoerd. Normaal gesproken is dat de lacing, maar omdat hier twee groepjes nodes uitgevoerd moeten worden, zullen ze worden uitgevoerd in de volgorde waarin de eerste nodes aan de graph zijn toegevoegd. Het maakt dus niet uit dat de nodes voor de Coordinate System bovenaan zijn gezet, en het gaat ook niet helpen om ze meer links te plaatsen. Helaas kun je niet zien welke node eerst is geplaatst en welke als eerste wordt uitgevoerd, behalve in de Graph Node Manager.

Maar meer dan kijken kun je niet, helaas kun je ze niet omhoog schuiven of in een andere volgorde zetten. En dan nog, als je dit moet doen in je graph voordat iets goed werkt, kun je er net zo goed een gewoonte van maken om eerst die Coordinate System nodes te plaatsen voordat je wat anders gaat doen.
Wachten op uitvoer
Het Dynamo BIM Forum is een bron van pareltjes en briljante ideeën. Daar kwam ik een geweldige tip tegen waarmee je de volgorde kunt bepalen van groepen nodes. In dit geval was het uitvinden welk bestandsnaam een nieuw gemaakte QR Code had gekregen om deze in een aparte map te plaatsen. Hier gaat het wel om een volledige vertakking van één groep nodes, maar ergens vertakt het script naar twee aparte werkwijzen waarbij in één tak naar de andere tak wordt verwezen. En dan kan het voorkomen dat die andere tak aan nodes nog niet klaar is als je ernaar verwijst.
Maar de tip is voor meer toepasbaar, o.a. voor de situatie zoals ik hierboven heb geschreven. Er wordt gebruik gemaakt van een Ternary Operator, dit is een term voor een verkorte if-then-else methode. In een Code Block werkt dit als volgt:
if ? then : else
Als je voor deze onderdelen een zelfbedachte term gebruikt, dan worden het invoer-poorten die je kunt vullen.

Omdat je eigenlijk het else stukje niet nodig hebt, kun je hier bijvoorbeeld null invullen, of iets anders wat nooit uitgevoerd gaat worden. Je kunt het helaas niet weglaten omdat de Ternary Operator een else stukje verplicht stelt. Maar zo omzeil je het mooi.
Door nu de beide groepen nodes op de juiste manier te koppelen, kun je ervoor zorgen dat het deel waitforthis als eerste wordt uitgevoerd en daarna pas de thendothat groep nodes.

De output is dan het resultaat van de thendothat groep, maar daar hoef je niet persé iets mee te doen. Je kunt gewoon verder aansluiten op de nodes ervoor, maar door het toepassen van deze structuur heb je wel bepaald wat als eerste uitgevoerd moet worden. En daar gaat het om.
En dan ook nog zo simpel, echt een pareltje!
Wil je complexe of repetitieve taken automatiseren in Civil 3D? Dit boek helpt je alles te leren over de design automating tool Dynamo voor Civil 3D. Je wordt een professional in visueel programmeren, en binnenkort zijn al je saaie of complexe taken geautomatiseerd! This book is only available in English.
