Niet alleen tijdens programmeren, maar ook in het scripten in Dynamo, komt het best vaak voor dat je beslissingsbomen nodig hebt. De meest simpele vorm is: if-then-else. Als ‘a’ is waar, dan doe ‘b’, en anders doe ‘c’. Kan ik naar links, ga dan naar links, anders naar rechts. Is het een boek, pas dan 6% BTW toe, anders 21%. Is de kaas over datum, gooi het dan weg, anders eet op. Je maakt voortdurend zulke afwegingen. Maar hoe doe je dit met Dynamo?

Dynamo nodes

In Dynamo kun je de If node gebruiken.

De node verwacht een test (altijd een waar of onwaar) en retourneert iets terug wat je zelf kunt opgeven. In dit voorbeeld wordt de test gevuld met een berekening of de lengte van een Alignment groter is dan 50m. Zo ja, dan wordt de waarde geretourneerd die in de true invoerpoort is aangegeven, anders die van de false invoerpoort. Het lijkt wat raar om bij de invoerpoorten weer een true of false waarde te geven, maar je kunt hier ook andere dingen in stoppen. Iets wat je wilt toepassen, bijvoorbeeld een kleur. Langer dan 50m? Maak de Alignment dan groen, anders blauw.

Of een Site die je wilt toepassen, gebaseerd op lengte. Of… noem maar op. Het resultaat mag dus alles zijn. En omdat de test bepaalt wat geretourneerd wordt, kun je op basis van die beslissing het resultaat toepassen op het object.

Code Block

In een Code Block kun je zo’n if-then-else constructie eenvoudig maken. De structuur hiervan wordt ook wel een Ternary Operator genoemd. Dit ziet er zo uit:

a == waar ? doe b : anders doe c

Je gebruikt dus een vraagteken en een dubbele punt. Dat ziet er zo uit:

Maar het kan nog compacter, door ook de test in het Code Block te stoppen.

Met een Code Block kun je zo’n beslissing ook nog nesten, door één van de geretourneerde waarden nog eens om te zetten naar een Ternary Operator.

Hier wordt getest of de lengte kleiner is dan 50, dan wordt de kleur ‘Blauw’ toegepast. Als het groter is, dan wordt nog gekeken of het groter is dan 100m, zo ja dan wordt de kleur ‘Paars’ geretourneerd, zo nee dan de kleur ‘Geel’. De code is voor de leesbaarheid over meerdere regels verdeeld maar dat hoeft niet persé.

Wat belangrijk is om te onthouden, de test moet altijd een true of false opleveren. Groter dan, gelijk aan, kleiner dan, dat zijn allemaal Operators die waar of onwaar opleveren. Ook die kun je weer in één stap combineren, bijvoorbeeld:

Wil je een echte if-then-else structuur toepassen met meerdere else if mogelijkheden, dan zul je wat dieper moeten duiken in DesignScript, de taal die je toepast in een Code Block.

Het ziet er wat ingewikkeld uit, maar je maakt hier eerst een nieuwe functie, die een waarde retourneert op basis van de test. Omdat een functie uit zichzelf niets doet, roep je deze op de laatste regel aan. Er verschijnt een invoerpoort die je vult met de lengtes. Het voordeel van zo programmeren, is dat je de ‘else if’ regels meerdere keren kunt toepassen, en dus een veel bredere beslissingsboom kunt opzetten.

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.