Opnieuw een vraag die roept om een stukje uitleg. Hoe kun je een attribuutwaarde van een AutoCAD Block gebruiken om een eigenschap aan te passen? Bijvoorbeeld als je een tekening hebt met heel veel symbolen, die allemaal een Z-waarde van 0.0 hebben maar wel een attribuut met een hoogtewaarde bevatten.

Overigens moet je niet vergeten dat de tekst in de Attribute HOOGTE een tekst is en geen nummer. Kun je Dynamo gebruiken om de Blocks aan te passen?

Eigenschappen Attributes uitlezen

Met Dynamo kan dit prima. En omdat je met alleen AutoCAD objecten werkt en niet met Civil 3D objecten, is dit een perfect voorbeeld hoe Dynamo ook een toegevoegde waarde op AutoCAD zou hebben. Hopelijk maakt Autodesk in de toekomst Dynamo ook beschikbaar voor AutoCAD.

Met een paar nodes haal je de symbolen op en lees je de tekst uit van de Attribute HOOGTE.

Maar nu, er lijkt geen node te zijn die zomaar de Z eigenschap van een Block aan kan passen. Je kunt deze wel uitlezen, via de CoordinateSystem waarvan je de Origin kunt opvragen, wat een Point is, en uiteindelijk de Z bevat.

Zoals je ziet zijn alle hoogten nul.

Properties aanpassen

De Z waarde is een component van een Point en is niet afzonderlijk aan te passen. Maar je kunt een Block wel herpositioneren op een nieuwe locatie. Dit gebeurt met de node Object.Transform, welke een CoordinateSystem nodig heeft. Je zou verwachten dat je domweg een nieuwe locatie kunt toekennen, die is samengesteld uit de huidige X en Y, samen met de omgerekende Z waarde uit de attribuut. Met wat vallen en opstaan kom je erachter dat het transformeren vanaf de huidige positie gaat. Je zou een CoordinateSystem kunnen maken met alleen een Z vector, evenveel als het symbool omhoog of omlaag moet. Maar de node die je daarvoor kunt gebruiken, geeft in de tooltip aan dat de Z vector volledig genegeerd wordt. Waarom? Geen idee, maar in dit geval erg onhandig.

Gelukkig zijn er meerdere wegen naar Rome. Zo kun je een CoordinateSystem aanpassen met een afstand in een bepaalde richting. Omdat je een nieuw CoordinateSystem wilt genereren ten opzichte van de bestaande CoordinateSystems van de Blocks, transleer je een CoordinateSystem ten opzichte van een standaard lege CoordinateSystem maar wel met de afstand die gelijk is aan de hoogte uit de attribuut.

Deze koppel je aan de Object.Transform node en dan zijn de Blocks aangepast met deze waarden ten opzichte van de oorspronkelijke waarden. Omdat de nieuwe X en Y gelijk zijn aan 0, worden de oorspronkelijke waarden niet veranderd (eigenlijk wel, er wordt gewoon 0 bij opgeteld).

En zoals altijd: check, check en dubbelcheck! Het gaat nu goed, omdat de oorspronkelijke Blocks een hoogte van 0 hebben. Maar als ze al per ongeluk wel een hoogte hadden, dan wordt de nieuwe hoogte erbij opgeteld! Dus beter is het om niet een nieuw CoordinateSystem te maken met de hoogte uit de attribuut, maar met de hoogte uit de attribuut minus de actuele hoogte van de Block. Als je deze graph ooit in een andere tekening wilt uitvoeren dan kun je voor aardige verrassingen komen te staan.

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.