Het kan soms best handig zijn om grote, enigszins vervuilde tekeningen te splitsen in aparte tekeningen, die vervolgens als XRef gebruikt kunnen worden. Je hebt soms lang niet alle objecten nodig als je verschillende overzichtstekeningen maakt. Je kunt hiervoor aan de slag met het aan- en uitzetten van lagen die je vervolgens exporteert met het commando WBLOCK. Dan heb ik het hier uiteraard over AutoCAD objecten, want Civil 3D objecten kun je fantastisch delen met behulp van Data Shortcuts. Maar in plaats van WBLOCK kun je ook Dynamo gebruiken. Weer een voorbeeld wat de waarde voor Dynamo voor AutoCAD toont, Autodesk: lezen jullie mee?

Export met Dynamo

Sinds Civil 3D 2025.1 is een Object.Export node beschikbaar in Dynamo. Dit werkt hetzelfde als een WBLOCK functie. De werking ervan is op het oog niet zo heel duidelijk. Er zijn vier invoerpoorten. Objects is wel duidelijk, maar dan een DrawingFilePath. Is dat het pad zonder bestandsnaam? Of met? 

De tooltip geeft aan dat het om de bestandsnaam gaat, met of zonder pad. Nu heb ik wel vaker tooltips met leugens gezien, maar laten we ervan uitgaan dat deze klopt. Toch blijft het onduidelijk of de node bijvoorbeeld zelf de extensie regelt, of een mappenstructuur aanmaakt als die nog niet bestaat. Dan een BasePoint. In deze node uitermate geschikt om een default waarde van 0,0 te hebben, wat je vermoedelijk vrijwel altijd gaat gebruiken. Maar helaas, deze moet je zelf vullen. Veel onzekerheden dus, eerst maar eens testen met een klein voorbeeld om precies te achterhalen wat de node verwacht.

Civil 3D 2025.1 bevat ook de fantastische Select Objects node, die van oorsprong in de C3DToolkit te vinden was. Hiermee kun je ineens meerdere objecten selecteren uit de tekening. Voor een test is het prima, later kun je ook op andere manieren objecten verzamelen. 

Een File Path is handig te selecteren. Ik heb nog niet getest of de node ook mappen aanmaakt als ze nog niet bestaan, en hoewel ik het niet verwacht, is het toch slim om eens te testen. Dan weet je het voor een volgende keer, of kun je oplossen door wat nodes tussen te voegen die eerst de benodigde map aanmaken.

Als BasePoint kun je een Point.Origin gebruiken, dit is hetzelfde als een Point.ByCoordinates(0,0) welke je anders ook kunt gebruiken.

Let er trouwens op dat de invoerpoort Overwrite default op ‘false’ staat. Bij een beetje testen, zal alleen de eerste keer een nieuwe tekening gemaakt worden, daarna niet meer. Een waarde ’true’ zou beter zijn als default, maar in ieder geval om in te gaan stellen. Anders valt er niet veel te testen natuurlijk.

Een eerste test slaat de objecten keurig op (ergens zit er in de 2025.1 versie nog een bug waardoor het niet altijd mogelijk is, er is intussen bevestiging dat dit in 2025.2 verholpen is). Nu wordt het tijd om objecten te gaan filteren uit een wat grotere tekening.

Objecten filteren

Neem als voorbeeld een stukje BGT die je wilt opsplitsen. Een aparte tekening met de verharding en bebouwing, en eentje met groen en water. Of nog een aparte tekening met alleen de symbolen, kan ook nog altijd.

Gelukkig is deze tekening conform NLCS opgebouwd, dus lagen met verharding of bebouwing filter je heel snel door te controleren of de laagnaam ‘-VH-‘ of ‘BEBOUWING’ bevat. Wil je van de verhardingen alleen de wat betere wegen, dan kun je nog zoeken op ‘OPENVERHARDING’ en ‘GESLOTENVERHARDING’.

Je kunt alleen helaas niet zoeken op meerdere termen tegelijk. Je zou meerdere String.Contains nodes kunnen gebruiken en dan de resultaten samenvoegen. Maar nog beter, als je The Civil Nodes package hebt geïnstalleerd dan kun je heel snel lagen filteren. Ook op meerdere zoektermen.

En nu het mooie, je kunt gewoon verder filteren op het resultaat. Bijvoorbeeld alle lagen die niet eindigen op een ‘-V’ van vlakvulling. 

Na het platslaan van alle lijsten, houd je uiteindelijk 19 lagen over. Dit zijn echte Layer objecten, waar je ook de Name van kunt opvragen als eigenschap. Deze waarde kun je gebruiken in de All Objects on Layer node. Daarna is het wegschrijven naar een aparte tekening een eitje.

Vergeet niet om de objecten plat te slaan met de List.Flatten node, voor het exporteren. Anders zal de node elke sub-lijst apart verwerken en dus telkens overschrijven. Omdat je meerdere lagen opgeeft, krijg je per laag een lijstje aan objecten. De export node zal uiteindelijk een tekening produceren met alleen de objecten van het laatste lijstje, door telkens de export van de vorige sub-lijsten te overschrijven. Door de lijsten plat te slaan, worden alle objecten als één lijst geëxporteerd.

Meerdere filters tegelijk wegschrijven

Het zou mooi zijn als je tegelijkertijd bijvoorbeeld ook alle symbolen ineens kunt exporteren naar een andere tekening. Dat kun je testen uiteraard. Vergeet niet af en toe je graph op te slaan, zeker voordat je op Run drukt (als de graph al niet automatisch wordt uitgevoerd tenminste). Om twee aparte groepen weg te schrijven, moet de lijst met objecten evenlang zijn als de lijst met namen. Symbolen kun je filteren door alle blokken te verzamelen, of door alle objecten te verzamelen op laagnamen die eindigen op ‘-S’. Werken met een gestructureerde standaard als de NLCS heeft best voordelen.

Het is niet vanzelfsprekend dat een node lijsten afzonderlijk verwerkt, sommige nodes produceren een error met de mededeling dat ze alleen enkele objecten kunnen verwerken. Maar deze node doet het gelukkig prima. Zolang je maar in de gaten houdt dat je evenveel lijsten met objecten als lijsten met bestandsnamen doorgeeft, en nog belangrijker: de juiste volgorde van namen bij de lijsten met objecten! Anders staan al je symbolen in een verhardingstekening en vice versa.

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.