oneteam/ Maggio 14, 2020/ BIM/ 0 comments

Nel precedente articoloReplicazione automatica dei nodi in Dynamo” abbiamo visto come la replicazione automatica dei nodi di Dynamo non sia adatta ad ogni situazione. Nel caso studio esaminato l’assegnazione, mediante il nodo SetParameterByName, di valori tabellati ad una serie di proprietà di oggetti di Revit, portava ad un risultato del tutto diverso rispetto a quello atteso. In questo articolo riprenderemo in esame il precedente caso risolvendo il problema.

Replicazione mediante ripetizione manuale del nodo

Una prima semplice soluzione potrebbe essere quella di estrarre i valori di ciascuna proprietà dalla tabella, quindi di ripetere il nodo SetParameterByName tante volte quante sono le proprietà da settare (Figura 1).

replicazione automatica dei nodi in dynamo

Figura 1

Indubbiamente il metodo funziona: di fatto abbiamo diviso la lista di rango 2 dei valori in tante liste di rango 1 quanti sono i parametri. Calcolando i dRi sui un singoli nodi deputato al settaggio delle proprietà, si vede che la replicazione automatica produce un’iterazione zip tra oggetti Revit e i relativi valori delle proprietà (Figura 2). Le due liste hanno entrambe la stessa lunghezza quindi il risultato è corretto.

replicazione automatica dei nodi in dynamo

Figura 2

Sono però evidenti tutti i limiti di questa soluzione. La ripetizione dei nodi diventa insostenibile nel caso ci siano molti parametri sa settare: è soggetta ad errori e qualsiasi modifica richiede un tempo considerevole oltre a comportare altri potenziali errori. Inoltre tutti i nodi SetParamaterByName vengono processati insieme e questo potrebbe generare errori nel caso di valori di proprietà di Revit che dipendono direttamente o indirettamente uno dall’altro. La soluzione corretta è l’utilizzo di un metodo che permette di gestire la modalità di replicazione dei nodi e di iterazione dei loro argomenti: le guide di replicazione.

Guide di replicazione

Le guide di replicazione sono degli indici di tipo intero applicati ai parametri dei nodi che consentono di controllare quale tipo di iterazione deve essere applicata agli argomenti. La replicazione guidata non esclude quella automatica; la replicazione guidata viene processata sempre per prima, ma se al termine di uno o più step di replicazione guidata esistono ancora le condizioni per la replicazione (almeno un dRi maggiore di 0), verrà applicata la replicazione automatica fino ad avere per ogni parametro del nodo dRi=0.

Per poter utilizzare le guide di replicazione è necessario trasformare il nodo in codice Design Script o scriverlo direttamente in un Code Block. Nel primo caso, selezionato il nodo, basta cliccare con il tasto destro fuori dal nodo e scegliere “Node to Code” (Figura 3). Dopo aver rinominato i parametri per maggiore chiarezza si ottiene il Code Block di Figura 4.
replicazione automatica dei nodi in dynamo

Figura 3

replicazione automatica dei nodi in dynamo

Figura 4

Le guide di replicazione seguono i seguenti principi:

  • gli indici vanno da 1 a n e sono racchiusi tra parentesi uncinate (ad es. <1>, <2>, etc.);
  • gli indici sono applicati ad uno o più parametri della funzione del nodo, uno per ogni step di replicazione;
  • gli step di replicazione vengono processati da sinistra a destra;
  • all’interno di ogni step le iterazioni sono ordinate secondo valore crescente degli indici (sono processate prima quelle con valore più basso)
  • quando in uno step due o più parametri hanno lo stesso indice viene eseguita iterazione zip breve tra quegli argomenti, lunga se si aggiunge “L” dopo il numero (ad es. <1L>)
  • quando in uno step uno o più parametri hanno indice diverso viene eseguita iterazione cartesiana su tali argomenti;
  • quando in uno step uno o più parametri hanno indice <0> non viene eseguita nessuna iterazione su tali argomenti

Applicando i principi sopra esposti al caso della funzione fittizia “MyFunction” di Figura 5 si avrà:

  • STEP 1 – Replicazione zip fra p1, p2, p3
  • STEP 2 – Prima replicazione zip tra p1 e p3, quindi replicazione cartesiana su p2
  • STEP 3 – Replicazione cartesiana su p1, nessuna iterazione su p2 e p3

