Soms moet je jezelf wat tijd gunnen om eens door software heen te bladeren. Dat geldt niet alleen voor AutoCAD of Civil 3D (of Word en Excel) maar ook voor Dynamo. Soms kom je ineens hele leuke dingen tegen. Recent kwam ik de Symbol.StringifyDecimal node tegen. Een node met een intrigerende naam. Zo heb ik ooit een Legofy blog geschreven. Is Stringify vergelijkbaar? Als term om iets te converteren wel.
Stringify
De betreffende node blinkt helaas niet uit in duidelijkheid.
Je kunt een decimale waarde invullen en de precisie. De tooltips op deze invoervelden geven aan dat je het aantal decimalen kunt opgeven voor een numerieke waarde. Maar dan, een symbol? De tooltip zegt me zo niks, en de omschrijving van de hele node nog minder: “Returns the formatted unit expression for a given value and symbol in a decimal format.”
Ok, even in het Nederlands: “Geeft de geformatteerde eenheidsexpressie voor een opgegeven waarde en symbool in een decimale notatie.”
Dit doet me denken aan een ondertitel die ik jarenlang gebruikt heb op fora, al was het maar om mensen aan het denken te zetten: “De conclusie is gewettigd dat de initialisering van de ontwikkeling van het kritieke subsysteem de waarschijnlijkheid optimaliseert van het succes tot de ontwikkeling van het technische gedrag over een gegeven tijdsbestek.” Heerlijk zo’n zin die na honderd keer lezen nog niets duidelijker maakt!
Intussen heb ik nog geen idee wat er met die symbol bedoeld wordt. Met een beetje zoeken kom ik erachter dat het te maken heeft met iets dat Forge heet in Revit. Maar wat het verder precies is, geen idee, en nog minder waarom dit dan in Civil 3D Dynamo zit, en nog niet eens onder een categorie Revit.
Uiteindelijk na veel zoeken, vind ik in een geheel andere categorie een node met de naam Symbols. Dit blijkt een dropdown te zijn met allerlei keuzes om iets weer te geven. Een betere omschrijving kan ik nog niet geven.
Ik denk dat opmaak nog het meest voor de hand liggend is als beschrijving. Je kunt met deze node een numerieke waarde omzetten naar een string, met het opgegeven aantal decimalen, en dan in een bepaalde opmaak. Bijvoorbeeld de ratio 1 op zoveel.
De meeste keuzes doen niks meer dan iets ervoor of erna zetten. Maar daarvoor is zo’n dropdown en node overkill, zeker omdat het een verplichte invoerpoort is. Met de OOTB nodes of een Code Block kun je ook prima iets voor of achter een getal zetten. Alleen de optie ‘Degrees’ lijkt iets te doen met het getal:
Het zou misschien werkbaar zijn, als niet een of ander font-probleem zorgt voor vreemde karakters. Dus, hoe veelbelovend ook, deze node is niet precies wat je nodig hebt. Vooral niet, omdat er geen optie is om geen opmaak toe te passen. Simpelweg 3.14 overhouden van Math.PI gaat niet werken.
Out of the Box (OOTB)
Bij de standaard meegeleverde nodes, is er eentje die een nummer kan omzetten naar een tekst. Dit is de node String from Object.
Maar vreemd genoeg presenteert deze node de output altijd met zes decimalen. Met een Code Block kun je hier wel nog aan sleutelen, lijkt me. Maar… wat is de functie in een Code Block?
Normaal gesproken kun je een node selecteren en dan via het rechter muisknop menu kiezen voor Node to Code, om zo het equivalent te vinden in een Code Block. Maar een String from Object laat zich niet vertalen. Met een beetje proberen lijkt de volgende code wel te werken (maar niet te vinden als openbare functie):
Wat het helemaal vaag maakt, deze functie doet helemaal niets met decimalen. Het kapt het niet af en voegt niets toe. Maar met een trucje kom je ineens wel aan een gelijksoortig resultaat aan de String from Object:
Wat hier eigenlijk gebeurt is het samenvoegen van twee strings. En omdat het tweede object nog geen string is, zal Dynamo dit automatisch doen. En dan kom je weer aan die zes decimalen. Met wat knutselen kom je in een Code Block al snel op dit:
Waarmee je het aantal decimalen kunt inperken. Maar echt afronden is het niet. Wel kun je nu ook eenvoudig een prefix of suffix toevoegen.
En zo kom je ongeveer waar je wezen wilt.
The Civil Nodes
Nog eenvoudiger is het om de node Strings.GetDoubleAsString te gebruiken van The Civil Nodes package. Deze node is gemaakt om een getal te converteren, met het aantal op te geven decimalen en optioneel een prefix of suffix.
En alleen de waarde is noodzakelijk als invoer, de overige zijn allemaal optioneel. Nog gemakkelijker!
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.