Zoals wel vaker het geval is, word ik getriggered door vragen op fora, waarna ik zelf ga kijken of ik het kan oplossen. Zo kwam eens de vraag voorbij hoe je de oppervlakte kunt berekenen tussen twee Profiles in Civil 3D.

Met Sections kun je vrij eenvoudig de verschillen tussen twee Section Profiles in kaart brengen en de daarbij behorende oppervlakte. Maar met Profile Views werkt het anders. Je kunt wel arceringen plaatsen maar er is geen mogelijkheid om daarvan de oppervlakte te tonen. Zonder de boel te exploderen dan.

Gelukkig heb je Dynamo in Civil 3D, en daar kun je alles mee! Toch?

Om te beginnen moet je twee Profiles hebben. Anders valt er niks te rekenen. Nu moet je nog nadenken hoe je hier een oppervlakte tussen kunt berekenen. De meest logische manier is om een Polyline te verkrijgen (of een PolyCurve in Dynamo) van de knikpunten van beide profielen, aan elkaar te koppelen om een gesloten vlak te krijgen, en daar de Area van op te vragen. In Dynamo is er wel een Area node die een Polyline kan bevragen (ondanks de invoerpoort met de naam ‘curve’ die niets te maken heeft met een PolyCurve in Dynamo), maar niet van een PolyCurve. Heb je The Civil Nodes package geïnstalleerd, dan kun je ook nog de Area opvragen van een serie punten. Nog beter!

Shoelace algoritme

Maar nog mooier is het om zelf aan de slag te gaan. Je kunt niet domweg de geometrie van de Profiles opvragen, want bij een verticale overdrijving van de Profile View kloppen de X en Y waarden niet. Je zult sowieso moeten werken met de Station en Elevation waarden. Die kun je opvragen van de PVI’s van een Profile.

Van de beide Profiles vraag je deze op, eentje ervan draai je om, je voegt ze samen en voegt uiteindelijk het beginpunt ook nog een keer toe als eindpunt, zodat je nu de PVI’s als vertices hebt van een virtuele polylijn tussen beide profielen. Er is hier geen controle ingebouwd of de profielen elkaar snijden of toevallig begin en eind delen. Normaal gesproken houd je daar wel rekening mee, of je controleert aan het eind of zo’n situatie een spelbreker is in de berekening.

Want je gaat een berekening uitvoeren om de oppervlakte te bepalen tussen een serie vertices. Hiervoor kun je de Shoelace algoritme gebruiken. Kort gezegd komt het er op neer dat je telkens de X van een punt vermenigvuldigt met de Y van het volgende punt, deze bij elkaar optelt, dit ook andersom doet waarbij je de Y van een punt vermenigvuldigt met de X van het volgende punt en ook allemaal bij elkaar optelt, deze twee waarden van elkaar aftrekt en dan deelt door twee.

Hiervoor heb je een Range nodig om de indices op te vragen van de Stations en de Elevations. Omdat je de volgende berekeningen toepast:

station[i] * elevation[i+1]
elevation[i] * station[i+1]

moet je de waarde i beperken tot één minder dan het totaal, en omdat de index nul-gebaseerd is, werken van 0 tot aantal minus 2.

De gevonden waarden tel je bij elkaar op, de twee opgetelde waarden trek je van elkaar af, maakt hier een absoluut getal van, en deelt het vervolgens door twee.

En zo heb je de oppervlakte berekend tussen twee Profiles.

Omdat Dynamo precies doet wat je vraagt, zit er geen enkele controle op het resultaat. Uiteraard moet je er nog rekening mee houden dat er vertices gedeeld worden, of de Profiles elkaar misschien kruisen, of de Profiles wel boven elkaar liggen, enzovoort. Misschien vind je het wel mooier om het beginpunt of eindpunt van beide profielen op elkaar af te stemmen, of loodrecht naar beneden af laten snijden zoals ook de arceringen worden getekend in Civil 3D. Alles kan, als je het maar controleert. Domweg vertrouwen dat Dynamo het gewenste antwoord geeft is een utopie. Het geeft alleen het antwoord op wat je vraagt, niet op wat je wilt. Wat dat betreft lijkt het wel een beetje op AI.

Verder kun je de oppervlakte nog vermenigvuldigen met de lengte tot aan de volgende Alignment, om zodoende een indicatie te krijgen van het volume. Maar dan werken Sections toch beter, of een Volume Surface. Het bepalen van de Area is al een mooie stap en ook toepasbaar op andere situaties dan alleen Profiles.

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.