Nella Tabella 1 sono schematizzate le guide per ogni parametro e step. I numeri non devono per forza essere diversi fra i vari step e non è nemmeno necessario usare incrementi di 1, tuttavia per migliore chiarezza consiglio di ripartire da 1 in ogni step e rispettare l’incremento di una unità senza lasciare numeri inutilizzati.

replicazione automatica dei nodi in dynamo

Figura 5

replicazione automatica dei nodi in dynamo

Tabella 1

Applicazione delle guide di replicazione al nodo SetParameterByName

In base a quanto detto, tornando al caso di studio sul nodo “SetParameterByName”, possiamo utilizzare le guide di replicazione nel modo seguente:

Figura 6

replicazione automatica dei nodi in dynamo

replicazione automatica dei nodi in dynamo

Tabella 2

STEP 1 – Iterazione zip tra elementi e righe di dati sul livello più esterno: ogni elemento viene accoppiato ai suoi dati e il rango di entrambi gli argomenti diminuisce di 1. A differenza della replicazione senza guide, in questo caso l’iterazione zip non tronca nessuna lista, poiché il numero delle liste (le righe della tabella) di dati corrisponde al numero degli oggetti Revit. La lista dei parametri non deve essere iterata in questo step, ma rimare costante in ogni iterazione degli altri due parametri per cui avrà indice <0>; inoltre non venendo iterata conserverà rango 1 (Figura 7).
replicazione automatica dei nodi in dynamo

Figura 7

Al termine dello step 1 i ranghi degli argomenti saranno i seguenti:
replicazione automatica dei nodi in dynamo

Tabella 3

STEP 2 – Iterazione zip tra nomi dei parametri e valori: ogni nome di parametro viene fatto corrispondere ai relativi lavori. Il numero dei parametri è uguale al numero dei valori, quindi anche in questo caso nessuna lista verrà troncata. Gli elementi non vengono invece iterati, in quanto il loro rango è 0, quindi non è necessario nessun indice di replicazione (Figura 8).

replicazione automatica dei nodi in dynamo

Figura 8

Al termine dello step 2 i ranghi saranno i seguenti:

replicazione automatica dei nodi in dynamo

Tabella 4

Essendo tutti i dRi nulli la procedura di iterazione è conclusa.

Utilizzo congiunto di replicazione guidata e automatica

Il fatto che la replicazione guidata venga processata per prima di quella automatica, senza tuttavia escluderla qualora sussistano le condizioni adatte, permette di utilizzare una forma alternativa rispetto a quella di Figura 6. Infatti, mentre lo step 1 deve essere opportunamente guidato per escludere i nomi delle proprietà dall’iterazione, lo step 2 potrebbe avvenire automaticamente, in quanto secondo i dR al termine dello step 1 anche l’iterazione automatica provocherebbe un’iterazione zip tra nomi dei parametri e valori (Tabella 3).
Per cui è del tutto uguale scrivere il nodo utilizzando gli indici di iterazione solo per lo step 1, lasciando lo step 2 sotto il controllo dell’iterazione automatica (Figura 9).
replicazione automatica dei nodi in dynamo

Figura 9

Conclusioni

L’utilizzo delle guide di replicazione conferisce il pieno controllo su come Dynamo processa i dati aggregati in liste. Le guide permettono inoltre di scrivere gli script in maniera più veloce, sintetica e chiara rendendone più agevole la modifica e la manutenzione nel tempo. Anche se la ripetizione dei nodi potrebbe apparire la via più pratica nel breve termine, vale sempre la pena fermarsi un attimo ad esaminare come i dati devono essere iterati e impostare opportunamente le guide di replicazione. Il confronto a parità di risultato (Figura 10), non dovrebbe lasciare spazio a dubbi su quale sia la via da seguire.
replicazione automatica dei nodi in dynamo VS replicazione automatica dei nodi in dynamo

Figura 10

Autore: Ing. Massimiliano Baraldo, BIM ManagerAEC Technical Specialist per One Team

Vuoi maggiori informazioni sulla replicazione automatica dei nodi in Dynamo?
Scrivi a marketing@oneteam.it oppure compila il form.

Condividi l'articolo:
Share this Post

Leave a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*