martedì, gennaio 28, 2014

Dynamo - CSV to XYZ





Partendo da un file CSV ho cercato di ottenere attraverso Dynamo dei punti di riferimento nell'ambiente delle masse o dei modelli generici adattivi, avevo infatti notato che esisteva già nei custom nodes un nodo che avrebbe dovuto fare al caso mio.
Tuttavia esistono due tipi di problemi: il primo banale è che non vedo all'interno della definizione del nodo  a cosa possa corrispondere l'input "multiplier", il secondo è che i valori accettati in input devono essere stringhe numeriche con la virgola per separatore decimale, la qual cosa non si presenta mai per un file CSV per non generare confusione visto che la virgola assolve la funzione di delimitatore dei valori.

Ho scritto quindi la definizione dell'esempio nel video che va copiata qui:

C:\Autodesk\Dynamo\Core\definitions

per creare le triplette XYZ a partire da un CSV. Da prima ho impostato come delimitatore la stringa che "va a capo" (ho premuto invio all'interno del campo per inserire la stringa) ed ho applicato il nodo Split String. Questo genera una lista di stringhe di dimensione pari al numero di righe del CSV.
Per poterle manipolare e ricavare le coordinate si deve applicare ancora uno Split String a ciascun elemento della lista appena creata, stavolta però utilizzando come delimitatore la virgola (è come se stessimo estraendo i valori da una riga del file CSV). Per fare questo su ogni elemento della lista occorre applicare un nodo Map, che per sintassi richiede in input una funzione e una sequenza di valori.
Personalmente ho trovato poco chiara la struttura della funzione di input f(x), perché è un nodo che rimane grigio. Quello che viene sottointeso è che la funzione in grigio viene applicata ad un elemento che deriva dalla sequenza.
Nella fattispecie si ottiene una lista di tre coordinate X[0],Y[1],Z[2] per ciascuna riga del file CSV.
Se per qualsiasi motivo il file dovesse troncarsi o avere un ritorno a capo questo genererebbe un errore nella procedura, così ho introdotto un controllo per eliminare l'ultima lista con meno di 3 elementi di coordinate.



Con Get from List composto a ParseString (un custom node per restituire correttamente i valori delle stringhe numeriche nel file CSV) si ottengono le liste dei valori di tutte le coordinate X, Y e Z, è poi banale ottenere le triplette per le entità geometriche XYZ che servono a generare i punti di riferimento in Revit.

Come precauzione i valori ottenuti dal CSV sono moltiplicati per un valore 1, cambiando il quale si può scalare il risultato del nodo (va tenuto presente che le unità di misura interne di Revit sono i piedi decimali).


If you are happy with my code you can show me some gratitude paying what you want on PayPal:

puntorevit@gmail.com

Nessun commento:

Posta un commento