E' appena stata distribuita la nuova release stabile di
Dynamo (0.6.3) che porta molte novità e amplia le possibilità offerte agli utenti finali. Tra queste mi ha particolarmente colpito l'integrazione con DesignScript nella versione beta 0.7 (da qui si può scaricare il
manuale), un progetto parallelo che conoscevo già ma che integrato con Dynamo lo rende davvero interessante anche per gli utenti Revit.
Si tratta di un nuovo linguaggio di programmazione (un misto di C# e Python per quanto riguarda la sintassi) che permette di scrivere due tipologie di codici: uno Imperativo, di tipo tradizionale, e uno Associativo.
Per capire di cosa si tratta basti pensare che con un codice di tipo associativo ora si ha a che fare con qualcosa di "vivo" che mantiene valide le relazioni tra le variabili e non c'è bisogno di ridefinirle per aggiornare i risultati: in pratica la bidirezionalità a cui siamo abituati in Revit la troviamo ora anche fra le righe di codice!
In questi giorni stavo giocando con un particolare tipo di nodo, il Transform on Curve, cioè un nodo in grado di restituire un oggetto Transform per un determinato parametro normalizzato su una curva.
Un oggetto Transform si compone di un'origine e di una terna di vettori che descrivono lo spazio in coordinate locali.
Un transform può essere qualcosa di molto particolare come uno spostamento, una rotazione, un ingrandimento ad esempio....
Per realizzare questo esempio ho tracciato con una linea di modello un arco di circonferenza centrato sull'origine all'interno di una famiglia di massa.
In particolare il nodo Transform on Curve non funziona per curve di modello ma per le curve geometriche associate (è un problema noto agli sviluppatori), in ogni caso è aggirabile ricavando la curva geometrica associata alla curva di modello con l'apposito nodo.
Per questo esempio ho considerato un range di parametri normalizzati in 10 step ottenuto con una sintassi propria del nodo number e un nodo formula per normalizzarlo:
Sullo sfondo di Dynamo già da questo punto è possibile individuare cosa siano i Transform lungo la curva: una terna di vettori locali (x=rosso, y=verde, z=blu,
regola della mano destra) con origine lungo la curva.
Con il nodo Reference point by Length, utilizzando stavolta la curva di modello si possono creare dei punti di riferimento associati alla curva per meglio visualizzare la suddivisione.
Successivamente ho creato dei punti con il nodo Reference point by normal che consente di creare dei punti di riferimento partendo da dei punti di riferimento esistenti ad una distanza da questi secondo un determinato vettore. I punti sono quelli lungo la curva e la normale è definita per ciascun punto come la componente Y del transform corrispondente.
Da qui poi ho creato una serie di punti di riferimento che avessero un incremento in Z semplicemente utilizzando un transform con un range di vettori in base Z.
Per concludere ho realizzato dei raggi e una linea di riferimento per poter generare una superficie.
Si potrebbe complicare l'esempio introducendo delle funzioni per quanto riguarda la distanza nel nodo Reference Point By Normal e il range di vettori Z per il transform XYZ.