Soms komt het voor dat je wilt weten wat de kortste tussenafstand is tussen, bijvoorbeeld, bomen. Misschien om een doorgang te bepalen of om te zien of bomen elkaar het grondwater of licht niet gunnen. Dan kun je (in AutoCAD 2027) ook AI gebruiken maar evengoed Dynamo, misschien zelfs betrouwbaarder.

Om te beginnen heb je een tekening nodig waarin bomen zijn getekend als symbool, dat rekent het makkelijkst. Met Dynamo heb je zo alle bomen te pakken, als ze tenminste op dezelfde laag staan.

Nog een node verder en je hebt alle posities al in kaart gebracht.

Om nu de tussenafstand te bepalen, moet je een vergelijking doen tussen elke locatie en alle andere locaties in dezelfde lijst met locaties. Hierbij moet dan uitgesloten worden dat de locatie zich met zichzelf vergelijkt (is altijd de kortste afstand van 0m) en dat dubbelingen worden uitgesloten. Nadat punt 1 met punt 2 is vergeleken, hoeft punt 2 niet meer met punt 1 te worden vergeleken. Bij 10 bomen krijg je dan 9+8+7+6+5+4+3+2+1 (=45) vergelijkingen. Dit wordt ook wel de handdrukmethode genoemd en wiskundig kun je dit in de formule gieten:

(n*(n-1))/2

Bij 11 bomen krijg je dan 55 vergelijkingen. Eén boom meer en tien extra vergelijkingen. Zo loopt het hard op. In mijn voorbeeld heb ik een tekening met pakweg 2600 bomen, dit levert zo’n 3.5 miljoen vergelijkingen op. Daar draait een beetje programmacode zijn hand niet voor om maar Dynamo verslikt zich daar behoorlijk in. Dit geeft al aan dat het weinig zin heeft om kant-en-klare scripts in een bedrijf te verzamelen zodat de niet-dynamoërs ook iets kunnen doen. Je moet gewoon weten wat je precies doet, en tijdens het samenstellen van het script testen met kleine hoeveelheden.

Met de Select Objects node kun je het testen beperken tot een klein groepje bomen. Om een vergelijking te maken tussen alle bomen, kun je wel met losse nodes werken maar een Code Block werkt sneller en fijner. Met een paar regels code heb je een lijst met tussenafstanden gemaakt tussen elke locatie en alle andere locaties.

Er is in dit geval een serie van 21 bomen gebruikt om te testen. De eerste lijst (indices1) haalt de index-waarden op van alle locaties van 0 tot de lengte van de lijst minus 2 (en dus van 0 tot 19), de tweede lijst (indices2) haalt telkens alle waarden op van de waarde uit de eerste lijst tot aan de lengte van de lijst minus 1. Lijsten beginnen altijd met 0 te tellen, en eindigen altijd met lijstlengte min 1. Dat je de eerste lijst beperkt tot min 2 komt omdat je de enelaatste waarde moet vergelijken met de laatste waarde. In het voorbeeld zie je dat elke sub-lijst in de tweede lijst telkens eentje korter wordt.

Maar goed, nu heb je dus niks meer dan alleen alle tussenafstanden tussen alle bomen. Hier zou je de minimumwaarde uit kunnen halen en dan op de een of andere manier terug moeten vinden welk element dat is in de lijst en die waarde dan gebruiken in de lijst met locaties om de boom te vinden die hoort bij de kortste afstand. Tijd om het iets anders aan te pakken met een beetje meer programmacode. Het is beter om een loop te gebruiken en alleen te retourneren welke twee bomen het dichtst bij elkaar liggen. Hiervoor gebruik je Imperative code.

Zoom je in op deze twee punten of teken je een lijn hiertussen, dan heb je de twee bomen gevonden met de kortste tussenafstand. Voor de zekerheid kun je nog de lijst met tussenafstanden uit het eerste Code Block gebruiken om de kleinste waarde op te zoeken en die te vergelijken met de daadwerkelijk getekende lijn.

Deze waarde is gelijk aan de getekende lijn:

Nu het werkt, kun je langzaam verder gaan berekenen met grotere hoeveelheden bomen. Maar bij meer dan 2600 bomen moet je al gauw rekenen op een uur  of langer voor je resultaten hebt gekregen. Zo traag is Dynamo helaas.

Autodesk Assistant

De Assistant kun je de vraag ook stellen. Het geeft eerst een heleboel tekst terug en toont zelfs een stukje Python code waarmee de vergelijkingen worden gedaan. Na afloop heeft het exact alle boom-symbolen gevonden en berekend, en zoomt in op de twee bomen met de kortste tussenafstand.

Helaas klopt er helemaal niks van. Aan de linkerkant zijn de twee bomen te zien die volgens de Assistant het dichtst bij elkaar liggen, maar aan de rechterkant heb ik zelf al zo vier bomen gevonden die nog dichter op elkaar liggen.

Vertrouw dus niet zomaar op AI!

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.