In een eerdere blog is uitgelegd hoe je de categorie-namen van een data-laag als AutoCAD laag kunt exporteren vanuit QGIS. Daar bleek dat alle objecten een eigen ingestelde kleur hadden en de laagnaam ingesteld was op de kleur rood. Typisch een taakje voor Dynamo voor Civil 3D om dat te verhelpen.
Als uitgangspunt neem ik een dataset met alle gemeenten in Nederland. Deze exporteer ik naar een DXF, wat resulteert in een bestand van dik 200 MB, gevuld met Hatches in de kleur zoals QGIS die ook gebruikt, een omtreklijn met een donkere kleur maar wel op dezelfde laag als de arcering, en elke Layer in de kleur Red. Na het opslaan in DWG formaat hou je 60 MB aan tekening over. Klik vooral niet op een arcering, het duurt eindeloos voor AutoCAD je weer de besturing overlaat.
Stappenplan
De volgende stappen had ik in gedachten:
- Selecteer een arcering
- De kleur uitlezen
- Pas deze toe op de laag van de arcering
Dit alles in een automatische loop natuurlijk, want je gaat niet alles één voor één verwerken. Na afloop kun je:
- De arcering verwijderen (optioneel, het maakt de tekening een stuk lichter)
- De omtreklijn op ByLayer zetten zodat het de kleur overneemt van de laag
Valkuilen
Er zijn twee aandachtspunten:
- Er wordt vanuit gegaan dat alle arceringen op elke dezelfde laag ook dezelfde kleur hebben (als er al meerdere arceringen per laag zijn). De kans dat dit aannemelijk is, is groot, want QGIS heeft de gemeenten gecategoriseerd waardoor elke gemeente als één arcering met één omtreklijn op één laag komt. Dat het te maken script hier dus goed werkt, wil niet zeggen dat het op elk voorkomende situatie werkt als je de kleur van objecten wilt toepassen op de laag.
- Als je de arceringen verwijdert, kan het theoretisch gebeuren dat deze verwijderd worden voordat de kleur uitgelezen is. Dit kunnen we proefondervindelijk testen, zolang je je maar bewust bent van mogelijke valkuilen.
Uitwerking
Voor het gemak kun je het beste gebruik maken van nodes uit de Arkance Systems Node Library voor Dynamo Civil 3D. Eerst selecteer je alle objecten op alle lagen. Dit kan met standaard OOTB nodes. Omdat de tekening alleen maar polylijnen en arceringen bevat, krijg je keurig per laag één Polyline en één Object. De Hatch is geen standaard object in Dynamo en wordt dus aangeduid als algemeen object, in tegenstelling tot een Polyline. Om met alle objecten ineens te werken, kun je het resultaat plat slaan tot één lijst.
Om de arceringen eruit te filteren, kun je een FilterByBoolMask toepassen waardoor je twee lijsten overhoudt. Een lijst met arceringen (de ‘in’ uitvoerpoort) en een lijst met polylijnen (de ‘out’ uitvoerpoort).
Van de arceringen vraag je de laagnaam en de kleur op. Van de laagnaam, die een string is, maak je een laag-object. Vervolgens pas je de opgevraagde kleur toe op de laag-object.
Op de polylijnen-lijst pas je de kleur ‘ByLayer’ toe. ByLayer heeft ACI 256. De polylijnen nemen nu de laagkleur over.
De arceringen kun je verwijderen (als je dat wilt).
Nog een check in de tekening, alle arceringen zijn weg en alle laagnamen hebben keurig een kleur gekregen. Het is dus gelukt!
En het maken van het script zal hooguit een minuut of vijf hebben gekost, het meeste nog door eerst de structuur te bedenken en de nodes te zoeken. De uitvoering is echt in een handvol seconden gedaan. Piece of cake!