Als vervolg op de blog over het plaatsen van ruitkruisjes, hierbij het aanvullende deel om ook de coördinaten te plaatsen langs de Viewport rand. Was heb plaatsen van de symbolen al complex, het plaatsen van de juiste teksten is nog veel complexer! Het uiteindelijke script is niet enorm ingewikkeld, maar tijdens het uitzoeken loop je voortdurend tegen beperkingen aan en moet je een workflow zien te vinden die goed werkt.
Locaties bepalen
De opbouw is grotendeels gelijk aan het vinden van alle RD punten die binnen een Viewport vallen, behalve dat je nu geen punten zoekt maar lijnen genereert.
Op de gevonden RD punten wordt een vector in de X en Y richting geplaatst, verschaald met een dummy waarde van 10.000 en -10.000, zodat de vector eigenlijk twee kanten op wordt verschaald. Op de eindpunten van de vectoren wordt een lijn getekend, in Dynamo Geometry. Dit is het resultaat:
Er zijn voldoende lijnen, ook als de Viewport een veel grilliger rotatie kent, dus er snijden altijd lijnen met de Viewport begrenzing.
Snijpunten
Van zowel de lijnen in de X richting als in de Y richting worden de snijdingen bepaald met de omtreklijn van de Viewport. Dit levert een lijstje met punten op.
Deze worden door middel van een Filter By Bool Mask in een aparte lijst gestopt. Dezelfde true/false filter wordt op de lijst met bijbehorende ModelSpace coördinaten toegepast, en omdat elke lijn een snijding op 2 punten oplevert, wordt de lijst met coördinaten verdubbeld in een gelijke lijst. Het resultaat van ModelSpace coördinaten komt nu met aantal waarden precies overeen met de lijst van PaperSpace coördinaten.
De snijdingen in PaperSpace moeten nu beoordeeld worden of ze langs de zijranden of de boven- en onderrand vallen.
Randbepaling
De X lijnen worden afzonderlijk behandeld van de Y lijnen. De X lijnen worden beoordeeld of ze door de linker- of rechterrand snijden. Dit wordt gedaan door te kijken of de X van elk snijpunt overeen komt met de minimale X of de maximale X van de Viewport rand. Dit werkt alleen bij een rechthoekige Viewport die horizontaal staat, anders klopt de vergelijking niet. De Y lijnen worden beoordeeld of ze door de boven- of onderrand snijden.
En zo ja, dan wordt de tekst geplaatst op het snijpunt met als waarde de X- of Y-waarde van het ModelSpace punt. Dit is het resultaat:
Ziet er netjes uit hé? Maar helaas…
Tekortkomingen
Uiteraard test je het script grondig en daarna nog eens. En dan blijkt dat er best wel wat aan mankeert. De X- en Y-waarden zijn alleen geldig als de richting ongeveer noordgericht of zuidgericht is. Als de Viewport een kwartslag gedraaid is, dan zouden eigenlijk de X- en Y-waarden verwisseld moeten worden. En dan is nog niet eens getest met een hoek van 45 graden…
Wie interesse heeft, hier is het script te downloaden. Speel er maar mee, verbeter het en vind de fouten!
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.