Zoals vaker gebeurt, triggert een forumvraag mij om er een blogje over te schrijven en zelf te bedenken hoe je tot een antwoord komt. Dit helpt je ook om de software nog beter te begrijpen. Nu heb ik daar bij Dynamo niet zoveel moeite mee, maar met QGIS merk ik dat het enorm leerzaam is om gewoon maar eens te beginnen aan een vraagstuk. Anyway, vandaag gaat niet niet over QGIS maar over Dynamo. Stel dat je een lijst met waarden hebt verkregen die niet uniek zijn, maar die je wel wilt omzetten naar een unieke lijst. Hoewel zo’n vraag ook prima in QGIS voor kan komen, dus wie weet is de volgende blog over QGIS!

Niet-unieke lijst

Voor het gemak simuleer ik een lijst die lijkt op wat er in het topic wordt beschreven. Daar kunnen de waarden uit bijvoorbeeld Revit Families, stuklijsten of Layouts komen. Hier met een coderegel gegenereerd in Dynamo.

Zoals je ziet zijn er meerdere items met de waarde ‘A.20.A.’ en ook met de 18 en 19 variant. Hoe kun je, en dat is de vraag van vandaag, achter elk item een volgnummer plaatsen zodat het unieke waarden worden, maar wel zodanig dat bij elke variant weer bij 1 wordt begonnen? Dus ‘A.20.A.1’, ‘A.20.A.2’ en dan ‘A.19.A.1’ enzovoort.

Programmeren

Mijn eerste gedachte was dat je dit zou moeten programmeren met Python of DesignScript. En dat blijkt ook zeker mogelijk. Verrassend genoeg was het topic in no-time voorzien van handige Python en DesignScript codes. Nu ben ik als C# programmeur niet zo van de Python, DesignScript vind ik leuker. Omdat het dichter bij Dynamo blijft, zeg maar. Beide voorbeelden in het topic zijn in ieder geval erg leerzaam. Jammer dat er al zo snel oplossingen gedeeld werden, het triggert niet zo om zelf ook nog eens aan een stukje DesignScript te wagen. Wat ik dan wel weer super interessant vond, was het stukje Code Block hoe je een lijst met waarden genereert die vaker voorkomen:

List.Shuffle(List.Join(List.OfRepeatedItem(("A".."D")@L1<1>,(1..4)@L1<1>)));

Dit levert een lijst met 1xA, 2xB, 3xC en 4xD op, en dan door elkaar gehusseld. Ideaal voor een stukje test-data! Dit vind ik nou leuke voorbeelden om uit te pluizen! Het helpt bijvoorbeeld om deze DesignScript code eens om te zetten naar echte nodes.

Gek genoeg zie je hier ineens iets vreemds. De node List.Join geeft een ander resultaat dan het aanroepen ervan in een Code Block. In het Code Block is het resultaat gelijk aan List.Flatten en niet List.Join. Bizar…

Out Of The Box (OOTB)

Na alle programmeervoorbeelden is het fantastisch om te zien dat het ook gewoon met OOTB nodes opgelost kan worden. Bijvoorbeeld om de lijst te groeperen. Dit doe je twee keer. Eén keer om de unieke items te tellen en te voorzien van een volgnummer per uniek item, en één keer om de index te verkrijgen in de lijst, om zodoende aan het eind weer op de oorspronkelijke volgorde te sorteren.

Al met al vind ik de oplossing met de OOTB nodes het meest indrukwekkend. Je moet in tegenstelling tot programmeren, echt wel even een andere richting in denken. Een beetje out-of-the-box denken, zeg maar. En dat maakt Dynamo zo leuk!

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.