Perché è opportuno utilizzare la programmazione testuale nell'ambiente di programmazione visiva di Dynamo? La programmazione visiva offre molti vantaggi. Consente di creare programmi senza apprendere una sintassi speciale in un'interfaccia visiva intuitiva. Tuttavia, un programma visivo può diventare disordinato e a volte può risultare carente in termini di funzionalità. Ad esempio, Python offre metodi molto più facili da realizzare per la scrittura di istruzioni condizionali (if/then) e il loop. Python è un potente strumento in grado di ampliare le funzionalità di Dynamo e di consentire di sostituire molti nodi con alcune righe di codice concise.
Programma visivo:
Programma testuale:
Come i blocchi di codice, i nodi Python sono un'interfaccia di script all'interno di un ambiente di programmazione visiva. Il nodo Python è disponibile in Script>Editor>Script Python nella libreria.
Facendo doppio clic sul nodo, viene aperto l'editor di script Python. È inoltre possibile fare clic con il pulsante destro del mouse sul nodo e scegliere Modifica. Si noterà del testo boilerplate in alto, che è utile per fare riferimento alle librerie necessarie. Gli input vengono memorizzati nella matrice IN. I valori vengono restituiti a Dynamo assegnandoli alla variabile OUT.
La libreria Autodesk.DesignScript.Geometry consente di utilizzare la notazione punto analogamente ai blocchi di codice. Per ulteriori informazioni sulla sintassi di Dynamo, fare riferimento a https://github.com/DynamoDS/DynamoPrimerNew/blob/master-ita/coding-in-dynamo/7_code-blocks-and-design-script/7-2_design-script-syntax.md e a DesignScript Guide (per scaricare questo documento PDF, fare clic con il pulsante destro del mouse sul collegamento e scegliere Salva link con nome...). Digitando un tipo di geometria, ad esempio Point., verrà visualizzato un elenco di metodi per la creazione e l'esecuzione di una query sui punti.
I metodi includono costruttori quali ByCoordinates, azioni quali Add e query quali le coordinate X, Y e Z.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio è disponibile nell'Appendice.
In questo esempio, si scriverà uno script di Python che crea modelli da un modulo solido e lo si trasformerà in un nodo personalizzato. Innanzitutto, creare il modulo solido utilizzando i nodi di Dynamo.
Rectangle.ByWidthLength: creare un rettangolo che sarà la base del solido.
Surface.ByPatch: collegare il rettangolo all'input "closedCurve" per creare la superficie inferiore.
Geometry.Translate: collegate il rettangolo all'input "geometry" per spostarlo verso l'alto, utilizzando un blocco di codice per specificare lo spessore di base del solido.
Polygon.Points: eseguire la query sul rettangolo traslato per estrarre i punti degli angoli.
Geometry.Translate: utilizzare un blocco di codice per creare un elenco di quattro valori corrispondenti ai quattro punti, traslando un angolo del solido verso l'alto.
Polygon.ByPoints: utilizzare i punti traslati per ricreare il poligono superiore.
Surface.ByPatch: collegare il poligono per creare la superficie superiore.
Ora che sono presenti le superfici superiore e inferiore, creati i lati del solido tramite loft tra i due profili.
List.Create: collegare il rettangolo inferiore e il poligono superiore agli input dell'indice.
Surface.ByLoft: eseguire il loft dei due profili per creare i lati del solido.
List.Create: collegare le superfici superiore, laterale e inferiore agli input dell'indice per creare un elenco di superfici.
Solid.ByJoinedSurfaces: unire le superfici per creare il modulo solido.
Ora che è stato realizzato il solido, rilasciare un nodo Script Python nell'area di lavoro.
Per aggiungere altri input al nodo, fare clic sull'icona + sul nodo. Gli input sono denominati IN[0], IN[1] e così via per indicare che rappresentano le voci di un elenco.
Iniziare definendo gli input e l'output. Fare doppio clic sul nodo per aprire l'editor di Python. Seguire il codice riportato qui sotto per modificare il codice nell'editor.
Questo codice risulterà più utile mentre si prosegue nell'esercizio. Successivamente, occorre pensare alle informazioni necessarie per includere in una matrice il modulo solido. Per prima cosa, è necessario conoscere le quote del solido per determinare la distanza di traslazione. A causa di un bug del riquadro di delimitazione, è necessario utilizzare la geometria della curva dello spigolo per creare un riquadro di delimitazione.
Osservare il nodo Python in Dynamo. Si noti che viene utilizzata la stessa sintassi presente nei titoli dei nodi in Dynamo. Consultare il codice commentato qui sotto.
Poiché si eseguiranno sia la traslazione che la rotazione dei moduli solidi, utilizzare l'operazione Geometry.Transform. Guardando il nodo Geometry.Transform, si sa che per trasformare il solido sarà necessario un sistema di coordinate di origine e un sistema di coordinate di destinazione. L'origine è il sistema di coordinate contestuale del solido, mentre la destinazione sarà un sistema di coordinate diverso per ogni modulo incluso nella matrice. Ciò significa che si dovrà riprodurre a ciclo continuo i valori X e Y per trasformare il sistema di coordinate in modo diverso ogni volta.
Fare clic su Esegui, quindi salvare il codice. Collegare il nodo Python con lo script esistente come indicato di seguito.
Collegare l'output da Solid.ByJoinedSurfaces come primo input per il nodo Python e utilizzare un Code Block per definire gli altri input.
Creare un nodo Topology.Edges e utilizzare l'output del nodo Python come input.
Infine, creare un nodo Edge.CurveGeometry e utilizzare l'output di Topology.Edges come input.
Provare a modificare il valore iniziale (seme) per creare modelli diversi. È anche possibile modificare i parametri del modulo solido stesso per effetti differenti.
Dopo aver creato uno script di Python utile, salvarlo come nodo personalizzato. Selezionare il nodo dello script Python, fare clic con il pulsante destro del mouse su Area di lavoro e selezionare Crea nodo personalizzato.
Assegnare un nome, una descrizione e una categoria.
Verrà aperta una nuova area di lavoro in cui modificare il nodo personalizzato.
Input: modificare i nomi di input in modo che siano più descrittivi e aggiungere i tipi di dati e i valori di default.
Output: consente di modificare il nome di output.
Salvare il nodo come file .dyf e il nodo personalizzato dovrebbe riflettere le modifiche appena apportate.