Het komt een enkele keer voor dat je een lijst exact op een vast aantal items wilt krijgen. Bijvoorbeeld als je een block met 10 attributen hebt en die wil je altijd vullen met 10 waarden. Stel dat je 4 waarden verzameld hebt en de overige 6 wilt aanvullen met een streepje of kruisje? Of je verzamelt 12 waarden, dan wil je alleen de eerste 10 gebruiken.
Nu wordt het interessant. In Dynamo dan. Waar ga je op zoeken? Extend List? Reduce List? Merge? Dat alles bestaat helaas niet. Wel een List.TakeItems node die bijvoorbeeld de eerste 10 waarden uit een lijst ophaalt. Maar niet aanvult als de lijst korter is.
Ternary Operator
In eerste instantie verzon ik een briljante oplossing, al zeg ik het zelf. Ik ben nogal van de Code Blocks (en dat zou jij ook moeten zijn!), dus met twee regels code kreeg ik het voor elkaar.

Dit is een zogenaamde Ternary Operator die het volgende doet: [is waar] ? [doe dit] : [anders dat]
Omdat je een lijst van 0 tot 9 ingeeft, wordt deze formule 10 keer geëvalueerd. Als de lijst groter is dan het doorgegeven nummer, dan wordt de waarde uit de lijst gehaald en anders een streepje geretourneerd.
Het werkt, maar er wordt een foutmelding getoond. De foutmelding geeft aan dat de List.GetItemAtIndex een waarde probeert op te halen op een index die niet bestaat. Dat kan alleen maar als deze functie toch wordt geëvalueerd, ook als de lijst kleiner is en dus een streepje hoort te retourneren! Dit moet een bug zijn in Dynamo, dat kan niet anders.
Ook is niet helemaal duidelijk wat er gebeurt met een langere lijst. Dit kan getest worden natuurlijk. Gelukkig werkt dit wel, de lijst wordt keurig ingekort en dat komt omdat je vergelijkt met een lijst van 0 tot 9. De kortste lijst telt, tenzij je de Lacing aanpast.
Imperative Code
In een Code Block kun je ook programmeren. En dan kom je al snel aan een for-each lus om 10 items op te halen uit een lijst, tenzij de aangeleverde lijst korter is. Dit kan in een Imperative blokje code.

Hoe het werkt kun je zelf misschien achterhalen, maar ik vond het uiteindelijk een beetje over-geëngineerd, of hoe je dit ook zegt in correct Nederlands. Het moet eenvoudiger kunnen, en dat kan!
Joinen en afkappen

Je maakt hier eerst een lijst van x-aantal keer een streepje. Deze join je met de aangeleverde lijst, zodanig dat deze streepjes-lijst onderaan staat. Vervolgens neem je de eerste tien en retourneer je.
Dit werkt altijd. Als je 4 waarden verzameld hebt dan is de tussenlijst 14 waarvan je de eerste 10 ophaalt. Heb je 12 waarden verzameld dan is de tussenlijst 22 waarvan je de eerste 10 ophaalt.
Briljanter kan niet! Tenzij iemand er ooit een node voor gaat ontwikkelen.
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.
