Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dalle sue origini come componente aggiuntivo per il Building Information Modeling (BIM) in Revit, Dynamo รจ maturato fino a diventare molte cose. Soprattutto, รจ una piattaforma che consente ai progettisti di esplorare la programmazione visiva, risolvere i problemi e creare i loro strumenti. Per iniziare il viaggio con Dynamo, occorre impostare un contesto: che cos'รจ e come utilizzarlo?
!
Dynamo รจ un'applicazione di programmazione visiva che puรฒ essere scaricata ed eseguita in modalitร "Sandbox" indipendente o come plug-in per altri software come Revit, FormIt o Civil 3D.
Ulteriori informazioni sulla [differenza tra **Dynamo Core**/**Revit**/**Sandbox**.](https://dynamobim.org/a-new-way-to-get-dynamo-sandbox/)
Dynamo consentirร di lavorare all'interno di un processo di programmazione visiva in cui si collegano gli elementi per definire le relazioni e le sequenze di azioni che compongono algoritmi personalizzati. Si possono utilizzare gli algoritmi per una vasta gamma di applicazioni, dall'elaborazione dei dati alla generazione della geometria, il tutto in tempo reale e senza dover scrivere una riga di code.
!
Nodi e fili sono i componenti chiave di Dynamo per supportare un processo di . Consente di stabilire forti relazioni visive e sistemiche tra le parti di un progetto. Con un semplice clic del mouse รจ possibile collegare facilmente i nodi, sviluppando e ottimizzando il workflow di progettazione.
!
Dall'utilizzo della programmazione visiva per i workflow dei progetti allo sviluppo di strumenti personalizzati, Dynamo รจ un aspetto integrante di un'ampia gamma di applicazioni straordinarie.
Questa guida introduttiva include capitoli sviluppati con Mode Lab. Questi capitoli sono incentrati sugli elementi essenziali necessari per imparare a sviluppare i propri programmi visivi con Dynamo e sulle informazioni essenziali su come far evolvere Dynamo.
Questa guida รจ stata progettata per fornire ai lettori contenuti su diversi livelli di esperienza e competenza. L'introduzione generale sull'impostazione di Dynamo, sull'interfaccia utente e sui concetti chiave รจ disponibile nelle seguenti sezioni. Si consiglia ai nuovi utenti di approfondire i seguenti argomenti:
Gli elenchi rappresentano il modo in cui vengono organizzati i dati. Nel sistema operativo del computer, sono presenti file e cartelle. In Dynamo, รจ possibile considerare questi elementi rispettivamente come voci ed elenchi. Analogamente al sistema operativo in uso, esistono molti modi per creare, modificare e sottoporre a query i dati. In questo capitolo, verrร descritto come vengono gestiti gli elenchi in Dynamo.
!
Dynamo dispone di molte funzionalitร incorporate, memorizzate nella libreria di nodi. Per le routine utilizzate di frequente o per il grafico speciale che si desidera condividere con la comunitร , i nodi e i pacchetti personalizzati rappresentano un ottimo modo per estendere ulteriormente Dynamo.
Per gli utenti che desiderano sviluppare una comprensione piรน approfondita di ciascun elemento, ad esempio un nodo specifico e il concetto che sta alla base, vengono trattati i concetti fondamentali nel capitolo dedicato.
Se si desidera visualizzare la dimostrazione dei workflow di Dynamo, sono stati inclusi alcuni grafici nella sezione Esempi di workflow. Seguire le istruzioni allegate per creare grafici di Dynamo personalizzati.
!
Nei capitoli successivi sono disponibili altri esercizi specifici per gli argomenti, poichรฉ vengono trattati argomenti diversi su Dynamo. Gli **esercizi** sono in genere disponibili nell'ultima sezione di ogni pagina.
Dynamo non sarebbe quello che รจ senza un forte gruppo di utenti avidi e collaboratori attivi. Per coinvolgere la comunitร , รจ possibile seguire il blog, aggiungere il proprio lavoro alla galleria o discutere di Dynamo nel forum.
Dynamo รจ concepito come uno strumento di programmazione visiva per i progettisti che consente di realizzare strumenti i quali sfruttano le librerie esterne o qualsiasi prodotto Autodesk dotato di un'API. Con Dynamo Sandbox รจ possibile sviluppare programmi in un'applicazione di tipo "sandbox", ma l'ecosistema di Dynamo continua a crescere.
Il codice sorgente del progetto รจ open source e permette di estenderne le funzionalitร nel modo desiderato. ร possibile consultare il progetto su GitHub e individuare le iniziative in corso di personalizzazione di Dynamo da parte degli utenti.
ร possibile sfogliare, creare una copia tramite fork e iniziare ad estendere Dynamo in base alle proprie esigenze.
ร appena stata aperta Dynamo Primer, una guida completa alla programmazione visiva in Autodesk Dynamo. Questa guida introduttiva รจ un progetto in corso per condividere i principi fondamentali della programmazione. Gli argomenti trattati includono: uso della geometria computazionale, procedure ottimali per la progettazione basata su regole, applicazioni di programmazione interdisciplinari e altro ancora con la piattaforma Dynamo.
La potenza di Dynamo si trova in un'ampia gamma di attivitร correlate alla progettazione. Dynamo consente di accedere ad un elenco in espansione di modi facilmente accessibili per iniziare:
Esplorare la programmazione visiva per la prima volta
Connettere i workflow in diversi tipi di software
Coinvolgere una comunitร attiva di utenti, collaboratori e sviluppatori
Sviluppare una piattaforma open source per un miglioramento costante
Nell'ambito di questa attivitร e per l'interessante opportunitร di lavorare con Dynamo, occorre un documento dello stesso calibro, Dynamo Primer.
Fare riferimento alla Guida introduttiva per scoprire cosa ci si puรฒ aspettare di imparare da questo documento.
Stiamo migliorando costantemente Dynamo, pertanto alcune funzionalitร potrebbero avere un aspetto diverso da quello rappresentato in questa guida introduttiva. Tuttavia, tutte le modifiche alle funzionalitร verranno rappresentate correttamente.
Il progetto Dynamo Primer รจ open source. Siamo dedicati a fornire contenuto di qualitร e apprezziamo qualsiasi eventuale feedback fornito. Se si desidera segnalare un problema su qualsiasi aspetto, pubblicare il messaggio nella pagina dei problemi su GitHub: https://github.com/DynamoDS/DynamoPrimerNew/issues
Per contribuire ad una nuova sezione, a modifiche o a qualsiasi altro elemento del progetto, controllare il repository su GitHub per iniziare: https://github.com/DynamoDS/DynamoPrimerNew
Dynamo Primer รจ un progetto open source avviato da Matt Jezyk e dal team di sviluppo di Dynamo di Autodesk.
Mode Lab รจ stata incaricata di scrivere la prima edizione della Guida introduttiva. La ringraziamo per tutti gli sforzi profusi nel creare questa preziosa risorsa.
John Pierson del team Parallax รจ stato incaricato di aggiornare la Guida introduttiva in modo che rifletta le revisioni di Dynamo 2.0.
Matterlab รจ stato incaricato di aggiornare la Guida introduttiva in modo che rifletta le revisioni di Dynamo 2.13.
!
Matterlab รจ stato incaricato di aggiornare la Guida introduttiva in modo che rifletta le revisioni di Dynamo 2.17.
Wood Rodgers รจ stato incaricato di aggiornare la Guida introduttiva con il contenuto per Dynamo for Civil 3D.
Un ringraziamento speciale va a Ian Keough per aver avviato e guidato il progetto Dynamo.
Grazie a Matt Jezyk, Ian Keough, Zach Kron, Racel Amour e Colin McCrone per la collaborazione entusiasta e l'opportunitร di partecipare ad un'ampia gamma di progetti Dynamo.
Dynamo Consultare i seguenti siti per la release stabile piรน recente di Dynamo.
*Nota: a partire da Revit 2020, Dynamo รจ incluso con le release di Revit e pertanto non รจ necessaria l'installazione manuale. Ulteriori informazioni sono disponibili in questo post del blog.
DynamoBIM La migliore fonte per ulteriori informazioni, contenuto di formazione e forum รจ il sito Web di DynamoBIM.
Dynamo GitHub Dynamo รจ un progetto di sviluppo open source su GitHub. Per contribuire, visitare la pagina di DynamoDS.
Contatto In caso di eventuali problemi relativi a questo documento, รจ possibile contattarci.
Copyright 2023 Autodesk
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Dopo aver creato alcuni nodi personalizzati, il passaggio successivo consiste nell'iniziare a organizzarli e pubblicarli tramite pacchetti, un modo pratico per memorizzare e condividere i nodi con la comunitร di Dynamo.
!
Dynamo รจ un ottimo punto da cui iniziare a codificare per il mondo AEC. Si potrebbe essere interessati ad alcune di queste sezioni per iniziare il percorso di codifica:

Una volta pronti ad approfondire lo sviluppo di programmi visivi, sarร necessario acquisire una comprensione piรน dettagliata degli elementi di base che si utilizzeranno. In questo capitolo sono presentati i concetti fondamentali relativi ai dati, ovvero gli oggetti che attraversano i fili del programma Dynamo.
!
Dynamo 2.0 non solo introduce i nodi descritti in precedenza per i dizionari, ma anche nei blocchi di codice per questo aspetto รจ disponibile una nuova funzionalitร .
ร possibile utilizzare la sintassi come illustrato di seguito o le rappresentazioni basate su DesignScript dei nodi.
Poichรฉ un dizionario รจ un tipo di oggetto in Dynamo, รจ possibile eseguire il commit delle seguenti operazioni su di esso.
!
Il mantenimento di questo tipo di interazioni risulta particolarmente utile quando si correlano i dati di Revit alle stringhe. Successivamente, verranno esaminati alcuni casi di utilizzo di Revit.
Come ambiente di programmazione visiva, Dynamo consente di definire il modo in cui vengono elaborati i dati. I dati sono numeri o testo, ma cosรฌ รจ anche la geometria. Come indicato dal computer, la geometria, o talvolta denominata geometria computazionale, rappresenta i dati che รจ possibile utilizzare per creare modelli straordinari, complessi o basati sulle prestazioni. A tale scopo, รจ necessario comprendere gli input e gli output dei vari tipi di geometria utilizzabili.
!
Sebbene Dynamo sia stato originariamente creato pensando a Revit, la sua versatilitร come strumento di programmazione visiva va oltre Revit. Dynamo รจ integrato anche in Civil 3D, consentendo agli utenti di creare potenti routine di automazione per i progetti di infrastrutture civili. ร uno strumento estremamente utile per elaborare qualsiasi cosa, dalle attivitร piรน comuni ai workflow di progettazione piรน complessi, aiutando a risparmiare tempo, ottimizzare i progetti e prendere decisioni migliori. Dynamo offre un'intera suite di nodi appositamente progettata per Civil 3D, nonchรฉ librerie di terze parti provenienti da una vivace comunitร .
Questo capitolo della Guida introduttiva si concentrerร su Dynamo for Civil 3D, partendo dalle nozioni di base e arrivando ad argomenti piรน avanzati.
Sebbene Dynamo sia un ambiente flessibile, progettato per il trasferimento in un'ampia gamma di programmi, รจ stato originariamente creato per l'utilizzo con Revit. Un programma visivo crea opzioni efficienti per il Building Information Modeling (BIM). Dynamo offre un'intera suite di nodi appositamente progettata per Revit, nonchรฉ librerie di terze parti provenienti da una vivace comunitร AEC. Questo capitolo si concentra sulle nozioni di base per l'utilizzo di Dynamo in Revit.
!
Il blocco di codice รจ una funzionalitร unica di Dynamo che collega dinamicamente un ambiente di programmazione visiva con uno di programmazione basata su testo. Il blocco di codice ha accesso a tutti i nodi di Dynamo e puรฒ definire un intero grafico in un nodo. Leggere attentamente questo capitolo, poichรฉ il blocco di codice รจ un elemento di base fondamentale di Dynamo.
!


Dynamo 2.0 consente di visualizzare un'ampia varietร di nodi Dictionary da utilizzare. Ciรฒ include i nodi di Create, Action e Query.
!
Dictionary.ByKeysValues creerร un dizionario con le chiavi e i valori forniti. (il numero di voci corrisponderร all'input piรน breve dell'elenco).
Dictionary.Components produrrร i componenti del dizionario di input. (รจ l'opposto del nodo Create).
Dictionary.RemoveKeys produrrร un nuovo oggetto dizionario con le chiavi di input rimosse.
Dictionary.SetValueAtKeys
Dictionary.Count indicherร il numero di coppie chiave-valore presenti nel dizionario.
Dictionary.Keys restituirร le chiavi attualmente memorizzate nel dizionario.
Dictionary.Values
La correlazione complessiva dei dati con i dizionari rappresenta un'alternativa significativa al vecchio metodo di utilizzo di indici ed elenchi.
Dynamo รจ disponibile come estensione in Forma. Al momento, รจ disponibile in due versioni: una versione connessa al desktop e un'integrazione basata su cloud come versione beta chiusa. Per saperne di piรน sulla versione desktop, consultare questo post del blog e per saperne di piรน sull'integrazione cloud come versione beta, consultare questo post del blog. Si noti che il blog รจ stato pubblicato durante la fase della versione beta chiusa; l'integrazione cloud รจ attualmente nella versione beta aperta e disponibile per tutti gli utenti di Forma.
Autodesk Forma รจ un software cloud che offre strumenti potenti e intuitivi, basati sull'IA, per la pre-progettazione e la progettazione schematica. Architetti e progettisti utilizzano Forma per modellare in pochi minuti progetti 3D complessi, ottimizzare la qualitร e la sostenibilitร degli spazi abitativi tramite l'analisi ambientale in tempo reale e continuare il processo di progettazione connettendosi in modo fluido con Revit, Rhino e Dynamo. Per saperne di piรน e avviare la versione di prova gratuita o acquistare qui, fare clic qui: . Forma รจ incluso nella AEC Collection.
Dynamo Player รจ un'estensione che offre agli utenti di Forma una serie di funzionalitร di automazione della progettazione. Alcuni vantaggi chiave dell'utilizzo di Dynamo Player con Forma:
Automazione semplificata: Dynamo Player semplifica il processo di automazione delle attivitร e dei workflow ripetitivi in Forma. I grafici personalizzati creati con l'ambiente di programmazione visiva di Dynamo possono essere eseguiti direttamente all'interno di Forma con pochi clic. I grafici vengono visualizzati come un elenco all'interno di Dynamo Player, semplificando la selezione e l'esecuzione quando necessario. Questo processo semplificato consente di eseguire rapidamente le attivitร ripetitive, riducendo gli errori e aumentando l'efficienza.
Interfaccia facile da usare: Dynamo Player offre un'interfaccia intuitiva che consente agli utenti di Forma di accedervi, senza che sia necessaria alcuna esperienza in Dynamo. In futuro, intendiamo rilasciare altri grafici di esempio che consentano di accedere alle automazioni basate su Dynamo senza dover ricorrere a sviluppatori o a competenze avanzate in materia di codifica.
In questa sezione, vengono introdotti i nodi essenziali disponibili nella libreria di Dynamo che consentono di creare un programma visivo personalizzato come un professionista.
Geometria per la progettazione computazionale: come si lavora con gli elementi geometrici in Dynamo? Si esplorano diversi modi per creare geometrie semplici o complesse da primitive.
Elementi di base di programmi: che cosa sono i "dati" e quali sono i tipi di elementi fondamentali che รจ possibile iniziare a utilizzare nei programmi? Inoltre, รจ descritto come incorporare le operazioni matematiche e logiche nel workflow di progettazione.
come gestire e coordinare le strutture di dati? Sono fornite ulteriori informazioni sul concetto di elenco e su come utilizzarlo per gestire i dati di progettazione in modo efficiente.
che cosa sono i dizionari? ร descritto come utilizzare i dizionari per cercare dati e valori specifici dai risultati esistenti.
Il Lettore Dynamo fornisce un metodo semplificato per eseguire i grafici di Dynamo in Civil 3D. Una volta creati i grafici, non รจ necessaria alcuna esperienza con Dynamo per utilizzare il lettore ed eseguire i grafici. In questo modo รจ piรน semplice condividere grafici con altri utenti che potrebbero non essere interessati a esplorare i dettagli di nodi e fili.
Per ulteriori informazioni sul Lettore Dynamo in Civil 3D, consultare la documentazione fornita nel sito Guida di Autodesk Civil 3D.
Strade, ferrovie, terreni, servizi, rilievi, GIS...
Le infrastrutture civili sono tutte queste cose e molto altro! Questa sezione contiene diversi grafici di esempio pratici e pertinenti per aiutare a raggiungere la padronanza di Dynamo e a sfruttare appieno il potenziale di Dynamo for Civil 3D. Ogni grafico รจ corredato di descrizioni dettagliate della logica con cui รจ stato creato, in modo da poterlo non solo utilizzare, ma anche comprendere.
Inoltre, questi esempi incarnano le pratiche ottimali collaudate nel tempo per la costruzione di grafici efficaci. Mentre si esaminano gli esempi, si consiglia di acquisire familiaritร con la sezione Procedure ottimali per ulteriori idee su come creare grafici potenti, flessibili e gestibili.
Dynamo offre molti nodi principali per un'ampia gamma di attivitร di programmazione visiva. A volte una soluzione piรน rapida, piรน elegante o piรน facilmente condivisa consiste nella creazione di nodi personalizzati. Questi possono essere riutilizzati tra diversi progetti, rendono i grafici piรน chiari e piรน ordinati, possono essere trasmessi a Package Manager e condivisi con la comunitร di Dynamo globale.
Quando si apre un grafico, i nodi contrassegnati come Is Input vengono visualizzati in Player ed รจ possibile interagire con essi.
Per alcuni input, verrร visualizzata una modalitร di selezione in cui รจ possibile selezionare elementi nella scena. Fare clic su Confirm selection per accettare la selezione e tornare alla vista degli input del grafico.
Fare clic su Run in Player per eseguire il grafico. Al termine, i nodi Watch e Watch 3D contrassegnati come Is Output verranno visualizzati come segue:
I grafici che generano la geometria offrono la possibilitร di visualizzare in anteprima e aggiungere la geometria al sito. Fare clic sull'icona a forma di occhio per attivare e disattivare l'anteprima, quindi fare clic su Add per aggiungere la geometria al sito.
Dynamo 2.0 introduce il concetto di separazione del tipo di dati del dizionario dal tipo di dati dell'elenco. Questa modifica puรฒ portare a modifiche significative al modo in cui si creano e si utilizzano i dati nei workflow. Prima della versione 2.0, i dizionari e gli elenchi venivano combinati come tipo di dati. In breve, gli elenchi erano in realtร dizionari con chiavi di numeri interi.
Un dizionario รจ un tipo di dati composto da una raccolta di coppie chiave-valore, in cui ogni chiave รจ univoca in ogni raccolta. Un dizionario non ha un ordine e in pratica รจ possibile cercare elementi mediante una chiave anzichรฉ un valore di indice, come in un elenco. In Dynamo 2.0, le chiavi possono essere solo stringhe.
โPython รจ un linguaggio di programmazione ampiamente utilizzato, la cui popolaritร ha molto a che fare con il suo stile di sintassi. ร altamente leggibile, il che rende piรน semplice l'apprendimento di molti altri linguaggi. Python supporta moduli e pacchetti e puรฒ essere incorporato nelle applicazioni esistenti. Per informazioni su come iniziare ad utilizzare Python, una buona risorsa รจ la pagina sul sito
I dizionari rappresentano una raccolta di dati correlati ad un altro elemento di dati noto come chiave. I dizionari consentono di cercare, eliminare e inserire dati in una raccolta.
Essenzialmente, si puรฒ pensare ad un dizionario come ad uno strumento davvero intelligente in cui cercare qualcosa.
Sebbene la funzionalitร del dizionario sia disponibile da tempo in Dynamo, Dynamo 2.0 introduce un nuovo metodo di gestione di questo tipo di dati.
Immagine gentilmente concessa da
In questa sezione, รจ disponibile una serie di lezioni sulla creazione della geometria con DesignScript. Seguire la procedura copiando l'esempio di DesignScript nei blocchi di codice di Dynamo.
Dictionary.ValueAtKey restituirร il valore nella chiave di input.
Un elenco รจ un tipo di dati composto da una raccolta di valori ordinati. In Dynamo, gli elenchi utilizzano numeri interi come valori di indice.
La separazione dei dizionari dagli elenchi introduce i dizionari come cittadino di prima classe che รจ possibile utilizzare per memorizzare e cercare i valori in modo semplice e rapido, senza dover ricordare un valore di indice o mantenere una struttura di elenchi rigorosa durante tutto il workflow. Durante i test degli utenti, รจ stata riscontrata una riduzione significativa della dimensione del grafico quando sono stati utilizzati dizionari anzichรฉ diversi nodi GetItemAtIndex.
Sono state apportate modifiche alla sintassi che consentono di modificare la modalitร di inizializzazione e utilizzo dei dizionari e degli elenchi nei blocchi di codice.
I dizionari utilizzano la seguente sintassi: {key:value}.
Gli elenchi utilizzano la seguente sintassi: [value,value,value].
Nella libreria sono stati introdotti nuovi nodi per aiutare a creare, modificare o sottoporre a query i dizionari.
Gli elenchi creati nei blocchi di codice v1.x verranno migrati automaticamente al caricamento dello script nella nuova sintassi dell'elenco che utilizza parentesi quadre [ ] anzichรฉ parentesi graffe { } \.
!
Nel settore scientifico dei computer, i dizionari, come gli elenchi, sono raccolte di oggetti. Sebbene gli elenchi siano in un ordine specifico, i dizionari sono raccolte non ordinate. Non si basano su numeri sequenziali (indici), ma utilizzano chiavi.
Nella seguente immagine viene illustrato un caso di utilizzo potenziale di un dizionario. Spesso i dizionari vengono utilizzati per correlare due dati che potrebbero non avere una correlazione diretta. In questo caso, si sta collegando la versione spagnola di una parola alla versione inglese per una successiva ricerca.
!
Creare un dizionario per correlare i due dati.
Ottenere il valore con la chiave specificata.
Riutilizzabilitร e condivisione: Dynamo Player promuove la collaborazione e la condivisione delle conoscenze tra gli utenti di Forma. I grafici di automazione possono essere salvati e riutilizzati su piรน siti, garantendo coerenza ed efficienza. ร inoltre possibile condividere gli script con altri utenti nella community di Forma, consentendo loro di sfruttare al meglio le soluzioni di automazione e viceversa.








I blocchi di codice sono una finestra sul mondo di DesignScript, il linguaggio di programmazione al centro di Dynamo. Sviluppato da zero per supportare i workflow di progettazione esplorativa, DesignScript รจ un linguaggio leggibile e conciso che offre feedback immediato a piccoli bit di codice e si adatta anche a interazioni complesse e di grandi dimensioni. DesignScript costituisce inoltre le fondamenta del motore che controlla la maggior parte degli aspetti di Dynamo "dietro le quinte". Poichรฉ quasi tutte le funzionalitร presenti nelle interazioni e nei nodi di Dynamo hanno una relazione uno ad uno con il linguaggio di scripting, esistono opportunitร uniche di spostarsi tra le interazioni basate su nodi e lo scripting in modo fluido.
Per i principianti, i nodi possono essere convertiti automaticamente in sintassi di testo per agevolare l'apprendimento di DesignScript o semplicemente per ridurre la dimensione di sezioni piรน grandi dei grafici. A tale scopo, รจ necessario utilizzare un processo denominato "Nodo da aggiungere al codice", descritto in dettaglio nella sezione Sintassi di DesignScript. Gli utenti piรน esperti possono utilizzare i blocchi di codice per creare mashup personalizzati delle funzionalitร esistenti e relazioni create dall'utente utilizzando molti paradigmi di codifica standard. Tra il principiante e l'utente avanzato, esistono innumerevoli scorciatoie e frammenti di codice che accelerano i progetti. Sebbene il termine "blocco di codice" possa risultare un po' intimidatorio per gli utenti non esperti di programmazione, รจ facile da utilizzare ed efficace. Un principiante puรฒ utilizzare il blocco di codice in modo efficiente con una codifica minima e un utente avanzato puรฒ definire definizioni di script da richiamare altrove in una definizione di Dynamo.
In breve, i blocchi di codice sono un'interfaccia dello scripting di testo all'interno di un ambiente di scripting visivo. Possono essere utilizzati come numeri, stringhe, formule e altri tipi di dati. Il blocco di codice รจ stato progettato per Dynamo, pertanto รจ possibile definire variabili arbitrarie nel blocco di codice e tali variabili vengono aggiunte automaticamente agli input del nodo:
Con i blocchi di codice, un utente ha la flessibilitร di decidere come specificare gli input. Di seguito sono riportati diversi modi per creare un punto base con le coordinate (10, 5, 0):
!
Man mano che si acquisiscono ulteriori informazioni sulle funzioni disponibili nella libreria, si potrebbe persino scoprire che la digitazione di Point.ByCoordinates รจ piรน rapida rispetto alla ricerca nella libreria e all'individuazione del nodo appropriato. Quando si digita Point ad esempio, in Dynamo verrร visualizzato un elenco di possibili funzioni da applicare ad un punto. Ciรฒ rende piรน intuitivo lo scripting e aiuterร ad imparare come applicare le funzioni in Dynamo.
Il blocco di codice รจ disponibile in Core > Input > Actions > Code Block. Ma per una procedura ancora piรน veloce per visualizzare il blocco di codice, รจ sufficiente fare doppio clic nell'area di disegno. Questo nodo viene utilizzato cosรฌ spesso che dispone di tutte le funzioni accessibili con il doppio clic del mouse.
!
Anche i blocchi di codice sono flessibili rispetto ai tipi di dati. L'utente puรฒ definire rapidamente numeri, stringhe e formule e il blocco di codice fornirร l'output desiderato.
Nella seguente immagine, รจ possibile vedere che il modo di eseguire le operazioni della "vecchia scuola" รจ leggermente piรน lungo: l'utente cerca il nodo desiderato nell'interfaccia, aggiunge il nodo all'area di disegno e quindi inserisce i dati. Con il blocco di codice, l'utente puรฒ fare doppio clic nell'area di disegno per estrarre il nodo e digitare il tipo di dati corretto con la sintassi di base.
I nodi Number e String sono due esempi di nodi di Dynamo che risultano probabilmente obsoleti rispetto al blocco di codice.
!
"Vecchia scuola"
Code Block
Con il tempo, si potrebbe avere bisogno di andare oltre le nozioni di base e di approfondire i meccanismi interni di Dynamo. Nelle pagine di questa sezione รจ fornito uno schema per sbloccare le funzionalitร avanzate di Dynamo for Civil 3D, in modo da portare i grafici al livello successivo.
// copy this code into a Code Block
// to start writing DesignScript
x = "Let's create some geometry!";Si utilizza una nel modello per rappresentare gli oggetti presenti nel mondo tridimensionale. Mentre le curve non sono sempre piane, ossia sono tridimensionali, lo spazio che definiscono รจ sempre associato ad una dimensione. Le superfici offrono un'altra dimensione e una raccolta di proprietร aggiuntive utilizzabili in altre operazioni di modellazione.
Importare e valutare una superficie in corrispondenza di un parametro in Dynamo per vedere il tipo di informazioni che รจ possibile estrarre.
!
Surface.PointAtParameter restituisce il punto in corrispondenza di una coordinata UV specificata.
Surface.NormalAtParameter restituisce il vettore normale in corrispondenza di una determinata coordinata UV.
Surface.GetIsoline restituisce la curva isoparametrica in corrispondenza di una coordinata U o V. Notare l'input isoDirection.
Scaricare i file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Una superficie รจ una forma matematica definita da una funzione e due parametri. Anzichรฉ t per le curve, si utilizzano U e V per descrivere lo spazio del parametro corrispondente. Ciรฒ significa che sono presenti piรน dati geometrici in base a cui eseguire disegni quando si utilizza questo tipo di geometria. Ad esempio, le curve hanno vettori tangenti e piani normali (che possono ruotare o torcersi per la lunghezza della curva), mentre le superfici hanno vettori normali e piani tangenti che saranno coerenti nel loro orientamento.
Superficie
Isocurva U
Isocurva V
Dominio di superficie: un dominio di superficie viene definito come intervallo di parametri (U,V) che vengono valutati in un punto tridimensionale su tale superficie. Il dominio in ogni dimensione (U o V) viene in genere descritto come due numeri (U minimo a U massimo) e (V da minimo a V massimo).
Sebbene la forma della superficie non sembri "rettangolare" e localmente potrebbe avere un insieme di isocurve piรน serrato o piรน ampio, lo "spazio" definito dal relativo dominio รจ sempre bidimensionale. In Dynamo, le superfici sono sempre note per aver un dominio definito da un minimo di 0.0 e un massimo di 1.0 in entrambe le direzioni U e V. Le superfici piane o tagliate possono avere domini diversi.
Isocurva (o curva isoparametrica): una curva definita da un valore U o V costante sulla superficie e da un dominio di valori per l'altra direzione U o V corrispondente.
Coordinata UV: il punto nello spazio del parametro UV definito da U, V e talvolta W.
Piano perpendicolare: un piano perpendicolare ad entrambe le isocurve U e V in corrispondenza di una determinata coordinata UV.
Vettore normale: un vettore che definisce la direzione di "alto" rispetto al piano perpendicolare.
Le superfici NURBS sono molto simili alle curve NURBS. Le superfici NURBS possono essere considerate come una griglia di curve NURBS che vanno in due direzioni. La forma di una superficie NURBS รจ definita da diversi punti di controllo e dal grado di tale superficie nelle direzioni U e V. Gli stessi algoritmi vengono utilizzati per calcolare la forma, le normali, le tangenti, le curvature e altre proprietร mediante punti di controllo, spessori e grado.
Nel caso delle superfici NURBS, vi sono due direzioni implicite nella geometria, poichรฉ le superfici NURBS sono, indipendentemente dalla forma vista, griglie rettangolari dei punti di controllo. Anche se queste direzioni sono spesso arbitrarie rispetto al sistema di coordinate globale, verranno utilizzate di frequente per analizzare i modelli o generare altra geometria in base alla superficie.
Grado (U,V) = (3,3)
Grado (U,V) = (3,1)
Grado (U,V) = (1,2)
Le PolySurface sono costituite da superfici unite su uno spigolo. Le PolySurface offrono piรน di una definizione UV bidimensionale nel senso che ora รจ possibile muoversi tra le forme collegate tramite la loro topologia.
Sebbene la "topologia" in genere descriva un concetto che illustra come le parti sono collegate e/o la topologia correlata, in Dynamo รจ anche un tipo di geometria. In particolare, si tratta di una categoria principale per superfici, PolySurface e solidi.
Talvolta chiamate superfici chiuse, unire le superfici in questo modo consente di creare forme piรน complesse e definire i dettagli attraverso la giuntura. Comodamente รจ possibile applicare un'operazione di raccordo o smusso agli spigoli di una PolySurface.
ร stato detto in precedenza che i nodi sono i blocchi predefiniti principali di un grafico di Dynamo e sono organizzati in gruppi logici nella libreria. In Dynamo for Civil 3D, sono presenti due categorie (o scaffali) nella libreria che contengono nodi dedicati per l'utilizzo di oggetti di AutoCAD e Civil 3D, quali tracciati, profili, modellatori, riferimenti di blocco e cosรฌ via. Il resto della libreria contiene nodi che sono di natura piรน generica e sono coerenti tra tutte le "versioni" di Dynamo (ad esempio, Dynamo per Revit, Dynamo Sandbox e cosรฌ via).
Per ulteriori informazioni sull'organizzazione dei nodi nella libreria di Dynamo principale, consultare la sezione Libreria.
Nodi specifici per l'utilizzo di oggetti di AutoCAD e Civil 3D
Nodi generici
Nodi di pacchetti di terze parti che รจ possibile installare separatamente
Utilizzando i nodi presenti negli scaffali di AutoCAD e Civil 3D, il grafico di Dynamo funzionerร solo in Dynamo for Civil 3D. Se un grafico di Dynamo for Civil 3D viene aperto altrove (ad esempio, in Dynamo per Revit), questi nodi verranno contrassegnati con un avviso e non verranno eseguiti.
Perchรฉ sono presenti due scaffali separati per AutoCAD e Civil 3D?
Questa organizzazione distingue i nodi per gli oggetti nativi di AutoCAD (linee, polilinee, riferimenti di blocco e cosรฌ via) dai nodi per gli oggetti di Civil 3D (tracciati, modellatori, superfici e cosรฌ via). Dal punto di vista tecnico, AutoCAD e Civil 3D sono due cose separate: AutoCAD รจ l'applicazione di base e Civil 3D si basa su essa.
Per utilizzare i nodi di AutoCAD e Civil 3D, รจ importante avere una conoscenza approfondita della gerarchia degli oggetti all'interno di ogni scaffale. Vi ricordate la tassonomia in biologia? Regno, phylum, classe, ordine, famiglia, genere, specie? Gli oggetti di AutoCAD e Civil 3D vengono classificati in modo simile. Esaminiamo alcuni esempi da spiegare.
Utilizziamo un tracciato come esempio.
Si supponga che l'obiettivo sia quello di modificare il nome del tracciato. Da qui, il nodo successivo che si desidera aggiungere รจ un nodo CivilObject.SetName.
All'inizio, questo potrebbe non sembrare molto intuitivo. Che cos'รจ CivilObject e perchรฉ la libreria non dispone di un nodo Alignment.SetName? La risposta รจ legata alla riutilizzabilitร e alla semplicitร . Se ci si pensa, il processo di modifica del nome di un oggetto di Civil 3D รจ lo stesso, sia che si tratti di un tracciato, un modellatore, un profilo o un altro elemento. Pertanto, invece di avere nodi ripetitivi che essenzialmente fanno tutti la stessa cosa (ad esempio, Alignment.SetName, Corridor.SetName, Profile.SetName e cosรฌ via), sarebbe opportuno racchiudere tale funzionalitร in un singolo nodo. Questo รจ esattamente ciรฒ che fa CivilObject.SetName.
Un altro modo per riflettere su questo aspetto รจ in termini di relazioni. Un tracciato e un modellatore sono tipi di Oggetti Civil, come una mela e una pera sono tipi di frutta. I nodi CivilObject si applicano a qualsiasi tipo di oggetto di Civil, proprio come se si volesse utilizzare un unico sbucciatore per sbucciare una mela e di una pera. La cucina diventerebbe piuttosto disordinata se si avesse uno sbucciatore separato per ogni tipo di frutta! In questo senso, la libreria dei nodi di Dynamo รจ simile alla cucina.
Ora, facciamo un passo avanti. Supponiamo di voler modificare il layer del tracciato. Il nodo che si desidera utilizzare รจ il nodo Object.SetLayer.
Perchรฉ non รจ presente un nodo denominato CivilObject.SetLayer? Gli stessi principi di riutilizzabilitร e semplicitร di cui abbiamo parlato prima si applicano qui. La proprietร layer รจ comune a qualsiasi oggetto di AutoCAD che puรฒ essere disegnato o inserito, ad esempio linea, polilinea, pesto, riferimento di blocco e cosรฌ via. Gli oggetti di Civil 3D, quali tracciati e modellatori, rientrano nella stessa categoria, pertanto qualsiasi nodo che si applica ad un Object puรฒ essere utilizzato anche con qualsiasi CivilObject.
In questa pagina vengono evidenziate le differenze di cui รจ necessario tenere conto durante la scrittura di programmi di Dynamo da eseguire nel contesto cloud di Dynamo compute service.
DaaS, Dynamo as a Service, Dynamo compute service, ecc. si riferiscono tutti alla stessa cosa: il runtime di base di Dynamo in esecuzione in un contesto cloud. Ciรฒ significa che il grafico non รจ in esecuzione sul computer in uso. Attualmente รจ possibile accedere a DaaS solo tramite l'estensione Dynamo Player per Forma, in cui gli utenti possono caricare e gestire i file .dyn creati nell'ambiente desktop, eseguire i file .dyn condivisi dai colleghi tramite l'estensione o utilizzare le routine .dyn precaricate fornite da Autodesk come esempi.
Poichรฉ i grafici vengono eseguiti in questo contesto cloud e non sul computer in uso, DaaS attualmente non puรฒ utilizzare direttamente i contesti host di Dynamo tradizionali (Revit, Civil 3D e cosรฌ via). Se si desidera utilizzare i tipi di tali programmi nel grafico, sarร necessario serializzarli (salvarli) nel grafico utilizzando il nodo Data.Remember o altre tecniche di serializzazione nel grafico. Si tratta di workflow simili a quelli da utilizzare durante la scrittura di grafici per Progettazione generativa in Revit.
La versione รจ la 3.x e viene aggiornata di frequente in base al ramo principale open source di Dynamo.
Per la maggior parte dei nodi principali, vedere la sezione successiva per alcune limitazioni specifiche.
DynamoFormaBeta per l'interazione con l'API di Forma.
VASA per la voxelizzazione/l'analisi efficiente.
I nodi Python non funzioneranno. Questi attualmente non verranno eseguiti.
Non รจ possibile utilizzare pacchetti personalizzati.
Il layer interfaccia utente/vista dei nodi dell'interfaccia utente non verrร eseguito. Non prevediamo che questo sia un problema con le funzionalitร principali, ma รจ bene tenerlo presente se si verifica un bug relativo ad un nodo con l'interfaccia utente personalizzata.
In futuro, intendiamo fornire strumenti all'interno di Dynamo per il desktop che renderanno piรน semplice garantire che il grafico venga eseguito allo stesso modo in entrambi i contesti.
Durante questa versione Beta, il tempo di calcolo non viene attualmente addebitato.
Per iniziare, consultare il , la o gli esempi nell'estensione Forma. Questi guideranno nei seguenti passaggi:
Accesso ad Autodesk Forma.
Installazione di DynamoFormaBeta per Dynamo sul desktop e dell'estensione Dynamo in Forma.
Scrittura del primo grafico.
Tenere presente che i grafici condivisi sono memorizzati in Forma.
Il tempo massimo di esecuzione del grafico รจ attualmente inferiore a 30 minuti. Questo valore puรฒ cambiare.
Le richieste di esecuzione sono a velocitร limitata, quindi potrebbero verificarsi errori se si effettuano molte richieste di calcolo in un periodo di tempo troppo breve.
Dopo aver impostato Dynamo Player, รจ possibile aprire i file al suo interno. Se si utilizza la versione desktop, sarร anche necessario che Dynamo sia aperto.
Se si utilizza Dynamo Desktop, Player riconoscerร un grafico attualmente aperto in Dynamo e consentirร di aprirlo direttamente.
Entrambe le schede Service e Desktop, รจ presente un'area denominata Upload graph [ 1 ] in cui รจ possibile trascinare e rilasciare i file .dyn per aggiungerli a Player. In alternativa, fare clic sull'area per aprire una finestra di dialogo per individuare e aggiungere file.
I grafici caricati compaiono in Uploaded graphs [ 2 ]. ร possibile aprire il grafico o fare clic sul menu delle opzioni (tre puntini) per rimuovere, scaricare o condividere il grafico.
I grafici possono essere condivisi in un sito o in un hub [ 3 ]. Un hub include piรน siti. Per condividere un grafico, fare clic su Share graph e immettere i dettagli del grafico. ร possibile scegliere se condividere il grafico nel sito o nell'hub. Quando si fa clic su Share, il grafico diventa disponibile per altri utenti con accesso a tale sito o hub.
Dynamo Player include diversi grafici predefiniti nella sezione Graphs provided by Autodesk [ 4 ]. Questi sono un ottimo punto di partenza per l'esplorazione e la sperimentazione.
Dynamo รจ un progetto di sviluppo open source attivo. Scoprire l'elenco di software che supporta Dynamo.
! ! ! ! ! !
Dynamo viene preinstallato con software come Revit3D, FormIt, Civil3D e cosรฌ via.
Per iniziare ad utilizzarlo, avviarlo dal gruppo della barra degli strumenti. A seconda del software utilizzato, l'icona di avvio รจ in genere disponibile in Menu > scheda Gestisci. Fare clic sull'icona di Dynamo per avviarlo.
!
Per ulteriori informazioni sull'utilizzo di Dynamo con un software specifico, si consiglia di consultare le seguenti sezioni:
Se si desidera utilizzare Dynamo come applicazione indipendente, continuare la lettura per ottenere consigli sul download di Sandbox.
L'applicazione Dynamo รจ disponibile nel . Le versioni ufficiali, passate o pre-rilasciate sono disponibili nella pagina di download. Visitare la pagina e fare clic su Download per la versione ufficiale rilasciata.
!
Se si cercano release di sviluppo precedenti o "bleeding edge", tutte le versioni sono disponibili nella sezione inferiore della stessa pagina.
!
La release di sviluppo "bleeding edge" potrebbe includere alcune funzionalitร nuove e sperimentali che non sono ancora state testate completamente, quindi potrebbe essere instabile. Utilizzando questo strumento, si potrebbero scoprire bug o problemi; per aiutarci a migliorare l'applicazione segnalare i problemi al nostro team.
Ai principianti viene consigliato di scaricare la release ufficiale stabile.
Prima di avviare qualsiasi versione scaricata, รจ necessario decomprimere il contenuto nella cartella scelta.
Scaricare e installare nel computer per questo passaggio.
Fare clic con il pulsante destro del mouse sul file .zip e selezionare Estrai tutto.
!
Scegliere una destinazione per decomprimere tutti i file.
!
Nella cartella di destinazione, fare doppio clic su DynamoSandbox.exe per avviarlo.
!
Verrร visualizzata la schermata di avvio di Dynamo Sandbox come indicato di seguito.
!
Congratulazioni, รจ stata completata l'installazione per l'utilizzo di Dynamo Sandbox.
**Geometry** รจ una funzionalitร aggiuntiva in Dynamo Sandbox che รจ disponibile solo per gli utenti che dispongono di una licenza o di un abbonamento corrente per il seguente software Autodesk: Revit, Robot Structural Analysis, FormIt e Civil 3D. **Geometry** consente agli utenti di importare, creare, modificare ed esportare la geometria da Dynamo Sandbox.
Intersect, Trim e SelectTrim vengono utilizzati principalmente nella geometria dimensionale minore come punti, curve e superfici. La geometria solida, invece, presenta un insieme aggiuntivo di metodi per la modifica della forma dopo la costruzione, sottraendo il materiale in modo simile a Trim e combinando gli elementi insieme per formare un intero piรน grande.
Il metodo Unione utilizza due oggetti solidi e crea un singolo oggetto solido partendo dallo spazio coperto da entrambi gli oggetti. Lo spazio sovrapposto tra oggetti viene combinato nella forma finale. In questo esempio si combina una sfera e un cuboide in un'unica forma solida sfera-cubo:
Il metodo Difference, come Trim, sottrae il contenuto del solido strumento di input dal solido di base. In questo esempio, viene ritagliata una piccola rientranza da una sfera:
Il metodo Intersect restituisce il solido sovrapposto tra due input solidi. Nel seguente esempio, Difference รจ stato modificato in Intersect e il solido risultante รจ il vuoto mancante inizialmente ritagliato:
I nodi personalizzati vengono costruiti nidificando altri nodi e nodi personalizzati all'interno di un "nodo personalizzato di Dynamo", che รจ possibile immaginare concettualmente come un contenitore. Quando viene eseguito questo nodo contenitore nel grafico, tutto ciรฒ che si trova all'interno verrร eseguito per consentire di riutilizzare e condividere una combinazione utile di nodi.
Quando nel grafico sono presenti piรน copie di un nodo personalizzato, รจ possibile aggiornarle tutte modificando il nodo personalizzato di base. Ciรฒ consente di aggiornare il grafico in modo semplice adattandolo a eventuali modifiche che potrebbero verificarsi nel workflow o nella progettazione.
Si รจ mai voluto cercare qualcosa in Revit a partire da un dato?
Se la risposta รจ affermativa, รจ stato fatto qualcosa di simile al seguente esempio.
Nell'immagine seguente si raccolgono tutti i locali nel modello di Revit, si ottiene l'indice del locale desiderato (per numero del locale) e infine si acquisisce il locale in corrispondenza dell'indice.
!
I pacchetti di Dynamo sono set di strumenti sviluppati da terze parti per estendere le funzionalitร principali di Dynamo. Sono accessibili a tutti e sono pronti per il download con un semplice clic del pulsante.
Per ulteriori informazioni su come iniziare ad utilizzare i pacchetti, consultare la sezione .
Di seguito รจ riportato un elenco di alcuni dei pacchetti piรน diffusi che possono portare i grafici di Dynamo for Civil 3D al livello successivo.
Probabilmente la migliore funzionalitร dei nodi personalizzati รจ la loro capacitร di condivisione del lavoro. Se un utente avanzato crea un grafico di Dynamo complesso e lo consegna ad un progettista che non conosce Dynamo, puรฒ condensare il grafico agli elementi essenziali per l'interazione progettuale. Il nodo personalizzato puรฒ essere aperto per modificare il grafico interno, ma il "contenitore" puรฒ essere mantenuto semplice. Con questo processo, i nodi personalizzati consentono agli utenti di Dynamo di progettare un grafico ordinato e intuitivo.
!
Esistono svariati modi per creare nodi personalizzati in Dynamo. Negli esempi riportati in questo capitolo, verranno creati nodi personalizzati direttamente dall'interfaccia utente di Dynamo. Se si รจ programmatori e si รจ interessati alla formattazione C# o zero-touch, รจ possibile fare riferimento a questa pagina nella Wiki di Dynamo per una revisione piรน approfondita.
Si passerร all'ambiente dei nodi personalizzati e si creerร un nodo semplice per calcolare una percentuale. L'ambiente dei nodi personalizzati รจ diverso dall'ambiente dei grafici di Dynamo, ma l'interazione รจ fondamentalmente la stessa. Detto questo, procedere creando il primo nodo personalizzato.
Per creare un nodo personalizzato da zero, avviare Dynamo e selezionare Nodo personalizzato oppure digitare CTRL+MAIUSC+N nell'area di disegno.
!
Assegnare un nome, una descrizione e una categoria nella finestra di dialogo Proprietร nodo personalizzato.
!
Nome: Percentage
Descrizione: Calculate the percentage of one value in relation to another
Categoria: Math.Functions
Verrร aperta un'area di disegno con uno sfondo giallo, ad indicare che si sta lavorando all'interno di un nodo personalizzato. In questa area di disegno รจ possibile accedere a tutti i nodi di Dynamo principali, nonchรฉ ai nodi Input e Output, che etichettano il flusso di dati in entrata e in uscita nel nodo personalizzato. Sono disponibili in Input>Basic.
!
!
Input: i nodi di input creano porte di input nel nodo personalizzato. La sintassi per un nodo di input รจ input_name : datatype = default_value(optional).
Output: simili agli input, creeranno e assegneranno nomi alle porte di output nel nodo personalizzato. ร possibile aggiungere un commento personalizzato alle porte di input e output per inserire un suggerimento nei tipi Input e Output. Questo argomento รจ descritto piรน dettagliatamente nella sezione Creazione di nodi personalizzati.
ร possibile salvare questo nodo personalizzato come file .dyf (anzichรฉ come file .dyn standard) e verrร aggiunto automaticamente alla sessione corrente e alle sessioni future. Il nodo personalizzato รจ reperibile nella libreria dalla sezione Add-ons.
!
Dopo aver creato il primo nodo personalizzato, nelle sezioni successive si approfondiranno la funzionalitร dei nodi personalizzati e si spiegherร come pubblicare workflow generici. Nella seguente sezione verrร illustrato lo sviluppo di un nodo personalizzato che trasferisce la geometria da una superficie ad un'altra.
Specificare il numero del locale da trovare.
Ottenere il numero del locale e individuare l'indice in cui si trova.
Ottenere il locale in corrispondenza dell'indice.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Ora procedere ricreando questa idea utilizzando i dizionari. Innanzitutto, รจ necessario raccogliere tutti i locali nel modello di Revit.
!
Scegliere la categoria di Revit che si desidera utilizzare (in questo caso, i locali).
Si indicherร a Dynamo di raccogliere tutti questi elementi.
Successivamente, รจ necessario decidere quali chiavi utilizzare per la ricerca di questi dati. Per informazioni sulle chiavi, vedere la sezione Che cos'รจ un dizionario?.
!
I dati che verranno utilizzati sono il numero del locale.
Ora verrร creato il dizionario con le chiavi e gli elementi specificati.
!
Il nodo Dictionary.ByKeysValues creerร un dizionario a partire dagli input appropriati.
Keysdeve essere una stringa, mentrevaluespuรฒ essere diversi tipi di oggetto.
Infine, รจ possibile recuperare un locale dal dizionario con il relativo numero.
!
Stringsarร la chiave utilizzata per cercare un oggetto nel dizionario.Dictionary.ValueAtKey consentirร ora di ottenere l'oggetto dal dizionario.
Utilizzando la stessa logica del dizionario, รจ possibile creare dizionari anche con oggetti raggruppati. Se si volessero cercare tutti i locali ad un determinato livello, รจ possibile modificare il grafico sopra come indicato di seguito.
!
Invece di utilizzare il numero del locale come chiave, รจ possibile utilizzare il valore di un parametro (in questo caso si utilizzerร il livello).
!
Ora รจ possibile raggruppare i locali in base al livello in cui risiedono.
!
Con gli elementi raggruppati per livello, รจ ora possibile utilizzare le chiavi condivise (chiavi univoche) come chiave per il dizionario e gli elenchi di locali come elementi.
!
Infine, utilizzando i livelli nel modello di Revit, รจ possibile cercare i locali che risiedono in tale livello nel dizionario.
Dictionary.ValueAtKeyrecupererร il nome del livello e restituirร gli oggetti locale in corrispondenza di tale livello.
Le opportunitร di utilizzo del dizionario sono davvero infinite. La possibilitร di correlare i dati BIM in Revit all'elemento stesso offre diversi casi di utilizzo.
Piano perpendicolare
Vettore normale
Grado (U,V) = (1,1)
MeshToolKit per la manipolazione della mesh. Mesh Toolkit รจ disponibile anche al momento dell'acquisto, a partire da Dynamo 3.4.
RefineryToolkit per algoritmi utili che consentono test di interferenza, distanza dalla vista, il percorso piรน breve, isovista e cosรฌ via.
Le funzionalitร solo per Windows non funzioneranno. Ad esempio, se si tenta di utilizzare il Registro di sistema di Windows o WPF, l'operazione non riuscirร .
Le estensioni della vista non verranno caricate.
I nodi del file system non saranno molto utili. Eventuali file a cui si fa riferimento sul computer locale non esisteranno durante l'esecuzione in DaaS.
I nodi di interoperabilitร di Excel/DSOffice non funzioneranno. I nodi di Open XML dovrebbero funzionare.
Le richieste di rete in generale non funzioneranno, anche se รจ possibile effettuare chiamate all'API di Forma.







s1 = Sphere.ByCenterPointRadius(
CoordinateSystem.Identity().Origin, 6);
s2 = Sphere.ByCenterPointRadius(
CoordinateSystem.Identity().Origin.Translate(4, 0,
0), 6);
combined = s1.Union(s2);s = Sphere.ByCenterPointRadius(
CoordinateSystem.Identity().Origin, 6);
tool = Sphere.ByCenterPointRadius(
CoordinateSystem.Identity().Origin.Translate(10, 0,
0), 6);
result = s.Difference(tool);s = Sphere.ByCenterPointRadius(
CoordinateSystem.Identity().Origin, 6);
tool = Sphere.ByCenterPointRadius(
CoordinateSystem.Identity().Origin.Translate(10, 0,
0), 6);
result = s.Intersect(tool);Modalitร anteprima
Controlli di zoom/panoramica
Nodo nell'area di lavoro
Quando si apre un nuovo file, per default, viene aperta una nuova area di lavoro iniziale.
!
ร possibile creare un nodo personalizzato e aprirlo in un'area di lavoro del nodo personalizzato.
!
ร consentita una sola area di lavoro iniziale in ogni finestra di Dynamo, ma รจ possibile avere piรน aree di lavoro del nodo personalizzato aperte nelle schede.
Sono disponibili tre metodi per passare da un'anteprima all'altra:
a. Utilizzando le icone in alto a destra
!Anteprima del grafico
!Anteprima 3D
b. Fare clic con il pulsante destro del mouse nell'area di lavoro
Passare dall'anteprima 3D all'anteprima del grafico
!
Passare dall'anteprima del grafico all'anteprima 3D
!
c. Utilizzando i tasti di scelta rapida (CTRL+B)
ร possibile utilizzare le icone o un mouse per spostarsi all'interno di una delle due aree di lavoro.
a. In modalitร di anteprima del grafico
Utilizzando le icone:
!Adatta alla finestra
!Zoom avanti
!Zoom indietro
!Panoramica
Utilizzando il mouse:
Fare clic con il pulsante sinistro del mouse - Seleziona
Fare clic con il pulsante sinistro del mouse e trascinare - Casella di selezione per selezionare piรน nodi
!
b. In modalitร di anteprima 3D
Utilizzando le icone:
!Adatta alla finestra
!Zoom avanti
!Zoom indietro
!Panoramica
Orbita
Utilizzando il mouse:
Scorrere il pulsante centrale del mouse su/giรน - Zoom avanti/indietro
Fare clic con il pulsante centrale del mouse e trascinare - Panoramica
Fare clic con il pulsante sinistro del mouse per selezionare un nodo qualsiasi.
Per selezionare piรน nodi, fare clic e trascinare per creare un riquadro di selezione.
!
Civil 3D Toolkit รจ un pacchetto di Dynamo for Civil 3D che fornisce miglioramenti significativi alle funzionalitร di Dynamo grazie ad un ampio inventario di nodi aggiuntivi.
Camber รจ un pacchetto di Dynamo for Civil 3D open source che include centinaia di nodi per l'utilizzo di etichette, xrif, collegamenti ai dati, stili e altro ancora.
CivilConnection รจ un pacchetto di Dynamo per Revit open source che consente lo scambio di informazioni tra Civil 3D, Dynamo e Revit.
Arkance Systems Nodes รจ un pacchetto di Dynamo for Civil 3D con un'ampia gamma di nodi utili per l'utilizzo di quote, tabelle, viste, Drill Control e altro ancora.
Le curve sono il primo tipo di dati geometrici descritto e hanno un insieme piรน familiare di proprietร descrittive della forma. Quanto curve o diritte? Quanto lunghe o corte? Ricordarsi che i punti sono ancora i blocchi predefiniti per definire qualsiasi elemento da una linea ad una spline e tutti i tipi di curva compresi tra loro.
Linea
Polilinea
Arco
La รจ costituita da un gruppo di punti; ogni linea ha almeno 2 punti. Uno dei metodi piรน comuni per creare una linea in Dynamo consiste nell'utilizzare Line.ByStartPointEndPoint per creare una linea in Dynamo.
!
รจ un modello utilizzato per rappresentare in modo accurato curve e superfici. Si procederร con la creazione di una curva seno in Dynamo utilizzando due diversi metodi per creare curve NURBS e confrontare i risultati.
!
NurbsCurve.ByControlPoints utilizza l'elenco di punti come punti di controllo.
NurbsCurve.ByPoints disegna una curva attraverso l'elenco di punti.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Il termine curva รจ generalmente un elemento interessante per tutte le diverse forme curve (anche se diritte). La Curva con la "C" maiuscola รจ la categorizzazione principale per tutti questi tipi di forma: linee, cerchi, spline e cosรฌ via. Piรน tecnicamente, una curva descrive ogni possibile punto che si puรฒ trovare immettendo "t" in una raccolta di funzioni, che possono variare dal semplice (x = -1.26*t, y = t) alle funzioni che prevedono il calcolo infinitesimale. Indipendentemente dal tipo di curva utilizzata, questo parametro denominato "t" รจ una proprietร che รจ possibile valutare. Inoltre, indipendentemente dall'aspetto della forma, tutte le curve hanno anche un punto iniziale e un punto finale, che si allineano in modo coincidente con i valori t minimo e massimo utilizzati per creare la curva. Questo aiuta anche a capire la sua direzionalitร .
ร importante notare che Dynamo presuppone che il dominio dei valori "t" per una curva sia compreso tra 0.0 e 1.0.
Tutte le curve presentano inoltre diverse proprietร o caratteristiche che possono essere utilizzate per descriverle o analizzarle. Quando la distanza tra i punti iniziale e finale รจ pari a zero, la curva รจ "chiusa". Inoltre, ogni curva presenta diversi punti di controllo; se tutti questi punti si trovano nello stesso piano, la curva รจ "planare". Alcune proprietร si applicano alla curva nel suo insieme, mentre altre si applicano solo a punti specifici lungo la curva. Ad esempio, la planaritร รจ una proprietร globale, mentre un vettore tangente in corrispondenza di un determinato valore t รจ una proprietร locale.
Le linee sono la forma piรน semplice di curve. Potrebbero non sembrare curve, ma in realtร sono curve, solo senza alcuna curvatura. Esistono diversi modi per creare linee, dove la piรน intuitiva รจ dal punto A al punto B. La forma della linea AB verrร disegnata tra i punti ma matematicamente si estende all'infinito in entrambe le direzioni.
Quando si collegano due linee, รจ presente una polilinea. Di seguito รจ riportata una rappresentazione diretta di che cos'รจ un punto di controllo. La modifica di una qualsiasi di queste posizioni dei punti modificherร la forma della polilinea. Se la polilinea รจ chiusa, si ha un poligono. Se le lunghezze dei bordi del poligono sono tutte uguali, vengono descritte come normali.
Man mano che si aggiunge maggiore complessitร alle funzioni parametriche che definiscono una forma, รจ possibile fare un passo avanti rispetto ad una linea per creare un arco, un cerchio, un arco di ellisse o un'ellisse descrivendo uno o due raggi. Le differenze tra la versione dell'arco e il cerchio o l'ellisse sono solo se la forma รจ chiusa o meno.
NURBS (spline a base razionale non uniformi) sono rappresentazioni matematiche che consentono di modellare in modo accurato qualsiasi forma, da una semplice linea bidimensionale, un cerchio, un arco o un rettangolo, fino alla curva organica di forma libera tridimensionale piรน complessa. Grazie alla loro flessibilitร (relativamente pochi punti di controllo, ma interpolazione uniforme basata sulle impostazioni dei gradi) e alla loro precisione (legata ad una matematica affidabile), i modelli NURBS possono essere utilizzati in qualsiasi processo, dall'illustrazione e dall'animazione fino alla produzione.
Grado: il grado della curva determina l'intervallo di influenza dei punti di controllo su una curva; dove piรน alto รจ il grado, maggiore sarร l'intervallo. Il valore del grado รจ un numero intero positivo. Questo numero รจ in genere 1, 2, 3 o 5, ma puรฒ essere qualsiasi numero intero positivo. Le linee e le polilinee NURBS sono in genere di grado 1 e la maggior parte delle curve di forma libera รจ di grado 3 o 5.
Punti di controllo: i punti di controllo sono un elenco di punti di almeno grado+1. Uno dei modi piรน semplici per modificare la forma di una curva NURBS consiste nello spostare i punti di controllo.
Peso: ai punti di controllo รจ associato un numero denominato peso. In genere i pesi sono numeri positivi. Quando i punti di controllo di una curva hanno tutti lo stesso peso (in genere 1), la curva viene chiamata non razionale, altrimenti la curva viene chiamata razionale. La maggior parte delle curve NURBS non รจ razionale.
Nodi: i nodi sono un elenco di numeri (grado+N-1), dove N รจ il numero di punti di controllo. I nodi vengono utilizzati insieme ai pesi per controllare l'influenza dei punti di controllo sulla curva risultante. Un uso per i nodi รจ creare deviazioni in determinati punti nella curva.
Grado = 1
Grado = 2
Grado = 3
Notare che piรน alto รจ il valore del grado, maggiore sarร il numero di punti di controllo utilizzati per interpolare la curva risultante.
Il รจ una rappresentazione dell'intensitร e della direzione, che รจ possibile visualizzare come una freccia che accelera verso una specifica direzione ad una determinata velocitร . ร un componente chiave per i modelli in Dynamo. Notare che, poichรฉ si trovano nella categoria astratta di "helper", quando si crea un vettore, non verrร visualizzato alcun elemento nell'anteprima sfondo.
!
ร possibile utilizzare una linea come supporto in un'anteprima vettoriale.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Il รจ una superficie bidimensionale, che puรฒ essere visualizzata come superficie piana che si estende all'infinito. Ciascun piano ha un'origine, una direzione X, una direzione Y e una direzione Z (su).
!
Sebbene siano astratti, i piani hanno una posizione di origine in modo da poterli posizionare nello spazio.
In Dynamo, il rendering dei piani viene eseguito nell'anteprima sfondo.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Il รจ un sistema che consente di determinare la posizione di punti o altri elementi geometrici. Nell'immagine seguente รจ illustrato l'aspetto che ha in Dynamo e ciรฒ che ogni colore rappresenta.
!
Sebbene siano astratti, anche i sistemi di coordinate hanno una posizione di origine in modo da poterli individuare nello spazio.
In Dynamo, i sistemi di coordinate vengono sottoposti a rendering nell'anteprima sfondo come punto (origine) e linee che definiscono gli assi (X รจ rosso, Y รจ verde e Z รจ blu in base alla seguente convenzione).
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Vettori, piani e sistemi di coordinate costituiscono il gruppo principale dei tipi di geometria astratta. Aiutano a definire la posizione, l'orientamento e il contesto spaziale della geometria di cui รจ necessario determinare la forma. Se dico che sono a New York, tra la 42ยฐ strada e Broadway (sistema di coordinate), a livello strada (piano), guardando verso nord (vettore), ho utilizzato questi "helper" per definire dove sono. Lo stesso vale per una custodia per il cellulare o un grattacielo. Per sviluppare il modello, รจ necessario questo contesto.
Un vettore รจ una quantitร geometrica che descrive la direzione e l'intensitร . I vettori sono astratti, ossia rappresentano una quantitร , non un elemento geometrico. I vettori possono essere facilmente confusi con i punti perchรฉ sono entrambi composti da un elenco di valori. Tuttavia, esiste una differenza fondamentale: i punti descrivono una posizione in un determinato sistema di coordinate, mentre i vettori descrivono una differenza relativa nella posizione, che รจ identica a quella indicata come "direzione".
Se l'idea della differenza relativa รจ confusa, pensare al vettore AB come "Sono in piedi nel punto A, guardando verso il punto B." La direzione, da qui (A) a qui (B), รจ il vettore.
Suddividere ulteriormente i vettori nelle loro parti utilizzando la stessa notazione AB:
Il punto iniziale del vettore รจ denominato base.
Il punto finale del vettore รจ denominato punta o senso.
Il vettore AB non รจ uguale al vettore BA, il quale punta nella direzione opposta.
Per una visione in chiave comica dei vettori (e della loro definizione astratta), guardare la commedia classica L'aereo piรน pazzo del mondo e ascoltare la frase ironica, citata spesso:
Roger, Roger. Qual รจ il nostro vettore, Victor?
I piani sono "helper" astratti bidimensionali. Piรน in particolare, i piani sono concettualmente "piatti" e si estendono all'infinito in due direzioni. In genere, viene eseguito il rendering di un rettangolo piรน piccolo vicino all'origine.
Si potrebbe pensare: "Aspetta! Origine? Sembra un sistema di coordinate... come quello che utilizzo per modellare nel mio software CAD!"
Ed รจ corretto. La maggior parte del software di modellazione sfrutta i piani di costruzione o i "livelli" per definire un contesto bidimensionale locale in cui disegnare. Il piano XY, XZ, YZ (o nord, sudest) potrebbe sembrare piรน familiare. Sono tutti piani, che definiscono un contesto "piatto" infinito. I piani non hanno profonditร , ma ci aiutano a descrivere anche la direzione.
Se si sono ben compresi i piani, non รจ difficile capire i sistemi di coordinate. Un piano ha tutte le stesse parti di un sistema di coordinate, a condizione che si tratti di un sistema di coordinate "euclideo" o "XYZ" standard.
Sono presenti, tuttavia, altri sistemi di coordinate alternativi, ad esempio cilindrici o sferici. Come si vedrร nelle sezioni successive, anche i sistemi di coordinate possono essere applicati ad altri tipi di geometria per definire una posizione su tale geometria.
Aggiunta di sistemi di coordinate alternativi - cilindrici, sferici
L'interfaccia utente per Dynamo รจ organizzata in cinque aree principali. Verrร illustrata brevemente la panoramica qui e verranno descritte ulteriormente l'area di lavoro e la Libreria nelle sezioni seguenti.
!
Menu
Barra degli strumenti
Libreria
Area di lavoro
Barra di esecuzione
Di seguito sono riportati i menu per le funzionalitร di base dell'applicazione Dynamo. Come la maggior parte del software Windows, i primi due menu sono relativi alla gestione dei file, alle operazioni di selezione e modifica del contenuto. I menu rimanenti sono piรน specifici di Dynamo.
Informazioni generali e impostazioni sono disponibili nel menu a discesa di Dynamo.
!
Informazioni su: indica la versione di Dynamo installata nel computer in uso.
Contratto per raccogliere dati di usabilitร : consente di aderire o meno alla condivisione dei dati utente per migliorare Dynamo.
Preferenze: include impostazioni quali la definizione della precisione decimale e della qualitร di rendering della geometria dell'applicazione.
Se si รจ bloccati, consultare il menu ?. ร possibile accedere ad uno dei siti Web di riferimento di Dynamo tramite il browser Internet.
Guide interattive: presentazioni che guidano l'utente passo passo attraverso le varie funzionalitร di Dynamo.
Esempi: fornisce file di esempio di riferimento. Disponibili solo nei programmi host, inclusi Revit e Civil 3D.
Dizionario di Dynamo: rappresenta una risorsa con documentazione su tutti i nodi.
La barra degli strumenti di Dynamo contiene una serie di pulsanti per l'accesso rapido ai file, nonchรฉ i comandi Annulla [CTRL+Z] e Ripeti [CTRL+Y]. All'estrema destra รจ presente un altro pulsante che consente di esportare un'istantanea dell'area di lavoro, che รจ estremamente utile per la documentazione e la condivisione.
! Nuovo: consente di creare un nuovo file .dyn.
! Apri: consente di aprire un file .dyn (area di lavoro) o .dyf (nodo personalizzato) esistente.
! Salva/Salva con nome: consente di salvare il file .dyn o .dyf attivo.
La Libreria di Dynamo รจ una raccolta di librerie funzionali, ciascuna contenente nodi raggruppati per categoria. ร costituita da librerie di base che vengono aggiunte durante l'installazione di default di Dynamo. Nel corso dell'introduzione del suo l'utilizzo, verrร illustrato come estendere le funzionalitร di base con nodi personalizzati e pacchetti aggiuntivi. La sezione fornirร una guida piรน dettagliata sull'utilizzo di questa funzionalitร .
!
L'area di lavoro รจ il luogo dove vengono creati i programmi visivi; รจ possibile modificare anche l'impostazione Anteprima per visualizzare le geometrie 3D da qui. Per ulteriori dettagli, fare riferimento a .
!
Eseguire lo script di Dynamo da qui. Fare clic sull'icona dell'elenco a discesa sul pulsante di esecuzione per passare da una modalitร all'altra.
!
Automatico: consente di eseguire automaticamente lo script. Le modifiche vengono aggiornate in tempo reale.
Manuale: lo script viene eseguito solo quando si fa clic sul pulsante Esegui. ร utile per quando si apportano modifiche ad uno script complesso e "pesante".
Periodico: questa opzione รจ disattivata per default. ร disponibile solo quando viene utilizzato il nodo DateTime.Now. ร possibile impostare l'esecuzione automatica del grafico ad un intervallo specificato.
!
Per utilizzare Dynamo con Forma, sono disponibili due opzioni: Dynamo as a Service (DaaS) basato sul cloud o Dynamo in versione desktop. Ciascuna ha i suoi vantaggi a seconda di ciรฒ che si desidera fare, quindi prima di iniziare รจ bene valutare quale sia l'opzione piรน adatta alle proprie esigenze. Tuttavia, occorre tenere presente che รจ possibile passare da un'opzione all'altra in qualsiasi momento.
Confronto tra Dynamo as a Service e Dynamo Desktop
Installazione semplice
Processo di installazione in piรน fasi
Non รจ necessario installare Dynamo o tenerlo aperto
ร necessario avere Dynamo aperto
In questa pagina verrร spiegato come impostare entrambe le opzioni.
Dynamo in Forma รจ attualmente disponibile come versione beta aperta con accesso anticipato, il che significa che le funzionalitร e l'interfaccia utente potrebbero cambiare frequentemente.
Innanzitutto, installiamo Dynamo Player in Forma.
Nel sito di Forma, accedere ad Extensions sulla barra laterale sinistra e fare clic su Add extension. Apre Autodesk App Store.
Cercare Dynamo e aggiungere Dynamo Player Beta. Leggere la dichiarazione di non responsabilitร e fare clic su Agree.
Ora, Dynamo Player รจ disponibile nelle estensioni. Fare clic per aprirlo.
Ora รจ possibile utilizzare Dynamo Player.
Per utilizzare Dynamo Desktop, รจ necessario disporre di Dynamo, come sandbox indipendente o connesso a Revit o Civil 3D. ร inoltre necessario il pacchetto DynamoForma.
Seguire queste istruzioni per impostare Dynamo in Revit e il pacchetto DynamoForma.
Verificare che sia installato Revit 2024.1 o versione successiva.
Aprire Dynamo da Revit accedendo a Gestisci > Dynamo.
In Dynamo, installare il pacchetto DynamoForma. Accedere a Pacchetti > Package Manager, quindi cercare DynamoForma.
Seguire queste istruzioni per impostare Dynamo in Civil 3D e il pacchetto DynamoForma.
Assicurarsi di avere installato Civil 3D 2024.1 o versione successiva.
Aprire Dynamo da Civil 3D accedendo a Gestisci > Dynamo.
In Dynamo, installare il pacchetto DynamoForma. Accedere a Pacchetti > Package Manager, quindi cercare DynamoForma.
Seguire queste istruzioni per installare Dynamo Sandbox e il pacchetto DynamoForma.
Scaricare Dynamo 2.18.0 o versione successiva dalle . Per un'esperienza ottimale, scegliere la versione piรน recente tra quelle piรน stabili, elencate in alto.
Le versioni giornaliere sono versioni di sviluppo e possono includere funzionalitร incomplete o in fase di sviluppo.
Estrarre Dynamo utilizzando in una cartella di propria scelta.
Una volta installato Dynamo, รจ possibile utilizzarlo con Forma. Quando si esegue l'opzione desktop di Dynamo in Forma, รจ necessario che Dynamo sia aperto per poter utilizzare l'estensione Dynamo Player.
Innanzitutto, installiamo Dynamo Player in Forma.
Nel sito di Forma, accedere ad Extensions sulla barra laterale sinistra e fare clic su Add extension. Apre Autodesk App Store.
Cercare Dynamo e aggiungere Dynamo Player Beta. Leggere la dichiarazione di non responsabilitร e fare clic su Agree.
Ora, Dynamo Player รจ disponibile nelle estensioni. Fare clic per aprirlo.
Nella parte superiore, fare clic su Desktop per accedere a Dynamo Desktop.
Ora รจ possibile utilizzare Dynamo Player. Se in Dynamo รจ giร aperto un grafico, fare clic su Open in Connected graph per visualizzarlo in Player.
Dynamo for Civil 3D offre il paradigma della programmazione visiva agli ingegneri e ai progettisti che lavorano su progetti di infrastrutture civili. Si puรฒ pensare a Dynamo come a una sorta di strumento digitale multiplo per gli utenti di Civil 3D; qualunque sia il compito da svolgere, c'รจ lo strumento giusto per farlo. La sua interfaccia intuitiva consente di creare routine potenti e personalizzabili senza dover scrivere una singola riga di codice. Non รจ necessario essere programmatori per utilizzare Dynamo, ma รจ necessario essere in grado di pensare con la logica di un programmatore. Insieme agli altri capitoli del Guida introduttiva, questo capitolo aiuterร a sviluppare le competenze logiche in modo da poter affrontare qualsiasi attivitร con una mentalitร di progettazione computazionale.
Dynamo รจ stato introdotto per la prima volta in Civil 3D 2020 e da allora ha continuato a evolversi. Inizialmente installato separatamente tramite un aggiornamento software, ora รจ incluso in tutte le versioni di Civil 3D. A seconda della versione di Civil 3D in uso, si puรฒ notare che l'interfaccia di Dynamo รจ leggermente diversa dagli esempi visualizzati in questo capitolo. Ciรฒ รจ dovuto al fatto che l'interfaccia รจ stata notevolmente rinnovata in Civil 3D 2023.
ร consigliabile consultare il per le informazioni piรน aggiornate relative allo sviluppo di Dynamo. Nella tabella seguente sono riassunte le tappe principali dello sviluppo di Dynamo for Civil 3D.
Un รจ definito da niente di piรน che uno o piรน valori denominati coordinate. Il numero di valori delle coordinate necessari per definire il punto dipende dal sistema di coordinate o dal contesto in cui si trova.
Il tipo di punto piรน comune in Dynamo รจ presente nel sistema di coordinate globali tridimensionale e dispone di tre coordinate [X,Y,Z] (punto 3D in Dynamo).
!
Un punto 2D in Dynamo ha due coordinate [X,Y].
!
I parametri per le curve e le superfici sono continui e si estendono oltre il bordo della geometria specificata. Poichรฉ le forme che definiscono lo spazio del parametro risiedono in un sistema di coordinate globali tridimensionale, รจ sempre possibile convertire una coordinata parametrica in una coordinata "globale". Il punto [0.2, 0.5] sulla superficie, ad esempio, รจ uguale al punto [1.8, 2.0, 4.1] nelle coordinate globali.
!
Punto nelle coordinate XYZ globali supposte
Punto rispetto ad un determinato sistema di coordinate (cilindrico)
Punto come coordinata UV su una superficie
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Se la geometria รจ il linguaggio di un modello, i punti sono l'alfabeto. I punti sono la base su cui vengono create tutte le altre geometrie: sono necessari almeno due punti per creare una curva, almeno tre punti per creare un poligono o una faccia della mesh e cosรฌ via. La definizione della posizione, dell'ordine e della relazione tra i punti (provare una funzione seno) consente di definire una geometria di ordine piรน alto, ad esempio oggetti riconosciuti come cerchi o curve.
Un cerchio che utilizza le funzioni
x=r*cos(t)ey=r*sin(t)Una curva seno che utilizza le funzioni
x=(t)ey=r*sin(t)
I punti possono esistere anche in un sistema di coordinate bidimensionale. La convenzione ha una notazione di lettere diversa a seconda del tipo di spazio impiegato. ร possibile che si stia utilizzando [X,Y] su un piano o [U,V] se si รจ su una superficie.
Un punto nel sistema di coordinate euclideo: [X,Y,Z]
Un punto in un sistema di coordinate di parametri delle curve: [t]
Un punto in un sistema di coordinate di parametri delle superfici: [U,V]
L'analogia bidimensionale con una NurbsCurve รจ la NurbsSurface e, come la NurbsCurve di forma libera, le NurbsSurface possono essere costruite con due metodi di base: l'inserimento di un insieme di punti base con l'interpolazione di Dynamo tra di essi e l'indicazione esplicita dei punti di controllo della superficie. Come per le curve a mano libera, le superfici interpolate sono utili quando un progettista conosce con precisione la forma che una superficie deve assumere o se un progetto richiede che la superficie attraversi punti di vincolo. Dall'altra parte, le superfici create mediante punti di controllo possono essere piรน utili per la progettazione esplorativa in diversi livelli di levigatezza.
Per creare una superficie interpolata, รจ sufficiente generare una raccolta bidimensionale di punti che si avvicinano alla forma di una superficie. La raccolta deve essere rettangolare, ovvero non irregolare. Il metodo NurbsSurface.ByPoints costruisce una superficie da questi punti.
Le NurbsSurface di forma libera possono essere create anche specificando i punti di controllo sottostanti di una superficie. Come per le NurbsCurve, i punti di controllo possono essere considerati come la rappresentazione di una mesh quadrilatera con segmenti retti, che, a seconda del grado della superficie, viene levigata nella forma della superficie finale. Per creare una NurbsSurface tramite punti di controllo, includere due parametri aggiuntivi a NurbsSurface.ByPoints, indicando i gradi delle curve sottostanti in entrambe le direzioni della superficie.
ร possibile aumentare il grado della NurbsSurface per modificare la geometria della superficie risultante:
Cosรฌ come รจ possibile creare le superfici interpolando un insieme di punti di input, รจ possibile crearle interpolando un insieme di curve di base. Questa procedura รจ denominata loft. Viene creata una curva di loft utilizzando il costruttore Surface.ByLoft, con una raccolta di curve di input come unico parametro.
Le superfici di rivoluzione sono un tipo aggiuntivo di superficie creato tramite l'estrusione di una curva di base attorno ad un asse centrale. Se le superfici interpolate sono l'analogia bidimensionale con le curve interpolate, le superfici di rivoluzione sono l'analogia bidimensionale con i cerchi e gli archi.
Le superfici di rivoluzione sono specificate da una curva di base, che rappresenta lo "spigolo" della superficie; l'origine di un asse, il punto base della superficie; la direzione di un asse, la direzione centrale; un angolo iniziale di sweep e un angolo finale di sweep. Questi vengono utilizzati come input per il costruttore Surface.Revolve.
I seguenti script Python generano serie di punti per diversi esempi. ร necessario incollarli in un nodo Python Script come segue:
!
python_points_1
out_points = []
for i in range(11):
sub_points = []
for j in range(11):
z = 0
if (i == 5 and j == 5):
z = 1
elif (i == 8 and j == 2):
z = 1
sub_points.append(Point.ByCoordinates(i, j, z))
out_points.append(sub_points)
OUT = out_pointspython_points_2
out_points = []
for i in range(11):
z = 0
if (i == 2):
z = 1
out_points.append(Point.ByCoordinates(i, 0, z))
OUT = out_pointspython_points_3
out_points = []
for i in range(11):
z = 0
if (i == 7):
z = -1
out_points.append(Point.ByCoordinates(i, 5, z))
OUT = out_pointspython_points_4
python_points_5
ร stato appena creato un nodo personalizzato ed รจ stato applicato ad un processo specifico nel grafico di Dynamo. E dato che questo nodo รจ ben riuscito, si desidera mantenerlo nella libreria di Dynamo come riferimento in altri grafici. Per eseguire questa operazione, il nodo verrร pubblicato localmente. Questo รจ un processo simile alla pubblicazione di un pacchetto, che sarร esaminata piรน in dettaglio nel prossimo capitolo.
Se si pubblica un nodo localmente, questo sarร accessibile nella libreria di Dynamo quando si apre una nuova sessione. Senza pubblicare un nodo, un grafico di Dynamo che fa riferimento ad un nodo personalizzato deve anche contenere tale nodo personalizzato nella relativa cartella (o il nodo personalizzato deve essere importato in Dynamo utilizzando File > Importa libreria).
ร possibile pubblicare nodi e pacchetti personalizzati da Dynamo Sandbox nella versione 2.17 e successive, purchรฉ non presentino dipendenze API host. Nelle versioni precedenti, la pubblicazione di nodi e pacchetti personalizzati รจ abilitata solo in Dynamo for Revit e Dynamo for Civil 3D.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Procedere con il nodo personalizzato creato nella sezione precedente. Una volta aperto il nodo personalizzato PointsToSurface, viene visualizzato il grafico nell'Editor nodi personalizzati di Dynamo. ร inoltre possibile aprire un nodo personalizzato facendovi doppio clic nell'editor dei grafici di Dynamo.
!
Per pubblicare un nodo personalizzato localmente, รจ sufficiente fare clic con il pulsante destro del mouse sull'area di disegno e selezionare Pubblica questo nodo personalizzato.
!
Compilare le informazioni pertinenti simili a quelle mostrate nell'immagine riportata sopra e selezionare Pubblica localmente. Notare che il campo Gruppo (facoltativo) definisce l'elemento principale accessibile dal menu di Dynamo.
Scegliere una cartella in cui memorizzare tutti i nodi personalizzati che si prevede di pubblicare localmente. In Dynamo viene controllata questa cartella ad ogni caricamento del programma, quindi verificare che si trovi in una posizione permanente. Individuare la cartella e scegliere Seleziona cartella. Il nodo di Dynamo viene ora pubblicato localmente e rimarrร nella libreria di Dynamo ogni volta che si carica il programma.
!
Per verificare il percorso della cartella dei nodi personalizzati, accedere a Dynamo > Preferenze > Impostazioni pacchetto > Percorsi di nodi e pacchetti.
In questa finestra viene visualizzato un elenco di percorsi.
Documents\DynamoCustomNodes... si riferisce alla posizione dei nodi personalizzati pubblicati localmente.
AppData\Roaming\Dynamo... si riferisce alla posizione di default dei pacchetti di Dynamo installati in linea.
ร possibile spostare il percorso della cartella locale in basso nell'ordine dell'elenco (facendo clic sul percorso sulla freccia giรน a sinistra dei nomi dei percorsi). La cartella superiore รจ il percorso di default per le installazioni di pacchetti. Pertanto, se si mantiene il percorso di installazione di default del pacchetto di Dynamo come cartella di default, i pacchetti in linea verranno separati dai nodi pubblicati localmente.
ร stato cambiato l'ordine dei nomi dei percorsi in modo da avere il percorso di default di Dynamo come posizione di installazione del pacchetto.
Accedendo a questa cartella locale, รจ possibile trovare il nodo personalizzato originale nella cartella dyf, che รจ l'estensione del file di un nodo personalizzato di Dynamo. Si puรฒ modificare il file in questa cartella e il nodo verrร aggiornato nell'interfaccia utente. ร inoltre possibile aggiungere altri nodi alla cartella DynamoCustomNodes principale. In Dynamo verranno aggiunti alla libreria al riavvio.
!
Dynamo ora viene caricato ogni volta con PointsToSurface nel gruppo DynamoPrimer della libreria di Dynamo.
!
Formalmente, una stringa รจ una sequenza di caratteri che rappresenta una costante letterale o un tipo di variabile. Informalmente, una stringa sta programmando un linguaggio per il testo. Sono stati utilizzati i numeri, sia interi che decimali, per determinare i parametri ed รจ possibile fare lo stesso con il testo.
In Dynamo vi sono due metodi fondamentali per creare curve di forma libera: la specifica di una raccolta di punti e l'impostazione del programma in modo che venga interpolata una curva levigata tra di essi oppure esiste un metodo di livello molto piรน basso, ossia specificare i punti di controllo sottostanti di una curva di un determinato grado. Le curve interpolate sono utili quando un progettista sa esattamente la forma che deve assumere una linea o se il progetto ha vincoli specifici per il punto in cui la curva puรฒ e non puรฒ attraversare. Le curve specificate tramite i punti di controllo sono essenzialmente una serie di segmenti di linee rette che un algoritmo leviga in una forma di curva finale. Specificare una curva tramite punti di controllo puรฒ essere utile per esplorare forme di curva con diversi gradi di levigatezza o quando รจ necessaria una continuitร uniforme tra segmenti di curva.
Ora che si sa un po' di piรน sul quadro generale, รจ possibile iniziare subito a creare il primo grafico di Dynamo in Civil 3D.
Questo รจ un semplice esempio che serve a dimostrare le funzionalitร di base di Dynamo. Si consiglia di eseguire i passaggi descritti in un nuovo documento vuoto di Civil 3D.
!
Dynamo per Revit estende il Building Information Modeling (BIM) con l'ambiente di dati e logica di un editor di algoritmi grafici. La sua flessibilitร , abbinata ad un solido database di Revit, offre una nuova prospettiva per il BIM.
Questo capitolo si concentra sui workflow di Dynamo per il BIM. Le sezioni sono principalmente basate sugli esercizi, poichรฉ il passaggio diretto ad un progetto รจ il modo migliore per acquisire familiaritร con un editor di algoritmi grafici per il BIM. Ma occorre prima parlare degli inizi del programma.
Dynamo Mesh Toolkit fornisce strumenti per importare mesh da formati di file esterni, creare mesh da oggetti della geometria di Dynamo e generare manualmente mesh in base ai vertici e agli indici. La libreria fornisce inoltre strumenti per modificare e correggere mesh o estrarre sezioni orizzontali da utilizzare nella fabbricazione.
!
Dynamo Mesh Toolkit fa parte del costante programma di ricerca sulle mesh di Autodesk e, come tale, continuerร a crescere nei prossimi anni. Si prevede di aggiungere frequentemente nuovi metodi nel toolkit e pertanto gli utenti sono invitati a contattare il team di Dynamo per eventuali commenti, bug e suggerimenti per le nuove funzionalitร .
Dynamo offre diversi modi per creare un pacchetto per l'utilizzo personale o per la condivisione con la comunitร di Dynamo. Nel case study riportato di seguito, si esaminerร in maniera dettagliata la configurazione di un pacchetto smontandone uno esistente. Questo case study si basa sulle lezioni del capitolo precedente, fornendo un gruppo di nodi personalizzati per il mappaggio della geometria, tramite le coordinate UV, da una superficie di Dynamo ad un'altra.
Si utilizzerร un pacchetto di esempio che mostra il mappaggio UV di punti da una superficie ad un'altra. Sono giร stati illustrati i principi fondamentali dello strumento nella sezione di questa guida introduttiva. I file riportati di seguito mostrano com'รจ possibile prendere il concetto di mappaggio UV e sviluppare un set di strumenti per una libreria pubblicabile.
Nelle sezioni precedenti, sono stati analizzati i dettagli su come il pacchetto MapToSurface รจ configurato con nodi personalizzati e file di esempio. Ma com'รจ possibile pubblicare un pacchetto che รจ stato sviluppato localmente? Questo case study mostra come pubblicare un pacchetto da un gruppo di file in una cartella locale.
!
Esistono diversi modi per pubblicare un pacchetto. Di seguito รจ riportato il processo consigliato: pubblicare localmente, sviluppare localmente, quindi pubblicare in linea. Si inizierร con una cartella contenente tutti i file del pacchetto.
La geometria รจ il linguaggio per la progettazione. Quando un ambiente o un linguaggio di programmazione ha un kernel geometrico alla base, si possono sfruttare le possibilitร di progettazione di modelli precisi ed efficienti, di automazione delle routine di progettazione e di generazione delle iterazioni di progettazione con algoritmi.
La comprensione dei tipi di geometria e della consente di spostarsi all'interno della raccolta di nodi della geometria disponibili nella libreria. I nodi della geometria sono organizzati in ordine alfabetico, anzichรฉ gerarchico. Qui vengono visualizzati in modo simile al loro layout nell'interfaccia di Dynamo.
L'oggetto geometrico piรน semplice nella libreria della geometria standard di Dynamo รจ un punto. Tutta la geometria viene creata utilizzando funzioni speciali denominate costruttori, i quali singolarmente restituiscono una nuova istanza di quel particolare tipo di geometria. In Dynamo, i costruttori iniziano con il nome del tipo di oggetto, in questo caso Point, seguito dal metodo di costruzione. Per creare un punto tridimensionale specificato dalle coordinate cartesiane x, y e z, utilizzare il costruttore ByCoordinates:
In Dynamo, i costruttori vengono in genere designati con il prefisso By e il richiamo di queste funzioni restituisce un oggetto appena creato di quel tipo. Questo oggetto appena creato viene memorizzato nella variabile indicata sul lato sinistro del segno di uguale.
Gli oggetti nelle progettazioni computazionali raramente vengono creati esplicitamente nella loro posizione e nella loro forma finali e piรน spesso vengono traslati, ruotati e altrimenti posizionati in base alla geometria esistente. La matematica vettoriale serve come una sorta di impalcatura geometrica per dare direzione e orientamento alla geometria, nonchรฉ per concettualizzare i movimenti attraverso lo spazio 3D senza rappresentazione visiva.
Fondamentalmente, un vettore rappresenta una posizione nello spazio 3D e spesso viene considerato come il punto finale di una freccia dalla posizione (0, 0, 0) a quella posizione. I vettori possono essere creati con il costruttore ByCoordinates, utilizzando la posizione x, y e z dell'oggetto vettoriale appena creato. Notare che gli oggetti vettoriali non sono oggetti geometrici e non compaiono nella finestra di Dynamo. Tuttavia, le informazioni relative ad un vettore appena creato o modificato possono essere stampate nella finestra della console:
!
Un insieme di operazioni matematiche viene definito sugli oggetti vettoriali, consentendo di aggiungere, sottrarre, moltiplicare e altrimenti spostare oggetti nello spazio 3D, come si sposterebbero numeri reali nello spazio 1D su una linea numerica.
out_points = []
for i in range(11):
z = 0
if (i == 5):
z = 1
out_points.append(Point.ByCoordinates(i, 10, z))
OUT = out_pointsScorrere il pulsante centrale del mouse su/giรน - Zoom avanti/indietro
Fare clic con il pulsante centrale del mouse e trascinare - Panoramica
Fare clic con il pulsante destro del mouse in un punto qualsiasi dell'area di disegno - Aprire la casella di ricerca nell'area di disegno
Le stringhe possono essere utilizzate per una vasta gamma di applicazioni, tra cui la definizione di parametri personalizzati, l'annotazione di gruppi di documentazione e l'analisi tramite set di dati basati su testo. Il nodo String si trova in Core > Input Category.
I nodi di esempio riportati sopra sono stringhe. Un numero puรฒ essere rappresentato come una stringa, una lettera o un'intera matrice di testo.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
ร possibile analizzare una grande quantitร di dati rapidamente eseguendo una query sulle stringhe. Saranno descritte alcune operazioni di base che possono accelerare un workflow e aiutare ad ottenere l'interoperabilitร del software.
Nell'immagine riportata di seguito รจ mostrata una stringa di dati proveniente da un foglio di calcolo esterno. La stringa rappresenta i vertici di un rettangolo nel piano XY. Si eseguiranno alcune operazioni di divisione delle stringhe nel mini-esercizio:
!
Il separatore ";" divide ogni vertice del rettangolo. In questo modo viene creato un elenco con 3 voci per ogni vertice.
!
Premendo il pulsante "+" al centro del nodo, si crea un nuovo separatore.
Aggiungere una stringa "," all'area di disegno e collegarla all'input del nuovo separatore.
Il risultato รจ ora un elenco di dieci voci. Il nodo viene prima diviso in base a separator0, quindi in base a separator1.
Sebbene possa sembrare che l'elenco di voci riportato sopra contenga numeri, tali elementi vengono comunque considerati come singole stringhe in Dynamo. Per creare punti, รจ necessario convertire il tipo di dati da una stringa in un numero. Questa operazione viene eseguita con il nodo String.ToNumber.
!
Questo nodo รจ semplice. Collegare i risultati di String.Split all'input. L'output non risulta diverso, ma il tipo di dati รจ ora un numero anzichรฉ una stringa.
Con alcune operazioni aggiuntive di base, ora si dispone di un triangolo disegnato in corrispondenza dell'origine in base all'input di stringa originale.
!
Poichรฉ una stringa รจ un oggetto di testo generico, ospita un'ampia gamma di applicazioni. Si esamineranno alcune delle principali azioni in Core > String Category in Dynamo:
Questo metodo consente di unire insieme due stringhe in ordine. In questo modo, si acquisisce ogni stringa letterale in un elenco e si crea una stringa unita.
Nell'immagine seguente รจ rappresentata la concatenazione di tre stringhe:
Aggiungere o sottrarre stringhe alla concatenazione facendo clic sui pulsanti +/- al centro del nodo.
L'output fornisce una stringa concatenata, con spazi e segni di punteggiatura inclusi.
Il metodo di unione รจ molto simile a quello della concatenazione, tranne per il fatto che presenta un livello aggiunto di punteggiatura.
Se รจ stato utilizzato Excel, รจ possibile che sia stato notato un file CSV. Questo รจ l'acronimo di Comma Separated Values, ossia valori separati da virgola. Per creare una struttura dei dati simile, si potrebbe utilizzare una virgola (o in questo caso, due trattini) come separatore con il nodo String.Join.
Nell'immagine seguente รจ rappresentata l'unione di due stringhe:
!
L'input separator consente di creare una stringa che divide le stringhe unite.
In questo esercizio, si utilizzeranno i metodi di esecuzione delle query e manipolazione delle stringhe per analizzare l'ultima strofa di Fermandosi accanto a un bosco in una sera di neve di Robert Frost. Non รจ l'applicazione piรน pratica, ma aiuterร a cogliere le azioni concettuali delle stringhe mentre vengono applicate alle righe leggibili di ritmo e rima.
Iniziare con una stringa di base divisa della strofa. Si noti innanzitutto che la scrittura รจ formattata in base alle virgole. Questo formato verrร utilizzato per separare ogni riga in singoli elementi.
!
La stringa di base viene incollata in un nodo String.
Un altro nodo String viene utilizzato per indicare il separatore. In questo caso, si utilizza una virgola.
Un nodo String.Split viene aggiunto all'area di disegno e collegato alle due stringhe.
L'output ora mostra che le righe sono state separate in singoli elementi.
Ora, viene la parte interessante della poesia: le ultime due righe. La strofa originale era un elemento di dati. Questi dati sono stati separati in singoli elementi nel primo passaggio. Ora occorre cercare il testo in questione. E sebbene sia possibile farlo selezionando le ultime due voci dell'elenco, se si trattasse di un intero libro, non si vorrebbe leggere tutto e isolare manualmente gli elementi.
!
Invece di cercare manualmente, utilizzare un nodo String.Contains per eseguire una ricerca di un set di caratteri. Questa operazione รจ simile all'esecuzione del comando "Trova" in un elaboratore di testi. In questo caso, se all'interno della voce viene trovata una sottostringa, viene restituito "true" o "false".
Nell'input searchFor, definire una sottostringa che si sta cercando all'interno della strofa. Utilizzare un nodo String con il testo "And miles".
L'output fornisce un elenco di false e true. Questa logica booleana verrร utilizzata per filtrare gli elementi nel passaggio successivo.
List.FilterByBoolMask รจ il nodo che si desidera utilizzare per escludere false e true. L'output "in" restituisce le istruzioni con un input "mask" di "true", mentre l'output "out" restituisce quelle che sono "false".
L'output di "in" รจ come previsto e fornisce le due righe finali della strofa.
Ora, si desidera enfatizzare la ripetizione della strofa unendo insieme le due righe. Quando si visualizza l'output del passaggio precedente, si noterร che nell'elenco sono presenti due voci:
!
Utilizzando due nodi List.GetItemAtIndex, รจ possibile isolare le voci utilizzando i valori di 0 e 1 come l'input index.
L'output per ogni nodo fornisce, in ordine, le due righe finali.
Per unire questi due voci in una, utilizzare il nodo String.Join:
Dopo aver aggiunto il nodo String.Join, si noterร che รจ necessario un separatore.
Per creare il separatore, aggiungere un nodo String all'area di disegno e digitare una virgola.
L'output finale ha unito le ultime due voci in un unico elemento.
Puรฒ sembrare complesso isolare le ultime due righe ed รจ vero, perchรฉ le operazioni di stringa spesso richiedono un lavoro iniziale. Ma sono scalabili e possono essere applicate a set di dati di grandi dimensioni con relativa facilitร . Se si lavora in modo parametrico con fogli di calcolo e interoperabilitร , assicurarsi di tenere a mente le operazioni di stringa.
Ellisse
Curva NURBS
PolyCurve
Chiudi Dynamo.
Sito Web di Dynamo: รจ un sito Web per informazioni su Dynamo e collegamenti a risorse quali il forum, il blog e cosรฌ via.
Repository di Dynamo: consente di visualizzare il progetto di Dynamo su GitHub.
Wiki progetto di Dynamo: consente di visitare la pagina Wiki per informazioni sullo sviluppo mediante l'API di Dynamo, gli strumenti e le librerie di supporto.
Visualizza pagina iniziale: consente di tornare alla pagina iniziale di Dynamo quando ci si trova all'interno di un documento.
Segnala un bug: consente di aprire un problema in GitHub.
! Ripeti: consente di ripetere l'azione successiva.
! Esporta area di lavoro come immagine: consente di esportare l'area di lavoro visibile come file PNG.

Se si dispone di Revit 2025, installare il pacchetto DynamoForma.
Se si dispone di Civil 3D 2025, installare il pacchetto DynamoForma.
Eseguire DynamoSandbox.exe dalla cartella di installazione Dynamo.
In Dynamo, installare il pacchetto DynamoForma. Accedere a Pacchetti > Package Manager, quindi cercare DynamoForma.
Se si dispone di Dynamo 2.x, installare il pacchetto DynamoForma per 2.x.
Se si dispone di Dynamo 3.x, installare il pacchetto DynamoForma.
Non riconosce un grafico giร aperto in Dynamo
Aprire un grafico in Player aperto in Dynamo facendo clic con un solo clic
Non puรฒ utilizzare Python
Puรฒ utilizzare Python
Puรฒ utilizzare solo pacchetti approvati
Puรฒ utilizzare qualsiasi pacchetto







2.13
Aggiornamento dell'interfaccia utente di Dynamo
2022.1
2.12
Aggiunte le impostazioni Archivio dati di unione per gli oggetti
Nuovi nodi per il controllo dell'unione di oggetti
2022
2.10
Inclusione nell'installazione principale di Civil 3D
Transizione da IronPython a Python.NET
2021
2.5
2020.2
2.4
2020 Update 2
2.4
Nuovi nodi aggiunti
2020.1
2.2
2020
2.1
Rilascio iniziale
2024.1
2.18
2024
2.17
Aggiornamento dell'interfaccia utente del Lettore Dynamo
2023.2
2.15



2023
Inoltre, la realizzazione di modelli in Dynamo e la connessione dell'anteprima di ciรฒ che viene visualizzato nell'anteprima sfondo al flusso di dati nel grafico dovrebbero diventare piรน intuitive nel tempo.
!
Si noti il sistema di coordinate presunto sottoposto a rendering mediante griglia e assi colorati.
I nodi selezionati eseguiranno il rendering della geometria corrispondente (se il nodo crea la geometria) nel colore di evidenziazione dello sfondo.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
La geometria, tradizionalmente definita, รจ lo studio della forma, della dimensione, della posizione relativa delle figure e delle proprietร dello spazio. Questo campo ha una ricca storia che risale a migliaia di anni fa. Con l'avvento e la diffusione del computer, si รจ ottenuto un potente strumento per definire, esplorare e generare la geometria. ร ora cosรฌ semplice calcolare il risultato di interazioni geometriche complesse; il fatto che lo stiamo facendo รจ quasi trasparente.
Se si รจ curiosi di vedere come la geometria complessa e diversificata possa utilizzare la potenza del computer, eseguire una rapida ricerca sul Web del coniglio Stanford, un modello canonico utilizzato per testare gli algoritmi.
La comprensione della geometria nel contesto di algoritmi, elaborazione e complessitร puรฒ sembrare scoraggiante; tuttavia, esistono alcuni principi chiave, relativamente semplici, che si possono stabilire come concetti fondamentali per iniziare a creare applicazioni piรน avanzate:
La geometria riguarda dati: per il computer e Dynamo, un coniglio non รจ poi cosรฌ diverso da un numero.
La geometria si basa sull'astrazione: fondamentalmente, gli elementi geometrici sono descritti da numeri, relazioni e formule all'interno di un determinato sistema di coordinate spaziali.
La geometria ha una gerarchia: i punti sono uniti per creare linee, le linee si uniscono per creare superfici e cosรฌ via.
La geometria descrive contemporaneamente sia la parte che il tutto: quando si ha una curva, รจ sia la forma che tutti i punti possibili lungo di essa.
In pratica, questi principi implicano che bisogna essere consapevoli di ciรฒ che si sta utilizzando (quale tipo di geometria, com'รจ stata creata, ecc.) in modo da poter comporre, scomporre e ricomporre in modo fluido diverse geometrie durante lo sviluppo di modelli piรน complessi.
Sarร esaminata la relazione tra le descrizioni astratte e gerarchiche della geometria. Poichรฉ questi due concetti sono correlati, ma non sempre ovvi all'inizio, รจ possibile arrivare rapidamente ad una barriera concettuale quando si iniziano a sviluppare modelli o workflow piรน profondi. Per i principianti, verrร utilizzata la dimensionalitร come un facile descrittore del "materiale" che si modella. Il numero di dimensioni necessarie per descrivere una forma offre una finestra che mostra come la geometria รจ organizzata gerarchicamente.
Un punto (definito dalle coordinate) non ha dimensioni; sono solo numeri che descrivono ogni coordinata.
Una linea (definita da due punti) ora presenta una dimensione: รจ possibile "percorrere" la linea in avanti (direzione positiva) o all'indietro (direzione negativa).
Un piano (definito da due linee) presenta due dimensioni: ora รจ possibile passeggiare piรน a sinistra o piรน a destra.
Un parallelepipedo (definito da due piani) ha tre dimensioni: รจ possibile definire una posizione rispetto all'alto o al basso.
La dimensionalitร รจ un metodo comodo per iniziare a classificare la geometria, ma non รจ necessariamente il migliore. Dopotutto, non si modellano solo con punti, linee, piani e parallelepipedi. E se si desidera qualcosa di curvo? Inoltre, esiste un'altra categoria di tipi geometrici che sono completamente astratti, ossia definiscono proprietร quali l'orientamento, il volume o le relazioni tra le parti. Non รจ possibile afferrare un vettore in modo da definirlo rispetto a ciรฒ che viene visualizzato nello spazio? Una categorizzazione piรน dettagliata della gerarchia geometrica dovrebbe riflettere la differenza tra tipi astratti o "helper", ognuno dei quali puรฒ essere raggruppato in base alle operazioni che essi consentono di fare e ai tipi che consentono di descrivere la forma degli elementi del modello.
La creazione di modelli in Dynamo non รจ limitata a ciรฒ che รจ possibile generare con i nodi. Di seguito sono riportati alcuni metodi chiave per portare il processo al livello successivo con la geometria:
Dynamo consente di importare file. Provare ad utilizzare un file CSV per le nuvole di punti o un file SAT per l'importazione di superfici.
Quando si utilizza Revit, รจ possibile fare riferimento ad elementi di Revit da utilizzare in Dynamo.
Dynamo Package Manager offre funzionalitร aggiuntive per le operazioni e i tipi di geometria estesi. Visitare la pagina sul pacchetto Mesh Toolkit.

out_points = []
for i in range(11):
sub_points = []
for j in range(11):
z = 0
if (i == 1 and j == 1):
z = 2
elif (i == 8 and j == 1):
z = 2
elif (i == 2 and j == 6):
z = 2
sub_points.append(Point.ByCoordinates(i, j, z))
out_points.append(sub_points)
OUT = out_pointsLa curva generata interseca ciascuno dei punti di input, iniziando e terminando rispettivamente nel primo e nell'ultimo punto della raccolta. ร possibile utilizzare un parametro periodico facoltativo per creare una curva periodica chiusa. Dynamo inserirร automaticamente il segmento mancante, pertanto non รจ necessario un punto finale duplicato (identico al punto iniziale).
Le NurbsCurve vengono generate in modo molto simile, con i punti di input che rappresentano i punti finali di un segmento di linea retta e un secondo parametro che specifica il livello e il tipo di levigatezza a cui รจ sottoposta la curva, denominati grado.* Una curva di grado 1 non ha alcuna levigatezza; รจ una polilinea.
Una curva di grado 2 viene levigata in modo che si intersechi ed รจ tangente al punto medio dei segmenti della polilinea:
Dynamo supporta curve NURBS (Non-Uniform Rational B-Spline) fino ad un massimo di 20 gradi. Nel seguente script รจ illustrato l'effetto che l'aumento dei livelli di levigatezza ha sulla forma di una curva:
Notare che รจ necessario disporre di almeno un altro punto di controllo rispetto al grado della curva.
Un altro vantaggio della costruzione delle curve tramite vertici di controllo รจ la possibilitร di mantenere la tangenza tra singoli segmenti della curva. Per eseguire questa operazione, estrarre la direzione tra gli ultimi due punti di controllo e continuare in questa direzione con i primi due punti di controllo della curva seguente. Nel seguente esempio vengono create due curve NURBS separate, che sono tuttavia levigate come una curva:
*Questa รจ una descrizione molto semplificata della geometria della curva NURBS. Per una descrizione piรน accurata e dettagliata, vedere Pottmann, et al, 2007, nei riferimenti.
La maggior parte degli oggetti ha molti differenti costruttori ed รจ possibile utilizzare il costruttore BySphericalCoordinates per creare un punto su una sfera, specificato dal raggio della sfera, un primo angolo di rotazione e un secondo angolo di rotazione (specificato in gradi):
I punti possono essere utilizzati per costruire la geometria dimensionale maggiore, come le linee. ร possibile utilizzare il costruttore ByStartPointEndPoint per creare un oggetto Line tra due punti:
Analogamente, le linee possono essere utilizzate per creare la geometria di superfici dimensionale maggiore, ad esempio utilizzando il costruttore Loft, che utilizza una serie di linee o curve e interpola una superficie tra loro.
ร possibile utilizzare anche superfici per creare la geometria di solidi dimensionale maggiore, ad esempio mediante l'ispessimento della superficie in base ad una distanza specificata. Molti oggetti hanno funzioni associate, denominate metodi, che consentono al programmatore di eseguire comandi su quel particolare oggetto. I metodi comuni a tutti gli elementi della geometria includono Translate e Rotate, che rispettivamente traslano (spostano) e ruotano la geometria di un valore specificato. Le superfici hanno un metodo Thicken, che acquisisce un singolo input, un numero che specifica il nuovo spessore della superficie.
I comandi Intersection consentono di estrarre la geometria dimensionale minore da oggetti dimensionali maggiori. Questa geometria dimensionale minore estratta puรฒ formare la base per la geometria dimensionale maggiore, in un processo ciclico di creazione, estrazione e ricreazione geometriche. In questo esempio, si utilizzerร il solido generato per creare una superficie e si utilizzerร la superficie per creare una curva.
L'addizione vettoriale รจ definita come la somma dei componenti di due vettori e puรฒ essere considerata come il vettore risultante se le frecce dei componenti dei due vettori vengono posizionate "dalla punta alla coda". L'addizione vettoriale viene eseguita con il metodo Add ed รจ rappresentata dal diagramma a sinistra.
Analogamente, due oggetti vettoriali possono essere sottratti l'uno dall'altro con il metodo Subtract. La sottrazione vettore puรฒ essere considerata come direzione dal primo vettore al secondo vettore.
La moltiplicazione vettoriale puรฒ essere considerata come lo spostamento del punto finale di un vettore nella sua direzione mediante un determinato fattore di scala.
Spesso รจ necessario durante la messa in scala di un vettore avere la lunghezza del vettore risultante esattamente uguale al valore in scala. Ciรฒ si ottiene facilmente normalizzando prima un vettore, in altre parole impostando la lunghezza del vettore esattamente uguale ad uno.
!
c punta ancora nella stessa direzione di a (1, 2, 3), anche se ora ha una lunghezza esattamente uguale a 5.
Nella matematica vettoriale esistono due metodi di addizione che non hanno paralleli chiari con la matematica 1D, il prodotto incrociato e il prodotto punto. Il prodotto incrociato รจ un mezzo per generare un vettore ortogonale (a 90 gradi) rispetto a due vettori esistenti. Ad esempio, il prodotto incrociato degli assi x e y รจ l'asse x, sebbene i due vettori di input non debbano essere ortogonali tra loro. Viene calcolato un vettore del prodotto incrociato con il metodo Cross.
Un'ulteriore funzione, sebbene piรน avanzata di matematica vettoriale, รจ il prodotto punto. Il prodotto punto tra due vettori รจ un numero reale (non un oggetto Vector) che รจ correlato, ma non รจ esattamente, all'angolo tra due vettori. Una delle proprietร utili del prodotto punto รจ che il prodotto punto tra due vettori sarร 0 se e solo se sono perpendicolari. Il prodotto punto viene calcolato con il metodo Dot.
!
// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10
surf = NurbsSurface.ByPoints(python_points_1);// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10
// create a surface of degree 2 with smooth segments
surf = NurbsSurface.ByPoints(python_points_1, 2, 2);// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10
// create a surface of degree 6
surf = NurbsSurface.ByPoints(python_points_1, 6, 6);// python_points_2, 3, and 4 are generated with
// Python scripts found in Chapter 12, Section 10
c1 = NurbsCurve.ByPoints(python_points_2);
c2 = NurbsCurve.ByPoints(python_points_3);
c3 = NurbsCurve.ByPoints(python_points_4);
loft = Surface.ByLoft([c1, c2, c3]);pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(3, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(5, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);
pts[7] = Point.ByCoordinates(4, 0, 7);
crv = NurbsCurve.ByPoints(pts);
axis_origin = Point.ByCoordinates(0, 0, 0);
axis = Vector.ByCoordinates(0, 0, 1);
surf = Surface.ByRevolve(crv, axis_origin, axis, 0,
360);num_pts = 6;
s = Math.Sin(0..360..#num_pts) * 4;
pts = Point.ByCoordinates(1..30..#num_pts, s, 0);
int_curve = NurbsCurve.ByPoints(pts);pts = Point.ByCoordinates(Math.Cos(0..350..#10),
Math.Sin(0..350..#10), 0);
// create an closed curve
crv = NurbsCurve.ByPoints(pts, true);
// the same curve, if left open:
crv2 = NurbsCurve.ByPoints(pts.Translate(5, 0, 0),
false);num_pts = 6;
pts = Point.ByCoordinates(1..30..#num_pts,
Math.Sin(0..360..#num_pts) * 4, 0);
// a B-Spline curve with degree 1 is a polyline
ctrl_curve = NurbsCurve.ByControlPoints(pts, 1);num_pts = 6;
pts = Point.ByCoordinates(1..30..#num_pts,
Math.Sin(0..360..#num_pts) * 4, 0);
// a B-Spline curve with degree 2 is smooth
ctrl_curve = NurbsCurve.ByControlPoints(pts, 2);num_pts = 6;
pts = Point.ByCoordinates(1..30..#num_pts,
Math.Sin(0..360..#num_pts) * 4, 0);
def create_curve(pts : Point[], degree : int)
{
return = NurbsCurve.ByControlPoints(pts,
degree);
}
ctrl_crvs = create_curve(pts, 1..11);pts_1 = {};
pts_1[0] = Point.ByCoordinates(0, 0, 0);
pts_1[1] = Point.ByCoordinates(1, 1, 0);
pts_1[2] = Point.ByCoordinates(5, 0.2, 0);
pts_1[3] = Point.ByCoordinates(9, -3, 0);
pts_1[4] = Point.ByCoordinates(11, 2, 0);
crv_1 = NurbsCurve.ByControlPoints(pts_1, 3);
pts_2 = {};
pts_2[0] = pts_1[4];
end_dir = pts_1[4].Subtract(pts_1[3].AsVector());
pts_2[1] = Point.ByCoordinates(pts_2[0].X + end_dir.X,
pts_2[0].Y + end_dir.Y, pts_2[0].Z + end_dir.Z);
pts_2[2] = Point.ByCoordinates(15, 1, 0);
pts_2[3] = Point.ByCoordinates(18, -2, 0);
pts_2[4] = Point.ByCoordinates(21, 0.5, 0);
crv_2 = NurbsCurve.ByControlPoints(pts_2, 3);// create a point with the following x, y, and z
// coordinates:
x = 10;
y = 2.5;
z = -6;
p = Point.ByCoordinates(x, y, z);// create a point on a sphere with the following radius,
// theta, and phi rotation angles (specified in degrees)
radius = 5;
theta = 75.5;
phi = 120.3;
cs = CoordinateSystem.Identity();
p = Point.BySphericalCoordinates(cs, radius, theta,
phi);// create two points:
p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);
// construct a line between p1 and p2
l = Line.ByStartPointEndPoint(p1, p2);// create points:
p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);
p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);
p5 = Point.ByCoordinates(9, -10, -2);
p6 = Point.ByCoordinates(-11, -12, -4);
// create lines:
l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);
l3 = Line.ByStartPointEndPoint(p5, p6);
// loft between cross section lines:
surf = Surface.ByLoft([l1, l2, l3]);p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);
p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);
l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);
surf = Surface.ByLoft([l1, l2]);
// true indicates to thicken both sides of the Surface:
solid = surf.Thicken(4.75, true);p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);
p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);
l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);
surf = Surface.ByLoft([l1, l2]);
solid = surf.Thicken(4.75, true);
p = Plane.ByOriginNormal(Point.ByCoordinates(2, 0, 0),
Vector.ByCoordinates(1, 1, 1));
int_surf = solid.Intersect(p);
int_line = int_surf.Intersect(Plane.ByOriginNormal(
Point.ByCoordinates(0, 0, 0),
Vector.ByCoordinates(1, 0, 0)));// construct a Vector object
v = Vector.ByCoordinates(1, 2, 3);
s = v.X + " " + v.Y + " " + v.Z;a = Vector.ByCoordinates(5, 5, 0);
b = Vector.ByCoordinates(4, 1, 0);
// c has value x = 9, y = 6, z = 0
c = a.Add(b);a = Vector.ByCoordinates(5, 5, 0);
b = Vector.ByCoordinates(4, 1, 0);
// c has value x = 1, y = 4, z = 0
c = a.Subtract(b);a = Vector.ByCoordinates(4, 4, 0);
// c has value x = 20, y = 20, z = 0
c = a.Scale(5);a = Vector.ByCoordinates(1, 2, 3);
a_len = a.Length;
// set the a's length equal to 1.0
b = a.Normalized();
c = b.Scale(5);
// len is equal to 5
len = c.Length;a = Vector.ByCoordinates(1, 0, 1);
b = Vector.ByCoordinates(0, 1, 1);
// c has value x = -1, y = -1, z = 1
c = a.Cross(b);a = Vector.ByCoordinates(1, 2, 1);
b = Vector.ByCoordinates(5, -8, 4);
// d has value -7
d = a.Dot(b);La prima cosa da fare รจ aprire un documento vuoto in Civil 3D. Una volta arrivati a questo punto, accedere alla scheda Gestione sulla barra multifunzione di Civil 3D e cercare il gruppo Programmazione visiva.
Fare clic sul pulsante Dynamo, che consente di avviare Dynamo in una finestra separata.
Qual รจ la differenza tra Dynamo e il Lettore Dynamo?
Dynamo รจ quello che si utilizza per creare ed eseguire grafici. Il Lettore Dynamo รจ un modo semplice per eseguire i grafici senza doverli aprire in Dynamo.
Accedere alla sezione Lettore Dynamo quando si รจ pronti per provarlo.
Una volta aperto Dynamo, verrร visualizzata la schermata iniziale. Fare clic su Nuovo per aprire un'area di lavoro vuota.
E gli esempi?
Dynamo for Civil 3D include alcuni grafici predefiniti che possono aiutare a dare vita ad altre idee su come utilizzare Dynamo. ร consigliabile esaminare tali elementi, nonchรฉ Esempi di workflow qui nella Guida introduttiva.
Ora dovrebbe essere visualizzata un'area di lavoro vuota. Vediamo Dynamo in azione! Ecco il nostro obiettivo:
๐ฏ Creare un grafico di Dynamo che inserirร il testo nello spazio modello.
Molto semplice, giusto? Prima di iniziare, perรฒ, รจ necessario illustrare alcuni aspetti fondamentali.
I blocchi predefiniti principali di un grafico di Dynamo sono denominati nodi. Un nodo รจ come un piccolo computer: si inseriscono dei dati, la macchina li elabora e produce un risultato. Dynamo for Civil 3D dispone di una libreria di nodi che รจ possibile collegare insieme a dei fili per formare un grafico il quale consente di eseguire operazioni piรน grandi e migliori di quelle che un singolo nodo puรฒ fare da solo.
E se Dynamo non fosse mai stato utilizzato prima?
Alcune di queste nozioni potrebbero essere nuove, ma non importa perchรฉ le sezioni seguenti saranno d'aiuto.
Costruiamo il nostro grafico. Ecco un elenco di tutti i nodi che ci serviranno.
ร possibile trovare questi nodi digitandone i nomi sulla barra di ricerca nella libreria oppure facendo clic con il pulsante destro del mouse in un punto qualsiasi dell'area di disegno ed eseguendo ricerche in tale area.
Come รจ possibile sapere quali nodi utilizzare e dove trovarli?
I nodi della libreria sono raggruppati in categorie logiche in base alle loro funzioni. Per una presentazione piรน approfondita, consultare la sezione Libreria di nodi.
Ecco come dovrebbe apparire il grafico finale.
Riepiloghiamo quello che abbiamo fatto qui:
Abbiamo scelto il documento in cui lavorare. In questo caso (e in molti casi), si desidera lavorare nel documento attivo in Civil 3D.
ร stato definito il blocco di destinazione in cui creare l'oggetto text (in questo caso lo spazio modello).
ร stato utilizzato un nodo String per specificare il layer su cui posizionare il testo.
ร stato creato un punto utilizzando il nodo Point.ByCoordinates per definire la posizione in cui inserire il testo.
Sono state definite le coordinate X e Y del punto di inserimento del testo utilizzando due nodi Number Slider.
ร stato utilizzato un altro nodo String per definire il contenuto dell'oggetto text.
Infine, รจ stato creato l'oggetto text.
Vediamo i risultati del nostro nuovo grafico!
In Civil 3D, verificare che la scheda Modello sia selezionata. Dovrebbe essere visualizzato il nuovo oggetto text creato da Dynamo.
Se non รจ possibile visualizzare il testo, potrebbe essere necessario eseguire il comando ZOOM -> ESTENSIONI per eseguire lo zoom sul punto giusto.
Forte! Ora facciamo degli aggiornamenti al testo.
Tornando al grafico di Dynamo, procedere e modificare alcuni dei valori di input, ad esempio la stringa di testo, le coordinate del punto di inserimento e cosรฌ via. Dovrebbe essere possibile vedere l'aggiornamento automatico del testo in Civil 3D. Notare inoltre che se si scollega una delle porte di input, il testo viene rimosso. Se si ricollega tutto, il testo viene creato di nuovo.
Perchรฉ Dynamo non inserisce un nuovo oggetto text ogni volta che il grafico viene eseguito?
Per default, Dynamo "memorizza" gli oggetti che crea. Se si modificano i valori di input del nodo, gli oggetti in Civil 3D vengono aggiornati anzichรฉ crearne di nuovi. Per ulteriori informazioni su questo funzionamento, consultare la sezione Binding di oggetti.
๐ Missione compiuta!
Questo esempio รจ solo un assaggio di ciรฒ che si puรฒ fare con Dynamo for Civil 3D. Continuare a leggere per saperne di piรน.
Poichรฉ sia Revit che Dynamo continuano ad evolvere, รจ possibile che la versione di Revit utilizzata non sia compatibile con la versione di Dynamo per Revit installata nel computer in uso. Di seguito sono descritte le versioni di Dynamo per Revit compatibili con Revit.
2013
2014
2015
2016
Con un team dedicato di sviluppatori e una comunitร appassionata, il progetto ne ha fatta di strada dalle sue umili origini.
Dynamo รจ stato originariamente creato per ottimizzare i workflow di AEC in Revit. Sebbene Revit crei un solido database per ogni progetto, puรฒ risultare difficile per un utente medio accedere a queste informazioni al di fuori dei vincoli dell'interfaccia. Revit ospita un'API (Application Program Interface) completa che consente agli sviluppatori di terze parti di creare strumenti personalizzati. I programmatori utilizzano questa API da anni, ma lo scripting basato su testo non รจ accessibile a tutti. In Dynamo si cerca di democratizzare i dati di Revit tramite un editor di algoritmi grafici accessibile.
Utilizzando i nodi di Dynamo principali in combinazione con quelli di Revit personalizzati, un utente puรฒ espandere in modo sostanziale i workflow parametrici per l'interoperabilitร , la documentazione, l'analisi e la generazione. Con Dynamo noiosi workflow possono essere automatizzati, mentre esplorazioni della progettazione possono prosperare.
In un progetto o un editor di famiglie di Revit, individuare i moduli aggiuntivi e fare clic su Dynamo.*
*Dynamo verrร eseguito solo nel file in cui รจ stato aperto.
!
Quando si apre Dynamo in Revit, รจ presente una nuova categoria denominata Revit. Questa รจ un'aggiunta completa all'interfaccia utente che offre nodi specifici per i workflow di Revit.*
*Utilizzando la famiglia di nodi specifica di Revit, il grafico di Dynamo funzionerร solo durante l'apertura in Dynamo per Revit. Se, ad esempio, viene aperto un grafico di Dynamo per Revit in Dynamo Sandbox, i nodi di Revit risulteranno mancanti.
!
Poichรฉ Revit รจ una piattaforma che offre una gestione affidabile dei progetti, le operazioni parametriche in Dynamo possono essere complesse e lente da calcolare. Se Dynamo richiede molto tempo per il calcolo dei nodi, รจ possibile utilizzare la funzionalitร del nodo Congela per mettere in pausa l'esecuzione delle operazioni di Revit durante lo sviluppo del grafico.
ร possibile leggere ulteriori informazioni sul congelamento dei nodi nella sezione [4_nodes_and_wires](../4_nodes_and_wires/ "mention").
Poichรฉ Dynamo รจ stato originariamente creato per AEC, la sua vasta e crescente comunitร รจ una grande risorsa da cui imparare e per connettersi con gli esperti del settore. La comunitร di Dynamo รจ composta da architetti, ingegneri, programmatori e progettisti che hanno tutti passione per la condivisione e la creazione.
Dynamo รจ un progetto open source in costante evoluzione e molti sviluppi sono correlati a Revit. Se non si conosce il programma, accedere al forum di discussione e iniziare a pubblicare domande. Se si รจ programmatori e si desidera essere coinvolti nello sviluppo di Dynamo, consultare il repository su Github. Inoltre, una risorsa eccezionale per le librerie di terze parti รจ Dynamo Package Manager. Molti di questi pacchetti sono stati concepiti per AEC e si darร uno sguardo a pacchetti di terze parti per la suddivisione in pannelli in questo capitolo.
Dynamo gestisce anche un blog attivo. Per scoprire gli ultimi sviluppi, leggere i post recenti.
Nel seguente esercizio sono illustrate alcune operazioni di base sulle mesh mediante Mesh Toolkit. Nell'esercizio, si interseca una mesh con una serie di piani, il che puรฒ risultare complesso dal punto di vista computazionale se si utilizzano solidi. A differenza di un solido, una mesh presenta una risoluzione impostata e non รจ definita matematicamente, ma topologicamente; รจ possibile definire questa risoluzione in base all'attivitร in corso. Per ulteriori dettagli sulle relazioni tra mesh e solidi, รจ possibile fare riferimento al capitolo Geometria per la progettazione computazionale di questa guida introduttiva. Per un esame piรน approfondito di Mesh Toolkit, รจ possibile fare riferimento alla pagina Wiki di Dynamo. Passare al pacchetto nell'esercizio riportato di seguito.
In Dynamo, accedere a Pacchetti > Package Manager... sulla barra dei menu superiore. Nel campo di ricerca, digitare MeshToolkit, tutta una parola. Fare clic su Installa e accettare le conferme per avviare il download. ร semplicissimo.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
In questo esempio, si esaminerร il nodo Intersect in Mesh Toolkit. Si importerร una mesh e la si intersecherร con una serie di piani di input per creare sezioni. Questo รจ il punto di partenza per la preparazione del modello per la fabbricazione su un taglierino laser, un taglierino a getto d'acqua o una fresa CNC.
Iniziare aprendo Mesh-Toolkit_Intersect-Mesh.dyn in Dynamo.
!
File Path: individuare il file mesh da importare (stanford_bunny_tri.obj). I tipi di file supportati sono .mix e .obj.
Mesh.ImportFile: collegare il percorso del file per importare la mesh.
!
Point.ByCoordinates: creare un punto, che sarร il centro di un arco.
Arc.ByCenterPointRadiusAngle: creare un arco attorno al punto. Questa curva verrร utilizzata per posizionare una serie di piani. __ Di seguito vengono descritte le impostazioni disponibili: __
radius: 40, startAngle: -90, endAngle:0
Creare una serie di piani orientati lungo l'arco.
!
Code Block: consente di creare 25 numeri compresi tra 0 e 1.
Curve.PointAtParameter: collegare l'arco all'input curve e l'output del blocco di codice all'input param per estrarre una serie di punti lungo la curva.
Curve.TangentAtParameter: collegare gli stessi input del nodo precedente.
Plane.ByOriginNormal: collegare i punti all'input origin e i vettori all'input normal per creare una serie di piani in corrispondenza di ogni punto.
Quindi, si utilizzeranno questi piani per intersecare la mesh.
!
Mesh.Intersect: intersecare i piani con la mesh importata, creando una serie di contorni di PolyCurve. Fare clic con il pulsante destro del mouse sul nodo e impostare il collegamento sul piรน lungo.
PolyCurve.Curves: dividere le PolyCurve nei relativi frammenti di curva.
Curve.EndPoint: estrarre i punti finali di ogni curva.
NurbsCurve.ByPoints: utilizzare i punti per costruire una curva NURBS. Utilizzare un nodo booleano impostato su True per chiudere le curve.
Prima di continuare, disattivare l'anteprima per alcuni nodi, ad esempio: Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal e Arc.ByCenterPointRadiusAngle per vedere meglio il risultato.
!
Surface.ByPatch: costruire superfici chiuse per ogni contorno per creare sezioni della mesh.
Aggiungere un secondo insieme di sezioni per un effetto di waffle/cassa delle uova.
!
Si potrebbe notare che le operazioni di intersezione vengono calcolate piรน rapidamente con una mesh rispetto ad un solido confrontabile. I workflow, come quello illustrato in questo esercizio, si prestano anche all'utilizzo delle mesh.
In questa immagine, si associa un punto da una superficie ad un'altra utilizzando le coordinate UV. Il pacchetto si basa su questo concetto, ma con una geometria piรน complessa.
Nel capitolo precedente, sono stati esaminati i metodi per la suddivisione di una superficie in pannelli in Dynamo in base alle curve definite nel piano XY. Questo case study estende questi concetti per altre quote della geometria. Si installerร questo pacchetto una volta creato per dimostrare com'รจ stato sviluppato. Nella sezione successiva, verrร illustrato come questo pacchetto รจ stato pubblicato.
In Dynamo, fare clic su Pacchetti > Package Manager e cercare il pacchetto "MapToSurface" (tutta una parola). Fare clic su Installa per avviare il download e aggiungere il pacchetto alla libreria.
Dopo l'installazione, i nodi personalizzati dovrebbero essere disponibili nella sezione Moduli aggiuntivi > DynamoPrimer.
!
Dopo aver installato il pacchetto, esaminarne in maniera dettagliata la configurazione.
Il pacchetto che si sta creando utilizza cinque nodi personalizzati che sono stati generati come riferimento. Si esaminerร in maniera dettagliata la funzione di ogni nodo di seguito. Alcuni nodi personalizzati si basano su altri nodi personalizzati e i grafici mostrano un layout per consentire ad altri utenti di comprendere ciรฒ in maniera chiara.
Si tratta di un pacchetto semplice con cinque nodi personalizzati. Nei passaggi riportati di seguito, verrร descritta brevemente la configurazione di ogni nodo personalizzato.
!
ร un nodo di base personalizzato e uno su cui sono basati tutti gli altri nodi di mappaggio. In sostanza, il nodo associa un punto da una coordinata UV della superficie di origine alla posizione della coordinata UV della superficie di destinazione. Poichรฉ i punti sono la geometria piรน primitiva, dalla quale viene creata una geometria piรน complessa, รจ possibile utilizzare questa logica per associare la geometria 2D e persino 3D da una superficie ad un'altra.
!
La logica di estensione dei punti associati dalla geometria 1D alla geometria 2D รจ illustrata semplicemente con i poligoni qui. Notare che รจ stato nidificato il nodo PointsToSurface in questo nodo personalizzato. In questo modo รจ possibile associare i punti di ogni poligono alla superficie e quindi rigenerare il poligono da tali punti associati. Mantenendo la struttura dei dati appropriata (un elenco di elenchi di punti), รจ possibile mantenere i poligoni separati dopo averli ridotti ad un gruppo di punti.
!
La stessa logica si applica qui come nel nodo PolygonsToSurface. Invece di associare i punti poligonali, si stanno associando i punti di controllo di una curva NURBS.
!
OffsetPointsToSurface
Questo nodo risulta un po' piรน complesso, ma il concetto รจ semplice: come il nodo PointsToSurface, questo nodo associa i punti da una superficie ad un'altra. Tuttavia, considera anche i punti che non si trovano sulla superficie di origine originale, calcola la loro distanza dal parametro UV piรน vicino e associa questa distanza alla normale della superficie di destinazione nel punto della coordinata UV corrispondente. Ciรฒ risulta piรน utile quando si esaminano i file di esempio.
!
Questo รจ un nodo semplice che crea una superficie parametrica da associare dalla griglia di origine ad una superficie ondulata nei file di esempio.
!
I file di esempio sono disponibili nella cartella principale del pacchetto. Fare clic su Package Manager > scheda Pacchetti installati.
Accanto a MapToSurface, fare clic sul menu con i puntini verticali > Mostra directory principale.
Quindi, aprire la cartella extra, che contiene tutti i file del pacchetto che non sono nodi personalizzati. Questo รจ il percorso in cui vengono memorizzati i file di esempio (se presenti) per i pacchetti di Dynamo. Nelle schermate riportate di seguito sono mostrati i concetti illustrati in ogni file di esempio.
Questo file di esempio illustra com'รจ possibile utilizzare PointsToSurface per eseguire la suddivisione di una superficie in pannelli in base ad una griglia di rettangoli. Questo processo dovrebbe risultare familiare, poichรฉ รจ stato dimostrato un workflow simile nel capitolo precedente.
!
Utilizzando un workflow simile, questo file di esercizio mostra una configurazione per il mappaggio di cerchi (o poligoni che rappresentano cerchi) da una superficie ad un'altra. Viene utilizzato il nodo "PolygonsToSurface".
!
Questo file di esempio aggiunge una certa complessitร utilizzando il nodo NurbsCrvToSurface. Viene eseguito l'offset della superficie di destinazione ad una determinata distanza e la curva NURBS viene associata alla superficie di destinazione originale e alla superficie di offset. Da qui, viene eseguito il loft delle due curve associate per creare una superficie, che viene poi ispessita. Questo solido risultante ha un'ondulazione che รจ rappresentativa delle normali della superficie di destinazione.
!
Questo file di esempio illustra come associare una PolySurface pieghettata da una superficie di origine ad una superficie di destinazione. La superficie di origine e quella di destinazione sono rispettivamente una superficie rettangolare che si estende sulla griglia e una superficie di rivoluzione.
!
Indica la PolySurface di origine associata dalla superficie di origine alla superficie di destinazione.
!
Poichรฉ i nodi personalizzati sono in grado di associare diversi tipi di curve, quest'ultimo file fa riferimento ad un file SVG esportato da Illustrator e associa le curve importate ad una superficie di destinazione.
!
Analizzando la sintassi di un file .svg, le curve vengono convertite dal formato .xml nelle PolyCurve di Dynamo.
!
Le curve importate vengono associate ad una superficie di destinazione. Questo consente di progettare in modo esplicito (fare clic e puntare) una suddivisione in pannelli in Illustrator, importarla in Dynamo e applicarla ad una superficie di destinazione.
!
Prima di passare alla pubblicazione del pacchetto MapToSurface, se il pacchetto รจ stato installato dalla lezione precedente, disinstallarlo in modo da non utilizzare pacchetti identici.
Iniziare accedendo a Pacchetti > Package Manager > scheda Pacchetti installati > accanto a MapToSurface, fare clic sul menu con i puntini verticali > Elimina.
Quindi riavviare Dynamo. Alla riapertura, quando si seleziona la finestra Gestisci pacchetti, MapToSurface non dovrebbe piรน essere presente. Ora si รจ pronti per cominciare dall'inizio.
ร possibile pubblicare nodi e pacchetti personalizzati da Dynamo Sandbox nella versione 2.17 e successive, purchรฉ non presentino dipendenze API host. Nelle versioni precedenti, la pubblicazione di nodi e pacchetti personalizzati รจ abilitata solo in Dynamo for Revit e Dynamo for Civil 3D.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Questo รจ il primo invio per il pacchetto e tutti i file di esempio e i nodi personalizzati sono stati inseriti in una cartella. Una volta preparata questa cartella, รจ possibile caricarla in Dynamo Package Manager.
!
Questa cartella contiene cinque nodi personalizzati (.dyf).
Contiene inoltre cinque file di esempio (.dyn) e un file vettoriale importato (.svg). Questi file fungeranno da esercizi introduttivi per mostrare all'utente come utilizzare i nodi personalizzati.
In Dynamo, iniziare facendo clic su Pacchetti > Package Manager > scheda Pubblica nuovo pacchetto.
Nella scheda Pubblica un pacchetto, compilare i campi pertinenti sul lato sinistro della finestra.
Successivamente, verranno aggiunti i file di pacchetto. ร possibile aggiungere i file uno ad una o intere cartelle selezionando Aggiungi directory (1). Per aggiungere file che non sono in formato .dyf, assicurarsi di modificare il tipo di file nella finestra del browser in "Tutti i file (.)". Notare che verrร aggiunto indistintamente ogni file, il nodo personalizzato (.dyf) o il file di esempio (.dyn). Dynamo consentirร di suddividere questi elementi quando si pubblica il pacchetto.
Dopo aver selezionato la cartella MapToSurface, Package Manager ne mostra il contenuto. Se si sta caricando un pacchetto personalizzato con una struttura di cartelle complessa e non si desidera che Dynamo apporti modifiche a tale struttura, รจ possibile attivare il pulsante di commutazione Mantieni struttura delle cartelle. Questa opzione รจ destinata agli utenti avanzati; se il pacchetto non รจ stato appositamente impostato in un modo specifico, รจ consigliabile lasciare disattivato questo pulsante di commutazione e consentire a Dynamo di organizzare i file in base alle esigenze. Fare clic su Avanti per continuare.
Qui, รจ possibile visualizzare un'anteprima di come Dynamo organizzerร i file di pacchetto prima della pubblicazione. Fare clic su Fine per continuare.
Pubblicare facendo clic su Pubblica localmente (1). Se si sta seguendo questa procedura, assicurarsi di fare clic su Pubblica localmente e non Pubblica in linea per evitare di creare un gruppo di pacchetti duplicati in Package Manager.
Dopo la pubblicazione, i nodi personalizzati devono essere disponibili nel gruppo "DynamoPrimer" o nella libreria di Dynamo.
!
Ora osservare la directory principale per vedere in che modo Dynamo ha formattato il pacchetto appena creato. A tale scopo, accedere alla scheda Pacchetti installati > accanto a MapToSurface, fare clic sul menu con i puntini verticali > selezionare Mostra directory principale.
Si noti che la directory principale si trova nella posizione locale del pacchetto (tenere presente che il pacchetto รจ stato pubblicato "localmente"). Dynamo fa attualmente riferimento a questa cartella per la lettura di nodi personalizzati. ร pertanto importante pubblicare la directory localmente in una posizione di cartella permanente (ad esempio, non sul desktop). Di seguito รจ riportata la suddivisione delle cartelle del pacchetto di Dynamo.
!
La cartella bin contiene i file .dll creati con le librerie C# o zero-touch. Non sono disponibili per questo pacchetto, pertanto questa cartella รจ vuota per questo esempio.
La cartella dyf contiene i nodi personalizzati. Se si apre questa finestra, verranno visualizzati tutti i nodi personalizzati (file .dyf) per questo pacchetto.
La cartella extra contiene tutti i file aggiuntivi. Questi file probabilmente saranno file di Dynamo (.dyn) o eventuali file aggiuntivi richiesti (.svg, .xls, .jpeg, .sat, ecc.).
Il file pkg รจ un file di testo di base che definisce le impostazioni del pacchetto. Questa opzione รจ automatica in Dynamo, ma puรฒ essere modificata se si desidera accedere ai dettagli.
Nota Seguire questa procedura solo se si sta effettivamente pubblicando un pacchetto personalizzato.
Quando si รจ pronti per la pubblicazione, nella finestra Pacchetti > Package Manager > Pacchetti installati, selezionare il pulsante a destra del pacchetto che si desidera pubblicare e scegliere Pubblica.
Se si sta aggiornando un pacchetto giร pubblicato, scegliere Pubblica versione. Dynamo aggiornerร il pacchetto in linea in base ai nuovi file nella directory principale del pacchetto. ร semplicissimo.
Quando si aggiornano i file nella cartella principale del pacchetto pubblicato, รจ anche possibile pubblicare una nuova versione del pacchetto selezionando Pubblica versione... nella finestra Pacchetti personali. Questo รจ un modo semplice per apportare gli aggiornamenti necessari al contenuto e condividerli con la comunitร . Pubblica versione funziona solo se si รจ il gestore del pacchetto.
Attualmente non รจ possibile trasferire la proprietร del pacchetto tramite Package Manager. ร possibile chiedere al team di Dynamo di aggiungere un altro proprietario. Non รจ possibile rimuovere i proprietari esistenti, ma solo aggiungere altri gestori del pacchetto. Per aggiungere un account come proprietario al pacchetto esistente, inviare un'e-mail a [email protected]. Assicurarsi di specificare il nome del pacchetto e il nome dell'account che si desidera aggiungere.
Nel campo della modellazione computazionale, le sono una delle forme piรน pervasive di rappresentazione della geometria 3D. La geometria delle mesh รจ generalmente composta da una raccolta di quadrilateri o triangoli, puรฒ essere un'alternativa leggera e flessibile all'utilizzo di NURBS e le mesh vengono utilizzate in tutto, dal rendering e dalle visualizzazioni alla fabbricazione digitale e alla stampa 3D.
Dynamo definisce le mesh utilizzando una struttura di dati di faccia-vertice. Al livello piรน elementare, questa struttura รจ semplicemente una raccolta di punti raggruppati in poligoni. I punti di una mesh sono denominati vertici, mentre i poligoni simili a superfici sono denominati facce.
Per creare una mesh, รจ necessario un elenco di vertici e un sistema per raggruppare tali vertici in facce denominate gruppo di indici.
!
Elenco dei vertici
Elenco dei gruppi di indici per definire le facce
Le funzionalitร della mesh di Dynamo possono essere estese installando il pacchetto . Dynamo Mesh Toolkit fornisce strumenti per importare mesh da formati di file esterni, creare mesh da oggetti della geometria di Dynamo e generare manualmente mesh in base ai vertici e agli indici.
La libreria fornisce inoltre strumenti per modificare e correggere la mesh o estrarre sezioni orizzontali da utilizzare nella fabbricazione.
Visitare i , ad esempio sull'utilizzo di questo pacchetto.
!
Una mesh รจ una raccolta di quadrilateri e triangoli che rappresenta una geometria di superfici o solidi. Analogamente ai solidi, la struttura di un oggetto mesh include vertici, bordi e facce. Sono disponibili ulteriori proprietร che rendono anche univoche le mesh, come le normali.
Vertici della mesh
Bordi della mesh
I bordi con una sola faccia adiacente vengono denominati "nudi". Tutti gli altri bordi sono "vestiti".
I vertici di una mesh sono semplicemente un elenco di punti. L'indice dei vertici รจ molto importante quando si costruisce una mesh o si ottengono informazioni sulla struttura di una mesh. Per ogni vertice, esiste anche una normale del vertice corrispondente (vettore) che descrive la direzione media delle facce associate e consente di comprendere l'orientamento in ingresso e in uscita della mesh.
Vertici
Normali dei vertici
Una faccia รจ un elenco ordinato di tre o quattro vertici. La rappresentazione della "superficie" di una faccia della mesh รจ pertanto implicita in base alla posizione dei vertici indicizzati. Si dispone giร dell'elenco dei vertici che compongono la mesh, quindi, invece di fornire singoli punti per definire una faccia, si utilizza semplicemente l'indice dei vertici. Questo consente anche di utilizzare lo stesso vertice in piรน di una faccia.
Una faccia quadrangolare composta con indici 0, 1, 2 e 3
Una faccia triangolare composta con indici 1, 4 e 2; notare che i gruppi di indici possono essere spostati nel loro ordine - purchรฉ la sequenza sia ordinata in senso antiorario, la faccia verrร definita correttamente
Quali sono le differenze tra la geometria della mesh e la geometria NURBS? Quando รจ consigliabile utilizzare una al posto dell'altra?
In un capitolo precedente, si รจ visto che le superfici NURBS sono definite da una serie di curve NURBS che vanno in due direzioni. Queste direzioni sono etichettate U e V e consentono la parametrizzazione di una superficie NURBS in base ad un dominio di superficie bidimensionale. Le curve stesse sono memorizzate come equazioni nel computer, consentendo il calcolo delle superfici risultanti ad un grado di precisione arbitrariamente ridotto. Puรฒ essere difficile, tuttavia, combinare insieme piรน superfici NURBS. L'unione di due superfici NURBS determina una polisuperficie, in cui diverse sezioni della geometria avranno parametri UV e definizioni delle curve differenti.
Superficie
Curva isoparametrica (isoparm)
Punto di controllo della superficie
Le mesh, invece, sono costituite da un numero discreto di facce e vertici esattamente definiti. La rete di vertici in genere non puรฒ essere definita da coordinate UV semplici e, poichรฉ le facce sono distinte, il grado di precisione viene integrato nella mesh e puรฒ essere modificato solo mediante l'affinamento della mesh e l'aggiunta di piรน facce. La mancanza di descrizioni matematiche consente alle mesh di gestire in modo piรน flessibile la geometria complessa all'interno di una singola mesh.
Un'altra importante differenza รจ rappresentata dall'entitร con cui una modifica locale nella geometria della mesh o NURBS influisce sull'intera forma. Lo spostamento di un vertice di una mesh influisce solo sulle facce adiacenti a tale vertice. Nelle superfici NURBS, l'entitร dell'influenza รจ piรน complessa e dipende dal grado della superficie, nonchรฉ dai pesi e dai nodi dei punti di controllo. In generale, tuttavia, lo spostamento di un singolo punto di controllo in una superficie NURBS crea un cambiamento piรน uniforme e piรน esteso nella geometria.
Superficie NURBS: lo spostamento di un punto di controllo ha un'influenza che si estende lungo la forma.
Geometria della mesh: lo spostamento di un vertice influisce solo sugli elementi adiacenti.
Un'analogia che puรฒ essere utile รจ confrontare un'immagine vettoriale (composta da linee e curve) con un'immagine raster (composta da singoli pixel). Se si esegue lo zoom avanti di un'immagine vettoriale, le curve restano nitide e chiare, mentre lo zoom avanti di un'immagine raster consente di ottenere pixel piรน grandi. In questa analogia, le superfici NURBS possono essere confrontate con un'immagine vettoriale perchรฉ esiste una relazione matematica uniforme, mentre la mesh si comporta in modo simile ad un'immagine raster con una risoluzione impostata.
Le funzioni possono essere create in un blocco di codice e richiamate in un altro punto della definizione di Dynamo. In questo modo viene creato un altro livello di controllo in un file parametrico e puรฒ essere visualizzato come versione basata su testo di un nodo personalizzato. In questo caso, il blocco di codice "principale" รจ facilmente accessibile e puรฒ essere posizionato ovunque nel grafico. Non sono necessari i fili.
La prima riga contiene la parola chiave "def", il nome della funzione e i nomi degli input tra parentesi. Le parentesi graffe definiscono il corpo della funzione. Restituiscono un valore con "return =". I blocchi di codice che definiscono una funzione non presentano porte di input o output, in quanto vengono chiamati da altri blocchi di codice.
!
Chiamano la funzione con un altro blocco di codice nello stesso file, assegnando lo stesso nome e lo stesso numero di argomenti. Funzionano come i nodi predefiniti nella libreria.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
In questo esercizio verrร eseguita una definizione generica che creerร sfere da un elenco di input di punti. Il raggio di queste sfere viene gestito dalla proprietร Z di ogni punto.
Iniziare con un numero di dieci valori compresi tra 0 e 100. Collegarli ai nodi Point.ByCoordinates per creare una linea diagonale.
!
Creare un Code Block e introdurre la definizione.
!
Utilizzare queste righe di codice:
inputPt รจ il nome fornito per rappresentare i punti che controlleranno la funzione. Per ora, la funzione non sta eseguendo alcuna operazione, ma si costruirร questa funzione nei prossimi passaggi.
!
Alla funzione Code Block, si aggiungono un commento e una variabile sphereRadius che esegue una query sulla posizione Z di ogni punto. Tenere presente che inputPt.Z non richiede parentesi come metodo. Si tratta di una query sulle proprietร di un elemento esistente, pertanto non sono necessari input:
!
Ora, richiamare la funzione che รจ stata creata in un altro Code Block. Se si fa doppio clic sull'area di disegno per creare un nuovo Code Block e si digita sphereB, si noterร che Dynamo suggerisce la funzione sphereByZ definita. La funzione รจ stata aggiunta alla libreria di IntelliSense. Ottimo.
!
Ora richiamare la funzione e creare una variabile denominata Pt per collegare i punti creati nei passaggi precedenti:
Dall'output si noterร che tutti i valori sono nulli. Perchรฉ? Quando รจ stata definita la funzione, si stava calcolando la variabile sphereRadius, ma non รจ stato definito che cosa la funzione dovrebbe restituire come output. ร possibile risolvere il problema nel passaggio successivo.
!
Un passaggio importante: รจ necessario definire l'output della funzione aggiungendo la riga
return = sphereRadius;alla funzione sphereByZ.Ora si puรฒ vedere che l'output di Code Block fornisce le coordinate Z di ciascun punto.
Procedere alla creazione di sfere effettive modificando la funzione principale.
!
Per prima cosa si definisce una sfera con la riga di codice:
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);.Successivamente, si modifica il valore restituito in modo che sia sphere anzichรฉ sphereRadius:
return = sphere;. In questo modo vengono restituite alcune sfere giganti nell'anteprima di Dynamo.
!
1. Per ridurre le dimensioni di queste sfere, aggiornare il valore sphereRadius aggiungendo un divisore:
sphereRadius = inputPt.Z/20;. Ora รจ possibile vedere le sfere separate. Inizia ad avere un senso la relazione tra il raggio e il valore Z.
!
Nel nodo Point.ByCoordinates, modificando il collegamento da Piรน breve a Globale, verrร creata una griglia di punti. La funzione sphereByZ รจ ancora attiva, per cui tutti i punti creano sfere con i raggi basati sui valori Z.
!
E solo per fare delle prove, รจ necessario collegare l'elenco originale di numeri all'input X per Point.ByCoordinates. Ora si ottiene un cubo di sfere.
Nota: se il calcolo al computer richiede molto tempo, provare a modificare #10 impostandolo su un valore simile a #5.
Tenere presente che la funzione sphereByZ che รจ stata creata รจ una funzione generica, pertanto รจ possibile richiamare l'elica da una lezione precedente e applicare la funzione ad essa.
!
Un passaggio finale: controllare il rapporto del raggio con un parametro definito dall'utente. A tale scopo, รจ necessario creare un nuovo input per la funzione e sostituire anche il divisore 20 con un parametro.
!
Aggiornare la definizione di sphereByZ a:
Aggiornare il Code Block degli elementi derivati aggiungendo una variabile ratio all'input:
sphereByZ(Pt,ratio);. Collegare un dispositivo di scorrimento all'input Code Block appena creato e modificare la dimensione dei raggi in base al rapporto del raggio.
Un elenco รจ una raccolta di elementi o voci. Si prenda, ad esempio, un casco di banane. Ogni banana รจ una voce all'interno dell'elenco (o del casco). ร piรน semplice raccogliere un casco di banane piuttosto che ogni singola banana e ciรฒ vale anche per il raggruppamento di elementi secondo relazioni parametriche in una struttura di dati.
Foto di Augustus Binu.
Quando si fanno acquisti nei negozi di alimentari, si mettono tutti gli oggetti acquistati in una borsa. Questa borsa รจ anche un elenco. Per fare il pane alla banana, occorrono 3 caschi di banane (servono per fare molto pane alla banana). La borsa rappresenta un elenco di caschi di banane e ogni casco rappresenta un elenco di banane. La borsa รจ un elenco di elenchi (bidimensionali) e il casco di banane รจ un elenco (unidimensionale).
In Dynamo, i dati dell'elenco vengono ordinati e la prima voce di ogni elenco ha un indice 0. Di seguito, saranno descritte la modalitร di definizione degli elenchi in Dynamo e la modalitร di relazione reciproca tra piรน elenchi.
Una cosa che potrebbe sembrare strana all'inizio รจ che il primo indice di un elenco รจ sempre 0; non 1. Cosรฌ, quando si parla della prima voce di un elenco, si intende in realtร la voce che corrisponde all'indice 0.
Ad esempio, se si dovesse contare il numero di dita della mano destra, รจ probabile aver contato da 1 a 5. Tuttavia, se si dovessero inserire le dita in un elenco, in Dynamo sarebbero stati assegnati loro indici compresi tra 0 e 4. Sebbene questo possa sembrare un po' strano ai principianti in fatto di programmazione, l'indice in base zero รจ una pratica standard nella maggior parte dei sistemi di calcolo.
Nell'elenco sono ancora presenti 5 voci, questo perchรฉ l'elenco sta utilizzando un sistema di conteggio in base zero. E le voci memorizzate nell'elenco non devono essere solo numeri. Possono essere qualsiasi tipo di dati supportato da Dynamo, ad esempio punti, curve, superfici, famiglie e cosรฌ via.
!
a. Indice
b. Punto
c. Elemento
Spesso il modo piรน semplice per esaminare il tipo di dati memorizzati in un elenco รจ collegare un nodo di controllo all'output di un altro nodo. Per default, il nodo di controllo mostra automaticamente tutti gli indici sul lato sinistro dell'elenco e visualizza gli elementi di dati sul lato destro.
Questi indici sono un elemento fondamentale quando si utilizzano gli elenchi.
Per quanto riguarda gli elenchi, input e output variano a seconda del nodo di Dynamo utilizzato. Ad esempio, รจ possibile utilizzare un elenco di 5 punti e collegare questo output a due diversi nodi di Dynamo: PolyCurve.ByPoints e Circle.ByCenterPointRadius:
!
L'input points per PolyCurve.ByPoints cerca โPoint[]โ. Rappresenta un elenco di punti.
L'output per PolyCurve.ByPoints รจ una PolyCurve singola creata da un elenco di cinque punti.
L'input
I dati di input per PolyCurve.ByPoints e Circle.ByCenterPointRadius sono gli stessi, tuttavia il nodo Polycurve.ByPoints fornisce una PolyCurve mentre il nodo Circle.ByCenterPointRadius fornisce 5 cerchi con centri in ogni punto. In modo intuitivo, questa operazione ha senso: la PolyCurve viene disegnata come curva che collega i 5 punti, mentre i cerchi creano un cerchio diverso in ogni punto. Quindi cosa sta succedendo con i dati?
Posizionando il cursore sull'input points per Polycurve.ByPoints, si noterร che l'input cerca โPoint[]โ. Notare le parentesi alla fine. Rappresenta un elenco di punti e, per creare una PolyCurve, l'input deve essere un elenco per ogni PolyCurve. Questo nodo comprimerร pertanto ogni elenco in una PolyCurve.
Dall'altro lato, l'input centerPoint per Circle.ByCenterPointRadius richiede "Point". Questo nodo cerca un punto, come elemento, per definire il punto centrale del cerchio. Per questo motivo, si ottengono cinque cerchi dai dati di input. Riconoscere queste differenze con gli input in Dynamo aiuta a comprendere meglio il funzionamento dei nodi durante la gestione dei dati.
La corrispondenza dei dati รจ un problema senza una soluzione chiara. Si verifica quando un nodo ha accesso a input di dimensioni diverse. La modifica dell'algoritmo di corrispondenza dei dati puรฒ portare a risultati molto diversi.
Si immagini un nodo che crea segmenti di linea tra punti (Line.ByStartPointEndPoint). Avrร due parametri di input che forniscono entrambi le coordinate dei punti:
Il modo piรน semplice consiste nel collegare gli input uno ad uno finchรฉ uno dei flussi non si esaurisce. Viene definito l'algoritmo "l'elenco piรน breve". Questo รจ il funzionamento di default per i nodi di Dynamo:
!
L'algoritmo "l'elenco piรน lungo" continua a collegare gli input e a riutilizzare gli elementi, finchรฉ tutti i flussi non si esauriscono:
!
Infine, il metodo Globale rende possibili tutti i collegamenti:
!
Come si puรฒ vedere, esistono diversi modi in cui รจ possibile disegnare linee tra questi gruppi di punti. Per trovare le opzioni del collegamento, fare clic con il pulsante destro del mouse sul centro di un nodo e scegliere il menu Collegamento.
!
Si immagini di avere un grappolo d'uva. Per ottenere il succo d'uva, non bisogna spremere ogni acino singolarmente, ma metterli tutti insieme nello spremiagrumi. La replica in Dynamo funziona in modo simile: anzichรฉ applicare un'operazione ad un elemento alla volta, Dynamo puรฒ applicarla ad un intero elenco in un'unica operazione.
I nodi di Dynamo riconoscono automaticamente quando stanno lavorando con gli elenchi e applicano le loro operazioni a piรน elementi. Ciรฒ significa che non รจ necessario scorrere manualmente gli elementi, ma semplicemente che questo avviene. Ma come fa Dynamo a decidere come elaborare gli elenchi quando ce n'รจ piรน di uno?
Esistono due modi principali:
Supponiamo di trovarci in cucina a preparare succhi di frutta. Si ha un elenco di frutti: {apple, orange, pear} e una quantitร fissa di acqua per ogni succo: 1 cup. Si vuole fare un succo con ogni frutto, con la stessa quantitร d'acqua. In questo caso, entra in gioco la replica cartesiana.
In Dynamo, ciรฒ significa che si inserisce l'elenco di frutti nell'input fruit del nodo Juice.Maker, mentre l'input water rimane costante a 1 tazza. Il nodo elabora quindi ogni frutto singolarmente, combinandolo con la quantitร fissa di acqua. Il risultato รจ:
apple juice with 1 cup of water orange juice with 1 cup of water pear juice with 1 cup of water
Ogni frutto รจ abbinato alla stessa quantitร di acqua.
La replica in formato .zip funziona in modo leggermente diverso. Se si avessero due elenchi, uno per i frutti: {apple, orange, pear} e un altro per le quantitร di zucchero: {2 tbsp, 3 tbsp, 1 tbsp}, la replica in formato .zip combinerebbe gli elementi corrispondenti di ciascun elenco. Ad esempio:
apple juice with 2 tablespoons of sugar orange juice with 3 tablespoons of sugar pear juice with 1 tablespoon of sugar
Ogni frutto รจ abbinato alla sua corrispondente quantitร di zucchero.
Per ulteriori informazioni sul funzionamento, consultare la pagina .
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Per dimostrare le operazioni di collegamento riportate di seguito, si utilizzerร questo file di base per definire l'elenco piรน breve, l'elenco piรน lungo e il collegamento globale.
Si modificherร il collegamento in Point.ByCoordinates, ma non cambierร nient'altro del grafico riportato sopra.
Scegliendo Piรน breve come opzione di collegamento (anche l'opzione di default), si ottiene una linea diagonale di base composta da cinque punti. I cinque punti indicano la lunghezza dell'elenco minore, pertanto il collegamento con l'elenco piรน breve viene interrotto dopo che si รจ arrivati alla fine di un elenco.
!
Modificando il collegamento in Piรน lungo, si ottiene una linea diagonale che si estende verticalmente. Con lo stesso metodo del diagramma concettuale, l'ultima voce nell'elenco di 5 voci verrร ripetuta per raggiungere la lunghezza dell'elenco piรน lungo.
!
Modificando il collegamento in Globale, si ottiene ogni combinazione tra ciascun elenco, fornendo una griglia di punti 5 x 10. Si tratta di una struttura di dati equivalente secondo il metodo globale come mostrato nel diagramma concettuale riportato sopra, tranne per il fatto che i dati sono ora un elenco di elenchi. Collegando una PolyCurve, รจ possibile vedere che ogni elenco viene definito dal relativo valore X, restituendo una riga di linee verticali.
!
Dynamo offre diversi metodi per la creazione di nodi personalizzati. ร possibile creare nodi personalizzati da zero, da un grafico esistente o esplicitamente in C#. In questa sezione verrร descritta la creazione di un nodo personalizzato nell'interfaccia utente di Dynamo da un grafico esistente. Questo metodo รจ ideale per la pulizia dell'area di lavoro, nonchรฉ per la creazione di una sequenza di nodi da riutilizzare altrove.
Nell'immagine seguente, viene associato un punto da una superficie ad un'altra utilizzando le coordinate UV. Questo concetto verrร utilizzato per creare una superficie a pannelli che faccia riferimento alle curve nel piano XY. Qui verranno creati pannelli quadrangolari per la suddivisione in pannelli, ma utilizzando la stessa logica, รจ possibile creare una vasta gamma di pannelli con il mappaggio UV. Si tratta di un'ottima opportunitร per lo sviluppo di nodi personalizzati perchรฉ si potrร ripetere piรน facilmente un processo simile in questo grafico o in altri workflow di Dynamo.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Iniziare creando un grafico che si desidera nidificare in un nodo personalizzato. In questo esempio, verrร creato un grafico che associa i poligoni da una superficie di base ad una superficie di destinazione utilizzando le coordinate UV. Questo processo di mappaggio UV รจ un metodo utilizzato di frequente, il che lo rende un buon candidato per un nodo personalizzato. Per ulteriori informazioni sulle superfici e sullo spazio UV, fare riferimento alla pagina . Il grafico completo รจ UVmapping_Custom-Node.dyn dal file .zip scaricato in precedenza.
!
Code Block: utilizzare questa linea per creare un intervallo di 10 numeri compreso tra -45 e 45
45..45..#10;.Point.ByCoordinates: collegare l'output di Code Block agli input x e y e impostare il collegamento su Globale. Ora dovrebbe essere presente una griglia di punti.
Ora dovrebbe essere visibile una griglia di rettangoli. Associare questi rettangoli ad una superficie di destinazione utilizzando le coordinate UV.
!
Polygon.Points: collegare l'output Rectangle.ByWidthLength del passaggio precedente all'input polygon per estrarre i punti degli angoli di ogni rettangolo. Questi sono i punti che verranno associati alla superficie di destinazione.
Rectangle.ByWidthLength: utilizzare un Code Block con un valore di 100 per specificare la larghezza e la lunghezza di un rettangolo. Sarร il contorno della superficie di base.
Ora che sono presenti una superficie di base e un gruppo di coordinate UV, รจ possibile importare una superficie di destinazione e associare i punti tra le superfici.
!
File Path: selezionare il percorso del file della superficie che si desidera importare. Il tipo di file deve essere .SAT. Fare clic sul pulsante Sfoglia... e individuare il file UVmapping_srf.sat nel file .zip scaricato in precedenza.
Geometry.ImportFromSAT: collegare il percorso del file per importare la superficie. La superficie importata dovrebbe essere visualizzata nell'anteprima della geometria.
Il passaggio finale consiste nell'utilizzare i punti 3D per costruire superfici di chiusura rettangolari.
!
PolyCurve.ByPoints: collegare i punti sulla superficie per costruire una PolyCurve attraverso i punti.
Boolean: aggiungere un valore Boolean all'area di lavoro e collegarlo all'input connectLastToFirst e attivare True per chiudere le PolyCurve. Ora dovrebbero essere visualizzati i rettangoli associati alla superficie.
A questo punto, selezionare i nodi che si desidera nidificare in un nodo personalizzato, pensando agli input e agli output del nodo stesso. Si desidera che il nodo personalizzato sia il piรน flessibile possibile, pertanto dovrebbe essere associabile ad eventuali poligoni, non solo ai rettangoli.
Selezionare i seguenti nodi (a partire da Polygon.Points), fare clic con il pulsante destro del mouse sull'area di lavoro e selezionare Crea nodo personalizzato.
!
Nella finestra di dialogo Proprietร nodo personalizzato, assegnare un nome, una descrizione e una categoria al nodo personalizzato.
!
Nome: MapPolygonsToSurface
Descrizione: mappare i poligoni da una base ad una superficie di destinazione
Categoria di Moduli aggiuntivi: Geometry.Curve
Il nodo personalizzato ha notevolmente ripulito l'area di lavoro. Notare che gli input e gli output sono stati denominati in base ai nodi originali. Modificare il nodo personalizzato per rendere i nomi piรน descrittivi.
!
Fare doppio clic sul nodo personalizzato per modificarlo. Verrร aperta un'area di lavoro con uno sfondo giallo che rappresenta l'interno del nodo.
!
Input: modificare i nomi di input in baseSurface e targetSurface.
Output: aggiungere un altro output ai poligoni associati.
Salvare il nodo personalizzato e tornare all'area di lavoro iniziale. Tenere presente che il nodo MapPolygonsToSurface riflette le modifiche appena apportate.
!
ร inoltre possibile potenziare la robustezza del nodo personalizzato mediante l'aggiunta di commenti personalizzati. I commenti possono aiutare a visualizzare suggerimenti sui tipi di input e output o spiegare le funzionalitร del nodo. I commenti vengono visualizzati quando l'utente posiziona il cursore del mouse su un input o un output di un nodo personalizzato.
Fare doppio clic sul nodo personalizzato per modificarlo. Verrร riaperta l'area di lavoro con lo sfondo giallo.
!
Iniziare a modificare il Code Block Input. Per iniziare a scrivere un commento, digitare "//" seguito dal testo del commento. Digitare tutto ciรฒ che potrebbe essere utile per chiarire il nodo. Qui verrร descritto l'input targetSurface.
Definire inoltre il valore di default per inputSurface impostando il tipo di input uguale ad un valore. Qui, si imposterร il valore di default sul nodo Surface.ByPatch originale impostato.
I commenti possono essere applicati anche agli output.
!
Modificare il testo nel Code Block Output. Digitare "//" seguito dal testo del commento. Qui verranno chiariti gli output Polygons e surfacePatches aggiungendo una descrizione piรน approfondita.
!
Posizionare il cursore del mouse sugli input del nodo personalizzato per visualizzare i commenti.
Con il valore di default impostato su inputSurface, รจ inoltre possibile eseguire la definizione senza un input Surface.
Una potente funzionalitร di Dynamo รจ la possibilitร di modificare i parametri su un livello parametrico. Ad esempio, un algoritmo generativo o i risultati di una simulazione possono essere utilizzati per determinare i parametri di una serie di elementi. In questo modo, un gruppo di istanze della stessa famiglia puรฒ avere proprietร personalizzate nel progetto di Revit.
I parametri di istanza definiscono l'apertura dei pannelli sulla superficie del tetto, che prevedono un rapporto di apertura compreso tra 0.1 e 0.4.
I parametri basati sul tipo vengono applicati ad ogni elemento della superficie in quanto si tratta dello stesso tipo di famiglia. Il materiale di ciascun pannello, ad esempio, puรฒ essere determinato da un parametro basato sul tipo.
!
Se in precedenza รจ stata configurata una famiglia di Revit, ricordarsi che รจ necessario assegnare un tipo di parametro (stringa, numero, quota e cosรฌ via). Assicurarsi di utilizzare il tipo di dati corretto durante l'assegnazione di parametri da Dynamo.
ร inoltre possibile utilizzare Dynamo in combinazione con i vincoli parametrici definiti nelle proprietร di una famiglia di Revit.
Come rapido ripasso dei parametri in Revit, si ricorda che sono presenti parametri di tipo e di istanza. Entrambi possono essere modificati da Dynamo, ma nell'esercizio riportato di seguito verranno utilizzati i parametri di istanza.
Mentre si rileva l'applicazione estesa della modifica di parametri, potrebbe essere necessario modificare una grande quantitร di elementi in Revit con Dynamo. Questa operazione puรฒ essere _costosa dal punto di vista computazionale_ , ovvero puรฒ risultare lenta. Se si modifica un numero elevato di elementi, รจ possibile utilizzare la funzionalitร Congela del nodo per interrompere l'esecuzione delle operazioni di Revit durante lo sviluppo del grafico. Per ulteriori informazioni sul congelamento dei nodi, controllare la sezione [Congelamento](../5_essential_nodes_and_concepts/5-2_geometry-for-computational-design/6-solids.md) nel capitolo sui solidi.
A partire dalla versione 0.8, Dynamo รจ fondamentalmente senza unitร . Ciรฒ consente a Dynamo di rimanere un ambiente di programmazione visiva astratto. I nodi di Dynamo che interagiscono con le quote di Revit faranno riferimento alle unitร del progetto di Revit. Ad esempio, se si imposta un parametro della lunghezza in Revit da Dynamo, il numero in Dynamo per il valore corrisponderร alle unitร di default nel progetto di Revit. L'esercizio riportato di seguito รจ basato sui metri.
Per una conversione rapida delle unitร , utilizzare il nodo Convert Between Units. Questo รจ un comodo strumento per la conversione delle unitร di lunghezza, area e volume al volo.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
L'esercizio riportato di seguito รจ basato sui metri.
Questo esercizio si concentra sulla modifica degli elementi di Revit senza eseguire un'operazione geometrica in Dynamo. Qui non si sta importando la geometria di Dynamo, ma si stanno modificando solo i parametri in un progetto di Revit. Questo รจ un esercizio di base e, per gli utenti piรน avanzati di Revit, notare che si tratta di parametri di istanza di una massa, ma la stessa logica puรฒ essere applicata ad una serie di elementi per la personalizzazione su larga scala. Tutto questo viene eseguito con il nodo "Element.SetParameterByName".
Iniziare con il file di esempio di Revit per questa sezione. Sono stati rimossi gli elementi strutturali e le travi reticolari adattive della sezione precedente. In questo esercizio, ci si concentrerร su una piattaforma petrolifera parametrica in Revit e sulla manipolazione in Dynamo.
Selezionando la massa dell'edificio in Revit, si vedono una serie di parametri di istanza nel gruppo Proprietร .
!
In Dynamo, รจ possibile recuperare i parametri selezionando l'elemento di destinazione.
!
Selezionare la massa dell'edificio con il nodo Select Model Element.
ร possibile eseguire una query su tutti i parametri di questa massa con il nodo Element.Parameters. Ciรฒ include i parametri di tipo e istanza.
!
Fare riferimento al nodo Element. Parameters per trovare i parametri di destinazione. In alternativa, รจ possibile visualizzare il gruppo Proprietร del passaggio precedente per scegliere i nomi dei parametri da modificare. In questo caso, si stanno cercando i parametri che influenzano i grandi movimenti geometrici sulla massa dell'edificio.
Verranno apportate modifiche all'elemento di Revit utilizzando il nodo Element.SetParameterByName.
!
Si desidera inoltre designare i valori per ogni parametro. Aggiungere sei dispositivi di scorrimento di numeri interi all'area di disegno e rinominarli in base al parametro corrispondente nell'elenco. Inoltre, impostare i valori di ciascun dispositivo di scorrimento sull'immagine riportata sopra. In ordine dall'alto verso il basso: 62, 92, 25, 22, 8, 12.
Definire un altro Code Block con un elenco della stessa lunghezza dei nomi dei parametri. In questo caso, vengono denominate variabili (senza virgolette) che creano input per Code Block. Collegare i dispositivi di scorrimento a ciascun rispettivo input:
{bw,bl,bh,ao,io,lu};.
*Questa dimostrazione funziona con i parametri di istanza, ma non con i parametri di tipo.
Come in Revit, molti di questi parametri dipendono l'uno dall'altro. Ci sono naturalmente delle combinazioni in cui la geometria puรฒ interrompersi. ร possibile risolvere questo problema con formule definite nelle proprietร dei parametri oppure รจ possibile configurare una logica simile con operazioni matematiche in Dynamo (questa รจ una difficoltร aggiuntiva se si desidera espandere l'esercizio).
!
Questa combinazione conferisce una nuova bizzarra progettazione alla massa dell'edificio: 100, 92, 100, 25, 13, 51.
Si vedrร ora come modificare la facciata utilizzando un processo simile.
!
Copiare il grafico e concentrarsi sulla vetrata della facciata che ospiterร il sistema di travi reticolari. In questo caso, vengono isolati quattro parametri:
{"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};.Inoltre, creare dispositivi di scorrimento numerici e rinominarli in base ai parametri appropriati. I primi tre dispositivi di scorrimento dall'alto verso il basso devono essere riassociati ad un dominio di [0,10], mentre il dispositivo di scorrimento finale Facade Bend Location deve essere riassociato ad un dominio di [0,1]. Questi valori, dall'alto verso il basso, dovrebbero iniziare con questi valori (sebbene siano arbitrari): 2.68, 2.64, 2.29, 0.5.
!
Modificando i dispositivi di scorrimento in questa parte del grafico, รจ possibile ingrandire di molto la vetrata della facciata: 9.98, 10.0, 9.71, 0.31.
Sebbene Dynamo sia in grado di creare una vasta gamma di forme geometriche complesse, le primitive geometriche semplici formano le fondamenta di qualsiasi progettazione computazionale: direttamente espresse nella forma finale progettata o utilizzata come impalcatura dalla quale viene generata una geometria piรน complessa.
Anche se non รจ strettamente un elemento di geometria, CoordinateSystem รจ uno strumento importante per la costruzione della geometria. Un oggetto CoordinateSystem tiene traccia delle trasformazioni geometriche e di posizione, quali rotazione, taglio e messa in scala.
La creazione di un CoordinateSystem centrato in un punto con x = 0, y = 0, z = 0, senza rotazioni, messa in scala o trasformazioni di taglio, richiede semplicemente di chiamare il costruttore Identity:
I CoordinateSystem con trasformazioni geometriche non rientrano nell'ambito di questo capitolo, sebbene un altro costruttore consenta di creare un sistema di coordinate in un punto specifico, CoordinateSystem.ByOriginVectors:
La primitiva geometrica piรน semplice รจ un punto, che rappresenta una posizione a zero dimensioni nello spazio tridimensionale. Come detto in precedenza, esistono diversi modi per creare un punto in un particolare sistema di coordinate: Point.ByCoordinates crea un punto con coordinate x, y e z specificate; Point.ByCartesianCoordinates crea un punto con coordinate x, y e z specificate in un sistema di coordinate specifico; Point.ByCylindricalCoordinates crea un punto su un cilindro con raggio, angolo di rotazione e altezza e Point.BySphericalCoordinates crea un punto su una sfera con raggio e due angoli di rotazione.
In questo esempio sono mostrati i punti creati in diversi sistemi di coordinate:
La successiva primitiva di Dynamo dimensionale maggiore รจ un segmento di linea, che rappresenta un numero infinito di punti tra due punti finali. Le linee possono essere create specificando esplicitamente i due punti di contorno con il costruttore Line.ByStartPointEndPoint o specificando un punto iniziale, una direzione e una lunghezza in tale direzione, Line.ByStartPointDirectionLength.
Dynamo dispone di oggetti che rappresentano i tipi piรน elementari di primitive geometriche in tre dimensioni: cuboidi, creati con Cuboid.ByLengths; coni, creati con Cone.ByPointsRadius e Cone.ByPointsRadii; cilindri, creati con Cylinder.ByRadiusHeight e sfere create con Sphere.ByCenterPointRadius.
Dynamo offre numerose funzionalitร predefinite e dispone anche di un'ampia libreria di pacchetti in grado di estendere in modo significativo le sue potenzialitร . Un pacchetto รจ una raccolta di nodi personalizzati o funzionalitร aggiuntive. Dynamo Package Manager รจ un portale che consente alla comunitร di scaricare qualsiasi pacchetto pubblicato online. Questi set di strumenti sono stati sviluppati da terze parti per estendere le funzionalitร principali di Dynamo, sono accessibili a tutti e sono pronti per il download con un semplice clic.
Un progetto open source, come Dynamo, si basa su questo tipo di coinvolgimento della comunitร . Grazie a sviluppatori di terze parti dedicati, Dynamo รจ in grado di estendere il suo ambito di applicazione ai workflow di diversi settori. Per questo motivo, il team di Dynamo ha compiuto sforzi concertati per snellire lo sviluppo e la pubblicazione dei pacchetti (che saranno discussi in modo piรน dettagliato nelle sezioni seguenti).
Il modo piรน semplice per installare un pacchetto consiste nell'utilizzare l'opzione di menu Pacchetti nell'interfaccia di Dynamo. Adesso si puรฒ passare direttamente al pacchetto e installarne uno. In questo esempio rapido, verrร installato un comune pacchetto per la creazione di pannelli quadrangolari su una griglia.
In Dynamo, accedere a Pacchetti > Package Manager.
Sulla barra di ricerca, cercare "quads from rettangular grid". Dopo alcuni minuti, si dovrebbero vedere tutti i pacchetti che corrispondono alla query di ricerca. Si desidera selezionare il primo pacchetto con il nome corrispondente.
Fare clic su Installa per aggiungere il pacchetto alla libreria, quindi accettare la conferma. Fatto.
Notare che ora รจ presente un altro gruppo nella libreria di Dynamo denominato "buildz". Questo nome si riferisce allo sviluppatore del pacchetto e il nodo personalizzato viene posizionato in questo gruppo. ร possibile iniziare ad utilizzarlo immediatamente.
!
Utilizzare Code Block per definire rapidamente una griglia rettangolare, generare il risultato in un nodo Polygon.ByPoints, quindi in un nodo Surface.ByPatch per visualizzare l'elenco di pannelli rettangolari appena creati.
!
L'esempio riportato sopra si concentra su un pacchetto con un nodo personalizzato, ma si utilizza lo stesso processo per il download di pacchetti con diversi nodi personalizzati e file di dati di supporto. Ora si dimostrerร ciรฒ con un pacchetto piรน completo: DynamoUnfold.
Come nell'esempio precedente, iniziare selezionando Pacchetti > Package Manager.
Questa volta, si cercherร "DynamoUnfold", una parola. Quando vengono visualizzati i pacchetti, scaricarli facendo clic su Installa per aggiungere DynamoUnfold alla libreria di Dynamo.
Nella libreria di Dynamo, รจ presente un gruppo DynamoUnfold con piรน categorie e nodi personalizzati.
!
Ora, si puรฒ dare un'occhiata alla struttura dei file del pacchetto.
Innanzitutto, accedere a Pacchetti > Package Manager > Pacchetti installati.
Accanto a DynamoUnfold, selezionare il menu delle opzioni .
Quindi, fare clic su Mostra directory principale per aprire la cartella principale per questo pacchetto.
Verrร aperta la directory principale del pacchetto. Notare che sono presenti 3 cartelle e un file.
!
La cartella bin contiene i file .dll. Questo pacchetto di Dynamo รจ stato sviluppato utilizzando la funzionalitร zero-touch, pertanto i nodi personalizzati sono contenuti in questa cartella.
La cartella dyf contiene i nodi personalizzati. Questo pacchetto non รจ stato sviluppato utilizzando nodi personalizzati di Dynamo, pertanto questa cartella รจ vuota per questo pacchetto.
La cartella extra contiene tutti i file aggiuntivi, inclusi i file di esempio.
Aprendo la cartella "extra", si notano alcuni file di esempio scaricati con l'installazione. Non tutti i pacchetti dispongono di file di esempio, ma รจ possibile trovarli se fanno parte di un pacchetto.
Aprire "SphereUnfold".
Dopo aver aperto il file e aver fatto clic su "Esegui" nel risolutore, รจ presente una sfera spiegata. File di esempio come questi sono utili per imparare ad utilizzare un nuovo pacchetto di Dynamo.
!
In Package Manager, รจ possibile cercare i pacchetti utilizzando le opzioni di ordinamento e filtraggio disponibili nella scheda Cerca pacchetti. Sono disponibili diversi filtri per il programma host, lo stato (nuovo, obsoleto o non obsoleto) e la presenza o meno di dipendenze nel pacchetto.
Ordinando i pacchetti, รจ possibile identificare i pacchetti piรน votati o piรน scaricati oppure trovare i pacchetti con aggiornamenti recenti.
ร inoltre possibile accedere a ulteriori dettagli su ciascun pacchetto facendo clic su Visualizza dettagli. Viene aperto un pannello laterale in Package Manager, in cui รจ possibile trovare informazioni quali il confronto delle versioni e le dipendenze, l'URL del sito Web o del repository, le informazioni sulla licenza e cosรฌ via.
Un altro modo per scoprire i pacchetti di Dynamo consiste nell'esplorare il sito Web di . Qui รจ possibile trovare le dipendenze dei pacchetti e le informazioni sulla compatibilitร tra host e versioni fornite dagli autori dei pacchetti. ร inoltre possibile scaricare i file di pacchetto da Dynamo Package Manager, ma eseguire questa operazione direttamente da Dynamo รจ un processo piรน agevole.
Se si desidera vedere dove vengono mantenuti i file di pacchetto, nella parte superiore del browser fare clic su Dynamo > Preferenze > Impostazioni pacchetto > Posizioni di file di pacchetti e nodi; da qui รจ possibile trovare la directory della cartella principale corrente.
!
Per default, i pacchetti vengono installati in una posizione simile a questo percorso delle cartelle: C:/Utenti/[nome utente]/AppData/Roaming/Dynamo/[versione di Dynamo].
Per gli utenti che chiedono se sia possibile distribuire Dynamo (in qualsiasi forma) con pacchetti preassociati: l'approccio che risolverร questo problema e consentirร il controllo in una posizione centrale per tutti gli utenti con installazioni di Dynamo รจ quello di aggiungere un percorso di pacchetti personalizzato a ogni installazione.
Aggiungere una cartella di rete in una posizione che consenta al responsabile BIM o ad altri utenti di supervisionare l'archiviazione di pacchetti approvati dall'ufficio
Nell'interfaccia utente di una singola applicazione, accedere a Dynamo -> Preferenze -> Impostazioni pacchetto -> Posizioni di file di pacchetti e nodi. Nella finestra di dialogo, premere il pulsante Aggiungi percorso e cercare nel percorso di rete la risorsa condivisa del pacchetto.
Come processo automatico, si tratta di aggiungere informazioni al file di configurazione installato con Dynamo:
C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]\DynamoSettings.xml
Per default, la configurazione di Dynamo for Revit รจ:
<CustomPackageFolders>
<string>C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]</string>
</CustomPackageFolders>
L'aggiunta di una posizione personalizzata sarebbe simile alla seguente:
<CustomPackageFolders>
<string>C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]</string>
<string>N:\OfficeFiles\Dynamo\Packages_Limited</string>
</CustomPackageFolders>
La gestione centrale di questa cartella puรฒ anche essere controllata semplicemente impostando la cartella di sola lettura.
Un'azienda potrebbe voler standardizzare i pacchetti installati da workstation e utenti diversi. Un modo per farlo potrebbe essere quello di installare questi pacchetti da Dynamo -> Preferenze -> Impostazioni pacchetto -> Posizioni di file di pacchetti e nodi, selezionando una cartella di rete come posizione di installazione e facendo in modo che le workstation aggiungano tale percorso a Manage Node and Package Paths.
Sebbene lo scenario funzioni correttamente per i pacchetti che contengono solo nodi personalizzati, potrebbe non funzionare per i pacchetti contenenti file binari, come i nodi zero-touch. Questo problema รจ causato dalle che .NET Framework adotta per il caricamento degli assembly quando provengono da una posizione di rete. Sfortunatamente, l'utilizzo dell'elemento di configurazione loadFromRemoteSources, come suggerito nel thread collegato, non รจ una soluzione possibile per Dynamo, perchรฉ รจ distribuito come un componente piuttosto che come un'applicazione.
Una possibile soluzione consiste nell'utilizzare un'unitร di rete mappata che punta al percorso di rete e fare in modo che le workstation facciano riferimento a tale percorso. I passaggi per creare un'unitร di rete mappata sono descritti .
La comunitร di Dynamo รจ in costante crescita e in continua evoluzione. Esplorando di tanto in tanto Dynamo Package Manager, si noteranno alcuni nuovi e interessanti miglioramenti. Nelle seguenti sezioni, verranno esaminati in modo piรน approfondito i pacchetti, dalla prospettiva dell'utente finale fino al programmatore del pacchetto di Dynamo.
L'utilizzo di punti COGO e gruppi di punti in Civil 3D รจ un elemento fondamentale di molti processi dall'inizio alla fine dei lavori. Dynamo si contraddistingue davvero quando si tratta di gestione dei dati; verrร illustrato un caso di utilizzo potenziale in questo esempio.
๐ฏ Creare un gruppo di punti per ogni descrizione di punto COGO univoca.
Utilizzo di elenchi
Raggruppamento di oggetti simili con il nodo List.GroupByKey
Visualizzazione dell'output personalizzato nel Lettore Dynamo
Questo grafico verrร eseguito su Civil 3D 2020 e versioni successive.
Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.
Ecco una panoramica della logica di questo grafico.
Ottenere tutti i punti COGO nel documento
Raggruppare i punti COGO per descrizione
Creare gruppi di punti
Procediamo!
Il primo passaggio consiste nell'ottenere tutti i gruppi di punti nel documento, quindi tutti i punti COGO all'interno di ciascun gruppo. In questo modo verrร fornito un elenco nidificato o un "elenco di elenchi", che sarร piรน semplice utilizzare in un secondo momento se si riduce la nidificazione di tutto trasformandolo in un unico elenco con il nodo List.Flatten.
Se non si ha familiaritร con gli elenchi, consultare la sezione .
Ora che si dispone di tutti i punti COGO, occorre separarli in gruppi in base alle loro descrizioni. Questo รจ esattamente ciรฒ che fa il nodo List.GroupByKey. In pratica raggruppa eventuali elementi che condividono la stessa chiave.
Il lavoro duro รจ finito! Il passaggio finale consiste nella creazione di nuovi gruppi di punti Civil 3D dai punti COGO raggruppati.
Quando si esegue il grafico, non c'รจ nulla da vedere nell'anteprima di sfondo di Dynamo perchรฉ non stiamo lavorando con la geometria. L'unico modo per vedere se il grafico viene eseguito correttamente รจ controllare l'Area strumenti o osservare le anteprime di output dei nodi. Tuttavia, se si esegue il grafico utilizzando il Lettore Dynamo, รจ possibile fornire ulteriori commenti sui risultati del grafico generando un riepilogo dei gruppi di punti creati. ร sufficiente fare clic con il pulsante destro del mouse su un nodo e impostarlo su ร output. In questo caso, per visualizzare i risultati viene utilizzato un nodo Watch rinominato.
Di seguito รจ riportato un esempio di esecuzione del grafico mediante il Lettore Dynamo.
Se non si conosce il Lettore Dynamo, consultare la sezione .
๐ Missione compiuta!
Ecco alcune idee su come espandere le funzionalitร di questo grafico.
Modificare il raggruppamento di punti in modo che si basi sulla descrizione completa anzichรฉ sulla descrizione non elaborata.
Raggruppare i punti in altre categorie predefinite scelte (ad esempio, "Foto del suolo", "Monumenti" e cosรฌ via).
Creare automaticamente superfici TIN per i punti in determinati gruppi.
Se il formato piรน semplice di dati รจ rappresentato dai numeri, il modo piรน semplice per correlare tali numeri รจ la matematica. Dai semplici operatori come la divisione fino alle funzioni trigonometriche e alle formule piรน complesse, la matematica รจ un ottimo modo per iniziare ad esplorare relazioni e modelli numerici.
Gli operatori sono un insieme di componenti che utilizzano funzioni algebriche con due valori di input numerico, che producono un valore di output (addizione, sottrazione, moltiplicazione, divisione e cosรฌ via). Questi sono disponibili in Operators > Actions.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Combinare operatori e variabili per formare una relazione piรน complessa mediante le formule. Utilizzare i dispositivi di scorrimento per creare una formula che possa essere controllata con i parametri di input.
Creare una sequenza di numeri che rappresenta la "t" nell'equazione parametrica, pertanto si desidera utilizzare un elenco di dimensioni sufficienti per definire una spirale.
Number Sequence: definire una sequenza di numeri in base a tre input: start, amount e step.
!
2. Con il passaggio precedente รจ stato creato un elenco di numeri per definire il dominio parametrico. Quindi, creare un gruppo di nodi che rappresenta l'equazione della spirale aurea.
La spirale aurea viene definita come l'equazione:
L'immagine seguente rappresenta la spirale aurea sotto forma di programmazione visiva. Quando si scorre il gruppo di nodi, provare a prestare attenzione al parallelo tra il programma visivo e l'equazione scritta.
!
a. Number Slider: aggiungere due dispositivi di scorrimento numerici all'area di disegno. Questi dispositivi di scorrimento rappresenteranno le variabili a e b dell'equazione parametrica. Rappresentano una costante flessibile o parametri che รจ possibile regolare per ottenere il risultato desiderato.
b. Multiplication (*): il nodo della moltiplicazione รจ rappresentato da un asterisco. Questa opzione verrร utilizzata ripetutamente per collegare le variabili della moltiplicazione.
c. Math.RadiansToDegrees: i valori "t" devono essere convertiti in gradi per la loro valutazione nelle funzioni trigonometriche. Tenere presente che, in Dynamo, per default vengono utilizzati i gradi per valutare queste funzioni.
d. Math.Pow: come funzione di "t" e del numero "e" si crea la sequenza di Fibonacci.
Ora, la maggior parte dei nodi del passaggio precedente funzionerร correttamente, ma richiede molto lavoro. Per creare un workflow piรน efficiente, esaminare per definire una stringa di espressioni di Dynamo in un nodo. In questa serie successiva di passaggi, verrร utilizzata l'equazione parametrica per disegnare la spirale di Fibonacci.
Point.ByCoordinates: collegare il nodo della moltiplicazione superiore all'input "x" e quello inferiore all'input "y". Viene visualizzata una spirale parametrica di punti sullo schermo.
!
Polycurve.ByPoints: collegare Point.ByCoordinates del passaggio precedente a points. ร possibile lasciare connectLastToFirst senza input perchรฉ non si sta creando una curva chiusa. In questo modo si crea una spirale che passa per ogni punto definito nel passaggio precedente.
!
A questo punto รจ stata completata la spirale di Fibonacci. Da qui procedere ulteriormente con due esercizi separati, che si chiameranno Nautilus e Girasole. Si tratta di astrazioni di sistemi naturali, ma le due diverse applicazioni della spirale di Fibonacci saranno ben rappresentate.
Circle.ByCenterPointRadius: in questo caso, verrร utilizzato un nodo Circle con gli stessi input del passaggio precedente. Il valore di default del raggio รจ 1.0, pertanto viene visualizzato un output immediato dei cerchi. Diventa immediatamente evidente l'ulteriore divergenza dei punti rispetto all'origine.
!
Number Sequence: questa รจ la serie originale di "t". Collegando questo valore al valore del raggio di Circle.ByCenterPointRadius, i centri dei cerchi sono ancora piรน divergenti dall'origine, ma il raggio dei cerchi aumenta, creando uno stravagante grafico a forma di cerchio di Fibonacci.
Punti bonus se lo si rende 3D.
!
Ora che รจ stata creata una conchiglia Nautilus circolare, si puรฒ passare alle griglie parametriche. Si utilizzerร una rotazione di base sulla spirale di Fibonacci per creare una griglia di Fibonacci e il risultato verrร modellato dopo la .
Come punto di partenza, iniziare con lo stesso passaggio dell'esercizio precedente: la creazione di una serie di punti della spirale con il nodo Point.ByCoordinates.
Quindi, seguire questi mini passaggi per generare una serie di spirali con rotazione diversa.
!
a. Geometry.Rotate: sono disponibili diverse opzioni di Geometry.Rotate; assicurarsi di aver scelto il nodo con geometry, basePlane e degrees come input. Collegare Point.ByCoordinates all'input geometry. Fare clic con il pulsante destro del mouse su questo nodo e verificare che il collegamento sia impostato su Globale.
b. Plane.XY: collegare all'input basePlane. Si ruoterร attorno all'origine, che รจ la stessa posizione della base della spirale.
c. Range: per l'input degrees, si desidera creare piรน rotazioni. ร possibile farlo rapidamente con un componente di Range. Collegarlo all'input degrees.
L'output sta iniziando a somigliare ad un vortice. Regolare alcuni dei parametri di Range e vedere come cambiano i risultati.
Modificare la dimensione di incremento del nodo Range da 120.000 a 36.600. Notare che in questo modo si creano piรน rotazioni e quindi si fornisce una griglia piรน densa.
!
Modificare la dimensione di incremento del nodo Range da 36.000 a 3.600. In questo modo si ottiene una griglia molto piรน densa e la direzionalitร della spirale non รจ chiara. Ecco, รจ stato creato un girasole.
!
Se si desidera costruire modelli piรน complessi che non possono essere creati da una singola superficie o se si vuole definire un volume esplicito, occorre ora entrare nel regno dei (e delle PolySurface). Anche un cubo semplice รจ sufficientemente complesso da richiedere sei superfici, una per ogni faccia. I solidi introducono due concetti chiave a differenza delle superfici: una descrizione topologica piรน rifinita (facce, spigoli, vertici) e operazioni booleane.
Si possono utilizzare le per modificare i solidi. Si utilizzeranno alcune operazioni booleane per creare una palla riccio.
!
Sphere.ByCenterPointRadius: creare il solido di base.
Topology.Faces, Face.SurfaceGeometry: eseguire una query sulle facce del solido e convertirle in geometria di superficie. In questo caso, la sfera presenta un'unica faccia.
Cone.ByPointsRadii
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Le operazioni booleane sono complesse e possono essere lente da calcolare. ร possibile utilizzare la funzionalitร Congela per sospendere l'esecuzione dei nodi selezionati e dei nodi a valle interessati.
!
Utilizzare il menu contestuale accessibile con il pulsante destro del mouse per congelare l'operazione di unione dei solidi.
Il nodo selezionato e tutti i nodi a valle verranno visualizzati in anteprima in modalitร semitrasparente di colore grigio chiaro e i fili interessati verranno visualizzati come linee tratteggiate. Anche l'anteprima della geometria interessata sarร semitrasparente. ร ora possibile modificare i valori a monte senza calcolare l'unione booleana.
Per scongelare i nodi, fare clic con il pulsante destro del mouse e deselezionare Congela.
ร possibile leggere ulteriori informazioni sul congelamento dei nodi nella sezione [4_nodes_and_wires](../../4_nodes_and_wires/ "mention").
I solidi sono costituiti da una o piรน superfici che contengono volume mediante un contorno chiuso che definisce l'"entrata" o l'"uscita". Indipendentemente dal numero di superfici presenti, รจ necessario che formino un volume "ermetico" per essere considerate un solido. ร possibile creare solidi unendo superfici o PolySurface o utilizzando operazioni quali loft, sweep e rivoluzione. Anche le primitive sfera, cubo, cono e cilindro sono solidi. Un cubo con almeno una faccia rimossa viene considerato come PolySurface, che presenta proprietร simili, ma non รจ un solido.
Un piano รจ composto da una singola superficie e non รจ un solido.
Una sfera รจ costituita da una superficie, ma รจ un solido.
Un cono รจ composto da due superfici unite per creare un solido.
I solidi sono costituiti da tre tipi di elementi: vertici, spigoli e facce. Le facce sono le superfici che compongono il solido. Gli spigoli sono le curve che definiscono il collegamento tra facce adiacenti, mentre i vertici rappresentano i punti iniziale e finale di tali curve. Questi elementi possono essere sottoposti a query utilizzando i nodi della topologia.
Facce
Spigoli
Vertici
I solidi possono essere modificati raccordando o smussando i loro spigoli per eliminare angoli acuti. L'operazione di smusso crea una superficie rigata tra due facce, mentre un raccordo si unisce tra le facce per mantenere la tangenza.
Cubo
Cubo smussato
Cubo raccordato
Le operazioni booleane sui solidi sono metodi per combinare due o piรน solidi. Una singola operazione booleana significa in realtร eseguire quattro operazioni:
Intersecare due o piรน oggetti.
Dividerli in corrispondenza delle intersezioni.
Eliminare le parti della geometria indesiderate.
Ciรฒ rende le operazioni booleane sui solidi un potente processo che consente di risparmiare tempo. Sono disponibili tre operazioni booleane sui solidi che consentono di distinguere quali parti della geometria vengono mantenute.
Unione: consente di rimuovere le parti sovrapposte dei solidi e di unirle in un unico solido.
Differenza: consente di sottrarre un solido da un altro. Il solido da sottrarre รจ noto come strumento. Si noti che รจ possibile cambiare il solido che costituisce lo strumento per mantenere il volume inverso.
Intersezione:
Oltre a queste tre operazioni, in Dynamo sono disponibili i nodi Solid.DifferenceAll e Solid.UnionAll per l'esecuzione di operazioni di differenza e unione con piรน solidi.
UnionAll: operazione di unione con sfera e coni rivolti verso l'esterno.
DifferenceAll: operazione di differenza con sfera e coni rivolti verso l'interno.
Nelle progettazioni computazionali, le curve e le superfici vengono spesso utilizzate come l'impalcatura sottostante per costruire la geometria successiva. Per poter utilizzare questa geometria iniziale come base per la geometria successiva, lo script deve essere in grado di estrarre qualitร quali la posizione e l'orientamento nell'intera area dell'oggetto. Sia le curve che le superfici supportano questa estrazione, che รจ denominata parametrizzazione.
Tutti i punti su una curva possono essere considerati come un parametro unico compreso tra 0 e 1. Se si desidera creare una NurbsCurve basata su diversi punti di controllo o interpolati, il primo punto avrร il parametro 0 e l'ultimo punto avrร il parametro 1. Non รจ possibile sapere in anticipo quale sia l'esatto parametro qualunque sia il punto intermedio, il che potrebbe sembrare una limitazione grave, tuttavia ciรฒ รจ mitigato da una serie di funzioni di utilitร . Le superfici hanno una parametrizzazione simile a quella delle curve, anche se con due parametri invece di uno, denominati u e v. Se si desidera creare una superficie con i seguenti punti:
pts = [ [p1, p2, p3],
[p4, p5, p6],
[p7, p8, p9] ];p1 avrebbe il parametro u = 0 v = 0, mentre p9 avrebbe i parametri u = 1 v = 1.
La parametrizzazione non รจ particolarmente utile per determinare i punti utilizzati per generare le curve; il suo uso principale รจ determinare le posizioni dei punti intermedi generati dai costruttori NurbsCurve e NurbsSurface.
Le curve hanno un metodo PointAtParameter, che utilizza un singolo argomento doppio compreso tra 0 e 1 e restituisce l'oggetto Point in corrispondenza di tale parametro. Ad esempio, questo script trova i Point in corrispondenza dei parametri 0, .1, .2, .3, .4, .5, .6, .7, .8, .9 e 1:
Analogamente, le superfici hanno un metodo PointAtParameter che utilizza due argomenti, il parametro u e v del Point generato.
Sebbene l'estrazione di punti singoli su una curva e una superficie possa essere utile, gli script spesso richiedono la conoscenza delle particolari caratteristiche geometriche in corrispondenza di un parametro, ad esempio qual รจ la direzione della curva o della superficie. Il metodo CoordinateSystemAtParameter non solo individua la posizione, ma anche un CoordinateSystem orientato in corrispondenza del parametro di una curva o superficie. Ad esempio, il seguente script estrae i CoordinateSystem orientati lungo una superficie di rivoluzione e utilizza l'orientamento dei CoordinateSystem per generare linee che si staccano dalla normale alla superficie:
Come detto in precedenza, la parametrizzazione non รจ sempre uniforme per tutta la lunghezza di una curva o di una superficie, ovvero il parametro 0.5 non corrisponde sempre al punto medio e 0.25 non sempre corrisponde al punto un quarto lungo una curva o superficie. Per ovviare a questa limitazione, le curve dispongono di un insieme aggiuntivo di comandi di parametrizzazione che consentono di trovare un punto in corrispondenza di lunghezze specifiche lungo una curva.
Alcuni oggetti della geometria possono essere creati indicando in modo esplicito le coordinate x, y e z nello spazio tridimensionale. Piรน spesso, tuttavia, la geometria viene spostata nella sua posizione finale utilizzando le trasformazioni geometriche sull'oggetto stesso o sul relativo CoordinateSystem sottostante.
La trasformazione geometrica piรน semplice รจ una traslazione, che sposta un oggetto in base ad un numero specificato di unitร nelle direzioni x, y e z.
Sebbene tutti gli oggetti in Dynamo possano essere convertiti aggiungendo il metodo .Translate alla fine del nome dell'oggetto, le trasformazioni piรน complesse richiedono la trasformazione dell'oggetto da un CoordinateSystem sottostante ad un nuovo CoordinateSystem. Ad esempio, per ruotare un oggetto di 45 gradi attorno all'asse x, รจ necessario trasformare l'oggetto dal CoordinateSystem esistente senza rotazione ad un CoordinateSystem che รจ stato ruotato di 45 gradi attorno all'asse x con il metodo .Transform:
Oltre a essere traslati e ruotati, รจ possibile creare anche CoordinateSystems messi in scala o tagliati. Un CoordinateSystem puรฒ essere messa in scala con il metodo .Scale:
I CoordinateSystems tagliati vengono creati mediante l'inserimento di vettori non ortogonali nel costruttore CoordinateSystem.
La messa in scala e il taglio sono trasformazioni geometriche relativamente piรน complesse rispetto alla rotazione e alla traslazione, pertanto non tutti gli oggetti di Dynamo possono essere sottoposti a queste trasformazioni. Nella seguente tabella sono riportati i contorni degli oggetti di Dynamo che possono presentare CoordinateSystem messi in scala in modo non uniforme e i CoordinateSystem tagliati.
Lo sviluppo di sagome cinematiche per la convalida dello spazio libero รจ una parte importante della progettazione ferroviaria. Dynamo puรฒ essere utilizzato per generare solidi per la sagoma anzichรฉ creare e gestire sottoassiemi complessi di modellatori per eseguire il processo.
๐ฏ Utilizzare un blocco del profilo del veicolo per generare solidi 3D della sagoma dello spazio libero lungo un modellatore.
La logica, o piรน specificatamente, la logica condizionale, consente di specificare un'azione o un gruppo di azioni in base ad un test. Dopo aver valutato il test, sarร presente un valore booleano che rappresenta True o False che รจ possibile utilizzare per controllare il flusso del programma.
Le variabili numeriche possono memorizzare un intero intervallo di numeri diversi. Le variabili booleane possono memorizzare solo due valori indicati come True o False, Yes o No, 1 o 0. Per eseguire i calcoli, raramente vengono utilizzati valori booleani a causa del loro intervallo limitato.
La progettazione ingegneristica di un tipico complesso residenziale prevede la collaborazione con diversi impianti di pubblica utilitร sotterranei, come le fognature, lo scarico delle acque piovane, l'acqua potabile o altri. In questo esempio si dimostrerร come Dynamo puรฒ essere utilizzato per disegnare le connessioni dei servizi da una conduttura di distribuzione ad un determinato lotto (ad esempio, una particella). ร frequente che ogni lotto richieda una connessione dei servizi, il che comporta un notevole e noioso lavoro di posizionamento di tutti i servizi. Dynamo puรฒ accelerare il processo disegnando automaticamente la geometria necessaria con precisione, oltre a fornire input flessibili che possono essere adattati agli standard delle agenzie locali.
Dynamo for Civil 3D contiene un meccanismo molto potente per "memorizzare" gli oggetti creati da ciascun nodo. Questo meccanismo รจ denominato unione di oggetti e consente di produrre un grafico di Dynamo con risultati coerenti ogni volta che viene eseguito nello stesso documento. Sebbene questo sia altamente auspicabile in molte situazioni, ce ne sono altre in cui si desidera avere un maggiore controllo sul funzionamento di Dynamo. Questa sezione aiuterร a capire come funziona il binding di oggetti e come รจ possibile sfruttarlo.
Considerare questo grafico che crea un cerchio nello spazio modello sul layer corrente.
// create a point at x = 1, y = 2, z = 3
p = Point.ByCoordinates(1, 2, 3);
// translate the point 10 units in the x direction,
// -20 in y, and 50 in z
// p2โs new position is x = 11, y = -18, z = 53
p2 = p.Translate(10, -20, 50);Facce della mesh
Poligono di controllo della superficie
Punto isoparametrico
Cornice della superficie
Mesh
Bordo nudo
Rete della mesh
Spigoli mesh
Normale del vertice
Faccia della mesh/Normale della faccia della mesh
L'output per Circle.ByCenterPointRadius รจ un elenco di cinque cerchi i cui centri corrispondono all'elenco originale di punti.
Rectangle.ByWidthLength: collegare i piani del passaggio precedente all'input plane e utilizzare un Code Block con un valore di 10 per specificare la larghezza e la lunghezza.
Surface.UVParameterAtPoint: collegare l'output Point del nodo Polygon.Points e l'output Surface del nodo Surface.ByPatch per restituire il parametro UV in ogni punto.
Surface.PointAtParameter: collegare la superficie importata, nonchรฉ le coordinate u e v. Ora dovrebbe essere visualizzata una griglia di punti 3D sulla superficie di destinazione.
{"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};Collegare Code Block all'input del valore Element.SetParameterByName*. Con l'opzione Automatico selezionata, i risultati verranno visualizzati automaticamente.
Definire un nuovo Code Block e collegare i dispositivi di scorrimento: {so,mo,no,fbl};.
f. Watch: ora รจ possibile vedere che l'output comprende due elenchi, che saranno le coordinate x e y dei punti utilizzati per generare la spirale.
!
Add (+)
var[]...[], var[]...[]
var[]...[]
!
Subtract (-)
var[]...[], var[]...[]
var[]...[]
!
Multiply (*****)
var[]...[], var[]...[]
var[]...[]
!
Divide (/)
var[]...[], var[]...[]
var[]...[]
Solid.UnionAll: unire i coni e la sfera.
Topology.Edges: eseguire una query sugli spigoli del nuovo solido.
Solid.Fillet: raccordare gli spigoli della palla riccio.
Tutti i nodi interessati e le anteprime della geometria associata verranno aggiornati e ripristineranno la modalitร di anteprima standard.
Un cilindro รจ composto da tre superfici unite per creare un solido.
Un cubo รจ composto da sei superfici unite per creare un solido.
Unire tutto di nuovo insieme.
2017
2018
2019
2020
2.1.0 - Revit 2020 e versioni successive include ora Dynamo e riceve gli aggiornamenti come Revit.
N/A
Il file pkg รจ un file di testo di base che definisce le impostazioni del pacchetto. Lo si puรฒ ignorare per adesso.





















Generare un riepilogo nel Lettore Dynamo






Quali query รจ possibile eseguire dall'elenco? Consente di accedere alle proprietร esistenti.
Numero di carte nel mazzo? 52.
Numero di semi? 4.
Materiale? Carta.
Lunghezza? 3,5" o 89 mm.
Larghezza? 2,5" o 64 mm.
Quali azioni รจ possibile eseguire nell'elenco? In questo modo l'elenco cambia in base ad una determinata operazione.
ร possibile mischiare il mazzo.
ร possibile ordinare il mazzo in base al valore.
ร possibile ordinare il mazzo in base al seme.
ร possibile dividere il mazzo.
ร possibile spartire il mazzo con singole mani.
ร possibile selezionare una carta specifica nel mazzo.
Tutte le operazioni elencate sopra hanno nodi di Dynamo analoghi per l'utilizzo di elenchi di dati generici. Nelle lezioni riportate di seguito saranno illustrate alcune delle operazioni fondamentali che รจ possibile eseguire sugli elenchi.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
L'immagine seguente รจ il grafico di base che si sta disegnando tra due cerchi per rappresentare le operazioni di base con gli elenchi. Verrร illustrato come gestire i dati all'interno di un elenco e verranno mostrati i risultati visivi attraverso le azioni con gli elenchi riportate di seguito.
!
Iniziare con un Code Block con un valore di
500;.Collegarlo all'input x di un nodo Point.ByCoordinates.
Collegare il nodo del passaggio precedente all'input origin di un nodo Plane.ByOriginNormal.
Utilizzando un nodo Circle.ByPlaneRadius, collegare il nodo del passaggio precedente all'input plane.
Utilizzando Code Block, designare un valore di
50;per radius. Questo รจ il primo cerchio che verrร creato.Con un nodo Geometry.Translate, spostare il cerchio verso l'alto di 100 unitร nella direzione Z.
Con un nodo Code Block, definire un intervallo di dieci numeri compreso tra 0 e 1 con questa riga di codice:
0..1..#10;.Collegare il Code Block del passaggio precedente all'input param di due nodi Curve.PointAtParameter. Collegare Circle.ByPlaneRadius all'input curve del nodo superiore e Geometry.Translate all'input curve del nodo sottostante.
Utilizzando Line.ByStartPointEndPoint, collegare i due nodi Curve.PointAtParameter.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Il nodo List.Count รจ semplice: calcola il numero di valori in un elenco e restituisce tale numero. Questo nodo si diversifica sempre di piรน quando si utilizzano elenchi di elenchi, come dimostreremo nelle sezioni successive.
Il nodo List.Count restituisce il numero di linee nel nodo Line.ByStartPointEndPoint. In questo caso, il valore รจ 10, che corrisponde al numero di punti creati dal nodo Code Block originale.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
List.GetItemAtIndex รจ un modo fondamentale per eseguire una query su una voce dell'elenco.
Innanzitutto, fare clic con il pulsante destro del mouse sul nodo Line.ByStartPointEndPoint per disattivare la relativa anteprima.
Utilizzando il nodo List.GetItemAtIndex, selezionare l'indice "0" o la prima voce dell'elenco di linee.
Modificare il valore del dispositivo di scorrimento compreso tra 0 e 9 per selezionare un elemento diverso utilizzando List.GetItemAtIndex.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
List.Reverse inverte l'ordine di tutte le voci di un elenco.
Per visualizzare correttamente l'elenco invertito di linee, creare piรน linee modificando Code Block in
0..1..#50;.Duplicare il nodo Line.ByStartPointEndPoint, inserire un nodo List.Reverse tra Curve.PointAtParameter e il secondo Line.ByStartPointEndPoint.
Utilizzare i nodi Watch 3D per visualizzare in anteprima due risultati diversi. Il primo mostra il risultato senza un elenco invertito. Le linee si collegano verticalmente ai punti adiacenti. L'elenco invertito, tuttavia, collegherร tutti i punti all'ordine opposto nell'altro elenco.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
List.ShiftIndices รจ un buono strumento per creare torsioni o modelli elicoidali o qualsiasi altra manipolazione di dati simile. Questo nodo sposta le voci di un elenco in base ad un determinato numero di indici.
Nello stesso processo dell'elenco inverso, inserire List.ShiftIndices in Curve.PointAtParameter e Line.ByStartPointEndPoint.
Utilizzando un Code Block, รจ stato designato un valore di "1" per spostare l'elenco in base ad un indice.
Notare che la modifica รจ lieve, ma tutte le linee nel nodo Watch 3D inferiore sono state spostate in base ad un indice quando vengono collegate all'altro gruppo di punti.
Modificando Code Block in un valore superiore, ad esempio "30", si noterร una differenza significativa nelle linee diagonali. In questo caso, lo spostamento funziona come il diaframma di una fotocamera, creando una torsione nella forma cilindrica originale.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
List.FilterByBooleanMask rimuoverร alcune voci in base ad un elenco di valori booleani o valori che riportano "true" o "false".
Per creare un elenco di valori che riportano "true" o "false", รจ necessario un po' piรน di lavoro.
Utilizzando un Code Block, definire un'espressione con la sintassi:
0..List.Count(list);. Collegare il nodo Curve.PointAtParameter all'input list. Si esaminerร in maniera dettagliata questa configurazione nel capitolo sul blocco di codice, ma in questo caso la riga di codice fornisce un elenco che rappresenta ogni indice del nodo Curve.PointAtParameter.Utilizzando un nodo %** (modulo)**, collegare l'output di Code Block all'input x e un valore di 4 all'input y. Questo fornirร il resto quando si divide l'elenco di indici per 4. % (modulo) รจ un nodo molto utile per la creazione di modelli. Tutti i valori verranno letti come possibili resti di 4: 0, 1, 2, 3.
Dal nodo %** (modulo)**, si sa che un valore di 0 indica che l'indice รจ divisibile per 4 (0, 4, 8 e cosรฌ via). Utilizzando un nodo = =, รจ possibile verificare la divisibilitร provando con un valore di "0".
Il nodo Watch mostra solo questo: รจ presente un modello true/false che riporta: true, false, false, false....
Utilizzando questo modello true/false, collegarlo all'input mask di due nodi List.FilterByBooleanMask.
Collegare il nodo Curve.PointAtParameter ad ogni input list per List.FilterByBooleanMask.
L'output di Filter.ByBooleanMask riporta "in" e "out". "In" rappresenta i valori che hanno un valore mask di "true", mentre "out" rappresenta i valori che hanno un valore di "false". Collegando gli output "in" agli input startPoint ed endPoint di un nodo Line.ByStartPointEndPoint, รจ stato creato un elenco filtrato di linee.
Il nodo Watch 3D mostra che le linee sono minori dei punti. ร stato selezionato solo il 25% dei nodi filtrando solo i valori true.
pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(6, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(3, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);
crv = NurbsCurve.ByPoints(pts);
pts_at_param = crv.PointAtParameter(0..1..#11);
// draw Lines to help visualize the points
lines = Line.ByStartPointEndPoint(pts_at_param,
Point.ByCoordinates(4, 6, 0));No
No
Linea
Sรฌ
Sรฌ
Piano
No
No
Punto
Sรฌ
Sรฌ
Poligono
No
No
Uniforme
No
No
Superficie
No
No
Testo
No
No
Arco
No
No
NurbsCurve
Sรฌ
Sรฌ
NurbsSurface
No
No
Cerchio
/*This is a multi-line comment,
which continues for
multiple lines*/
def FunctionName(in1,in2)
{
//This is a comment
sum = in1+in2;
return sum;
};FunctionName(in1,in2);def sphereByZ(inputPt)
{
};def sphereByZ(inputPt,radiusRatio)
{
//get Z Value, ise ot to drive radius of sphere
sphereRadius=inputPt.Z;
};sphereByZ(Pt)def sphereByZ(inputPt,radiusRatio)
{
//get Z Value, use it to drive radius of sphere
sphereRadius=inputPt.Z/radiusRatio;
//Define Sphere Geometry
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
//Define output for function
return sphere;
};// create a CoordinateSystem at x = 0, y = 0, z = 0,
// no rotations, scaling, or sheering transformations
cs = CoordinateSystem.Identity();// create a CoordinateSystem at a specific location,
// no rotations, scaling, or sheering transformations
x_pos = 3.6;
y_pos = 9.4;
z_pos = 13.0;
origin = Point.ByCoordinates(x_pos, y_pos, z_pos);
identity = CoordinateSystem.Identity();
cs = CoordinateSystem.ByOriginVectors(origin,
identity.XAxis, identity.YAxis, identity.ZAxis);// create a point with x, y, and z coordinates
x_pos = 1;
y_pos = 2;
z_pos = 3;
pCoord = Point.ByCoordinates(x_pos, y_pos, z_pos);
// create a point in a specific coordinate system
cs = CoordinateSystem.Identity();
pCoordSystem = Point.ByCartesianCoordinates(cs, x_pos,
y_pos, z_pos);
// create a point on a cylinder with the following
// radius and height
radius = 5;
height = 15;
theta = 75.5;
pCyl = Point.ByCylindricalCoordinates(cs, radius, theta,
height);
// create a point on a sphere with radius and two angles
phi = 120.3;
pSphere = Point.BySphericalCoordinates(cs, radius,
theta, phi);p1 = Point.ByCoordinates(-2, -5, -10);
p2 = Point.ByCoordinates(6, 8, 10);
// a line segment between two points
l2pts = Line.ByStartPointEndPoint(p1, p2);
// a line segment at p1 in direction 1, 1, 1 with
// length 10
lDir = Line.ByStartPointDirectionLength(p1,
Vector.ByCoordinates(1, 1, 1), 10);// create a cuboid with specified lengths
cs = CoordinateSystem.Identity();
cub = Cuboid.ByLengths(cs, 5, 15, 2);
// create several cones
p1 = Point.ByCoordinates(0, 0, 10);
p2 = Point.ByCoordinates(0, 0, 20);
p3 = Point.ByCoordinates(0, 0, 30);
cone1 = Cone.ByPointsRadii(p1, p2, 10, 6);
cone2 = Cone.ByPointsRadii(p2, p3, 6, 0);
// make a cylinder
cylCS = cs.Translate(10, 0, 0);
cyl = Cylinder.ByRadiusHeight(cylCS, 3, 10);
// make a sphere
centerP = Point.ByCoordinates(-10, -10, 0);
sph = Sphere.ByCenterPointRadius(centerP, 5);pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(3, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(5, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);
pts[7] = Point.ByCoordinates(4, 0, 7);
crv = NurbsCurve.ByPoints(pts);
axis_origin = Point.ByCoordinates(0, 0, 0);
axis = Vector.ByCoordinates(0, 0, 1);
surf = Surface.ByRevolve(crv, axis_origin, axis, 90,
140);
cs_array = surf.CoordinateSystemAtParameter(
(0..1..#7)<1>, (0..1..#7)<2>);
def make_line(cs : CoordinateSystem) {
lines_start = cs.Origin;
lines_end = cs.Origin.Translate(cs.ZAxis, -0.75);
return = Line.ByStartPointEndPoint(lines_start,
lines_end);
}
lines = make_line(Flatten(cs_array));cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
10, 10, 10);
new_cs = CoordinateSystem.Identity();
new_cs2 = new_cs.Rotate(Point.ByCoordinates(0, 0),
Vector.ByCoordinates(1,0,0.5), 25);
// get the existing coordinate system of the cube
old_cs = CoordinateSystem.Identity();
cube2 = cube.Transform(old_cs, new_cs2);cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
10, 10, 10);
new_cs = CoordinateSystem.Identity();
new_cs2 = new_cs.Scale(20);
old_cs = CoordinateSystem.Identity();
cube2 = cube.Transform(old_cs, new_cs2);new_cs = CoordinateSystem.ByOriginVectors(
Point.ByCoordinates(0, 0, 0),
Vector.ByCoordinates(-1, -1, 1),
Vector.ByCoordinates(-0.4, 0, 0));
old_cs = CoordinateSystem.Identity();
cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
5, 5, 5);
new_curves = cube.Transform(old_cs, new_cs);
Utilizzo delle linee caratteristiche del modellatore
Trasformazione della geometria tra sistemi di coordinate
Creazione di solidi tramite loft
Controllo del funzionamento dei nodi con le impostazioni di collegamento
Questo grafico verrร eseguito su Civil 3D 2020 e versioni successive.
Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.
Ecco una panoramica della logica di questo grafico.
Ottenere le linee caratteristiche dalla linea base del modellatore specificata
Generare sistemi di coordinate lungo la linea caratteristica del modellatore con la spaziatura desiderata
Trasformare la geometria del blocco del profilo in sistemi di coordinate
Eseguire il loft di un solido tra i profili
Creare i solidi in Civil 3D
Procediamo!
Il primo passaggio consiste nell'ottenere i dati sul modellatore. Selezionare il modello di modellatore in base al nome, ottenere una linea base specifica all'interno del modellatore e ottenere una linea caratteristica all'interno della linea base secondo il relativo codice punto.
Ora si procederร alla generazione di sistemi di coordinate lungo le linee caratteristiche del modellatore tra una progressiva iniziale e una progressiva finale. Questi sistemi di coordinate verranno utilizzati per allineare la geometria del blocco del profilo del veicolo al modellatore.
Se non si conoscono i sistemi di coordinate, consultare la sezione Vettore, piano e sistema di coordinate.
Notare il valore XXX nell'angolo inferiore destro del nodo. Ciรฒ significa che le impostazioni di collegamento del nodo sono impostate su Globale, operazione che รจ necessaria per generare i sistemi di coordinate in corrispondenza degli stessi valori di progressiva per entrambe le linee caratteristiche.
Se non si conosce il collegamento di nodi, consultare la sezione Che cos'รจ un elenco?.
Ora รจ necessario creare in qualche modo una serie di profili di veicoli lungo le linee caratteristiche. Si procederร alla trasformazione della geometria dalla definizione di blocco del profilo del veicolo utilizzando il nodo Geometry.Transform. Questo รจ un concetto complesso da visualizzare, quindi prima di osservare i nodi, ecco un grafico che mostra cosa succederร .
Quindi essenzialmente si tratta di "prendere" la geometria di Dynamo da una singola definizione di blocco e di spostarla/ruotarla, creando al contempo una serie lungo la linea caratteristica. Forte! Ecco come appare la sequenza di nodi.
In questo modo la definizione di blocco viene ottenuta dal documento.
Questi nodi ottengono la geometria di Dynamo degli oggetti all'interno del blocco.
Questi nodi definiscono essenzialmente il sistema di coordinate da cui si sta trasformando la geometria.
Infine, questo nodo esegue il lavoro effettivo di trasformazione della geometria.
Notare il collegamento Piรน lungo su questo nodo.
Ed ecco cosa si ottiene in Dynamo.
Buone notizie! Il lavoro duro รจ finito. Ora รจ sufficiente generare solidi tra i profili. Ciรฒ รจ facilmente possibile con il nodo Solid.ByLoft.
Ed ecco il risultato. Tenere presente che questi sono solidi di Dynamo, ma รจ comunque necessario crearli in Civil 3D.
Il passaggio finale consiste nell'eseguire l'output dei solidi generati nello spazio modello. Verrร anche applicato del colore per renderli facilmente visibili.
Di seguito รจ riportato un esempio di esecuzione del grafico mediante il Lettore Dynamo.
Se non si conosce il Lettore Dynamo, consultare la sezione Lettore Dynamo.
๐ Missione compiuta!
Ecco alcune idee su come espandere le funzionalitร di questo grafico.
Aggiungere la possibilitร di utilizzare intervalli di progressive differenti separatamente per ogni binario.
Dividere i solidi in segmenti piรน piccoli che possono essere analizzati singolarmente per ricercare eventuali interferenze.
Verificare se i solidi della sagoma si intersecano con gli oggetti e colorano quelli che incontrano.

La maggior parte dei nodi in Dynamo รจ composta da cinque parti. Sebbene vi siano eccezioni, ad esempio i nodi di input, la struttura di ogni nodo puรฒ essere descritta come segue:
!
Nome: il nome del nodo con una convenzione di denominazione
Category.Name.Corpo principale: il corpo principale del nodo. Facendo clic con il pulsante destro del mouse qui vengono visualizzate le opzioni a livello dell'intero nodo.
Porte (entrata e uscita): i ricettori dei fili che forniscono i dati di input al nodo e i risultati dell'azione del nodo.
Valore di default: fare clic con il pulsante destro del mouse su una porta di input. Alcuni nodi presentano valori di default che รจ possibile utilizzare o meno.
Icona di collegamento: indica l' specificata per gli input dell'elenco corrispondenti (verranno fornite ulteriori informazioni in seguito).
Gli input e gli output per i nodi sono denominati porte e fungono da prese per i fili. I dati entrano nel nodo mediante le porte a sinistra e fuoriescono dal nodo dopo che รจ stata eseguita l'operazione a destra.
Si prevede che le porte ricevano dati di un certo tipo. Ad esempio, se si collega un numero come 2.75 alle porte su un nodo Point.ByCoordinates, la creazione di un punto verrร eseguita correttamente. Se tuttavia si specifica Red nella stessa porta, verrร generato un errore.
Suggerimento Posizionare il cursore su una porta per visualizzare una descrizione comando contenente il tipo di dati previsto.
!
Etichetta della porta
Descrizione comando
Tipo di dati
Default Value
In Dynamo viene fornita un'indicazione dello stato di esecuzione del programma visivo tramite il rendering dei nodi con diversi schemi di colori basati sullo stato di ogni nodo. La gerarchia degli stati segue questa sequenza: Errore > Avviso > Informazioni > Anteprima.
Se si posiziona il cursore o si fa clic con il pulsante destro del mouse sul nome o sulle porte, vengono visualizzate informazioni e opzioni aggiuntive.
Input soddisfatti: un nodo con barre verticali blu sulle relative porte di input รจ collegato correttamente e tutti i relativi input sono connessi correttamente.
Input non soddisfatti: รจ necessario che tali input siano collegati ad un nodo con una barra verticale rossa su una o piรน porte di input.
Funzione: un nodo che genera una funzione e presenta una barra verticale grigia su una porta di output รจ un nodo di funzione.
Selezionato: i nodi attualmente selezionati hanno un'evidenziazione verde acqua sul bordo.
Congelato: un nodo blu traslucido viene congelato, sospendendo l'esecuzione del nodo.
Anteprima disattivata: una barra di stato grigia sotto il nodo e un'icona a forma di occhio indicano che l'anteprima della geometria per il nodo รจ disattivata.
Avviso: una barra di stato gialla sotto il nodo indica lo stato di avviso, ovvero nel nodo se risultano mancanti dati di input o se sono presenti tipi di dati errati.
Errore: una barra di stato rossa sotto il nodo indica che il nodo si trova in uno stato di errore.
Informazioni: una barra di stato blu al di sotto del nodo indica lo stato Informazioni, che contrassegna le informazioni utili sui nodi. Questo stato puรฒ essere attivato quando si avvicina ad un valore massimo supportato dal nodo, utilizzando un nodo in un modo che ha potenziali impatti sulle prestazioni e cosรฌ via.
Se il programma visivo contiene avvertimenti o errori, in Dynamo verranno fornite ulteriori informazioni sul problema. Qualsiasi nodo giallo avrร anche una descrizione comando sopra il nome. Posizionare il cursore del mouse sull'icona dell'avviso ! o dell'errore ! per espanderla.
Suggerimento Con queste informazioni sulla descrizione comando, esaminare i nodi a monte per verificare se la struttura di dati o il tipo di dati richiesto รจ errato.
!
Descrizione comando di avviso: impossibile interpretare un valore "null" o i dati come Double, ossia un numero.
Utilizzare il nodo Watch per esaminare i dati di input.
A monte il nodo Number memorizza Red e non un numero.
In alcune situazioni, รจ possibile impedire l'esecuzione di nodi specifici nel programma visivo. A tale scopo, รจ possibile congelare il nodo, un'opzione presente nel menu di scelta rapida del nodo.
Congelando un nodo si congelano anche i nodi a valle. In altre parole, verranno congelati anche tutti i nodi che dipendono dall'output di un nodo congelato.
I fili si collegano tra i nodi per creare relazioni e stabilire il flusso del programma visivo. Si puรฒ pensare ai fili letteralmente come fili elettrici che trasmettono impulsi di dati da un oggetto a quello successivo.
I fili collegano la porta di output di un nodo alla porta di input di un altro nodo. Questa direzionalitร definisce il flusso di dati nel programma visivo.
Le porte di input sono sul lato sinistro e le porte di output si trovano sul lato destro dei nodi, pertanto, รจ possibile generalmente affermare che il flusso del programma si sposta da sinistra a destra.
!
Creare un filo facendo clic con il pulsante sinistro del mouse su una porta, quindi facendo clic con il pulsante sinistro del mouse sulla porta di un altro nodo per creare un collegamento. Mentre รจ in corso il processo di creazione di un collegamento, il filo risulterร tratteggiato e verrร eseguito lo snap per diventare linee continue quando รจ stato collegato correttamente.
I dati fluiscono sempre attraverso questo filo dall'output all'input. ร tuttavia possibile creare il filo in entrambe le direzioni in termini di una sequenza di clic sulle porte collegate.
!
Spesso รจ necessario regolare il flusso di programma nel programma visivo modificando i collegamenti rappresentati dai fili. Per modificare un filo, fare clic sulla porta di input del nodo giร collegato. Si hanno ora a disposizione due opzioni:
Per modificare il collegamento in una porta di input, fare clic con il pulsante sinistro del mouse su un'altra porta di input.
Per rimuovere il filo, trascinarlo e fare clic con il pulsante sinistro del mouse sull'area di lavoro.
!
Ricollegare piรน fili utilizzando MAIUSC+clic con pulsante sinistro del mouse.
!
Duplicare un filo mediante CTRL+clic con il pulsante sinistro del mouse.
!
Per default, i fili verranno visualizzati in anteprima con un tratto di colore grigio. Quando si seleziona un nodo, verrร eseguito il rendering di qualsiasi filo collegato con la stessa evidenziazione di color azzurro del nodo.
!
Filo evidenziato
Filo di default
Occultamento di fili per default
Se si preferisce nascondere i fili nel grafico, รจ possibile trovare questa opzione da Vista > Connettori > deselezionare Mostra connettori.
Con questa impostazione, solo i nodi selezionati e i relativi fili di unione verranno mostrati con una leggera evidenziazione verde acqua.
!
ร anche possibile nascondere solo il filo selezionato facendo clic con il pulsante destro del mouse sull'output Nodi > selezionare Nascondi fili.
!
L'istruzione "If" รจ un concetto chiave nella programmazione: "Se ciรฒ รจ vero, allora accade questo, altrimenti succede qualcos'altro. L'azione risultante dell'istruzione รจ determinata da un valore booleano. Esistono diversi modi per definire un'istruzione "If" in Dynamo:
If (If)
test, true, false
risultato
Code Block ((x?y:z);)
x? y, z
risultato
Si esaminerร un breve esempio per ciascuno di questi tre nodi in azione utilizzando l'istruzione "If" condizionale.
In questa immagine, Boolean รจ impostato su True, ovvero il risultato รจ una stringa che riporta: "This is the result if trueโ. I tre nodi che creano l'istruzione If funzionano in modo identico in questo contesto.
!
Anche in questo caso, i nodi funzionano in modo identico. Se Boolean viene modificato in False, il risultato รจ il numero Pi, come definito nell'istruzione If originale.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Si utilizzerร la logica per separare un elenco di numeri in un elenco di numeri pari e un elenco di numeri dispari.
!
a. Range: aggiungere un intervallo di numeri all'area di disegno.
b. Number: aggiungere tre nodi di numeri all'area di disegno. Il valore per ogni nodo Number deve essere: 0.000 per start, 10.000 per end e 1.000 per step.
c. Output: l'output รจ un elenco di 11 numeri da 0 a 10.
d. % (modulo): collegare Range a x e 2.000 a y. In questo modo viene calcolato il resto per ogni numero dell'elenco diviso per 2. L'output di questo elenco fornisce un elenco di valori alternati tra 0 e 1.
e. = = (test di uguaglianza): aggiungere un test di uguaglianza all'area di disegno. Collegare l'output del modulo all'input x e 0.000 all'input y.
f. Watch: l'output del test di uguaglianza รจ un elenco di valori alternati tra true e false. Questi sono i valori utilizzati per separare le voci dell'elenco. 0 (o true) rappresenta i numeri pari e (1 o false) rappresenta i numeri dispari.
g. List.FilterByBoolMask: questo nodo filtra i valori in due elenchi diversi in base al valore booleano di input. Collegare il nodo Range originale all'input list e l'output del test di uguaglianza all'input mask. L'output in rappresenta valori true, mentre l'output out rappresenta valori false.
h. Watch: il risultato รจ ora un elenco di numeri pari e un elenco di numeri dispari. Sono stati utilizzati operatori logici per separare gli elenchi in modelli.
Partendo dalla logica stabilita nel primo esercizio, si applicherร questa configurazione ad un'operazione di modellazione.
2. Partire dall'esercizio precedente con gli stessi nodi. Le uniche eccezioni (oltre a modificare il formato sono):
!
a. Utilizzare un nodo Sequence con questi valori di input.
b. ร stato scollegato l'input list da List.FilterByBoolMask. Questi nodi verranno messi da parte per ora, ma saranno presto utili piรน avanti nell'esercizio.
3. Iniziare creando un gruppo separato del grafico come mostrato nell'immagine precedente. Questo gruppo di nodi rappresenta un'equazione parametrica per definire una curva di linea. Ecco alcune note:
!
a. Il primo Number Slider rappresenta la frequenza dell'onda, deve avere un minimo di 1, un massimo di 4 e un passo di 0.01.
b. Il secondo Number Slider rappresenta l'ampiezza dell'onda, deve avere un minimo di 0, un massimo di 1 e un passo di 0.01.
c. PolyCurve.ByPoints: se il diagramma dei nodi riportato sopra viene copiato, il risultato รจ una curva seno nella finestra di anteprima di Dynamo.
Il metodo indicato qui per gli input รจ questo: utilizzare i nodi Number per ottenere proprietร piรน statiche e i dispositivi di scorrimento numerici su quelle piรน flessibili. Si desidera mantenere l'intervallo di numeri originale definito all'inizio di questo passaggio. Tuttavia, la curva seno creata qui dovrebbe avere una certa flessibilitร . ร possibile spostare questi dispositivi di scorrimento per controllare l'aggiornamento della frequenza e dell'ampiezza della curva.
!
4. Si passerร alla definizione, quindi si osserverร il risultato finale in modo da poter fare riferimento a quello che si sta ottenendo. I primi due passaggi vengono eseguiti separatamente. Ora si desidera collegarli. Si utilizzerร la curva seno di base per determinare la posizione dei componenti della cerniera e si utilizzerร la logica true/false per alternare tra caselle di piccole dimensioni e caselle piรน grandi.
!
a. Math.RemapRange: utilizzando la sequenza numerica creata nel passaggio 02, creare una nuova serie di numeri riassociando l'intervallo. I numeri originali del passaggio 01 sono compresi tra 0 e 100. Questi numeri variano da 0 a 1, rispettivamente in base agli input newMin e newMax.
5. Creare un nodo Curve.PointAtParameter, quindi collegare l'output Math.RemapRange del passaggio 04 come il relativo input param.
!
Questo passaggio crea punti lungo la curva. I numeri sono stati riassociati da 0 a 1 perchรฉ l'input di param sta cercando valori in questo intervallo. Un valore di 0 rappresenta il punto iniziale, mentre un valore di 1 rappresenta i punti finali. Tutti i numeri compresi vengono valutati nell'intervallo [0,1].
6. Collegare l'output da Curve.PointAtParameter a List.FilterByBoolMask per separare l'elenco di indici pari e dispari.
!
a. List.FilterByBoolMask: collegare Curve.PointAtParameter del passaggio precedente all'input list.
b. Watch: un nodo di controllo per in e un nodo di controllo per out indicano che sono presenti due elenchi che rappresentano indici pari e indici dispari. Questi punti sono ordinati nello stesso modo sulla curva, che รจ possibile mostrare nel passaggio successivo.
7. Quindi, si utilizzerร il risultato dell'output di List.FilterByBoolMask nel passaggio 05 per generare geometrie con dimensioni in base ai relativi indici.
Cuboid.ByLengths: ricreare i collegamenti visti nell'immagine riportata sopra per ottenere una cerniera lungo la curva seno. Un cuboide qui รจ solo un parallelepipedo e si sta definendo la sua dimensione in base al punto della curva al centro del parallelepipedo stesso. La logica della divisione pari/dispari dovrebbe ora essere chiara nel modello.
!
a. Elenco di cuboidi in corrispondenza di indici pari.
b. Elenco di cuboidi in corrispondenza di indici dispari
Voila! ร stato appena programmato un processo per definire le quote della geometria in base all'operazione logica illustrata in questo esercizio.
Utilizzo del nodo Select Object per l'input dell'utente
Utilizzo dei sistemi di coordinate
Utilizzo di operazioni geometriche quali Geometry.DistanceTo e Geometry.ClosestPointTo
Creazione di riferimenti di blocco
Controllo delle impostazioni di binding di oggetti
Questo grafico verrร eseguito su **Civil 3D 2020** e versioni successive.
Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.
Ecco una panoramica della logica di questo grafico.
Ottenere la geometria della curva per la conduttura di distribuzione
Ottenere la geometria della curva di una linea del lotto selezionata dall'utente, invertendola se necessario
Generare i punti di inserimento per i contatori
Ottenere i punti sulla conduttura di distribuzione piรน vicini alle posizioni dei contatori
Creare riferimenti di blocco e linee nello spazio modello
Procediamo!
Il primo passaggio consiste nel caricare la geometria per la conduttura di distribuzione in Dynamo. Anzichรฉ selezionare singole linee o polilinee, si otterranno tutti gli oggetti su un determinato layer e li si unirร come PolyCurve di Dynamo.
Se non si conosce la geometria della curva di Dynamo, consultare la sezione [4-curves.md](../../../5\_essential\_nodes\_and\_concepts/5-2\_geometry-for-computational-design/4-curves.md "mention").
Successivamente, รจ necessario caricare in Dynamo la geometria per una linea del lotto selezionata, in modo da potervi lavorare. Lo strumento giusto per il processo รจ il nodo Select Object, che consente all'utente del grafico di selezionare un oggetto specifico in Civil 3D.
Occorre anche gestire un potenziale problema che potrebbe sorgere. La linea del lotto ha un punto iniziale e un punto finale, il che significa che ha una direzione. Affinchรฉ il grafico produca risultati coerenti, รจ necessario che tutte le linee del lotto abbiano una direzione coerente. ร possibile tenere conto di questa condizione direttamente nella logica del grafico, il che rende il grafico piรน resiliente.
Ottenere i punti iniziale e finale della linea del lotto.
Misurare la distanza da ogni punto alla conduttura di distribuzione, quindi determinare quale distanza รจ maggiore.
Il risultato desiderato รจ che il punto iniziale della linea รจ piรน vicino alla conduttura di distribuzione. In caso contrario, si inverte la direzione della linea del lotto. Altrimenti, รจ sufficiente tornare alla linea del lotto originale.
ร arrivato il momento di capire dove verranno posizionati i contatori. In genere, il posizionamento รจ determinato dai requisiti dell'agenzia locale, pertanto รจ sufficiente fornire valori di input che possono essere modificati in base alle diverse condizioni. Utilizzeremo un sistema di coordinate lungo la linea del lotto come riferimento per la creazione dei punti. In questo modo รจ molto semplice definire gli offset rispetto alla linea del lotto, indipendentemente dall'orientamento.
Se non si conoscono i sistemi di coordinate, consultare la sezione [2-vectors.md](../../../5\_essential\_nodes\_and\_concepts/5-2\_geometry-for-computational-design/2-vectors.md "mention").
Ora รจ necessario individuare i punti sulla conduttura di distribuzione piรน vicini alle posizioni dei contatori. In questo modo, รจ possibile disegnare le connessioni dei servizi nello spazio modello in modo che siano sempre perpendicolari alla conduttura di distribuzione. Il nodo Geometry.ClosestPointTo รจ la soluzione perfetta.
Questa รจ la PolyCurve della conduttura di distribuzione.
Questi sono i punti di inserimento dei contatori.
L'ultimo passaggio consiste nel creare effettivamente oggetti nello spazio modello. Si utilizzeranno i punti di inserimento generati in precedenza per creare i riferimenti di blocco, quindi si passerร ai punti presenti sulla conduttura di distribuzione per disegnare le linee sulle connessioni dei servizi.
Quando si esegue il grafico, dovrebbero essere visualizzati nuovi riferimenti di blocco e nuove linee di connessione dei servizi nello spazio modello. Provare a modificare alcuni input e a controllare che tutto venga aggiornato automaticamente.
Si puรฒ notare che dopo aver posizionato gli oggetti per una linea del lotto, selezionando una diversa gli oggetti vengono "spostati".
Si tratta del funzionamento di default di Dynamo ed รจ molto utile in molti casi. Tuttavia, รจ possibile che si vogliano posizionare diverse connessioni dei servizi in sequenza e fare in modo che Dynamo crei nuovi oggetti ad ogni esecuzione anzichรฉ modificare quelle originali. ร possibile controllare questo funzionamento modificando le impostazioni di binding di oggetti.
Per ulteriori informazioni, consultare la sezione [object-binding.md](../../advanced-topics/object-binding.md "mention").
La modifica di questa impostazione forzerร Dynamo a "dimenticare" gli oggetti che crea ad ogni esecuzione. Di seguito รจ riportato un esempio di esecuzione del grafico con il binding di oggetti disattivato utilizzando il Lettore Dynamo.
Se non si conosce il Lettore Dynamo, consultare la sezione [dynamo-player.md](../../dynamo-player.md "mention").
๐ Missione compiuta!
Ecco alcune idee su come espandere le funzionalitร di questo grafico.
Posizionare **piรน collegamenti dei servizi** contemporaneamente anzichรฉ selezionare ogni linea del lotto.
Regolare gli input per posizionare invece **sportelli di ispezione per fognature** anzichรฉ i contatori del servizio idrico.
**Aggiungere un pulsante di commutazione** per consentire il posizionamento di una singola connessione dei servizi su un lato particolare della linea del lotto anzichรฉ su entrambi i lati.

Notare cosa succede quando il raggio viene modificato.
Questa รจ l'unione di oggetti in azione. Il funzionamento di default di Dynamo consiste nel modificare il raggio del cerchio, anzichรฉ creare un nuovo cerchio ogni volta che l'input del raggio viene modificato. Questo perchรฉ il nodo Object.ByGeometry "si ricorda" che ha creato questo cerchio specifico ogni volta che il grafico viene eseguito. Inoltre, Dynamo memorizzerร queste informazioni in modo che la volta successiva che si apre il documento di Civil 3D e si esegue il grafico, avrร esattamente lo stesso funzionamento.
Vediamo un esempio in cui si potrebbe voler cambiare il funzionamento di default di Dynamo per l'unione di oggetti. Supponiamo di voler creare un grafico che posiziona il testo al centro di un cerchio. Tuttavia, l'intento con questo grafico รจ quello di poterlo eseguire piรน volte e di inserire ogni volta un nuovo testo per qualsiasi cerchio selezionato. Ecco come potrebbe apparire quel grafico.
Tuttavia, questo รจ ciรฒ che accade quando viene selezionato un cerchio diverso.
Sembra che il testo venga eliminato e ricreato ad ogni esecuzione del grafico. In realtร , la posizione del testo viene modificata a seconda del cerchio selezionato. Quindi รจ lo stesso testo, in un punto diverso. Per creare un nuovo testo ogni volta, รจ necessario modificare le impostazioni dell'unione di oggetti di Dynamo in modo che non vengano mantenuti i dati di unione (vedere Binding di oggetti di seguito).
Dopo aver apportato questa modifica, otteniamo il funzionamento desiderato.
Dynamo for Civil 3D consente di modificare il funzionamento di default dell'unione di oggetti tramite le impostazioni di Archivio dati di unione nel menu Dynamo.
Notare che le opzioni di Archivio dati di unione sono disponibili in Civil 3D 2022.1 e versioni successive.
Tutte le opzioni sono attivate per default. Ecco un riepilogo delle funzionalitร di ciascuna opzione.
Quando questa opzione รจ attivata, Dynamo "dimentica" gli oggetti che ha creato l'ultima volta che il grafico รจ stato eseguito. Il grafico puรฒ essere eseguito in qualsiasi Carta in qualunque situazione e creerร nuovi oggetti ogni volta.
Quando utilizzare
Utilizzare questa opzione quando si desidera che Dynamo "dimentichi" tutto ciรฒ che ha svolto nelle esecuzioni precedenti e crei nuovi oggetti ogni volta.
Questa opzione indica che i metadati dell'unione di oggetti verranno serializzati nel grafico (file .dyn) al momento del salvataggio. Se si chiude/riapre il grafico e lo si esegue nella stessa Carta, tutto dovrebbe funzionare come รจ stato lasciato. Se si esegue il grafico in una Carta diversa, i dati dell'unione verranno rimossi dal grafico e verranno creati nuovi oggetti. Ciรฒ significa che se si apre la Carta originale ed si riesegue il grafico, verranno creati nuovi oggetti oltre a quelli precedenti.
Quando utilizzare
Utilizzare questa opzione quando si desidera che Dynamo "memorizzi" gli oggetti che ha creato l'ultima volta che รจ stato eseguito in una Carta specifica.
Questa opzione รจ particolarmente adatta per le situazioni in cui รจ possibile mantenere un rapporto 1:1 tra una Carta specifica e un grafico di Dynamo. Le opzioni 1 e 3 sono piรน adatte per i grafici progettati per l'esecuzione su piรน disegni.
Questa opzione รจ simile all'opzione 2, tranne per il fatto che i dati dell'unione di oggetti vengono serializzati nella Carta anzichรฉ nel grafico (file .dyn). Se si chiude/riapre il grafico e lo si esegue nella stessa Carta, tutto dovrebbe funzionare come รจ stato lasciato. Se il grafico viene eseguito in una Carta diversa, i dati dell'unione sono comunque mantenuti nel disegno originale poichรฉ vengono salvati nel disegno e non nel grafico.
Quando utilizzare
Utilizzare questa opzione quando si desidera utilizzare lo stesso grafico in piรน Carte e fare in modo che Dynamo "memorizzi"ciรฒ che ha svolto in ciascuno.
La prima cosa da notare con questa opzione รจ che non ha alcun effetto sul modo in cui il grafico interagisce con la Carta quando si esegue il grafico tramite l'interfaccia principale di Dynamo. Questa opzione รจ valida solo quando il grafico viene eseguito utilizzando il Lettore Dynamo.
Se non si conosce il Lettore Dynamo, consultare la sezione Lettore Dynamo.
Se si esegue il grafico utilizzando l'interfaccia principale di Dynamo e quindi si chiude ed esegue lo stesso grafico utilizzando il Lettore Dynamo, verranno creati nuovi oggetti sopra a quelli creati in precedenza. Tuttavia, una volta eseguito il grafico, il Lettore Dynamo serializzerร i dati dell'unione di oggetti nella Carta. Pertanto, se si esegue il grafico piรน volte tramite il Lettore Dynamo, gli oggetti verranno aggiornati anzichรฉ creati di nuovi. Se si esegue il grafico tramite il Lettore Dynamo in una Carta diversa, i dati dell'unione sono comunque mantenuti nella Carta originale poichรฉ vengono salvati nella Carta e non nel grafico.
Quando utilizzare
Utilizzare questa opzione quando si desidera eseguire un grafico utilizzando il Lettore Dynamo in piรน Carte e fare in modo che "memorizzi" ciรฒ che ha svolto in ciascuno.
La Libreria contiene tutti i nodi caricati, compresi i dieci nodi delle categorie di default forniti con l'installazione, nonchรฉ eventuali pacchetti o nodi personalizzati caricati aggiuntivi. I nodi della Libreria sono organizzati in modo gerarchico all'interno di librerie, categorie e, se necessario, sottocategorie.
!
Nodi di base: vengono forniti con l'installazione di default.
Nodi personalizzati: consentono di memorizzare le routine o il grafico speciale utilizzati piรน di frequente come nodi personalizzati. ร inoltre possibile condividere i nodi personalizzati con la community.
Nodi di Package Manager: raccolta di nodi personalizzati pubblicati.
Si esamineranno le categorie della , si mostreranno come eseguire e si apprenderanno delle informazioni su alcuni dei tra di essi.
Sfogliare queste categorie รจ il modo piรน rapido per comprendere la gerarchia di ciรฒ che รจ possibile aggiungere all'area di lavoro e il modo migliore per scoprire nuovi nodi non utilizzati in precedenza.
Sfogliare la Libreria facendo clic sui menu per espandere ogni categoria e la relativa sottocategoria.
Geometry รจ un menu di grande utilitร per iniziare ad esplorare poichรฉ contiene la maggior quantitร di nodi.
!
Libreria
Categoria
Sottocategoria
Questi consentono di suddividere ulteriormente i nodi nella stessa sottocategoria in base al fatto se i nodi creano dei dati, eseguono un'Azione o una Query sui dati.
! Crea: consente di creare o costruire la geometria da zero. Ad esempio, un cerchio.
! Azione: consente di eseguire un'azione su un oggetto. Ad esempio, la messa in scala di un cerchio.
! Query: consente di ottenere una proprietร di un oggetto giร esistente. Ad esempio, ottenere il raggio di un cerchio.
Posizionare il cursore del mouse su un nodo per visualizzare informazioni piรน dettagliate oltre al nome e all'icona. Questo offre un modo rapido per comprendere cosa fa il nodo, cosa richiederร per gli input e cosa verrร fornito come output.
!
Descrizione: descrizione con linguaggio normale del nodo
Icona: versione piรน grande dell'icona nel menu Libreria
Input: nome, tipo di dati e struttura di dati
Se si conosce con relativa specificitร il nodo che si desidera aggiungere all'area di lavoro, digitare nel campo di ricerca per cercare tutti i nodi corrispondenti.
Scegliere facendo clic sul nodo che si desidera aggiungere o premere INVIO per aggiungere i nodi evidenziati al centro dell'area di lavoro.
!
Oltre a utilizzare le parole chiave per cercare di trovare i nodi, รจ possibile digitare la gerarchia separata con un punto nel campo di ricerca o con i Code Block (che utilizzano il linguaggio testuale di Dynamo).
La gerarchia di ogni libreria si riflette nel nome dei nodi aggiunti all'area di lavoro.
Digitando parti differenti della posizione del nodo nella gerarchia della Libreria nel formato library.category.nodeName, vengono restituiti risultati diversi:
library.category.nodeName
!
category.nodeName
!
nodeName o keyword
!
In genere, il nome del nodo nell'area di lavoro verrร sottoposto a rendering nel formato category.nodeName, con alcune eccezioni significative, in particolare nelle categorie Input e View.
Tenere presente i nodi denominati in modo simile e osservare la differenza della categoria:
I nodi della maggior parte delle librerie includeranno il formato della categoria.
!
Point.ByCoordinates e UV.ByCoordinates hanno lo stesso nome ma provengono da categorie differenti.
!
Eccezioni importanti includono funzioni integrate, Core.Input, Core.View e operatori.
!
Con centinaia di nodi inclusi nell'installazione di base di Dynamo, quali sono essenziali per lo sviluppo dei programmi visivi? Ci si concentrerร su quelli che consentono di definire i parametri del programma (Input), vedere i risultati dell'azione di un nodo (Watch) e definire gli input o le funzionalitร mediante una scorciatoia (Code Block).
I nodi di input sono il mezzo principale per l'utente del programma visivo, sia che si tratti dell'utente corrente sia di qualcun altro, per interfacciarsi con i parametri chiave. Di seguito sono riportate alcune informazioni disponibili nella Libreria principale:
I nodi Watch sono essenziali per gestire i dati che fluiscono nel programma visivo. ร possibile visualizzare il risultato di un nodo tramite l'anteprima dei dati del nodo posizionando il cursore del mouse sul nodo.
!
Sarร utile per mantenere la visualizzazione in un nodo Watch.
!
In alternativa, รจ possibile visualizzare i risultati della geometria tramite un nodo Watch 3D.
!
Entrambi sono disponibili nella categoria View della libreria Core.
Suggerimento Talvolta l'anteprima 3D puรฒ distrarre l'utente quando il programma visivo contiene molti nodi. Per visualizzare l'anteprima della geometria, รจ consigliabile deselezionare l'opzione Mostra anteprima sfondo 3D nel menu Impostazioni e utilizzare un nodo Watch 3D.
I nodi Code Block possono essere utilizzati per definire un blocco di codice con righe separate da punti e virgola. Puรฒ essere semplice come X/Y.
ร inoltre possibile utilizzare i Code Block come scorciatoia per definire un input numerico o chiamare la funzionalitร di un altro nodo. La sintassi per eseguire questa operazione segue la convenzione di denominazione del linguaggio testuale di Dynamo, .
Di seguito รจ disponibile una semplice dimostrazione (con le istruzioni) per l'utilizzo di Code Block nello script.
Fare doppio clic per creare un nodo Code Block.
Digitare Circle.ByCenterPointRadius(x,y);
Fare clic sull'area di lavoro per annullare la selezione e aggiungere automaticamente gli input x e y
ร possibile creare una serie di elementi di Revit in Dynamo con controllo parametrico completo. I nodi di Revit in Dynamo offrono la possibilitร di importare elementi da geometrie generiche in tipi di categoria specifici (come muri e pavimenti). In questa sezione, si esaminerร l'importazione di elementi parametricamente flessibili con componenti adattivi.
!
Un componente adattivo รจ una categoria di famiglia flessibile che si presta bene alle applicazioni generative. Al momento della creazione dell'istanza, รจ possibile creare un elemento geometrico complesso che sia controllato dalla posizione fondamentale dei punti adattivi.
Di seguito รจ riportato un esempio di un componente adattivo a tre punti nell'Editor di famiglie. Questo genera una trave reticolare definita dalla posizione di ciascun punto adattivo. Nell'esercizio seguente, si utilizzerร questo componente per generare una serie di travi reticolari su una facciata.
Il componente adattivo รจ un buon esempio di procedure ottimali di interoperabilitร . ร possibile creare una serie di componenti adattivi definendo i punti adattivi fondamentali. Inoltre, quando si trasferiscono questi dati in altri programmi, รจ possibile ridurre la geometria in dati semplici. L'importazione e l'esportazione con un programma come Excel seguono una logica simile.
Si supponga che un consulente per le facciate voglia conoscere la posizione degli elementi della trave reticolare senza dover eseguire l'analisi attraverso una geometria completamente articolata. In preparazione alla fabbricazione, il consulente puรฒ fare riferimento alla posizione dei punti adattivi per rigenerare la geometria in un programma come Inventor.
Il workflow che si imposterร nell'esercizio seguente consente di accedere a tutti questi dati durante la generazione della definizione per la creazione di elementi di Revit. Con questo processo, รจ possibile unire la concettualizzazione, la documentazione e la fabbricazione in un workflow senza problemi. Ciรฒ crea un processo piรน intelligente ed efficiente per l'interoperabilitร .
Nel riportato di seguito viene illustrato come Dynamo fa riferimento ai dati per la creazione di elementi di Revit. Per generare piรน componenti adattivi, รจ necessario definire un elenco di elenchi, dove ogni elenco contiene tre punti che rappresentano ciascun punto del componente adattivo. Questo aspetto รจ importante da tenere presente quando si gestiscono le strutture di dati in Dynamo.
!
Un altro metodo per importare la geometria di Dynamo parametrica in Revit รจ con DirectShape. In breve, l'elemento DirectShape e le classi correlate supportano la possibilitร di memorizzare forme geometriche create esternamente in un documento di Revit. La geometria puรฒ includere mesh o solidi chiusi. DirectShape รจ principalmente destinato all'importazione di forme da altri formati di dati, ad esempio IFC o STEP, dove non sono disponibili informazioni sufficienti per creare un elemento di Revit "reale". Analogamente al workflow IFC e STEP, la funzionalitร DirectShape funziona correttamente con l'importazione di geometrie create da Dynamo nei progetti di Revit come elementi reali.
Si esaminerร dettagliatamente il per importare la geometria di Dynamo come DirectShape nel progetto di Revit. Utilizzando questo metodo, รจ possibile assegnare la categoria, il materiale e il nome di una geometria importata, mantenendo comunque un collegamento parametrico al grafico di Dynamo.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
A partire dal file di esempio di questa sezione (o proseguendo con il file di Revit della sessione precedente), viene visualizzata la stessa massa di Revit.
!
Questo รจ il file aperto.
Questo รจ il sistema di travi reticolari creato con Dynamo, collegato in modo intelligente alla massa di Revit.
Sono stati utilizzati i nodi Select Model Element e Select Face. Ora si scenderร di un ulteriore livello nella gerarchia della geometria e si utilizzerร Select Edge. Con il risolutore Dynamo impostato sull'esecuzione Automatico, il grafico viene aggiornato costantemente in base alle modifiche apportate nel file di Revit. Il bordo selezionato viene collegato dinamicamente alla topologia dell'elemento di Revit. Se la topologia* non cambia, la connessione tra Revit e Dynamo rimane intatta.
!
Selezionare la curva piรน in alto della facciata con vetrate. Questa si estende per l'intera lunghezza dell'edificio. Se non si riesce a selezionare il bordo, ricordarsi di scegliere la selezione in Revit passando il cursore del mouse sul bordo e premendo TAB finchรฉ il bordo desiderato non viene evidenziato.
Utilizzando due nodi Select Edge, selezionare ogni bordo che rappresenta l'inclinazione al centro della facciata.
*Per mantenere una topologia coerente, si sta facendo riferimento ad un modello che non ha facce o bordi supplementari aggiunti. Sebbene i parametri possano modificarne la forma, il modo in cui รจ stata creata rimane coerente.
ร necessario innanzitutto unire le curve e accorparle in un elenco. In questo modo รจ possibile "raggruppare" le curve per eseguire operazioni di geometria.
!
Creare un elenco per le due curve al centro della facciata.
Unire le due curve in una PolyCurve collegando il componente List.Create in un nodo Polycurve.ByJoinedCurves.
Creare un elenco per le due curve nella parte inferiore della facciata.
Si desidera sfruttare la curva superiore, che รจ una linea, e rappresenta l'estensione completa della facciata. Verranno creati piani lungo questa linea per intersecare il gruppo di curve raggruppate in un elenco.
!
Con un Code Block, definire un intervallo utilizzando la sintassi:
0..1..#numberOfTrusses;.Collegare un *integer slider *all'input per il Code Block. Come si poteva immaginare, questo rappresenterร il numero di travi reticolari. Notare che il dispositivo di scorrimento controlla il numero di elementi nell'intervallo definito da *0 *a 1.
Un piano รจ un elemento di geometria astratto, che rappresenta uno spazio bidimensionale infinito. I piani sono ideali per le curve di livello e l'intersezione, come vengono impostati in questo passaggio.
!
Utilizzando il nodo Geometry.Intersect (impostare l'opzione Collegamento su Globale), collegare Curve.PlaneAtParameter all'input entity del nodo Geometry.Intersect. Collegare il nodo List.Create principale all'input geometry. Nella finestra di Dynamo vengono ora visualizzati i punti che rappresentano l'intersezione di ogni curva con i piani definiti.
Notare che l'output รจ un elenco di elenchi di elenchi. Sono troppi elenchi per gli scopi desiderati. Si intende eseguire una riduzione di livelli parziale qui. Occorre scendere di un livello nell'elenco e ridurre i livelli del risultato. A tale scopo, รจ necessario utilizzare l'operazione List.Map, come illustrato nel capitolo dell'elenco della guida introduttiva.
!
Collegare il nodo Geometry.Intersect all'input list di List.Map.
Collegare un nodo Flatten all'input f(x) di List.Map. I risultati forniscono 3 elenchi, ciascuno con un conteggio uguale al numero di travi reticolari.
Allo stesso modo in cui sono stati creati i poligoni, disporre i componenti adattivi.
!
Aggiungere un nodo AdaptiveComponent.ByPoints all'area di disegno, collegare il nodo List.Transpose all'input points.
Utilizzando un nodo Family Types, selezionare la famiglia AdaptiveTruss e collegarla all'input FamilyType del nodo AdaptiveComponent.ByPoints.
In Revit, ora le dieci travi reticolari presentano una spaziatura uniforme sulla facciata.
Adattando il grafico, aumentare il valore numberOfTrusses a 30 modificando il dispositivo di scorrimento. Molte travi reticolari non sono molto realistiche, ma il collegamento parametrico funziona. Una volta eseguita la verifica, impostare numberOfTrusses su 15.
!
E per il test finale, selezionando la massa in Revit e modificando i parametri di istanza, รจ possibile modificare la forma dell'edificio e osservare come la trave reticolare fa la stessa cosa. Ricordarsi che questo grafico di Dynamo deve essere aperto per poter visualizzare questo aggiornamento e il collegamento verrร interrotto non appena verrร chiuso.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Per iniziare, aprire il file di esempio per questa lezione: ARCH-DirectShape-BaseFile.rvt.
!
Nella vista 3D, si utilizza la massa dell'edificio della lezione precedente.
Lungo il bordo dell'atrio vi รจ una curva di riferimento, che verrร utilizzata come curva di riferimento in Dynamo.
Lungo il bordo opposto dell'atrio vi รจ un'altra curva di riferimento, a cui si farร riferimento anche in Dynamo.
!
Per fare riferimento alla geometria in Dynamo, verrร utilizzato Select Model Element per ogni membro in Revit. Selezionare la massa in Revit e importare la geometria in Dynamo utilizzando Element.Faces. La massa dovrebbe ora essere visibile nell'anteprima di Dynamo.
Importare una curva di riferimento in Dynamo utilizzando Select Model Element e CurveElement.Curve.
!
Eseguendo lo zoom indietro e la panoramica a destra nel grafico di esempio, viene visualizzato un gruppo esteso di nodi; si tratta di operazioni geometriche che generano la struttura del tetto a pergolato visibile nell'anteprima di Dynamo. Questi nodi vengono generati utilizzando la funzionalitร Nodo da aggiungere al codice, come descritto nella della guida introduttiva.
La struttura รจ gestita da tre parametri principali: Diagonal Shift, Camber e Radius.
Zoom con un'occhiata ravvicinata ai parametri per questo grafico. ร possibile adattarli per ottenere diversi output della geometria.
!
!
Se si trascina il nodo DirectShape.ByGeometry nell'area di disegno, รจ possibile notare che presenta quattro input: geometry, category, material e name.
La geometria sarร il solido creato dalla parte di creazione della geometria del grafico.
Dopo aver eseguito Dynamo, tornando in Revit, il progetto contiene la geometria importata sul tetto. Si tratta di un elemento del telaio strutturale, anzichรฉ di un modello generico. Il collegamento parametrico a Dynamo rimane intatto.
!
Quando si aggiungono tubi e strutture ad una rete di tubazioni, in Civil 3D viene utilizzato un modello per assegnare automaticamente i nomi. In genere, ciรฒ รจ sufficiente durante il posizionamento iniziale, ma inevitabilmente i nomi dovranno cambiare in futuro man mano che il progetto si evolve. Inoltre, potrebbero essere necessari molti modelli di denominazione diversi, ad esempio nominare in modo sequenziale le strutture all'interno di un ramo a partire dalla struttura piรน a valle o seguire un modello di denominazione che sia allineato con lo schema di dati di un'agenzia locale. Questo esempio dimostrerร come Dynamo puรฒ essere utilizzato per definire qualsiasi tipo di strategia di denominazione che possa essere applicata in modo coerente.
๐ฏ Rinominare le strutture della rete di tubi in ordine in base alla progressiva di un tracciato.
Utilizzo delle caselle di delimitazione
Filtraggio dei dati mediante il nodo List.FilterByBoolMask
Ordinamento dei dati mediante il nodo List.SortByKey
Questo grafico verrร eseguito su Civil 3D 2020 e versioni successive.
Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.
Ecco una panoramica della logica di questo grafico.
Selezionare le strutture in base al layer
Ottenere le posizioni delle strutture
Filtrare le strutture per offset, quindi ordinarle in base alla progressiva
Procediamo!
La prima cosa da fare รจ selezionare tutte le strutture con cui si intende lavorare. A tale scopo, รจ sufficiente selezionare tutti gli oggetti su un determinato layer, ovvero le strutture di reti di tubi differenti (supponendo che condividano lo stesso layer).
Questo nodo garantisce che non vengano recuperati accidentalmente eventuali tipi di oggetto indesiderati che potrebbero condividere lo stesso layer delle strutture.
Ora che si hanno le strutture, occorre dove si trovano nello spazio in modo da poterle ordinare in base alla loro posizione. Per eseguire questa operazione, si utilizzerร la casella di delimitazione di ogni oggetto. La casella di delimitazione di un oggetto รจ il riquadro di dimensioni minime che contiene completamente le estensioni geometriche dell'oggetto. Calcolando il centro della casella di delimitazione, si ottiene un'approssimazione piuttosto buona del punto di inserimento della struttura.
Questi punti verranno utilizzati per ottenere la progressiva e l'offset delle strutture rispetto ad un tracciato selezionato.
Ecco dove le cose iniziano a diventare un po' complicate. A questo punto, si ha un grande elenco di tutte le strutture sul layer specificato ed รจ stato scelto un tracciato in base al quale ordinarle. Il problema รจ che nell'elenco potrebbero essere presenti strutture che non si vuole rinominare. Ad esempio, potrebbero non far parte del tratto specifico a cui si รจ interessati.
Il tracciato selezionato
Le strutture che si desidera rinominare
Le strutture da ignorare
Pertanto, รจ necessario filtrare l'elenco di strutture in modo da non considerare quelle che sono maggiori di un determinato offset rispetto al tracciato. Per ottenere questo risultato, รจ meglio utilizzare il nodo List.FilterByBoolMask. Dopo aver filtrato l'elenco di strutture, รจ possibile utilizzare il nodo List.SortByKey per ordinarle in base ai valori di progressiva.
Se non si conoscono gli elenchi, consultare la sezione .
Verificare se l'offset della strutture รจ inferiore al valore di soglia.
Sostituire eventuali valori null con false.
Filtrare l'elenco di strutture e progressive.
L'ultima operazione da eseguire รจ creare nuovi nomi per le strutture. Il formato che si utilizzerร รจ <alignment name>-STRC-<number>. Sono disponibili qui alcuni nodi aggiuntivi per aggiungere nuovi zeri ai numeri, se lo si desidera (ad esempio, "01" anzichรฉ "1").
Infine, rinominare le strutture.
Di seguito รจ riportato un esempio di esecuzione del grafico mediante il Lettore Dynamo.
Se non si conosce il Lettore Dynamo, consultare la sezione .
๐ Missione compiuta!
Puรฒ essere utile sfruttare l'anteprima di sfondo 3D di Dynamo per visualizzare gli output intermedi del grafico anzichรฉ solo il risultato finale. Una cosa semplice da fare รจ mostrare le caselle di delimitazione delle strutture. Inoltre, questo particolare set di dati include un modellatore nel documento, pertanto รจ possibile importare la geometria della linea caratteristica del modellatore in Dynamo per fornire un contesto per il punto in cui le strutture si trovano nello spazio. Se il grafico viene utilizzato in un set di dati che non dispone di modellatori, questi nodi non avranno alcuna funzione.
Ora รจ possibile capire meglio come funziona il processo di filtraggio delle strutture per offset.
Ecco alcune idee su come espandere le funzionalitร di questo grafico.
Rinominare le strutture in base al relativo tracciato piรน vicino anzichรฉ selezionare un tracciato specifico.
Rinominare i tubi oltre alle strutture.
Impostare i layer delle strutture in base al loro tratto.
La modifica dei parametri per la documentazione segue le lezioni apprese nelle sezioni precedenti. In questa sezione verrร esaminata la modifica dei parametri che non hanno effetto sulle proprietร geometriche di un elemento, ma piuttosto si prepara un file di Revit per la documentazione.
Nell'esercizio riportato di seguito, verrร utilizzata una deviazione di base dal nodo del piano per creare una tavola di Revit per la documentazione. Ogni pannello della struttura del tetto definita in modo parametrico ha un valore diverso per la deviazione e si desidera chiamare l'intervallo di valori utilizzando il colore e includendo nell'abaco i punti adattivi da consegnare ad un consulente per le facciate, un ingegnere o un appaltatore.
La deviazione dal nodo del piano calcolerร la distanza con cui l'insieme di quattro punti varia dal piano di adattamento tra di loro. Questo รจ un modo rapido e semplice per studiare l'edificabilitร .
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Iniziare con il file di Revit per questa sezione (o continuare dalla sezione precedente). Questo file presenta una serie di pannelli ETFE sul tetto. Per questo esercizio, si farร riferimento a questi pannelli.
!
Aggiungere un nodo Family Types all'area di disegno e scegliere ROOF-PANEL-4PT.
Collegare il nodo ad un nodo di selezione All Elements of Family Type per caricare tutti gli elementi da Revit in Dynamo.
!
Eseguire una query sulla posizione dei punti adattivi per ogni elemento con il nodo AdaptiveComponent.Locations.
Creare un poligono da questi quattro punti con il nodo Polygon.ByPoints. Notare che ora รจ disponibile una versione astratta del sistema con pannelli in Dynamo senza dover importare la geometria completa dell'elemento di Revit.
Per divertimento, come nell'esercizio precedente, impostare il rapporto di apertura di ogni pannello in base alla sua deviazione planare.
!
Aggiungere un nodo Element.SetParameterByName all'area di disegno e collegare i componenti adattivi all'input element. Collegare un Code Block che riporta Aperture Ratio all'input parameterName.
Non รจ possibile collegare direttamente i risultati della deviazione all'input value perchรฉ รจ necessario riassociare i valori all'intervallo di parametri.
!
Utilizzando Math.RemapRange, riassociare i valori di deviazione ad un dominio compreso tra 0.15 e 0_._45 immettendo
0.15; 0.45;nel Code Block.Collegare questi risultati all'input value per Element.SetParameterByName.
Tornando in Revit, รจ possibile in un certo senso sfruttare la modifica dell'apertura sulla superficie.
Eseguendo lo zoom avanti, diventa piรน chiaro che i pannelli chiusi sono ponderati verso gli angoli della superficie. Gli angoli aperti sono verso la parte superiore. Gli angoli rappresentano aree di maggiore deviazione mentre la bombatura ha una curvatura minima, pertanto ciรฒ รจ utile.
L'impostazione del rapporto di apertura non mostra chiaramente la deviazione dei pannelli sul tetto; inoltre si sta modificando la geometria dell'elemento effettivo. Si supponga di voler semplicemente studiare la deviazione dal punto di vista della fattibilitร della fabbricazione. Sarebbe utile colorare i pannelli in base all'intervallo di deviazione per la documentazione. ร possibile farlo con la serie di passaggi riportata di seguito e con un processo molto simile a quello descritto sopra.
!
Rimuovere Element.SetParameterByName e i relativi nodi di input e aggiungere Element.OverrideColorInView.
Aggiungere un nodo Color Range all'area di disegno e collegarlo all'input color di Element.OverrideColorInView. Per creare la sfumatura, รจ ancora necessario collegare i valori della deviazione all'intervallo di colori.
!
Utilizzando Math.RemapRange, riassociare i valori della deviazione planare ad un intervallo compreso tra 0 e 1. Nota ร anche possibile utilizzare il nodo MapTo per definire un dominio di origine.
Collegare i risultati ad un nodo Color Range.
In Revit, si nota una sfumatura molto piรน leggibile che รจ rappresentativa della deviazione planare basata sull'intervallo di colori. Ma se si vogliono personalizzare i colori? Notare che i valori della deviazione minima sono rappresentati in rosso, che sembra essere l'opposto di ciรฒ che ci si aspetterebbe. Si desidera visualizzare la deviazione massima in rosso, con la deviazione minima rappresentata da un colore piรน tenue. Tornare in Dynamo e modificare questo aspetto.
!
Utilizzando un Code Block, aggiungere due numeri su due righe diverse:
0;e255;.Creare un colore rosso e blu collegando i valori appropriati a due nodi Color.ByARGB.
Tornando in Revit, รจ ora possibile distinguere meglio le aree di deviazione massima negli angoli. Ricordarsi che questo nodo serve per sostituire un colore in una vista, cosรฌ puรฒ essere davvero utile disporre di una tavola specifica nel gruppo di disegni che si concentra su un particolare tipo di analisi.
!
Selezionando un pannello ETFE in Revit, si noterร che sono presenti quattro parametri di istanza, XYZ1, XYZ2, XYZ3 e XYZ4. Questi sono tutti vuoti dopo la loro creazione. Si tratta di parametri basati sul testo che richiedono valori. Verrร utilizzato Dynamo per scrivere le posizioni dei punti adattivi su ciascun parametro. Ciรฒ consente l'interoperabilitร se la geometria deve essere inviata ad un ingegnere o un consulente per le facciate.
!
In una tavola di esempio, รจ presente un abaco di grandi dimensioni vuoto. I parametri XYZ sono parametri condivisi nel file di Revit, il che consente di aggiungerli all'abaco.
!
Se si esegue lo zoom avanti, i parametri XYZ devono ancora essere immessi. I primi due parametri vengono gestiti da Revit.
!
Per scrivere questi valori, verrร eseguita un'operazione sugli elenchi complessa. Il grafico stesso รจ semplice, ma i concetti si basano in modo significativo sul mappaggio degli elenchi, come discusso nel capitolo sugli elenchi.
!
Selezionare tutti i componenti adattivi con due nodi.
Estrarre la posizione di ciascun punto con AdaptiveComponent.Locations.
Convertire questi punti in stringhe. Ricordarsi che il parametro รจ basato sul testo, quindi occorre immettere il tipo di dati corretto.
Qui si sta eseguendo il mappaggio degli elenchi, poichรฉ si stanno scrivendo quattro valori per ogni elemento, il che crea una struttura dei dati complessa. Il nodo List.Combine definisce un'operazione di un livello piรน basso nella gerarchia dei dati. Per questo motivo, gli input element e value di Element.SetParameterByName restano vuoti. List.Combine collega i sottoelenchi dei relativi input agli input vuoti di Element.SetParameterByName, in base all'ordine in cui sono collegati.
Selezionando un pannello in Revit, notare che sono presenti valori di stringa per ogni parametro. Realisticamente, รจ necessario creare un formato piรน semplice per scrivere un punto (X, Y, Z). Questa operazione puรฒ essere eseguita con operazioni di stringa in Dynamo, ma in questo caso viene ignorata per rimanere all'interno dell'ambito di questo capitolo.
Vista dell'abaco di esempio con i parametri compilati.
Ogni pannello ETFE ora dispone delle coordinate XYZ scritte per ogni punto adattivo, che rappresentano gli angoli di ogni pannello per la fabbricazione.
Molti degli esempi riportati finora si sono concentrati sulla costruzione di geometria dimensionale maggiore a partire da oggetti dimensionali minori. I metodi di intersezione consentono a questa geometria dimensionale maggiore di generare oggetti dimensionali minori, mentre i comandi di taglio e selezione del taglio consentono di modificare pesantemente le forme geometriche mediante script dopo la creazione.
Il metodo Intersect รจ definito su tutti gli elementi della geometria in Dynamo, ovvero, in teoria qualsiasi elemento della geometria puรฒ essere intersecato con qualsiasi altro elemento della geometria. Naturalmente alcune intersezioni sono insignificanti, come le intersezioni che coinvolgono i punti, poichรฉ l'oggetto risultante sarร sempre il punto di input stesso. Le altre possibili combinazioni di intersezioni tra gli oggetti sono descritte nel seguente grafico, in cui รจ illustrato il risultato di diverse operazioni di intersezione:
Nel semplicissimo esempio riportato di seguito รจ mostrata l'intersezione di un piano con una NurbsSurface. L'intersezione genera una serie di NurbsCurve, che puรฒ essere utilizzata come qualsiasi altra NurbsCurve.
Il metodo Trim รจ molto simile al metodo Intersect, in quanto viene definito per quasi ogni elemento della geometria. Tuttavia, esistono molte piรน limitazioni per Trim rispetto a Intersect.
Qualcosa da notare sui metodi Trim รจ il requisito di un punto di "selezione", un punto che determina quale geometria eliminare e quali elementi mantenere. In Dynamo viene trovata ed eliminata la geometria ritagliata piรน vicina al punto di selezione.
I dati sono gli oggetti dei nostri programmi. Viaggiano attraverso i fili, fornendo input per i nodi in cui vengono elaborati in una nuova forma di dati di output. Quindi si esaminerร la definizione di dati e la relativa struttura e si inizierร ad utilizzarli in Dynamo.
I dati sono un insieme di valori di variabili qualitative o quantitative. Il formato piรน semplice di dati รจ costituito da numeri quali 0, 3.14 o 17
I nodi Watch mostrano che ora sono presenti linee in Dynamo. Questo valore viene convertito automaticamente nella geometria di Dynamo poichรฉ i bordi stessi non sono elementi di Revit. Queste curve sono i riferimenti che verranno utilizzati per creare un'istanza di travi reticolari adattive nella facciata.
Unire le due curve in una PolyCurve collegando il componente List.Create in un nodo Polycurve.ByJoinedCurves.
Infine, unire le tre curve principali (una linea e due PolyCurve) in un elenco.
Collegare List.Map ad un nodo List.Transpose. Ora si dispone dell'output di dati desiderato.
Per verificare che i dati siano corretti, aggiungere un nodo Polygon.ByPoints all'area di disegno e controllare con l'anteprima di Dynamo.
L'input del materiale viene selezionato attraverso la serie di nodi riportata sopra, anche se in questo caso puรฒ essere definito piรน semplicemente come "Default".

Se l'opzione รจ impostata su Manuale, fare clic su Esegui. Dovrebbe essere possibile procedere facilmente da questo momento in poi avendo impostato l'opzione su Automatico.
Collegare questo elenco all'input colors di Color Range e osservare l'aggiornamento dell'intervallo di colori personalizzato.
Creare un elenco delle quattro stringhe che definiscono i parametri da modificare: XYZ1, XYZ2, XYZ3 e XYZ4.
Collegare questo elenco all'input parameterName di Element.SetParameterByName.
Collegare Element.SetParameterByName all'input combinator di List.Combine. Collegare i componenti adattivi a list1. Collegare String from Object a list2.



































Generazione e modifica di stringhe di testo
Generare i nuovi nomi
Rinominare le strutture
Ordinare le strutture in base alle progressive












Output: tipo di dati e struttura
File Path
!
Creare un nodo Point.ByCoordinates e Number Slider, quindi collegarli agli input di Code Block.
Il risultato dell'esecuzione del programma visivo viene mostrato come cerchio nell'anteprima 3D.
Booleano
!
Numero
!
Stringa
!
Number Slider
!
Directory Path
!
Integer Slider
!
heightmyNameCircle1,2,3,5,8,13,...In Dynamo vengono aggiunti/inviati dati alle porte di input dei nodi, pertanto รจ possibile disporre di dati senza eseguire alcuna azione, ma per eseguire le azioni rappresentate dai nodi sono necessari i dati. Quando รจ stato aggiunto un nodo all'area di lavoro, se non sono stati forniti eventuali input, il risultato sarร una funzione, non il risultato dell'azione stessa.
Dati semplici
Dati ed esecuzione corretta di un'azione (un nodo)
Restituzione di una funzione generica tramite un'azione (nodo) senza input di dati
Attenzione ai valori null. Il tipo 'null' rappresenta l'assenza di dati. Sebbene si tratti di un concetto astratto, รจ probabile incontrarlo utilizzando la programmazione visiva. Se un'azione non crea un risultato valido, il nodo restituirร un valore null.
I test per i valori null e la rimozione dei valori null dalla struttura dei dati sono una parte fondamentale per la creazione di programmi efficienti.
!
Object.IsNull
obj
booleano
Quando si รจ in presenza della programmazione visiva, รจ possibile generare molto rapidamente parecchi dati e richiedere un metodo per gestirne la gerarchia. Questo รจ il ruolo delle strutture dei dati, ovvero gli schemi organizzativi in cui si memorizzano i dati. Le specifiche delle strutture dei dati e il loro utilizzo variano a seconda del linguaggio di programmazione.
In Dynamo, si aggiunge la gerarchia ai dati tramite gli elenchi. Questo argomento verrร approfondito nei capitoli successivi. Si inizierร in maniera semplice:
Un elenco rappresenta una raccolta di elementi posizionati in una struttura di dati:
Ho cinque dita (elementi) sulla mia mano (elenco).
Ci sono dieci case (elementi) sulla mia strada (elenco).
Un nodo Number Sequence definisce un elenco di numeri utilizzando un input start, amount e step. Con questi nodi, sono stati creati due elenchi distinti di dieci numeri, uno che comprende 100-109 e un altro che include 0-9.
Il nodo List.GetItemAtIndex seleziona una voce di un elenco in corrispondenza di un indice specifico. Quando si sceglie 0, viene visualizzata la prima voce dell'elenco (in questo caso 100).
Applicando lo stesso processo al secondo elenco, si ottiene un valore di 0, la prima voce dell'elenco.
Ora si uniscono i due elenchi in uno utilizzando il nodo List.Create. Notare che il nodo crea un elenco di elenchi. Questa operazione modifica la struttura dei dati.
Quando si utilizza di nuovo List.GetItemAtIndex, con l'indice impostato su 0, si ottiene il primo elenco nell'elenco di elenchi. Questo รจ ciรฒ che significa considerare un elenco come voce, che รจ in qualche modo diverso da altri linguaggi di scripting. Nei capitoli successivi verranno fornite informazioni piรน avanzate sulla manipolazione degli elenchi e sulla struttura dei dati.
Il concetto chiave da comprendere sulla gerarchia dei dati in Dynamo: rispetto alla struttura dei dati, gli elenchi vengono considerati come voci. In altre parole, Dynamo funziona con un processo dall'alto in basso per la comprensione delle strutture dei dati. Ciรฒ che cosa significa? Si esaminerร un esempio.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
In questo primo esempio, si assembla un cilindro svuotato che mostra la gerarchia della geometria descritta in questa sezione.
1. Aggiungere Point.ByCoordinates: dopo aver aggiunto il nodo all'area di disegno, viene visualizzato un punto in corrispondenza dell'origine della griglia di anteprima di Dynamo. I valori di default degli input x, y e z sono 0.0, per fornire un punto in questa posizione.
!
2. Plane.ByOriginNormal: il passaggio successivo nella gerarchia della geometria รจ un piano. Esistono diversi modi per costruire un piano e si sta utilizzando un'origine e una normale per l'input. L'origine รจ il nodo del punto creato nel passaggio precedente.
Vector.ZAxis: questo รจ un vettore unitario nella direzione z. Notare che non sono presenti input, ma solo un vettore di valore [0,0,1]. Viene utilizzato come input normal per il nodo Plane.ByOriginNormal. In questo modo si ottiene un piano rettangolare nell'anteprima di Dynamo.
!
3. Circle.ByPlaneRadius: passando al livello superiore nella gerarchia, a questo punto si crea una curva dal piano del passaggio precedente. Dopo il collegamento al nodo, si ottiene un cerchio in corrispondenza dell'origine. Il raggio di default sul nodo รจ il valore di 1.
!
4. Curve.Extrude: ora รจ possibile far comparire questo oggetto assegnandogli profonditร e rendendolo tridimensionale. Questo nodo crea una superficie da una curva tramite l'estrusione. La distanza di default sul nodo รจ 1. Nella finestra dovrebbe essere visualizzato un cilindro.
!
5 . Surface.Thicken: questo nodo fornisce un solido chiuso eseguendo l'offset della superficie ad una determinata distanza e chiudendo la forma. Il valore dello spessore di default รจ 1. Nella finestra viene visualizzato un cilindro svuotato in linea con questi valori.
!
6. Number Slider: anzichรฉ utilizzare i valori di default per tutti questi input, aggiungere al modello un controllo parametrico.
Modifica del dominio: dopo aver aggiunto il dispositivo di scorrimento numerico all'area di disegno, fare clic sull'accento circonflesso in alto a sinistra per visualizzare le opzioni di dominio.
Min/Max/Step - modificare rispettivamente i valori min, max e step in 0,2 e 0.01. Questa operazione consente di controllare la dimensione della geometria complessiva.
!
7. Number Slider: in tutti gli input di default, copiare e incollare questo dispositivo di scorrimento numerico (selezionare il dispositivo di scorrimento, premere CTRL+C, quindi CTRL+V) piรน volte, finchรฉ tutti gli input con valori di default non mostreranno un dispositivo di scorrimento. Alcuni dei valori del dispositivo di scorrimento devono essere maggiori di zero per far funzionare la definizione (ossia, รจ necessaria una profonditร di estrusione per avere una superficie da ispessire).
!
!
8. Ora รจ stato creato un cilindro svuotato parametrico con questi dispositivi di scorrimento. Provare a regolare alcuni di questi parametri e vedere l'aggiornamento dinamico della geometria nella finestra di Dynamo.
!
Dispositivi di scorrimento: per fare un ulteriore passo avanti, sono stati aggiunti molti dispositivi di scorrimento all'area di disegno e occorre ripulire l'interfaccia dello strumento appena creato. Fare clic con il pulsante destro del mouse su un dispositivo di scorrimento, selezionare Rinomina e assegnare ad ogni dispositivo di scorrimento il nome appropriato per il relativo parametro (thickness, radius, height, etc).
!
9. A questo punto, รจ stato creato un fantastico cilindro ispessito. Attualmente, questo รจ un oggetto. Si puรฒ vedere come creare una serie di cilindri che restano dinamicamente collegati. Per eseguire questa operazione, si creerร un elenco di cilindri, anzichรฉ utilizzare un singolo elemento.
Aggiunta (+): l'obiettivo รจ aggiungere una fila di cilindri accanto al cilindro creato. Se si desidera aggiungere un cilindro adiacente a quello corrente, รจ necessario considerare sia il raggio del cilindro che lo spessore dell'involucro. Si ottiene questo numero aggiungendo i due valori dei dispositivi di scorrimento.
!
10. Questo passaggio รจ piรน complicato, quindi occorre esaminarlo lentamente: l'obiettivo finale รจ creare un elenco di numeri che definiscano le posizioni di ogni cilindro in una riga.
!
a. Moltiplicazione: per prima cosa, si desidera moltiplicare il valore del passaggio precedente per 2. Il valore del passaggio precedente rappresenta un raggio e si desidera spostare il cilindro in base al diametro completo.
b. Number Sequence: viene creata una serie di numeri con questo nodo. Il primo input รจ il nodo della moltiplicazione del passaggio precedente che viene collegato al valore step. Il valore start puรฒ essere impostato su 0.0 utilizzando un nodo Number.
c. Dispositivo di scorrimento di numeri interi: per il valore amount, collegare un dispositivo di scorrimento di numeri interi. In questo modo si definirร il numero di cilindri creati.
d. Output: questo elenco mostra la distanza di spostamento per ogni cilindro nella serie e viene parametricamente determinato dai dispositivi di scorrimento originali.
11. Questo passaggio รจ abbastanza semplice: collegare la sequenza definita nel passaggio precedente all'input x del nodo Point.ByCoordinates originale. Questa operazione sostituirร il dispositivo di scorrimento pointX che รจ possibile eliminare. Ora nella finestra รจ visibile una serie di cilindri (assicurarsi che il dispositivo di scorrimento di numeri interi sia maggiore di 0).
!
12. La catena di cilindri รจ ancora collegata dinamicamente a tutti i dispositivi di scorrimento. Regolare ogni dispositivo di scorrimento per controllare l'aggiornamento della definizione.
!
Piano
Curva
Punto
Curva
Curva
Uniforme
Superficie
Curva
Curva
Uniforme
Sรฌ
No
No
Superficie
-
Sรฌ
Sรฌ
Sรฌ
Sรฌ
Uniforme
-
-
Sรฌ
Sรฌ
Sรฌ
Con:
Superficie
Curva
Piano
Uniforme
Superficie
Curva
Punto
Punto, curva
Superficie
Curva
Punto
Punto
Punto
Mediante: Point
Curva
Piano
Superficie
Uniforme
Su: Curva
Sรฌ
No
No
No
No
Poligono
-
Curva
No
// python_points_5 is a set of Points generated with
// a Python script found in Chapter 12, Section 10
surf = NurbsSurface.ByPoints(python_points_5, 3, 3);
WCS = CoordinateSystem.Identity();
pl = Plane.ByOriginNormal(WCS.Origin.Translate(0, 0,
0.5), WCS.ZAxis);
// intersect surface, generating three closed curves
crvs = surf.Intersect(pl);
crvs_moved = crvs.Translate(0, 0, 10);// python_points_5 is a set of Points generated with
// a Python script found in Chapter 12, Section 10
surf = NurbsSurface.ByPoints(python_points_5, 3, 3);
tool_pts = Point.ByCoordinates((-10..20..10)<1>,
(-10..20..10)<2>, 1);
tool = NurbsSurface.ByPoints(tool_pts);
pick_point = Point.ByCoordinates(8, 1, 3);
result = surf.Trim(tool, pick_point);Revit รจ un ambiente ricco di dati. Offre un'ampia gamma di funzionalitร di selezione che va oltre il semplice "puntamento e clic". ร possibile eseguire una query sul database di Revit e collegare dinamicamente gli elementi di Revit alla geometria di Dynamo durante l'esecuzione di operazioni parametriche.
La libreria di Revit nell'interfaccia utente offre la categoria Selection, che consente di selezionare la geometria in piรน modi.
Per selezionare correttamente gli elementi di Revit, รจ importante comprendere a fondo la gerarchia degli elementi di Revit. Si desidera selezionare tutti i muri di un progetto? Selezionarli per categoria. Si desidera selezionare ogni sedia Eames nel moderno ingresso di metร secolo? Selezionarla per famiglia.
Eseguire una rapida revisione della gerarchia di Revit.
Vi ricordate la tassonomia in biologia? Regno, phylum, classe, ordine, famiglia, genere, specie? Gli elementi di Revit vengono suddivisi in categorie simili. Ad un livello di base, la gerarchia di Revit puรฒ essere suddivisa in categorie, famiglie, tipi* e istanze. Un'istanza รจ un singolo elemento del modello (con un ID univoco), mentre una categoria definisce un gruppo generico (ad esempio "muri" o "pavimenti"). Con il database di Revit organizzato in questo modo, รจ possibile selezionare un elemento e scegliere tutti gli elementi simili in base al livello specificato nella gerarchia.
*I tipi in Revit vengono definiti in modo diverso dai tipi della programmazione. In Revit, un tipo fa riferimento ad un ramo della gerarchia, anzichรฉ ad un "tipo di dati".
Nelle tre immagini riportate di seguito sono mostrate le categorie principali per la selezione di elementi di Revit in Dynamo. Si tratta di strumenti straordinari da utilizzare in combinazione e alcuni di questi strumenti verranno esaminati negli esercizi seguenti.
Puntamento e clic รจ il modo piรน semplice per selezionare direttamente un elemento di Revit. ร possibile selezionare un elemento del modello completo o parti della relativa topologia (ad esempio una superficie o un bordo). Questo rimane collegato dinamicamente a tale oggetto di Revit, pertanto quando il file di Revit ne aggiorna la posizione o i parametri, l'elemento di Dynamo di riferimento viene aggiornato nel grafico.
I menu a discesa consentono di creare un elenco di tutti gli elementi accessibili in un progetto di Revit. ร possibile utilizzare questa opzione per fare riferimento ad elementi di Revit che non sono necessariamente visibili in una vista. Questo รจ un ottimo strumento per eseguire una query su elementi esistenti o crearne di nuovi in un Editor di famiglie o in un progetto di Revit.

ร inoltre possibile selezionare un elemento di Revit in base a livelli specifici nella gerarchia di Revit. Si tratta di un'opzione potente per la personalizzazione di grandi serie di dati in preparazione della documentazione o della creazione di istanze generative e della personalizzazione.
!
Tenendo presenti le tre immagini riportate sopra, si esaminerร un esercizio che consente di selezionare elementi da un progetto di Revit di base in preparazione delle applicazioni parametriche che verranno create nelle sezioni restanti di questo capitolo.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
In questo file di Revit di esempio, ci sono tre tipi di elementi di un semplice edificio. Si utilizzerร questo file come esempio per la selezione di elementi di Revit nel contesto della gerarchia di Revit.
!
Massa dell'edificio
Travi (telaio strutturale)
Travi reticolari (componenti adattivi)
Quali conclusioni รจ possibile trarre dagli elementi attualmente presenti nella vista di progetto di Revit? E di quanti livelli nella gerarchia occorre scendere per selezionare gli elementi appropriati? Naturalmente, questa operazione diventerร un'attivitร piรน complessa quando si lavora ad un progetto di grandi dimensioni. Sono disponibili numerose opzioni: รจ possibile selezionare elementi per categorie, livelli, famiglie, istanze e cosรฌ via.
Poichรฉ si sta utilizzando un'impostazione di base, selezionare la massa dell'edificio scegliendo Massa nel nodo a discesa Categories. Questo file si trova nella scheda Revit > Selezione.
L'output della categoria Massa รจ solo la categoria stessa. ร necessario selezionare gli elementi. A tale scopo, utilizzare il nodo All Elements of Category.
A questo punto, non sarร presente alcuna geometria in Dynamo. ร stato selezionato un elemento di Revit, ma l'elemento non รจ stato convertito nella geometria di Dynamo. Si tratta di una separazione importante. Se si selezionano numerosi elementi, si sconsiglia di visualizzarne l'anteprima in Dynamo, in quanto ciรฒ rallenterebbe le prestazioni del sistema. Dynamo รจ uno strumento per gestire un progetto di Revit senza necessariamente eseguire operazioni di geometria. Ciรฒ sarร descritto nella sezione successiva di questo capitolo.
In questo caso, si sta utilizzando una geometria semplice, pertanto si desidera importare la geometria nell'anteprima di Dynamo. Accanto al valore BldgMass nel nodo di controllo riportato sopra รจ presente un numero verde. Rappresenta l'ID dell'elemento e indica che si sta utilizzando un elemento di Revit, non la geometria di Dynamo. Il passaggio successivo consiste nel convertire questo elemento di Revit nella geometria in Dynamo.
Utilizzando il nodo Element.Faces, viene visualizzato un elenco di superfici che rappresentano ciascuna superficie della massa di Revit. Ora รจ possibile vedere la geometria nella finestra di Dynamo e iniziare a fare riferimento alla superficie per le operazioni parametriche.
Ecco un metodo alternativo. In questo caso, non si esegue la selezione tramite la gerarchia di Revit (All Elements of Category) e si sceglie di selezionare esplicitamente la geometria in Revit.
Utilizzando il nodo Select Model Element, fare clic sul pulsante *Seleziona *(o Modifica). Nella finestra di Revit, selezionare l'elemento desiderato. In questo caso, selezionare la massa dell'edificio.
Anzichรฉ Element.Faces, รจ possibile selezionare l'intera massa come geometria solida utilizzando Element.Geometry. In questo modo viene selezionata tutta la geometria contenuta all'interno della massa.
Utilizzando alcune operazioni di base con gli elenchi, รจ possibile eseguire una query su una superficie di interesse.

Innanzitutto, generare gli elementi selezionati da una versione precedente al nodo Element.Faces.
Quindi, utilizzare il nodo List.Count per mostrare che si stanno utilizzando 23 superfici nella massa.
Facendo riferimento a questo numero, รจ possibile modificare il valore massimo di *Integer Slider *in 22.
Il passaggio precedente era un po' complicato. ร possibile eseguire questa operazione molto piรน rapidamente con il nodo Select Face. Questo consente di isolare una superficie che di per sรฉ non รจ un elemento nel progetto di Revit. La stessa interazione si applica a Select Model Element, tranne per il fatto che รจ stata selezionata la superficie anzichรฉ l'elemento completo.
Si supponga di voler isolare i muri della facciata principale dell'edificio. Per eseguire questa operazione, รจ possibile utilizzare il nodo Select Faces. Fare clic sul pulsante Seleziona, quindi selezionare le quattro facciate principali in Revit.
Dopo aver selezionato i quattro muri, assicurarsi di fare clic sul pulsante Termina in Revit.
Le facce vengono ora importate in Dynamo come superfici.
Ora, osservare le travi sopra l'atrio.
Utilizzando il nodo Select Model Element, selezionare una delle travi.
Collegare l'elemento trave al nodo Element.Geometry, cosรฌ ora la trave รจ presente nella finestra di Dynamo.
ร possibile eseguire lo zoom avanti della geometria con un nodo Watch3D. Se la trave non รจ visibile in Watch3D, fare clic con il pulsante destro del mouse e selezionare Adatta alla finestra.
Una domanda che potrebbe sorgere spesso nei workflow di Revit/Dynamo: com'รจ possibile selezionare un elemento e ottenere tutti gli elementi simili? Poichรฉ l'elemento di Revit selezionato contiene tutte le relative informazioni gerarchiche, รจ possibile eseguire una query sul tipo di famiglia e selezionare tutti gli elementi di quel tipo.
Collegare l'elemento trave ad un nodo Element.ElementType.
Il nodo Watch mostra che l'output รจ ora un simbolo di famiglia anzichรฉ un elemento di Revit.
Element.ElementType รจ una query semplice, cosรฌ รจ possibile eseguire questa operazione in Code Block con la stessa facilitร di
Per selezionare le travi rimanenti, utilizzare il nodo All Elements of Family Type.
Il nodo di controllo mostra che sono stati selezionati cinque elementi di Revit.
ร possibile convertire anche tutti questi cinque elementi nella geometria di Dynamo.
E se ci fossero 500 travi? La conversione di tutti questi elementi nella geometria di Dynamo risulterebbe davvero lenta. Se Dynamo richiede molto tempo per il calcolo dei nodi, รจ possibile utilizzare la funzionalitร del nodo Congela per mettere in pausa l'esecuzione delle operazioni di Revit durante lo sviluppo del grafico. Per ulteriori informazioni sul congelamento dei nodi, controllare la sezione nel capitolo sui solidi.
In ogni caso, se si dovessero importare 500 travi, sono necessarie tutte le superfici per eseguire l'operazione parametrica desiderata? Oppure รจ possibile estrarre le informazioni di base dalle travi ed eseguire attivitร generative con la geometria fondamentale? Questa รจ una domanda che verrร tenuta a mente mentre si procede in questo capitolo. Ad esempio, osservare il sistema di travi reticolari successivo.
Utilizzando lo stesso grafico dei nodi, selezionare l'elemento trave reticolare anzichรฉ l'elemento trave. Prima di eseguire questa operazione, eliminare il nodo Element.Geometry del passaggio precedente.
A questo punto, รจ possibile estrarre alcune informazioni di base dal tipo di famiglia di travi reticolari.
Nel nodo Watch รจ presente un elenco di componenti adattivi selezionati da Revit. Si desidera estrarre le informazioni di base, quindi si inizia con i punti adattivi.
Collegare il nodo All Elements of Family Type al nodo AdaptiveComponent.Location. In questo modo si ottiene un elenco di elenchi, ciascuno con tre punti che rappresentano le posizioni dei punti adattivi.
Suggerimento Se si fa clic sul numero verde di un elemento di Revit in Dynamo, la finestra di Revit eseguirร lo zoom di tale elemento.
Uno dei molti casi di utilizzo importanti di Dynamo รจ il posizionamento dinamico di oggetti distinti lungo un modello di modellatore. Spesso รจ necessario posizionare gli oggetti in punti indipendenti dagli assiemi inseriti lungo il modellatore, un compito molto noioso da svolgere manualmente. E quando la geometria orizzontale o verticale del modellatore cambia, ciรฒ comporta una notevole mole di rilavorazione.
๐ฏ Posizionare i riferimenti di blocco dei lampioni lungo un modellatore in corrispondenza dei valori di progressiva specificati in un file Excel.
Lettura dei dati da un file esterno (in questo caso Excel)
Organizzazione dei dati nei dizionari
Utilizzo di sistemi di coordinate per controllare posizione/scala/rotazione
Questo grafico verrร eseguito su Civil 3D 2020 e versioni successive.
Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.
ร consigliabile salvare il file Excel nella stessa directory del grafico di Dynamo.
Ecco una panoramica della logica di questo grafico.
Leggere il file Excel e importare i dati in Dynamo
Ottenere le linee caratteristiche dalla linea base del modellatore specificata
Generare sistemi di coordinate lungo la linea caratteristica del modellatore in corrispondenza delle progressive desiderate
Procediamo!
In questo grafico di esempio, si utilizzerร un file Excel per memorizzare i dati impiegati da Dynamo per posizionare i riferimenti di blocco dei lampioni. La tabella ha questo aspetto.
L'utilizzo di Dynamo per la lettura dei dati da un file esterno (ad esempio un file Excel) รจ una strategia ottimale, soprattutto quando i dati devono essere condivisi con altri membri del team.
I dati di Excel vengono importati in Dynamo in questo modo.
Ora che sono disponibili i dati, รจ necessario suddividerli per colonna (Corridor, Baseline, PointCode e cosรฌ via) in modo che possano essere utilizzati nel resto del grafico. Un metodo comune per eseguire questa operazione consiste nell'utilizzare il nodo List.GetItemAtIndex e specificare il numero di indice di ogni colonna desiderata. Ad esempio, la colonna Corridor si trova all'indice 0, la colonna Baseline all'indice 1 e cosรฌ via.
Sembra a posto, giusto? Ma c'รจ un potenziale problema con questo approccio. Cosa succede se l'ordine delle colonne nel file Excel cambia in futuro? Oppure tra due colonne ne viene aggiunta una nuova? Il grafico non funzionerร correttamente e richiederร un aggiornamento. ร proteggere il grafico in futuro inserendo i dati in un dizionario, con le intestazioni di colonna di Excel come keys e gli altri dati come values.
Se non si conoscono i dizionari, consultare la sezione .
In questo modo il grafico risulta piรน resiliente, perchรฉ consente di cambiare l'ordine delle colonne in Excel con una certa flessibilitร . Finchรฉ le intestazioni di colonna rimangono invariate, รจ possibile recuperare i dati dal dizionario utilizzando key (ovvero l'intestazione di colonna), che รจ la procedura successiva.
Ora che i dati di Excel sono stati importati e sono pronti, iniziare a utilizzarli per ottenere da Civil 3D alcune informazioni sui modelli di modellatore.
Selezionare il modello di modellatore in base al nome.
Ottenere una linea base specifica all'interno del modellatore.
Ottenere una linea caratteristica all'interno della linea base secondo il relativo codice punto.
Ora si procederร alla generazione di sistemi di coordinate lungo le linee caratteristiche del modellatore in corrispondenza dei valori di progressiva specificati nel file Excel. Questi sistemi di coordinate verranno utilizzati per definire la posizione, la rotazione e la scala dei riferimenti di blocco dei lampioni.
Se non si conoscono i sistemi di coordinate, consultare la sezione .
Si noti che qui viene utilizzato un blocco di codice per ruotare i sistemi di coordinate in base al lato della linea base su cui si trovano. Si potrebbe ottenere questo risultato utilizzando una sequenza di piรน nodi, ma questo รจ un buon esempio di una situazione in cui รจ piรน facile scriverlo.
Se non si conoscono i blocchi di codice, consultare la sezione .
ร quasi fatta! Si hanno tutte le informazioni necessarie per poter collocare effettivamente i riferimenti di blocco. La prima cosa da fare รจ ottenere le definizioni di blocco che si desidera utilizzare nella colonna BlockName del file Excel.
Da qui, l'ultimo passaggio consiste nella creazione dei riferimenti di blocco.
Quando si esegue il grafico, dovrebbero essere visualizzati nuovi riferimenti di blocco nello spazio modello lungo il modellatore. Ed ecco la parte piรน interessante. Se la modalitร di esecuzione del grafico รจ impostata su Automatica e si modifica il file Excel, i riferimenti di blocco vengono aggiornati automaticamente.
ร possibile leggere ulteriori informazioni sulle modalitร di esecuzione del grafico nella sezione .
Di seguito รจ riportato un esempio di esecuzione del grafico mediante il Lettore Dynamo.
Se non si conosce il Lettore Dynamo, consultare la sezione .
๐ Missione compiuta!
Puรฒ essere utile visualizzare la geometria del modellatore in Dynamo per fornire un contesto. In questo particolare modello i solidi del modellatore sono giร stati estratti nello spazio modello, pertanto verranno importati in Dynamo.
Ma c'รจ qualcos'altro che occorre considerare. I solidi sono di un tipo geometrico relativamente "pesante", il che significa che questa operazione rallenta il grafico. Sarebbe bello se esistesse un modo semplice per scegliere se si desidera visualizzare o meno i solidi. La risposta ovvia รจ semplicemente scollegare il nodo Corridor.GetSolids, ma in questo modo verranno generati avvisi per tutti i nodi a valle, il che crea un po' di confusione. Questa รจ una situazione in cui il nodo ScopeIf ha un ruolo fondamentale.
Notare che il nodo Object.Geometry mostra una barra grigia nella parte inferiore. Ciรฒ significa che l'anteprima del nodo รจ disattivata (accessibile facendo clic con il pulsante destro del mouse sul nodo), il che consente a GeometryColor.ByGeometryColor di evitare di "contendersi" con altra geometria la prioritร di visualizzazione nell'anteprima di sfondo.
Il nodo ScopeIf consente in sostanza di eseguire un intero ramo di nodi in modo selettivo. Se l'input test รจ false, non verrร eseguito alcun nodo connesso al nodo ScopeIf.
Di seguito รจ riportato il risultato dell'anteprima di sfondo di Dynamo.
Ecco alcune idee su come espandere le funzionalitร di questo grafico.
Aggiungere una colonna rotation al file Excel e utilizzarla per guidare la rotazione dei sistemi di coordinate.
Aggiungere offset orizzontali o verticali al file Excel in modo che i lampioni possano deviare dalla linea caratteristica del modellatore, se necessario.
Anzichรฉ utilizzare un file Excel con valori di progressiva, generare i valori di progressiva direttamente in Dynamo utilizzando una progressiva iniziale e una spaziatura tipica.
Nel blocco di codice esistono alcuni metodi di sintassi abbreviata di base che, in poche parole, rendono la gestione dei dati molto piรน facile. Le nozioni di base riportate di seguito verranno analizzate e sarร descritto come utilizzare questa sintassi abbreviata sia per la creazione che per l'esecuzione di una query sui dati.
Tipo dati
Dynamo standard
Il metodo per la definizione di intervalli e sequenze puรฒ essere ridotto ad una sintassi abbreviata di base. Utilizzare l'immagine riportata di seguito come guida per la sintassi "..." per definire un elenco di dati numerici con il blocco di codice. Dopo aver appreso come eseguire questa notazione, la creazione di dati numerici รจ un processo davvero efficiente:
!
In questo esempio, un intervallo di numeri viene sostituito dalla sintassi di Code Block di base che definisce
beginning..end..step-size;. Rappresentata numericamente, si ottiene:0..10..1;.Notare che la sintassi
0..10..1;รจ equivalente a0..10;. Una dimensione di incremento di 1 รจ il valore di default per la notazione della sintassi abbreviata. Pertanto,
La creazione di intervalli avanzati consente di utilizzare l'elenco di elenchi in modo semplice. Negli esempi riportati di seguito, si isola una variabile dalla notazione dell'intervallo primario e si crea un altro intervallo di tale elenco.
!
1. Creando intervalli nidificati, confrontare la notazione con un simbolo "#" rispetto alla notazione senza. La stessa logica si applica agli intervalli di base, tranne per il fatto che diventa un po' piรน complesso.
2. ร possibile definire un sottointervallo in qualsiasi punto dell'intervallo primario e notare che si possono anche avere due sottointervalli.
3. Controllando il valore di "fine" in un intervallo, si creano piรน intervalli di lunghezze differenti.
Come esercizio logico, confrontare le due sintassi abbreviate riportate sopra e provare ad analizzare il modo in cui i sottointervalli e la notazione # determinano l'output risultante.
!
Oltre a creare elenchi con la sintassi abbreviata, รจ anche possibile creare elenchi al volo. Questo elenco puรฒ contenere una vasta gamma di tipi di elementi e puรฒ anche essere sottoposto ad una query (ricordare che gli elenchi sono oggetti di per sรฉ). Per riepilogare, con Code Block si creano elenchi e si esegue una query sulle voci di un elenco con le parentesi quadre:
!
1. Creare rapidamente elenchi con stringhe ed eseguire una query su di essi utilizzando l'indice delle voci.
2. Create elenchi con variabili ed eseguire una query utilizzando la notazione della sintassi abbreviata dell'intervallo.
La gestione di elenchi nidificati รจ un processo simile. Tenere presente l'ordine dell'elenco e richiamarlo utilizzando piรน gruppi di parentesi quadre:
!
1. Definire un elenco di elenchi.
2. Eseguire una query su un elenco con la notazione della parentesi quadra singola.
3. Eseguire una query su una voce con la notazione della parentesi quadra doppia.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
In questo esercizio, si mostreranno le nuove competenze in termini di sintassi abbreviata per creare una bizzarra superficie di guscio definita da intervalli e formule. Durante questo esercizio, notare come si utilizzano il blocco di codice e i nodi di Dynamo esistenti contemporaneamente: viene utilizzato il blocco di codice per l'elaborazione di dati di grandi dimensioni, mentre i nodi di Dynamo vengono disposti visivamente per la leggibilitร della definizione.
Iniziare creando una superficie collegando i nodi riportati sopra. Anzichรฉ utilizzare un nodo del numero per definire la larghezza e la lunghezza, fare doppio clic sull'area di disegno e digitare 100; in un Code Block.
!
!
Definire un intervallo compreso tra 0 e 1 con 50 divisioni digitando
0..1..#50in un Code Block.Collegare l'intervallo a Surface.PointAtParameter, che utilizza i valori u e v compresi tra 0 e 1 sulla superficie. Ricordarsi di modificare Collegamento in Globale facendo clic con il pulsante destro del mouse sul nodo Surface.PointAtParameter.
In questo passaggio, si utilizza la prima funzione per spostare la griglia di punti verso l'alto nella direzione Z. Questa griglia determinerร una superficie generata in base alla funzione sottostante. Aggiungere nuovi nodi come mostrato nell'immagine seguente.
!
Utilizziamo un Code Block con la riga:
(0..Math.Sin(x*360)..#50)*5;. Per suddividerlo rapidamente, definire un intervallo con una formula al suo interno. Questa formula รจ la funzione seno. La funzione seno riceve gli input di gradi in Dynamo, pertanto per ottenere un'onda seno completa, รจ necessario moltiplicare i valori x (questo รจ l'input di intervallo da 0 a 1) per 360. Successivamente, si desidera che il numero di divisioni corrisponda a quello dei punti della griglia di controllo per ogni riga, pertanto si definiscono 50 suddivisioni con #50. Infine, il moltiplicatore 5 aumenta semplicemente l'ampiezza della traslazione in modo da poter vedere l'effetto nell'anteprima di Dynamo.
!
Sebbene il Code Block precedente funzionasse correttamente, non era completamente parametrico. Si desidera animare dinamicamente i relativi parametri, pertanto si sostituirร la riga del passaggio precedente con
(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;. In questo modo รจ possibile definire questi valori in base agli input.
Modificando i dispositivi di scorrimento (compresi tra 0 e 10), si ottengono alcuni risultati interessanti.
!
!
Eseguendo una trasposizione sull'intervallo di numeri, si inverte la direzione dell'onda della tenda:
transposeList = List.Transpose(sineList);.
!
Quando si aggiungono sineList e tranposeList, viene visualizzata una superficie di guscio distorta:
eggShellList = sineList+transposeList;.
Modifichiamo i valori dei dispositivi di scorrimento specificati qui sotto per ottenere un algoritmo che consenta un maggiore controllo sulla superficie.
!
Infine, si esegue una query su parti isolate dei dati con Code Block. Per rigenerare la superficie con un intervallo specifico di punti, aggiungere il blocco di codice riportato sopra tra i nodi Geometry.Translate e NurbsSurface.ByPoints. Contiene la riga di testo: sineStrips[0..15..1];. Verranno selezionate le prime 16 righe di punti (su 50). Ricreando la superficie, si puรฒ vedere che รจ stata generata una parte isolata della griglia di punti.
!
!
Nel passaggio finale, per rendere Code Block piรน parametrico, eseguire la query utilizzando un dispositivo di scorrimento compreso tra 0 e 1. Questa operazione viene eseguita con la seguente riga di codice:
sineStrips[0..((List.Count(sineStrips)-1)*u)];. Ciรฒ puรฒ sembrare confuso, ma la riga di codice offre un modo rapido per scalare la lunghezza dell'elenco in un moltiplicatore compreso tra 0 e 1.
Un valore di 0.53 nel dispositivo di scorrimento consente di creare una superficie appena oltre il punto medio della griglia.
!
Come previsto, un dispositivo di scorrimento di 1 crea una superficie dalla griglia completa di punti.
!
Osservando il grafico visivo, รจ possibile evidenziare i Code Block e vedere ciascuna delle loro funzioni.
!
1. Il primo Code Block sostituisce il nodo Number.
2. Il secondo Code Block sostituisce il nodo Range.
3. Il terzo Code Block sostituisce i nodi List.Transpose, List.Count e Number Range.
4. Il quarto Code Block esegue una query su un elenco di elenchi, sostituendo il nodo List.GetItemAtIndex.
Mentre in precedenza รจ stata esaminata la modifica della massa di un edificio di base, si vuole approfondire ulteriormente il collegamento di Dynamo/Revit modificando un numero elevato di elementi in un'unica operazione. La personalizzazione su larga scala diventa piรน complessa, poichรฉ le strutture di dati richiedono operazioni con gli elenchi piรน avanzate. Tuttavia, i principi alla base della loro esecuzione sono fondamentalmente gli stessi. Verranno esaminate alcune opportunitร per l'analisi da un gruppo di componenti adattivi.
Si supponga di aver creato un'ampia gamma di componenti adattivi e di voler modificare i parametri in base alle relative posizioni dei punti. I punti, ad esempio, potrebbero controllare un parametro di spessore correlato all'area dell'elemento. Oppure potrebbero controllare un parametro di opacitร correlato all'esposizione solare durante tutto l'anno. Dynamo consente il collegamento dell'analisi ai parametri in pochi semplici passaggi. Verrร analizzata una versione di base nell'esercizio riportato di seguito.
!
Eseguire una query sui punti adattivi del componente adattivo selezionato utilizzando il nodo AdaptiveComponent.Locations. Questo consente di utilizzare una versione astratta di un elemento di Revit per l'analisi.
Estraendo la posizione dei punti dei componenti adattivi, รจ possibile eseguire un'ampia gamma di analisi per tale elemento. Un componente adattivo a quattro punti consentirร , ad esempio, di studiare la deviazione dal piano di un determinato pannello.
!
Utilizzare il rimappaggio per associare un gruppo di dati ad un intervallo di parametri. Questo รจ uno strumento fondamentale utilizzato in un modello parametrico e verrร dimostrato nell'esercizio riportato di seguito.
Utilizzando Dynamo, le posizioni dei punti dei componenti adattivi possono essere utilizzate per creare un piano di adattamento per ogni elemento. ร possibile anche eseguire una query sulla posizione del sole nel file di Revit e studiare l'orientamento relativo del piano rispetto al sole confrontandolo con altri componenti adattivi. Eseguire l'impostazione nell'esercizio riportato di seguito creando un tetto algoritmico.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Questo esercizio verterร sulle tecniche illustrate nella sezione precedente. In questo caso, verrร definita una superficie parametrica degli elementi di Revit, saranno create istanze di componenti adattivi a quattro punti, che verranno poi modificati in base all'orientamento rispetto al sole.
!
Iniziare selezionando due spigoli con il nodo Select Edge. I due spigoli sono i tratti lunghi dell'atrio.
Combinare i due spigoli in un elenco con il nodo List.Create.
Creare una superficie tra i due spigoli con Surface.ByLoft.
!
Utilizzando Code Block, definire un intervallo da 0 a 1 con 10 valori a spaziatura uniforme:
0..1..#10;.Collegare Code Block agli input u e v di un nodo Surface.PointAtParameter e collegare il nodo Surface.ByLoft all'input surface. Fare clic con il pulsante destro del mouse sul nodo e modificare Collegamento in Globale. In questo modo si ottiene una griglia di punti sulla superficie.
Questa griglia di punti funge da punti di controllo per una superficie definita in modo parametrico. Si desidera estrarre le posizioni u e v di ciascuno di questi punti in modo da poterle collegare ad una formula parametrica e mantenere la stessa struttura di dati. A tale scopo, รจ possibile eseguire una query sulle posizioni dei parametri dei punti appena creati.
!
Aggiungere un nodo Surface.ParameterAtPoint all'area di disegno e collegare gli input come mostrato in precedenza.
Eseguire una query sui valori u di questi parametri con il nodo UV.U.
Eseguire una query sui valori v di questi parametri con il nodo UV.V.
!
Aggiungere Code Block all'area di disegno e immettere il codice:
Math.Sin(u*180)*Math.Sin(v*180)*w;. Si tratta di una funzione parametrica che crea una protuberanza sinusoidale da una superficie piana.Collega UV.U all'input u e UV.V all'input v.
!
Ora รจ disponibile un elenco di valori come definito dall'algoritmo. Utilizzare questo elenco di valori per spostare i punti verso l'alto nella direzione +Z. Utilizzando Geometry.Translate, collegare Code Block a zTranslation e Surface.PointAtParameter all'input geometry. I nuovi punti dovrebbero essere visualizzati nell'anteprima di Dynamo.
Infine, creare una superficie con il nodo NurbsSurface.ByPoints, collegando il nodo del passaggio precedente all'input points. Si ottiene una superficie parametrica. ร possibile trascinare il dispositivo di scorrimento per restringere e ingrandire la protuberanza.
Con la superficie parametrica, si vuole definire un modo per suddividerla in pannelli al fine di creare la serie di componenti adattivi a quattro punti. Dynamo non dispone di funzionalitร predefinite per la suddivisione della superficie in pannelli, pertanto รจ possibile accedere alla community per i pacchetti di Dynamo utili.
!
Passare a Pacchetti > Cerca pacchetto.
Cercare LunchBox e installare LunchBox for Dynamo. Si tratta di un insieme veramente utile di strumenti per le operazioni di geometria come questa.
Dopo il download, si dispone ora dell'accesso completo alla suite LunchBox. Cercare Quad Grid e selezionare LunchBox Quad Grid By Face. Collegare la superficie parametrica all'input Surface e impostare le divisioni U e V su 15. Nell'anteprima di Dynamo dovrebbe essere visualizzata una superficie in quattro pannelli.
Se si desidera conoscere la relativa impostazione, รจ possibile fare doppio clic sul nodo Lunch Box e vedere come viene eseguita.
Tornando a Revit, si darร un rapido sguardo al componente adattivo utilizzato qui. Non occorre seguirlo, ma questo รจ il pannello del tetto di cui verrร creata un'istanza. Si tratta di un componente adattivo a quattro punti, che รจ una rappresentazione approssimata di un sistema ETFE. L'apertura del vuoto centrale si trova su un parametro denominato Aperture Ratio.
Verrร creata un'istanza di molti elementi della geometria in Revit. Assicurarsi quindi di impostare il risolutore Dynamo su Manuale.
Aggiungere un nodo Family Types all'area di disegno e selezionare ROOF-PANEL-4PT.
Aggiungere un nodo AdaptiveComponent.ByPoints
Nota: se Dynamo richiede molto tempo per il calcolo dei nodi, potrebbe essere necessario utilizzare la funzionalitร del nodo Congela per mettere in pausa l'esecuzione delle operazioni di Revit durante lo sviluppo del grafico. Per ulteriori informazioni sul congelamento dei nodi, controllare la sezione Congelamento nel capitolo sui solidi.
Tornando in Revit, ecco la serie di pannelli sul tetto.
Eseguendo lo zoom avanti, รจ possibile osservare piรน da vicino la qualitร della superficie.
Continuando dal passaggio precedente, proseguire e controllare l'apertura di ogni pannello in base alla sua esposizione al sole. Se si esegue lo zoom in Revit e si seleziona un pannello, sulla barra delle proprietร viene visualizzato il parametro Aperture Ratio. La famiglia รจ impostata in modo che l'apertura sia compresa, approssimativamente, tra 0.05 e 0.45.
Se si osserva il percorso solare, รจ possibile vedere la posizione corrente del sole in Revit.
ร possibile fare riferimento a questa posizione del sole utilizzando il nodo SunSettings.Current.
Collegare le impostazioni del sole a Sunsetting.SunDirection per ottenere il vettore solare.
Dal nodo Panel Pts utilizzato per creare i componenti adattivi, utilizzare Plane.ByBestFitThroughPoints per approssimare un piano per il componente.
Eseguire una query sulla normale di questo piano.
Osservando il prodotto scalare, si hanno diversi numeri. Si desidera utilizzare la distribuzione relativa, ma รจ necessario comprimere i numeri nell'intervallo appropriato del parametro Aperture Ratio che si intende modificare.
Math.RemapRange รจ uno strumento eccezionale per questa funzione. Prevede un elenco di input e ne riassocia i limiti a due valori obiettivo.
Definire i valori obiettivo come 0.15 e_0.45_ in Code Block.
Fare clic su Esegui.
Collegare i valori riassociati ad un nodo Element.SetParameterByName.
Collegare la stringa Aperture Ratio all'input parameterName.
Collegare AdaptiveComponent all'input element.
Fare clic su Esegui.
Tornando in Revit, da lontano รจ possibile notare l'effetto dell'orientamento solare sull'apertura dei pannelli ETFE.
Eseguendo lo zoom avanti, si puรฒ vedere che i pannelli ETFE sono piรน vicini alla superficie del sole. L'obiettivo รจ ridurre il surriscaldamento derivante dall'esposizione solare. Se si desidera far passare piรน luce in base all'esposizione solare, occorre solo cambiare il dominio in Math.RemapRange.
Il colore รจ un ottimo tipo di dati per la creazione di effetti visivi accattivanti e per il rendering delle differenze nell'output del programma visivo in uso. Quando si utilizzano dati astratti e numeri variabili, a volte รจ difficile vedere cosa cambia e in che misura. Questa รจ un'ottima applicazione per i colori.
I colori in Dynamo vengono creati utilizzando gli input ARGB. Corrispondono ai canali alfa, rosso, verde e blu. L'alfa rappresenta la trasparenza del colore, mentre gli altri tre vengono utilizzati come colori primari per generare l'intero spettro dei colori.
Per rendere le cose piรน complicate, aggiungere ancora piรน livelli alla gerarchia. La struttura di dati puรฒ essere espansa ben oltre un elenco bidimensionale di elenchi. Poichรฉ gli elenchi sono elementi di per sรฉ in Dynamo, รจ possibile creare dati con il maggior numero possibile di quote.
Qui come analogia si utilizzeranno le bambole matrioske russe. Ogni elenco puรฒ essere considerato come un contenitore contenente piรน elementi. Ogni elenco ha le sue proprietร ed รจ anche considerato come il suo oggetto.
Una serie di bambole matrioske russe (foto di ) รจ un'analogia per gli elenchi n-dimensionali. Ogni livello rappresenta un elenco e ogni elenco contiene voci al suo interno. Nel caso di Dynamo, ogni contenitore puรฒ avere piรน contenitori all'interno (che rappresentano le voci di ogni elenco).
Gli elenchi n-dimensionali sono difficili da spiegare visivamente, ma in questo capitolo sono stati creati alcuni esercizi che si concentrano sull'utilizzo di elenchi che si estendono per oltre due dimensioni.
Nei nomi dei nodi di Dynamo รจ possibile aver notato un tema comune: ogni nodo utilizza una sintassi "." senza spazi. Questo perchรฉ il testo nella parte superiore di ogni nodo rappresenta la sintassi effettiva per lo scripting e "." (o notazione con punto) separa un elemento dai metodi possibili che รจ possibile chiamare. In questo modo รจ possibile creare una facile conversione dallo scripting visivo nello scripting basato su testo.
Come analogia generale per la notazione con punto, in che modo รจ possibile gestire una mela parametrica in Dynamo? Di seguito sono riportati alcuni metodi che si eseguiranno sulla mela prima di decidere di mangiarla (nota: questi non sono metodi di Dynamo effettivi):
Gli output mostrano i valori u e v corrispondenti per ogni punto della superficie. Ora รจ disponibile un intervallo compreso tra 0 e 1 per ogni valore, nella struttura di dati corretta, pertanto รจ possibile applicare un algoritmo parametrico.
Fare clic su Esegui. La creazione della geometria in Revit richiederร un po' di tempo. Se richiede troppo tempo, ridurre il valore 15 di Code Block ad un numero inferiore. In questo modo si riduce il numero di pannelli sul tetto.
Utilizzare il prodotto scalare per calcolare l'orientamento solare. Il prodotto scalare รจ una formula che determina il possibile grado di parallelismo o antiparallelismo dei due vettori. Quindi utilizzare la normale del piano di ogni componente adattivo e confrontarla con il vettore solare per simulare approssimativamente l'orientamento solare.
Utilizzare il valore assoluto del risultato. In questo modo si garantisce che il prodotto scalare sia preciso se la normale del piano รจ rivolta verso la direzione inversa.
Fare clic su Esegui.
0..10;L'esempio di sequenza รจ simile, ad eccezione del fatto che viene utilizzato un simbolo "#" per indicare che nell'elenco si desiderano 15 valori, anzichรฉ un elenco che arriva fino a 15. In questo caso, si sta definendo: beginning..#ofSteps..step-size:. La sintassi effettiva per la sequenza รจ 0..#15..2.
Utilizzando il simbolo "#" del passaggio precedente, รจ ora possibile posizionarlo nella parte "step-size" della sintassi. Ora, รจ presente un intervallo di numeri che si estende dall'"inizio" alla "fine" e la notazione "step-size" distribuisce uniformemente un numero di valori tra i due: beginning..end..#ofSteps.
Equivalente a Code Block
Numeri
!
!
Stringhe
!
!
Sequenze
!
!
Intervalli
!
!
Recupero di una voce nell'indice
!
!
Creazione di un elenco
!
!
Concatenazione di stringhe
!
!
Istruzioni condizionali
!
!
Nodo/i
Equivalente a Code Block
Nota
Qualsiasi operatore (+, &&, >=, Not e cosรฌ via)
+, &&, >=, !, e cosรฌ via.
Notare che "Not" diventa "!", ma il nodo viene chiamato "Not" per distinguerlo da "Factorial"
Boolean True
true;
Notare la lettera minuscola
Boolean False
false;
Notare la lettera minuscola
Il mappaggio รจ probabilmente la parte piรน complessa della gestione di dati in Dynamo ed รจ particolarmente importante quando si utilizzano gerarchie complesse di elenchi. Con la serie di esercizi riportati di seguito, sarร illustrato quando utilizzare il mappaggio e le combinazioni quando i dati diventano multidimensionali.
Le introduzioni preliminari di List.Map e List.Combine sono disponibili nella sezione precedente. Nell'ultimo esercizio riportato di seguito, questi nodi verranno utilizzati in una struttura di dati complessa.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Questo esercizio รจ il primo di una serie di tre che si concentra sull'articolazione della geometria importata. Ogni parte di questa serie di esercizi incrementerร la complessitร della struttura di dati.
Si inizia con il file .sat nella cartella dei file degli esercizi. ร possibile selezionare questo file utilizzando il nodo File Path.
Con Geometry.ImportFromSAT, la geometria viene importata nell'anteprima di Dynamo come due superfici.
Per questo esercizio, si desidera eseguire una procedura semplice e utilizzare una delle superfici.
!
Selezionare l'indice di 1 per acquisire la superficie superiore. Questa operazione viene eseguita con il nodo List.GetItemAtIndex.
Disattivare l'anteprima della geometria dall'anteprima di Geometry.ImportFromSAT.
Il passaggio successivo consiste nel dividere la superficie in una griglia di punti.
!
1. Utilizzando Code Block, inserire queste due righe di codice:
0..1..#10;0..1..#5;.2. Con Surface.PointAtParameter, collegare i due valori di Code Block a u e v. Modificare il collegamento di questo nodo in Globale.
3. L'output mostra la struttura di dati, visibile anche nell'anteprima di Dynamo.
Quindi, utilizzare i punti dell'ultimo passaggio per generare dieci curve lungo la superficie.
!
Per esaminare come รจ organizzata la struttura di dati, collegare NurbsCurve.ByPoints all'output di Surface.PointAtParameter.
Per ora, รจ possibile disattivare l'anteprima del nodo List.GetItemAtIndex per ottenere un risultato piรน chiaro.
!
Un nodo List.Transpose di base inverte le colonne e le righe di un elenco di elenchi.
Collegando l'output di List.Transpose a NurbsCurve.ByPoints, si ottengono cinque curve che percorrono orizzontalmente la superficie.
ร possibile disattivare l'anteprima del nodo NurbsCurve.ByPoints nel passaggio precedente per ottenere lo stesso risultato nell'immagine.
Viene aumentata la complessitร . Si supponga di voler eseguire un'operazione sulle curve create nell'esercizio precedente. Forse si desidera correlare queste curve ad un'altra superficie ed eseguire il loft tra di esse. Ciรฒ richiede maggiore attenzione alla struttura di dati, ma la logica sottostante รจ la stessa.
!
Iniziare con un passaggio dell'esercizio precedente, isolando la superficie superiore della geometria importata con il nodo List.GetItemAtIndex.
!
Utilizzando Surface.Offset, eseguire l'offset della superficie di un valore di 10.
!
Allo stesso modo dell'esercizio precedente, definire un Code Block con queste due righe di codice:
0..1..#10;0..1..#5;.Collegare questi output a due nodi Surface.PointAtParameter, ciascuno con il collegamento impostato su Globale. Uno di questi nodi รจ collegato alla superficie originale, mentre l'altro รจ collegato alla superficie di offset.
!
Disattivare l'anteprima di queste superfici.
Come nell'esercizio precedente, collegare gli output a due nodi NurbsCurve.ByPoints. Il risultato mostra le curve corrispondenti a due superfici.
!
Utilizzando List.Create, รจ possibile combinare i due gruppi di curve in un elenco di elenchi.
Notare dall'output che sono presenti due elenchi con dieci voci ciascuno, che rappresentano ogni serie di curve NURBS collegate.
Se si esegue Surface.ByLoft, รจ possibile rendere visivamente chiara questa struttura di dati. Il nodo esegue il loft di tutte le curve in ogni sottoelenco.
!
Disattivare l'anteprima del nodo Surface.ByLoft nel passaggio precedente.
Utilizzando List.Transpose, tenere presente che si stanno invertendo tutte le colonne e le righe. Questo nodo trasferirร due elenchi di dieci curve in dieci elenchi di due curve. Ora si ha ogni curva NURBS correlata alla curva adiacente sull'altra superficie.
Utilizzando Surface.ByLoft, si arriva a una struttura con nervatura.
Successivamente, verrร illustrato un processo alternativo per ottenere questo risultato.
!
Prima di iniziare, disattivare l'anteprima di Surface.ByLoft nel passaggio precedente per evitare confusione.
In alternativa a List.Transpose utilizzare List.Combine. In questo modo verrร eseguito un "combinatore" in ogni sottoelenco.
In questo caso, si utilizza List.Create come "combinatore", che crea un elenco di ogni voce nei sottoelenchi.
Utilizzando il nodo Surface.ByLoft, si ottengono le stesse superfici del passaggio precedente. La trasposizione รจ piรน semplice da utilizzare in questo caso, ma quando la struttura di dati diventa ancora piรน complessa, List.Combine รจ piรน affidabile.
!
Tornando indietro di alcuni passaggi, per cambiare l'orientamento delle curve nella struttura con nervatura, si desidera utilizzare List.Transpose prima di collegarsi a NurbsCurve.ByPoints. In questo modo verranno invertite le colonne e le righe, ottenendo 5 nervature orizzontali.
Adesso si farร un passo avanti. In questo esercizio, si utilizzeranno entrambe le superfici importate, creando una gerarchia di dati complessa. Tuttavia, il nostro obiettivo รจ completare la stessa operazione con la stessa logica sottostante.
Iniziare con il file importato dell'esercizio precedente.
!
!
Come nell'esercizio precedente, utilizzare il nodo Surface.Offset per eseguire l'offset di un valore di 10.
Notare dall'output che sono state create due superfici con il nodo di offset.
!
Allo stesso modo dell'esercizio precedente, definire un Code Block con queste due righe di codice:
0..1..#20;0..1..#20;.Collegare questi output a due nodi Surface.PointAtParameter, ciascuno con il collegamento impostato su Globale. Uno di questi nodi รจ collegato alle superfici originali, mentre l'altro รจ collegato alle superfici di offset.
!
Come nell'esercizio precedente, collegare gli output a due nodi NurbsCurve.ByPoints.
Osservando l'output di NurbsCurve.ByPoints, si noterร che questo รจ un elenco di due elenchi, che รจ piรน complesso rispetto all'esercizio precedente. I dati vengono suddivisi in categorie in base alla superficie sottostante, pertanto รจ stato aggiunto un altro livello ai dati strutturati.
Notare che le cose diventano piรน complesse nel nodo Surface.PointAtParameter. In questo caso abbiamo un elenco di elenchi di elenchi.
!
Prima di procedere, disattivare l'anteprima delle superfici esistenti.
Utilizzando il nodo List.Create, le curve NURBS vengono unite in una struttura di dati, creando un elenco di elenchi di elenchi.
Collegando un nodo Surface.ByLoft, si ottiene una versione delle superfici originali, in quanto ciascuna di esse rimane nel proprio elenco, cosรฌ come รจ stata creata dalla struttura di dati originale.
!
Nell'esercizio precedente, รจ stato possibile utilizzare List.Transpose per creare una struttura a nervatura. Questo metodo non funzionerร qui. Una trasposizione deve essere utilizzata in un elenco bidimensionale e, poichรฉ disponiamo di un elenco tridimensionale, un'operazione di "inversione di colonne e righe" non sarร facile. Tenere presente che gli elenchi sono oggetti, pertanto List.Transpose inverte gli elenchi con sottoelenchi, ma non inverte le curve NURBS ad un elenco inferiore nella gerarchia.
!
List.Combine funzionerร meglio in questo caso. Per ottenere strutture di dati piรน complesse, si desidera utilizzare i nodi List.Map e List.Combine.
Utilizzando List.Create come "combinatore", verrร creata una struttura di dati che funzionerร meglio.
!
La struttura di dati deve ancora essere trasposta ad un livello piรน basso nella gerarchia. Per eseguire questa operazione, utilizzare List.Map. Funziona come List.Combine, tranne che con un elenco di input, anzichรฉ due o piรน.
La funzione che verrร applicata a List.Map รจ List.Transpose, che consente di invertire le colonne e le righe dei sottoelenchi all'interno dell'elenco principale.
!
Infine, รจ possibile eseguire il loft delle curve NURBS con una gerarchia di dati corretta, restituendo una struttura con nervatura.
!
Aggiungere un po' di profonditร alla geometria con un nodo Surface.Thicken con le impostazioni di input come mostrato.
!
Sarร utile aggiungere una superficie di supporto a questa struttura, quindi aggiungere un altro nodo Surface.ByLoft e utilizzare il primo output di NurbsCurve.ByPoints di un passaggio precedente come input.
Poichรฉ l'anteprima sta diventando ingombra di oggetti, disattivare l'anteprima di questi nodi facendo clic con il pulsante destro del mouse su ciascuno di essi e deselezionare Anteprima per vedere meglio il risultato.
!
E con l'ispessimento di queste superfici selezionate, l'articolazione รจ completata.
Non รจ la sedia a dondolo piรน comoda di sempre, ma include molti dati.
!
Come ultimo passaggio, invertire la direzione dei membri striati. Dal momento che รจ stata utilizzata la trasposizione nell'esercizio precedente, si farร qualcosa di simile qui.
!
Poichรฉ c'รจ un livello in piรน nella gerarchia, รจ necessario utilizzare List.Map con una funzione List.Transpose per modificare la direzione delle curve NURBS.
!
Potrebbe essere necessario aumentare il numero di pedate, in modo da poter modificare Code Block in
0..1..#20;0..1..#30;.
La prima versione della sedia a dondolo era elegante, quindi il secondo modello offre una versione sportiva e informale della seduta.
!
Utilizzando List.GetItemAtIndex, immettere gli elenchi e dei valori in *Integer Slider * per index. Scorrendo il dispositivo con l'elemento selezionato, fermarsi quando si ottiene index 9 e viene isolata la facciata principale che ospita le travi reticolari.
x.ElementType;














Inserimento di riferimenti di blocco
Visualizzazione della geometria in Dynamo
Utilizzare i sistemi di coordinate per posizionare i riferimenti di blocco nello spazio modello













Apple.color
rosso
La mela รจ matura?
Apple.isRipe
true
Quanto pesa la mela?
Apple.weight
170 gr
Da dove รจ venuta la mela?
Apple.parent
albero
Cosa crea la mela?
Apple.children
semi
Questa mela รจ cresciuta localmente?
Apple.distanceFromOrchard
circa 96 km
Non so quello che pensate, ma a giudicare dagli output nella tabella riportata sopra, sembra una mela gustosa. Il risultato รจ Apple.eat().
Tenendo presente l'analogia con la mela, si esaminerร Point.ByCoordinates e sarร mostrato com'รจ possibile creare un punto utilizzando Code Block.
La sintassi di Code Block Point.ByCoordinates(0,10); fornisce lo stesso risultato di un nodo Point.ByCoordinates in Dynamo, tranne per il fatto che รจ possibile creare un punto utilizzando un nodo. Ciรฒ รจ piรน efficiente rispetto al collegamento di un nodo separato in X e Y.
!
Utilizzando Point.ByCoordinates in Code Block, si specificano gli input nello stesso ordine del nodo predefinito (X,Y).
ร possibile chiamare qualsiasi nodo normale nella libreria tramite Code Block, purchรฉ il nodo non sia un nodo "UI" speciale: quelli con una funzionalitร speciale dell'interfaccia utente. Ad esempio, รจ possibile chiamare Circle.ByCenterPointRadius, ma non sarebbe molto utile chiamare un nodo Watch 3D.
I nodi regolari (nella maggior parte della libreria) in genere sono di tre tipi. Si scoprirร che la libreria รจ organizzata in base a queste categorie. I metodi, o nodi, di questi tre tipi vengono trattati in modo diverso quando vengono richiamati all'interno di Code Block.
!
Crea: consente di creare (o costruire) un elemento.
Azione: consente di eseguire un'azione su un elemento.
Query: consente di ottenere una proprietร di un elemento giร esistente.
La categoria Crea costruirร la geometria da zero. I valori vengono immessi in Code Block da sinistra a destra. Questi input sono nello stesso ordine degli input nel nodo dall'alto verso il basso.
Confrontando il nodo Line.ByStartPointEndPoint e la sintassi corrispondente in Code Block, si ottengono gli stessi risultati.
Un'azione รจ un'operazione che si esegue su un oggetto di quel tipo. In Dynamo si utilizza la notazione con punto, comune a molti linguaggi di codifica, per applicare un'azione ad un elemento. Una volta ottenuto l'elemento, digitare un punto, quindi il nome dell'azione. L'input del metodo di tipo Azione viene inserito tra parentesi, come i metodi di tipo Crea, solo che non รจ necessario specificare il primo input visualizzato nel nodo corrispondente. ร necessario specificare invece l'elemento su cui si sta eseguendo l'azione:
!
Il nodo Point.Add รจ un nodo di tipo Azione, pertanto la sintassi funziona in modo leggermente diverso.
Gli input sono (1) Point e (2) Vector da aggiungere ad esso. In Code Block, รจ stato denominato il punto (l'elemento) "pt". Per aggiungere un vettore denominato "vec" a "pt", รจ necessario scrivere pt.Add(vec) o: elemento, punto, azione. L'azione Add presenta solo un input o tutti gli input del nodo Point.Add meno il primo. Il primo input per il nodo Point.Add รจ il punto stesso.
I metodi di tipo Query consentono di ottenere una proprietร di un oggetto. Poichรฉ l'oggetto stesso รจ l'input, non รจ necessario specificare alcun input. Non sono richieste parentesi.
Il collegamento con i nodi รจ piuttosto diverso dal collegamento con il blocco di codice. Con i nodi, l'utente fa clic con il pulsante destro del mouse sul nodo e seleziona l'opzione Collegamento da eseguire. Con il blocco di codice, l'utente dispone di un maggiore controllo sulla modalitร di strutturazione dei dati. Il metodo abbreviato del blocco di codice utilizza guide di replica per impostare il modo in cui occorre associare diversi elenchi unidimensionali. I numeri tra parentesi angolari "<>" definiscono la gerarchia dell'elenco nidificato risultante: <1>,<2>,<3> e cosรฌ via.
!
In questo esempio, si utilizza un metodo abbreviato per definire due intervalli (ulteriori informazioni sul metodo abbreviato saranno fornite nella sezione seguente di questo capitolo). In breve,
0..1;รจ equivalente a{0,1}e-3..-7รจ equivalente a{-3,-4,-5,-6,-7}. Il risultato offre un elenco di 2 valori X e 5 valori Y. Se non si utilizzano le guide di replica con questi elenchi non corrispondenti, si ottiene un elenco di due punti, che rappresenta la lunghezza dell'elenco piรน breve. Utilizzando le guide di replica, รจ possibile trovare tutte le combinazioni possibili di 2 e 5 coordinate (o un collegamento Globale).Utilizzando la sintassi Point.ByCoordinates
(x_vals<1>,y_vals<2>);si ottengono due elenchi con cinque voci in ogni elenco.Utilizzando la sintassi Point.ByCoordinates
(x_vals<2>,y_vals<1>);si ottengono cinque elenchi con due voci in ogni elenco.
Con questa notazione, รจ possibile anche specificare quale elenco sarร dominante: 2 elenchi di 5 cose o 5 elenchi di 2 cose. Nell'esempio, la modifica dell'ordine delle guide di replica restituisce come risultato un elenco di righe di punti o un elenco di colonne di punti in una griglia.
Sebbene i metodi del blocco di codice riportati sopra possano richiedere del tempo per acquisire familiaritร , in Dynamo รจ disponibile una funzionalitร denominata Nodo da aggiungere al codice che facilita il processo. Per utilizzare questa funzionalitร , selezionare una serie di nodi nel grafico di Dynamo, fare clic con il pulsante destro del mouse sull'area di disegno e selezionare Nodo da aggiungere al codice. In Dynamo vengono compressi questi nodi in un blocco di codice, con tutti gli input e gli output. Questo non รจ solo un ottimo strumento per apprendere il blocco di codice, ma consente anche di utilizzare un grafico di Dynamo piรน efficiente e parametrico. Per concludere l'esercizio riportato di seguito, utilizzare Nodo da aggiungere al codice.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Per mostrare l'efficacia del blocco di codice, verrร convertita una definizione di campo attrattore esistente nel formato blocco di codice. L'utilizzo di una definizione esistente dimostra come il blocco di codice si correla allo scripting visivo ed รจ utile per apprendere la sintassi di DesignScript.
Iniziare ricreando la definizione nell'immagine riportata sopra (o aprendo il file di esempio).
!
Notare che il collegamento in Point.ByCoordinates รจ stato impostato su Globale.
Ogni punto di una griglia viene spostato verso l'alto nella direzione Z in base alla sua distanza dal punto di riferimento.
Viene ricreata e ispessita una superficie, creando una bombatura nella geometria rispetto alla distanza dal punto di riferimento.
!
Partendo dall'inizio, definire innanzitutto il punto di riferimento: Point.ByCoordinates
(x,y,0);. Viene utilizzata la stessa sintassi di Point.ByCoordinates specificata nella parte superiore del nodo del punto di riferimento.Le variabili x e y vengono inserite in Code Block in modo che sia possibile aggiornarle dinamicamente con i dispositivi di scorrimento.
Aggiungere alcuni dispositivi di scorrimento agli input di Code Block che vanno da -50 a 50. In questo modo, รจ possibile estendersi in tutta la griglia di default di Dynamo.
!
Nella seconda riga di Code Block, definire una sintassi abbreviata per sostituire il nodo della sequenza numerica:
coordsXY = (-50..50..#11);. Se ne discuterร piรน in dettaglio nella prossima sezione. Per il momento, notare che questo metodo abbreviato รจ equivalente al nodo Number Sequence nello script visivo.
!
A questo punto, si desidera creare una griglia di punti dalla sequenza coordsXY. A tale scopo, si desidera utilizzare la sintassi di Point.ByCoordinates, ma รจ anche necessario avviare un collegamento Globale dell'elenco nello stesso modo di quello utilizzato nello script visivo. A tale scopo, digitare la riga:
gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);. Le parentesi angolari indicano il riferimento Globale.Notare nel nodo Watch3D che รจ presente una griglia di punti nella griglia di Dynamo.
!
Ora per la parte complessa: si desidera spostare la griglia di punti verso l'alto in base alla loro distanza dal punto di riferimento. Innanzitutto, denominare questo nuovo gruppo di punti transPts. E poichรฉ la traslazione รจ un'azione su un elemento esistente, anzichรฉ utilizzare
Geometry.Translate..., utilizzaregridPts.Translate.Leggendo dal nodo effettivo nell'area di disegno, si noterร che sono presenti tre input. La geometria da traslare รจ giร stata dichiarata perchรฉ si sta eseguendo l'azione su quell'elemento (con gridPts.Translate). I due input rimanenti verranno inseriti tra le parentesi della funzione: direction e distance.
direction รจ abbastanza semplice. Per spostarla verticalmente, utilizzare
Vector.ZAxis().distance tra il punto di riferimento e ogni punto della griglia deve ancora essere calcolata, pertanto รจ necessario eseguire questa operazione come azione per il punto di riferimento nello stesso modo:
refPt.DistanceTo(gridPts).La riga di codice finale fornisce i punti traslati:
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));.
!
Ora si ha una griglia di punti con la struttura di dati appropriata per creare una superficie NURBS. Costruire la superficie utilizzando
srf = NurbsSurface.ByControlPoints(transPts);.
!
E infine, per aggiungere profonditร alla superficie, costruire un solido utilizzando
solid = srf.Thicken(5);. In questo caso, la superficie รจ stata ispessita di 5 unitร nel codice, ma la si potrebbe sempre dichiarare come variabile (ad esempio, chiamandola thickness) e poi controllare quel valore con un dispositivo di scorrimento.
La funzionalitร Nodo da aggiungere al codice consente di automatizzare l'intero esercizio appena completato facendo clic su un pulsante. Questa funzione non solo รจ efficiente per la creazione di definizioni personalizzate e blocchi di codice riutilizzabili, ma รจ anche uno strumento molto utile per apprendere come eseguire lo script in Dynamo:
!
Iniziare con lo script visivo esistente del passaggio 1 dell'esercizio. Selezionare tutti i nodi, fare clic con il pulsante destro del mouse sull'area di disegno e selezionare Nodo da aggiungere al codice. ร semplicissimo.
Dynamo dispone di una versione automatizzata basata su testo del grafico visivo, del collegamento e di tutto il resto. Verificare tutto questo negli script visivi e sfruttare la potenza del blocco di codice.
!
Di che colore รจ la mela?
!
Colore ARGB (Color.ByARGB)
A,R,G,B
colore
I colori nella tabella riportata di seguito eseguono una query sulle proprietร utilizzate per definire il colore: alfa, rosso, verde e blu. Notare che il nodo Color.Components fornisce tutti e quattro come output diversi, il che lo rende il nodo preferito per l'esecuzione di una query sulle proprietร di un colore.
!
Alfa (Color.Alpha)
colore
A
!
Rosso (Color.Red)
colore
R
!
Verde (Color.Green)
colore
I colori nella tabella riportata di seguito corrispondono allo spazio colore HSB. La divisione del colore in tonalitร , saturazione e luminositร รจ probabilmente piรน intuitiva per la modalitร di interpretazione del colore. Quale colore dovrebbe essere? Quanto dovrebbe essere colorato? E quanto dovrebbe essere chiaro o scuro il colore? Si tratta rispettivamente della suddivisione di tonalitร , saturazione e luminositร .
!
Tonalitร (Color.Hue)
colore
Tonalitร
!
Saturazione (Color.Saturation)
colore
Saturazione
!
Luminositร (Color.Brightness)
colore
L'intervallo di colori รจ simile al nodo Remap Range dell'esercizio Logica: riassocia un elenco di numeri ad un altro dominio. Tuttavia, anzichรฉ il mappaggio ad un dominio di numeri, si associa ad una sfumatura di colore in base a numeri di input compresi tra 0 e 1.
L'attuale nodo funziona bene, ma puรฒ essere un po' complicato fare in modo che tutto funzioni la prima volta. Il modo migliore per acquisire familiaritร con la sfumatura di colore consiste nel verificarla in modo interattivo. Ecco un rapido esercizio per esaminare come impostare una sfumatura con colori di output corrispondenti ai numeri.
!
Definire tre colori: utilizzando un nodo Code Block, definire rosso, verde e blu collegando le combinazioni appropriate di 0 e 255.
Creare l'elenco: unire i tre colori in un elenco.
Definire gli indici: creare un elenco per definire le posizioni dei grip di ciascun colore (comprese tra 0 e 1). Notare il valore di 0.75 per il verde. In questo modo il colore verde viene posizionato per 3/4 nella sfumatura orizzontale sul dispositivo di scorrimento Color Range.
Code Block: immettere i valori (compresi tra 0 e 1) da convertire in colori.
Il nodo Display.ByGeometry offre la possibilitร di colorare la geometria nella finestra di Dynamo. Ciรฒ รจ utile per separare diversi tipi di geometria, dimostrare un concetto parametrico o definire una legenda di analisi per la simulazione. Gli input sono semplici: geometry e color. Per creare una sfumatura come l'immagine riportata sopra, l'input color รจ collegato al nodo Color Range.
!
Il nodo Display.BySurfaceColors consente di associare dati su una superficie con il colore. Questa funzionalitร introduce alcune straordinarie possibilitร di visualizzazione dei dati ottenuti tramite l'analisi discreta, come quella solare, energetica e di prossimitร . L'applicazione di colore ad una superficie in Dynamo รจ simile all'applicazione di una composizione ad un materiale in altri ambienti CAD. Si dimostrerร come utilizzare questo strumento nel breve esercizio riportato di seguito.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Questo esercizio si concentra sul controllo parametrico del colore in parallelo con la geometria. La geometria รจ un'elica di base, che รจ possibile definire di seguito utilizzando Code Block. Si tratta di un metodo rapido e semplice per creare una funzione parametrica; poichรฉ l'attenzione รจ rivolta al colore (anzichรฉ alla geometria), si utilizza il blocco di codice per creare in modo efficiente l'elica senza sovraccaricare l'area di disegno. Il blocco di codice verrร utilizzato piรน frequentemente man mano che nella guida introduttiva si passa ad un argomento piรน avanzato.
!
Code Block: definire i due blocchi di codice con le formule indicate sopra. Si tratta di un metodo parametrico rapido per la creazione di una spirale.
Point.ByCoordinates: collegare i tre output del blocco di codice alle coordinate per il nodo.
Ora รจ presente una serie di punti che creano un'elica. Il passaggio successivo consiste nel creare una curva attraverso i punti in modo da poter visualizzare l'elica.
!
PolyCurve.ByPoints: collegare l'output Point.ByCoordinates all'input points per il nodo. Si ottiene una curva elicoidale.
Curve.PointAtParameter: collegare l'output PolyCurve.ByPoints all'input curve. Lo scopo di questo passaggio รจ creare un punto attrattore parametrico che scorre lungo la curva. Poichรฉ la curva sta valutando un punto in corrispondenza di un parametro, sarร necessario immettere un valore param compreso tra 0 e 1.
Number Slider: dopo l'aggiunta all'area di disegno, modificare il valore min in 0.0, il valore max in 1.0 e il valore step in 0.01. Collegare l'output del dispositivo di scorrimento all'input param per Curve.PointAtParameter. Ora รจ visibile un punto per la lunghezza dell'elica, rappresentato da una percentuale del dispositivo di scorrimento (0 in corrispondenza del punto iniziale, 1 in corrispondenza del punto finale).
Una volta creato il punto di riferimento, verrร confrontata la distanza dal punto di riferimento ai punti originali che definiscono l'elica. Questo valore della distanza controllerร la geometria e il colore.
!
Geometry.DistanceTo: collegare l'output Curve.PointAtParameter all'input. Collegare Point.ByCoordinates all'input geometry.
Watch: l'output risultante mostra un elenco di distanze da ogni punto elicoidale al punto di riferimento lungo la curva.
Il passaggio successivo consiste nel controllare i parametri con l'elenco di distanze dai punti elicoidali al punto di riferimento. ร possibile utilizzare questi valori della distanza per definire i raggi di una serie di sfere lungo la curva. Per mantenere le sfere ad una dimensione adatta, รจ necessario riassociare i valori per la distanza.
!
Math.RemapRange: collegare l'output Geometry.DistanceTo all'input numbers.
Code Block: collegare un blocco di codice con un valore di 0.01 all'input newMin e un blocco di codice con un valore di 1 all'input di newMax.
Watch: collegare l'output Math.RemapRange ad un nodo e l'output Geometry.DistanceTo ad un altro. Confrontare i risultati.
In questo passaggio รจ stato riassociato l'elenco di distanze in modo che siano un intervallo piรน piccolo. ร possibile modificare i valori newMin e newMax in base alle esigenze specifiche. I valori verranno riassociati e avranno lo stesso rapporto di distribuzione nel dominio.
!
Sphere.ByCenterPointRadius: collegare l'output Math.RemapRange all'input radius e l'output Point.ByCoordinates originale all'input centerPoint.
Modificare il valore del dispositivo di scorrimento dei numeri e osservare la dimensione delle sfere aggiornate. Si ottiene una maschera di inserimento parametrica.
!
La dimensione delle sfere dimostra la serie parametrica definita da un punto di riferimento lungo la curva. Per controllare il colore, utilizzare lo stesso concetto per il raggio della sfera.
!
Color Range: aggiungere all'area di disegno. Quando si posiziona il cursore sull'input value, si noterร che i numeri richiesti sono compresi tra 0 e 1. ร necessario riassociare i numeri dell'output Geometry.DistanceTo in modo che siano compatibili con questo dominio.
Sphere.ByCenterPointRadius: per il momento, disattivare l'anteprima in questo nodo (fare clic con il pulsante destro del mouse > Anteprima).
!
Math.RemapRange: questo processo dovrebbe essere noto. Collegare l'output Geometry.DistanceTo all'input numbers.
Code Block: analogamente ad un passaggio precedente, creare un valore di 0 per l'input newMin e un valore di 1 per l'input newMax. In questo caso, รจ possibile definire due output da un blocco di codice.
Color Range: collegare l'output Math.RemapRange all'input value.
!
Color.ByARGB: questa รจ la procedura che consente di creare due colori. Sebbene questo processo possa sembrare complesso, รจ identico ai colori RGB di un altro software. Per eseguirlo, occorre semplicemente utilizzare la programmazione visiva.
Code Block: creare due valori di 0 e 255. Collegare i due output ai due input Color.ByARGB come mostra l'immagine riportata sopra (o creare i due colori preferiti).
Color Range: l'input colors richiede un elenco di colori. ร necessario creare questo elenco dai due colori creati nel passaggio precedente.
List.Create: unire i due colori in un elenco. Collegare l'output all'input colors per Color Range.
!
Display.ByGeometryColor: collegare Sphere.ByCenterPointRadius all'input geometry e Color Range all'input color. Si ottiene una sfumatura uniforme nel dominio della curva.
Se si modifica il valore di Number Slider di prima nella definizione, i colori e le dimensioni vengono aggiornati. In questo caso, i colori e la dimensione del raggio sono direttamente correlati: ora si dispone di un collegamento visivo tra due parametri.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Innanzitutto, รจ necessario creare (o fare riferimento ad) una superficie da utilizzare come input per il nodo Display.BySurfaceColors. In questo esempio si esegue il loft tra una curva seno e una curva coseno.
!
Questo gruppo di nodi sta creando punti lungo l'asse Z, quindi li disloca in base alle funzioni seno e coseno. Gli elenchi a due punti vengono quindi utilizzati per generare curve NURBS.
Surface.ByLoft: generare una superficie interpolata tra l'elenco di curve NURBS.
!
File Path: selezionare un file di immagine da campionare per i dati di pixel a valle.
Utilizzare File.FromPath per convertire il percorso del file in un file, quindi passare a Image.ReadFromFile per produrre un'immagine per il campionamento.
Image.Pixels: immettere un'immagine e fornire un valore di esempio da utilizzare lungo le quote X e Y dell'immagine.
Dispositivo di scorrimento: fornire valori di esempio per Image.Pixels.
Display.BySurfaceColors: associare la serie di valori del colore sulla superficie rispettivamente lungo X e Y.
Anteprima ravvicinata della superficie di output con campioni dalla risoluzione di 400 x 300
!
L'importazione zero-touch si riferisce a un semplice metodo di puntamento e clic per l'importazione di librerie C#. Dynamo consentirร di leggere i metodi pubblici di un file .dll e di convertirli in nodi di Dynamo. ร possibile utilizzare la funzione zero-touch per sviluppare nodi e pacchetti personalizzati e per importare librerie esterne nell'ambiente di Dynamo.
!
File DLL
Nodi di Dynamo
Con la funzione zero-touch, รจ possibile infatti importare una libreria che non รจ stata necessariamente sviluppata per Dynamo e creare una suite di nuovi nodi. La funzionalitร zero-touch corrente dimostra la mentalitร multipiattaforma del progetto di Dynamo.
In questa sezione รจ illustrato come utilizzare la funzione zero-touch per importare una libreria di terze parti. Per informazioni sullo sviluppo della propria libreria zero-touch, fare riferimento alla .
I pacchetti zero-touch sono un buon complemento ai nodi personalizzati definiti dall'utente. Nella tabella riportata di seguito sono elencati alcuni pacchetti che utilizzano le librerie C#. Per informazioni piรน dettagliate sui pacchetti, visitare la dell'Appendice.
In questo case study, sarร mostrato come importare la libreria .dll esterna. AForge รจ una solida libreria che offre una vasta gamma di funzionalitร , dall'elaborazione delle immagini all'intelligenza artificiale. Verrร fatto riferimento alla classe di immagini in AForge per eseguire alcuni esercizi di elaborazione delle immagini riportati di seguito.
Per iniziare, scaricare AForge. Nella , selezionare [Download Installer] ed eseguire l'installazione dopo il completamento del download.
In Dynamo, creare un nuovo file e selezionare File > Importa libreria.
!
Quindi, individuare il file .dll.
!
Nella finestra a comparsa, accedere alla cartella Release nella directory di installazione di AForge. Probabilmente si troverร in una cartella simile a quella seguente: C:\Programmi (x86)\AForge.NET\Framework\Release.
AForge.Imaging.dll: per questo case study si desidera utilizzare solo questo file della libreria AForge. Selezionare questo file .dll e fare clic su Apri.
Tornando a Dynamo, dovrebbe essere visualizzato un gruppo di nodi AForge aggiunto alla Libreria. Ora รจ possibile accedere alla libreria delle immagini AForge dal programma visivo in uso.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Ora che la libreria รจ stata importata, questo primo esercizio consentirร di iniziare con facilitร (01-EdgeDetection.dyn). Per mostrare come applicare i filtri alle immagini AForge, si procederร con l'elaborazione di base di un'immagine di esempio. Verrร utilizzato il nodo Watch Image per mostrare i risultati e applicare i filtri in Dynamo in modo simile a quelli in Photoshop
Aggiungere un nodo File Path all'area di disegno e selezionare "soapbubbles.jpg" dalla cartella degli esercizi scaricati (credito fotografico: ).
!
Il nodo File Path fornisce semplicemente una stringa del percorso dell'immagine selezionata. Successivamente, รจ necessario convertirla in un file di immagine utilizzabile in Dynamo.
!
Utilizzare File From Path per convertire l'elemento del percorso del file in un'immagine nell'ambiente di Dynamo.
Collegare il nodo File Path al nodo File.FromPath.
Per convertire questo file in un'immagine, utilizzare il nodo Image.ReadFromFile
In AForge.Imaging.AForge.Imaging.Filters (nel menu di navigazione), si noterร che รจ disponibile una vasta gamma di filtri. Ora si utilizzerร uno di questi filtri per desaturare un'immagine in base ai valori soglia.
!
Rilasciare tre dispositivi di scorrimento nell'area di disegno, modificarne gli intervalli in modo che siano compresi tra 0 e 1 e i valori di incremento corrispondenti in modo che siano 0.01.
Aggiungere il nodo Grayscale.Grayscale all'area di disegno. Si tratta di un filtro di AForge che applica un filtro della scala di grigi ad un'immagine. Collegare i tre dispositivi di scorrimento del punto 1 a cr, cg e cb. Modificare i dispositivi di scorrimento superiore e inferiore in modo che il valore 1 e il dispositivo di scorrimento centrale abbiano un valore pari a 0.
Si puรฒ avere il controllo su come desaturare questa immagine in base ai valori soglia per rosso, verde e blu. Questi vengono definiti dagli input nel nodo Grayscale.Grayscale. Notare che l'immagine risulta abbastanza attenuata perchรฉ il valore verde รจ impostato su 0 nel dispositivo di scorrimento.
!
Modificare i dispositivi di scorrimento superiore e inferiore in modo che il valore 0 e il dispositivo di scorrimento centrale abbiano un valore pari a 1. In questo modo, si ottiene un'immagine desaturata piรน leggibile.
Utilizzare l'immagine desaturata e applicarvi un altro filtro. L'immagine desaturata presenta un certo livello di contrasto, quindi si cercherร di verificare il rilevamento degli spigoli.
!
Aggiungere un nodo SobelEdgeDetector.SobelEdgeDetector all'area di disegno.
Collegarlo a BaseUsingCopyPartialFilter.Apply e collegare l'immagine desaturata all'input image di questo nodo.
SobelEdgeDetector ha evidenziato gli spigoli in una nuova immagine.
Se si esegue lo zoom avanti, il rilevamento degli spigoli ha richiamato i contorni delle bolle con i pixel. La libreria AForge dispone di strumenti per ottenere risultati simili a questi e creare la geometria di Dynamo. Verranno descritti nel prossimo esercizio.
!
Dopo aver introdotto alcune operazioni di base per l'elaborazione di immagini, si utilizzerร un'immagine per gestire la geometria di Dynamo. A livello elementare, in questo esercizio si intende eseguire una "traccia dal vivo" di un'immagine utilizzando AForge e Dynamo. Si tratta di un esercizio semplice in cui vengono estratti rettangoli da un'immagine di riferimento, ma sono disponibili strumenti in AForge per operazioni piรน complesse. Si utilizzerร 02-RectangleCreation.dyn dei file degli esercizi scaricati.
!
Con il nodo File Path, accedere a grid.jpg nella cartella degli esercizi.
Collegare le serie rimanenti di nodi riportati sopra per mostrare una griglia parametrica dell'itinerario.
Nel passaggio successivo, si desidera fare riferimento ai quadrati bianchi presenti nell'immagine e convertirli nella geometria di Dynamo effettiva. AForge dispone di molti potenti strumenti di visione artificiale. Si utilizzerร uno strumento particolarmente importante per la libreria chiamato .
!
Dopo aver aggiunto uno strumento BlobCounter all'area di disegno, รจ necessario un modo per elaborare l'immagine (simile allo strumento BaseFilter.Apply nell'esercizio precedente).
Purtroppo il nodo Process Image non รจ immediatamente visibile nella libreria di Dynamo. Ciรฒ รจ dovuto al fatto che la funzione potrebbe non essere visibile nel codice sorgente di AForge. Per risolvere questo problema, occorrerร trovare una soluzione alternativa.
!
Aggiungere un nodo Python all'area di disegno e aggiungere il seguente codice al nodo Python. Questo codice importa la libreria AForge, quindi elabora l'immagine importata.
Collegando l'output image all'input del nodo Python, si ottiene un risultato AForge.Imaging.BlobCounter dal nodo Python.
!
Nei passaggi successivi sono illustrati alcuni suggerimenti che dimostrano familiaritร con l'. Non รจ necessario apprenderli tutti per far funzionare Dynamo. ร qualcosa di piรน di una dimostrazione dell'utilizzo delle librerie esterne con tutta la flessibilitร dell'ambiente Dynamo.
!
Collegare l'output dello script di Python a BlobCounterBase.GetObjectRectangles. In questo modo vengono letti gli oggetti in un'immagine, in base ad un valore soglia, e vengono estratti rettangoli quantificati dallo spazio in pixel.
!
Aggiungendo un altro nodo Python all'area di disegno, collegarlo a GetObjectRectangles e immettere il codice riportato di seguito. Cosรฌ verrร creato un elenco organizzato di oggetti di Dynamo.
!
Trasporre l'output del nodo Python del passaggio precedente. Vengono creati quattro elenchi, ciascuno dei quali rappresenta X, Y, larghezza e altezza per ciascun rettangolo.
Utilizzando Code Block, organizzare i dati in una struttura che contiene il nodo Rectangle.ByCornerPoints (codice riportato di seguito).
ร presente una serie di rettangoli che rappresentano i quadrati bianchi presenti nell'immagine. Attraverso la programmazione, รจ stato fatto qualcosa (all'incirca) simile a una traccia dal vivo in Illustrator.
Tuttavia, occorre ancora fare un po' di ordine. Se si esegue lo zoom avanti, รจ possibile vedere che sono presenti alcuni piccoli rettangoli indesiderati.
!
Successivamente, verranno scritti dei codici per eliminare i rettangoli indesiderati.
!
Inserire un nodo Python tra il nodo GetObjectRectangles e un altro nodo Python. Il codice del nodo รจ riportato di seguito e rimuove tutti i rettangoli che si trovano al di sotto di una determinata dimensione.
Con i rettangoli superflui eliminati, solo per divertimento, creare una superficie da questi rettangoli ed estruderli ad una distanza basata sulle loro aree.
!
Infine, modificare l'input both_sides in false; si ottiene un'estrusione in una direzione. Immergendo questo elemento nella resina, si ottiene un tavolo di design.
!
Questi sono esempi di base, ma i concetti qui delineati sono trasferibili a straordinarie applicazioni reali. La visione artificiale puรฒ essere utilizzata per un'intera serie di processi. Per citarne alcuni: lettori di codici a barre, corrispondenza della prospettiva, e . Per argomenti piรน avanzati su AForge correlati a questo esercizio, leggere .
G
!
Blu (Color.Blue)
colore
B
!
Componenti (Color.Components)
colore
A,R,G,B
Luminositร
Infine, osservare il risultato. Rilasciare un nodo Watch Image nell'area di disegno e collegarlo a Image.ReadFromFile. Non รจ stato ancora utilizzato AForge, ma รจ stata importata correttamente un'immagine in Dynamo.
Collegandola ad un nodo Watch Image, viene visualizzata un'immagine desaturata.
Logo/Immagine
Nome
import sys
import clr
clr.AddReference('AForge.Imaging')
from AForge.Imaging import *
bc= BlobCounter()
bc.ProcessImage(IN[0])
OUT=bcOUT = []
for rec in IN[0]:
subOUT=[]
subOUT.append(rec.X)
subOUT.append(rec.Y)
subOUT.append(rec.Width)
subOUT.append(rec.Height)
OUT.append(subOUT)recData;
x0=List.GetItemAtIndex(recData,0);
y0=List.GetItemAtIndex(recData,1);
width=List.GetItemAtIndex(recData,2);
height=List.GetItemAtIndex(recData,3);
x1=x0+width;y1=y0+height;
p0=Autodesk.Point.ByCoordinates(x0,y0);
p1=Autodesk.Point.ByCoordinates(x0,y1);
p2=Autodesk.Point.ByCoordinates(x1,y1);
p3=Autodesk.Point.ByCoordinates(x1,y0);rectangles=IN[0]
OUT=[]
for rec in rectangles:
if rec.Width>8 and rec.Height>8:
OUT.append(rec)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 e a (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:
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.
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.
!
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
solid = IN[0]
seed = IN[1]
xCount = IN[2]
yCount = IN[3]
solids = []
yDist = solid.BoundingBox.MaxPoint.Y-solid.BoundingBox.MinPoint.Y
xDist = solid.BoundingBox.MaxPoint.X-solid.BoundingBox.MinPoint.X
for i in xRange:
for j in yRange:
fromCoord = solid.ContextCoordinateSystem
toCoord = fromCoord.Rotate(solid.ContextCoordinateSystem.Origin,Vector.ByCoordinates(0,0,1),(90*(i+j%val)))
vec = Vector.ByCoordinates((xDist*i),(yDist*j),0)
toCoord = toCoord.Translate(vec)
solids.append(solid.Transform(fromCoord,toCoord))
OUT = solidsPolygon.ByPoints: utilizzare i punti traslati per ricreare il poligono superiore.
Surface.ByPatch: collegare il poligono per creare la superficie superiore.
Solid.ByJoinedSurfaces: unire le superfici per creare il modulo solido.
# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]
#A Number that determines which rotation pattern to use
seed = IN[1]
#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]
#Create an empty list for the arrayed solids
solids = []
# Place your code below this line
# Assign your output to the OUT variable.
OUT = solids# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]
#A Number that determines which rotation pattern to use
seed = IN[1]
#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]
#Create an empty list for the arrayed solids
solids = []
#Create an empty list for the edge curves
crvs = []
# Place your code below this line
#Loop through edges an append corresponding curve geometry to the list
for edge in solid.Edges:
crvs.append(edge.CurveGeometry)
#Get the bounding box of the curves
bbox = BoundingBox.ByGeometry(crvs)
#Get the x and y translation distance based on the bounding box
yDist = bbox.MaxPoint.Y-bbox.MinPoint.Y
xDist = bbox.MaxPoint.X-bbox.MinPoint.X
# Assign your output to the OUT variable.
OUT = solids# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]
#A Number that determines which rotation pattern to use
seed = IN[1]
#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]
#Create an empty list for the arrayed solids
solids = []
#Create an empty list for the edge curves
crvs = []
# Place your code below this line
#Loop through edges an append corresponding curve geometry to the list
for edge in solid.Edges:
crvs.append(edge.CurveGeometry)
#Get the bounding box of the curves
bbox = BoundingBox.ByGeometry(crvs)
#Get the x and y translation distance based on the bounding box
yDist = bbox.MaxPoint.Y-bbox.MinPoint.Y
xDist = bbox.MaxPoint.X-bbox.MinPoint.X
#Get the source coordinate system
fromCoord = solid.ContextCoordinateSystem
#Loop through x and y
for i in range(xCount):
for j in range(yCount):
#Rotate and translate the coordinate system
toCoord = fromCoord.Rotate(solid.ContextCoordinateSystem.Origin, Vector.ByCoordinates(0,0,1), (90*(i+j%seed)))
vec = Vector.ByCoordinates((xDist*i),(yDist*j),0)
toCoord = toCoord.Translate(vec)
#Transform the solid from the source coord syste, to the target coord system and append to the list
solids.append(solid.Transform(fromCoord,toCoord))
# Assign your output to the OUT variable.
OUT = solidsSebbene Dynamo sia estremamente potente come strumento di programmazione visiva, รจ anche possibile andare oltre i nodi e i fili e scrivere il codice in forma testuale. Esistono due modi per eseguire questa operazione:
Scrivere DesignScript utilizzando un blocco di codice
Scrivere Python utilizzando un nodo Python
In questa sezione verrร descritto come utilizzare Python nell'ambiente Civil 3D per sfruttare le API .NET di AutoCAD e Civil 3D.
Per ulteriori informazioni generali sull'utilizzo di Python in Dynamo, consultare la sezione .
Sia AutoCAD che Civil 3D dispongono di diverse API che consentono agli sviluppatori di estendere il prodotto principale con funzionalitร personalizzate. Nel contesto di Dynamo, sono rilevanti le API .NET gestite. I collegamenti riportati di seguito sono essenziali per comprendere la struttura delle API e il loro funzionamento.
Nel corso di questa sezione, รจ possibile che vi siano alcuni concetti con cui non si ha familiaritร , come i database, le transazioni, i metodi, le proprietร , ecc. Molti di questi concetti sono fondamentali per l'utilizzo delle API .NET e non sono specifici di Dynamo o Python. Non รจ compito di questa sezione della Guida introduttiva discutere in dettaglio queste voci, per cui si consiglia di consultare spesso i collegamenti riportati sopra per ulteriori informazioni.
Quando si modifica per la prima volta un nuovo nodo Python, questo verrร precompilato con il codice modello per iniziare. Ecco una schematizzazione del modello con spiegazioni su ciascun blocco.
Importa i moduli
syseclr, entrambi necessari per il corretto funzionamento dell'interprete Python. In particolare, il moduloclrconsente di trattare gli spazi dei nomi .NET essenzialmente come pacchetti Python.Carica gli assiemi standard (ad esempio, DLL) per l'utilizzo delle API .NET gestite per AutoCAD e Civil 3D.
Personalizzazione
ร possibile modificare il modello Python di default modificando il file PythonTemplate.py che si trova in C:\ProgramData\Autodesk\C3D <versione>\Dynamo.
Esaminiamo un esempio per dimostrare alcuni dei concetti essenziali della scrittura di script Python in Dynamo for Civil 3D.
๐ฏ Ottenere la geometria del contorno di tutti i drenaggi di un disegno.
Di seguito sono riportati alcuni file di esempio a cui รจ possibile fare riferimento per questo esercizio.
Ecco una panoramica della logica di questo grafico.
Rivedere la documentazione sull'API di Civil 3D
Selezionare tutti i drenaggi nel documento in base al nome del layer
Annullamento del wrapping degli oggetti di Dynamo per accedere ai membri interni dell'API di Civil 3D
Procediamo!
Prima di iniziare a costruire il grafico e scrivere il codice, รจ consigliabile esaminare la documentazione sull'API di Civil 3D e avere un'idea di ciรฒ che รจ disponibile nell'API. In questo caso, รจ presente una che restituirร i punti di contorno del drenaggio. Tenere presente che questa proprietร restituisce un oggetto Point3dCollection, di cui Dynamo non sa che farsene. In altre parole, non sarร possibile creare una PolyCurve da un Point3dCollection, quindi alla fine sarร necessario convertire tutto in punti di Dynamo. Vedere piรน avanti per saperne di piรน.
Ora รจ possibile iniziare a costruire la logica del grafico. La prima cosa da fare รจ ottenere un elenco di tutti i drenaggi nel documento. Sono disponibili nodi per questo, pertanto non รจ necessario includerli nello script Python. L'utilizzo dei nodi offre una migliore visibilitร per un altro utente che potrebbe leggere il grafico (anzichรฉ aggiungere codice eccessivo in uno script Python) e mantiene lo script Python concentrato su una cosa: restituire i punti di contorno dei drenaggi.
Notare che l'output del nodo All Objects on Layer รจ un elenco di CivilObject. Questo perchรฉ Dynamo for Civil 3D non dispone attualmente di nodi per l'utilizzo dei drenaggi, che รจ il motivo completo per cui รจ necessario accedere all'API tramite Python.
Prima di proseguire, occorre parlare brevemente di un concetto importante. Nella sezione , รจ stata descritta la relazione tra Object e CivilObject. Per aggiungere un po' piรน di dettagli a questo argomento, un Object di Dynamo รจ un wrapper intorno ad un Entity di AutoCAD. Analogamente, un CivilObject di Dynamo รจ un wrapper intorno ad un Entity di Civil 3D. ร possibile annullare il wrapping di un oggetto accedendo alle relative proprietร InternalDBObject o InternalObjectId.
In genere, รจ piรน sicuro ottenere l'ID oggetto utilizzando la proprietร `InternalObjectId` e quindi accedere all'oggetto con wrapping in una transazione. Questo perchรฉ la proprietร `InternalDBObject` restituisce un DBObject di AutoCAD non in stato scrivibile.
Ecco l'intero script Python che esegue il lavoro di accesso agli oggetti Catchment interni, che ottengono i loro punti di contorno. Le righe evidenziate rappresentano quelle modificate/aggiunte dal codice modello di default.
Fare clic sul testo sottolineato nello script per una spiegazione di ogni riga.
In genere, รจ consigliabile includere la maggior parte della logica di script all'interno di una transazione. In questo modo si garantisce l'accesso sicuro agli oggetti che lo script sta leggendo/scrivendo. In molti casi, omettere una transazione puรฒ causare un errore irreversibile.
In questa fase, lo script Python dovrebbe generare un elenco di punti di Dynamo che รจ possibile vedere nell'anteprima di sfondo. L'ultimo passaggio consiste nel creare semplicemente PolyCurve dai punti. Si noti che questa operazione potrebbe essere effettuata anche direttamente nello script Python, ma noi l'abbiamo volutamente inserita al di fuori dello script in un nodo, in modo che sia piรน visibile. Ecco come appare il grafico finale.
Ed ecco la geometria finale di Dynamo.
๐ Missione compiuta!
Solo una breve nota prima di concludere. A seconda della versione di Civil 3D in uso, il nodo Python potrebbe essere configurato in modo diverso. In Civil 3D 2020 e 2021, Dynamo ha utilizzato uno strumento denominato IronPython per spostare i dati tra gli oggetti .NET e gli script Python. In Civil 3D 2022, tuttavia, Dynamo รจ passato a utilizzare l'interprete Python nativo standard (noto anche come CPython) anzichรฉ Python 3. I vantaggi di questa transizione includono l'accesso alle librerie moderne piรน diffuse e alle nuove funzionalitร della piattaforma, alla manutenzione essenziale e alle patch di sicurezza.
ร possibile leggere ulteriori informazioni su questa transizione e su come aggiornare gli script precedenti nel . Se si desidera continuare ad utilizzare IronPython, sarร sufficiente installare il pacchetto DynamoIronPython2.7 utilizzando Dynamo Package Manager.
Aggiunge riferimenti agli spazi dei nomi standard di AutoCAD e Civil 3D. Sono equivalenti alle direttive using o Imports rispettivamente in C# o VB.NET.
Le porte di input del nodo sono accessibili utilizzando un elenco predefinito denominato IN. ร possibile accedere ai dati in una porta specifica utilizzando il relativo numero di indice, ad esempio dataInFirstPort = IN[0].
Ottiene il documento e l'editor attivi.
Blocca il documento e avvia una transazione di database.
Questo รจ il punto in cui si dovrebbe inserire la maggior parte della logica dello script.
Annullare i commenti di questa riga per eseguire il commit della transazione dopo il completamento del lavoro principale.
Se si desidera eseguire l'output di eventuali dati dal nodo, assegnarli alla variabile OUT alla fine dello script.
Creare punti di Dynamo da punti di AutoCAD
Crea PolyCurve dai punti
Object Autodesk.AutoCAD.DynamoNodes.Object
Entity Autodesk.AutoCAD.DatabaseServices.Entity
CivilObject Autodesk.Civil.DynamoNodes.CivilObject
Entity Autodesk.Civil.DatabaseServices.Entity




# Load the Python Standard and DesignScript Libraries
import sys
import clr
# Add Assemblies for AutoCAD and Civil3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
clr.AddReference('ProtoGeometry')
# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
# Import references from Civil3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
from Autodesk.DesignScript.Geometry import Point as DynPoint
# The inputs to this node will be stored as a list in the IN variables.
objs = IN[0]
output = []
if objs is None:
sys.exit("The input is null or empty.")
if not isinstance(objs, list):
objs = [objs]
adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
for obj in objs:
id = obj.InternalObjectId
aeccObj = t.GetObject(id, OpenMode.ForRead)
if isinstance(aeccObj, Catchment):
catchment = aeccObj
acPnts = catchment.BoundaryPolyline3d
dynPnts = []
for acPnt in acPnts:
pnt = DynPoint.ByCoordinates(acPnt.X, acPnt.Y, acPnt.Z)
dynPnts.append(pnt)
output.append(dynPnts)
# Commit before end transaction
t.Commit()
pass
# Assign your output to the OUT variable.
OUT = outputSi aggiunge un altro livello alla gerarchia. Se si prende il mazzo di schede dell'esempio originale e si crea una scatola che contiene piรน mazzi, la scatola ora rappresenta un elenco di mazzi e ogni mazzo rappresenta un elenco di carte. Questo รจ un elenco di elenchi. Per analogia in questa sezione, l'immagine riportata di seguito contiene un elenco di rotoli di monete e ogni rotolo contiene un elenco di penny.
Foto di Dori.
Quali query รจ possibile eseguire dall'elenco di elenchi? Consente di accedere alle proprietร esistenti.
Numero di tipi di moneta? 2.
Valori del tipo di moneta? $0.01 e $0.25.
Materiale dei quarti? Rame al 75% e nichel al 25%.
Quali azioni รจ possibile eseguire nell'elenco di elenchi? In questo modo si modifica l'elenco di elenchi in base ad una determinata operazione.
Selezionare una pila specifica di quarti o penny.
Selezionare un quarto o un penny specifico.
Ridisporre le pile di quarti e penny.
Anche in questo caso, Dynamo dispone di un nodo analogico per ciascuna delle operazioni riportate sopra. Poichรฉ si sta lavorando con dati astratti e non con oggetti fisici, occorre una serie di regole per controllare il modo in cui ci spostiamo verso l'alto e verso il basso nella gerarchia dei dati.
Quando si utilizzano elenchi di elenchi, i dati sono stratificati e complessi, ma questo offre l'opportunitร di eseguire alcune incredibili operazioni parametriche. Si esamineranno i principi fondamentali e si discuterร di alcune altre operazioni nelle lezioni riportate di seguito.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Il concetto fondamentale da apprendere da questa sezione: Dynamo tratta gli elenchi come oggetti di per sรฉ. Questa gerarchia dall'alto verso il basso viene sviluppata tenendo a mente la programmazione orientata agli oggetti. Anzichรฉ selezionare elementi secondari con un comando quale List.GetItemAtIndex, Dynamo selezionerร tale indice dell'elenco principale nella struttura di dati. E quell'elemento puรฒ essere un altro elenco. Verrร esaminato dettagliatamente con un'immagine di esempio:
!
Con Code Block, sono stati definiti due intervalli:
0..2; 0..3;Questi intervalli sono connessi ad un nodo Point.ByCoordinates con il collegamento impostato su Globale. In questo modo viene creata una griglia di punti e viene inoltre restituito un elenco di elenchi come output.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Livella rimuove tutti i livelli di dati da una struttura di dati. Ciรฒ รจ utile quando le gerarchie dei dati non sono necessarie per l'operazione desiderata, ma puรฒ essere rischioso perchรฉ rimuove le informazioni. L'esempio seguente mostra il risultato della riduzione di livelli di un elenco di dati.
!
Inserire una riga di codice per definire un intervallo in Code Block:
-250..-150..#4;Se si inserisce il blocco di codice nell'input x e y di un nodo Point.ByCoordinates, รจ necessario impostare il collegamento su Globale per ottenere una griglia di punti.
!
Inserendo un riduzione di livelli prima del nodo PolyCurve, รจ stato creato un singolo elenco per tutti i punti. Il nodo PolyCurve.ByPoints fa riferimento ad un elenco per creare una curva. Poichรฉ tutti i punti si trovano in un elenco, si otterrร una PolyCurve zig-zag che corre in tutto l'elenco di punti.
Sono inoltre disponibili opzioni per la riduzione di livelli isolati di dati. Utilizzando il nodo List.Flatten, รจ possibile definire un numero impostato di livelli di dati da ridurre nella parte superiore della gerarchia. Questo รจ uno strumento molto utile se sono presenti strutture di dati complesse che non sono necessariamente rilevanti per il workflow. Un'altra opzione consiste nell'utilizzare il nodo Flatten come funzione in List.Map. Ulteriori informazioni su List.Map sono disponibili di seguito.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Quando si utilizza la modellazione parametrica, talvolta puรฒ essere utile modificare la strutture di dati in un elenco esistente. Anche per questo sono disponibili molti nodi, mentre la suddivisione รจ la versione piรน semplice. Con la suddivisione, รจ possibile suddividere un elenco in sottoelenchi con un determinato numero di elementi.
Il comando di suddivisione suddivide gli elenchi in base ad una determinata lunghezza dell'elenco. In alcuni modi, il comando di suddivisione รจ l'opposto della riduzione di livelli: anzichรฉ rimuovere la struttura di dati, ad esso vengono aggiunti nuovi livelli. Questo รจ uno strumento utile per operazioni geometriche come l'esempio seguente.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
List.Map/Combine applica una funzione impostata ad un elenco di input, ma ad un livello inferiore nella gerarchia. Le combinazioni sono identiche a quelle delle mappe, tranne per il fatto che le combinazioni possono avere piรน input corrispondenti all'input di una funzione specificata.
Nota Questo esercizio รจ stato creato con una versione precedente di Dynamo. In gran parte il funzionamento di List.Map รจ stato risolto con l'aggiunta della funzionalitร List@Level. Per ulteriori informazioni, vedere di seguito.
Come introduzione rapida, si esaminerร il nodo List.Count di una sezione precedente.
Il nodo List.Count conteggia tutti gli elementi di un elenco. Verrร utilizzato per illustrare il funzionamento di List.Map.
!
Inserire due righe di codice in Code Block:
-50..50..#Nx; -50..50..#Ny;Dopo aver digitato questo codice, il blocco di codice creerร due input per Nx e Ny.
Con due Integer Slider, definire i valori Nx e Ny collegandoli a Code Block.
!
Associare un nodo List.Count all'output del nodo Watch del passaggio precedente.
Collegare un nodo Watch all'output List.Count.
Notare che il nodo List.Count fornisce un valore pari a 5. Questo valore รจ uguale alla variabile "Nx" come definito nel blocco di codice. Perchรฉ?
Innanzitutto, il nodo Point.ByCoordinates utilizza l'input "x" come input principale per la creazione di elenchi. Quando Nx รจ 5 e Ny รจ 3, viene visualizzato un elenco di 5 elenchi, ciascuno con 3 elementi.
Poichรฉ Dynamo tratta gli elenchi come oggetti di per sรฉ, all'elenco principale della gerarchia viene applicato un nodo List.Count. Il risultato รจ un valore di 5 o il numero di elenchi nell'elenco principale.
!
Utilizzando un nodo List.Map, si scende di un livello nella gerarchia ed รจ possibile eseguire una "function" a questo livello.
Notare che il nodo List.Count non contiene input. Viene utilizzato come funzione, pertanto il nodo List.Count verrร applicato a ogni singolo elenco, scendendo di un livello nella gerarchia. L'input vuoto di List.Count corrisponde all'input dell'elenco di List.Map.
Nota Questo esercizio รจ stato creato con una versione precedente di Dynamo. In gran parte, il funzionamento di List.Combine รจ stato risolto con l'aggiunta della funzionalitร List@Level. Per ulteriori informazioni, vedere di seguito.
In questo esercizio, si utilizzerร List.Combine per dimostrare come tale nodo puรฒ essere utilizzato per applicare una funzione in elenchi separati di oggetti.
Iniziare impostando due elenchi di punti.
!
Utilizzare il nodo Sequence per generare 10 valori, ciascuno con un incremento di 10 passi.
Collegare il risultato all'input x di un nodo Point.ByCoordinates. In questo modo verrร creato un elenco di punti in Dynamo.
Aggiungere un secondo nodo Point.ByCoordinates
Successivamente, verrร utilizzato List.Combine per applicare una funzione agli oggetti in 2 elenchi separati. In questo caso, si tratta di una funzione della linea di disegno semplice.
!
Aggiungere List.Combine all'area di lavoro e collegare i 2 gruppi di punti come il relativo input list0 e list1.
Utilizzare un Line.ByStartPointEndPoint come funzione di input per List.Combine.
Una volta completato, i 2 gruppi di punti vengono compressi/associati tramite una funzione Line.ByStartPointEndPoint e restituiscono 10 righe in Dynamo.
Fare riferimento all'esercizio in Elenchi n-dimensionali per vedere un altro esempio di utilizzo di List.Combine.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Preferita a List.Map, la funzionalitร List@Level consente di selezionare direttamente il livello di elenco che si desidera utilizzare nella porta di input del nodo. Questa funzionalitร puรฒ essere applicata a qualsiasi input in entrata di un nodo e consentirร di accedere ai livelli degli elenchi piรน rapidamente e piรน facilmente rispetto ad altri metodi. ร sufficiente indicare al nodo il livello dell'elenco che si desidera utilizzare come input e lasciare che il nodo faccia il resto.
In questo esercizio, si utilizzerร la funzionalitร List@Level per isolare un livello specifico di dati.
!
Si inizierร con una semplice griglia di punti 3D.
Poichรฉ la griglia รจ costruita con un intervallo per X, Y e Z, i dati sono strutturati in 3 ordini: un elenco X, un elenco Y e un elenco Z.
Questi ordini esistono in livelli diversi. I livelli sono indicati nella parte inferiore del simbolo circolare di anteprima. Le colonne dei livelli di elenco corrispondono ai dati dell'elenco riportati sopra per aiutare ad identificare il livello da utilizzare.
!
Per utilizzare la funzione List@Level, fare clic su '>'. Allโinterno di questo menu, verranno visualizzate due caselle di controllo.
Usa livelli: attiva la funzionalitร List@Level. Dopo aver fatto clic su questa opzione, sarร possibile fare clic e selezionare i livelli di elenco di input che si desidera utilizzare per il nodo. Con questo menu, รจ possibile provare rapidamente diverse opzioni di livello facendo clic verso l'alto o verso il basso.
Grazie alla semplice griglia 3D, รจ possibile accedere alla struttura dell'elenco e visualizzarla attivando e disattivando i livelli di elenchi. Ogni combinazione di indice e livello di elenco restituirร un gruppo di punti diverso dell'insieme 3D originale.
!
"@L2" in DesignScript consente di selezionare solo l'elenco al livello 2. L'elenco al livello 2 con l'indice 0 include solo il primo gruppo di punti Y, restituendo solo la griglia XZ.
Se si modifica il filtro del livello in "L1", sarร possibile vedere tutto nel primo livello di elenco. L'elenco al livello 1 con indice 0 include tutti i punti 3D in un elenco non strutturato.
Se si prova la stessa procedura per "L3", sarร possibile vedere solo i punti del terzo livello di elenco. L'elenco al livello 3 con l'indice 0 include solo il primo gruppo di punti Z, restituendo solo una griglia XY.
Sebbene questo esempio particolare possa essere creato anche con List.Map, List@Level semplifica notevolmente l'interazione, semplificando cosรฌ l'accesso ai dati dei nodi. Di seguito รจ riportato un confronto tra i metodi List.Map e List@Level:
!
Sebbene entrambi i metodi consentano di accedere agli stessi punti, il metodo List@Level ci consente di passare facilmente da un livello di dati all'altro all'interno di un singolo nodo.
Per accedere ad una griglia di punti con List.Map, sarร necessario disporre di un nodo List.GetItemAtIndex insieme a List.Map. Per ogni livello di elenco inferiore, sarร necessario utilizzare un nodo List.Map aggiuntivo. A seconda della complessitร degli elenchi, potrebbe essere necessario aggiungere una quantitร significativa di nodi List.Map al grafico per accedere al livello di informazioni appropriato.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
Trasponi รจ una funzione fondamentale quando si lavora con elenchi di elenchi. Come nei programmi con fogli di calcolo, una trasposizione inverte le colonne e le righe di una struttura di dati. Verrร mostrata questa funzione con una matrice di base di seguito e nella seguente sezione sarร illustrato come utilizzare un trasposizione per creare relazioni geometriche.
Si eliminano i nodi List.Count dell'esercizio precedente e si passa ad una geometria per vedere la struttura di dati.
!
Collegare un nodo PolyCurve.ByPoints all'output del nodo Watch da Point.ByCoordinates.
L'output mostra 5 PolyCurve e le curve vengono visualizzate nell'anteprima di Dynamo. Il nodo di Dynamo sta cercando un elenco di punti (o un elenco di elenchi di punti in questo caso) e sta creando una singola PolyCurve da essi. Essenzialmente, ogni elenco รจ stato convertito in una curva nella struttura di dati.
!
Un nodo List.Transpose sposterร tutti gli elementi con tutti gli elenchi in un elenco di elenchi. Ciรฒ risulta complicato, ma si tratta della stessa logica della trasposizione in Microsoft Excel: il passaggio tra colonne e righe in una struttura di dati.
Notare il risultato astratto: la trasposizione ha modificato la struttura dell'elenco da 5 elenchi con 3 elementi ciascuno a 3 elenchi con 5 elementi ciascuno.
La sintassi abbreviata del blocco di codice utilizza "[]" per definire un elenco. Questo รจ un modo molto piรน rapido e piรน fluido per creare un elenco rispetto al nodo List.Create. Code Block viene descritto in modo piรน dettagliato in . Fare riferimento all'immagine seguente per osservare come รจ possibile definire un elenco con piรน espressioni con un blocco di codice.
!
La sintassi abbreviata di Code Block utilizza "[]" come metodo rapido e semplice per selezionare gli elementi specifici desiderati da una struttura di dati complessa. I Code Block vengono descritti in modo piรน dettagliato nel . Fare riferimento all'immagine seguente per osservare come รจ possibile eseguire query su un elenco con piรน tipi di dati con un blocco di codice.
!
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio รจ disponibile nell'Appendice.
In questo esercizio viene utilizzata una parte della logica stabilita in un esercizio precedente per modificare una superficie. L'obiettivo รจ intuitivo, ma la navigazione nella struttura di dati risulterร piรน impegnativa. Si desidera articolare una superficie spostando un punto di controllo.
Iniziare con la stringa di nodi riportata sopra. Si sta creando una superficie di base che estende la griglia di default di Dynamo.
!
Utilizzando Code Block, inserire queste due righe di codice e collegarle rispettivamente agli input u e v di Surface.PointAtParameter:
-50..50..#3;-50..50..#5;.Assicurarsi di impostare il collegamento di Surface.PointAtParameter su Globale.
In questo passaggio, si desidera eseguire una query sul punto centrale nella griglia creata. Per eseguire questa operazione, selezionare il punto centrale nell'elenco centrale. Ha senso, giusto?
!
Per confermare che si tratta del punto corretto, รจ anche possibile fare clic sugli elementi del nodo Watch per confermare che รจ quello corretto.
Utilizzando Code Block, si scriverร una riga di codice di base per l'esecuzione di una query su un elenco di elenchi:
points[1][2];.
!
Selezionare anche la riga centrale dei punti con un nodo List.GetItemAtIndex. Nota Analogamente a un passaggio precedente, รจ anche possibile eseguire una query sull'elenco con Code Block, utilizzando una riga di
points[1];.
Finora รจ stata eseguita correttamente la query sul punto centrale ed รจ stato spostato verso l'alto. Ora รจ necessario reinserire il punto spostato nella struttura di dati originale.
!
Innanzitutto, si desidera sostituire l'elemento dell'elenco isolato in un passaggio precedente.
Utilizzando List.ReplaceItemAtIndex, si sostituirร l'elemento centrale utilizzando un indice di "2", con l'elemento sostitutivo collegato al punto spostato (Geometry.Translate).
Dopo aver modificato l'elenco, รจ necessario reinserire l'elenco nella struttura di dati originale, ovvero l'elenco di elenchi.
!
Seguendo la stessa logica, utilizzare List.ReplaceItemAtIndex per sostituire l'elenco centrale con l'elenco modificato.
Notare che i Code Block__ che definiscono l'indice per questi due nodi sono 1 e 2, che corrisponde alla query originale di Code Block (points[1][2]).
Esistono molti modi per creare una superficie da questo gruppo di punti. In questo caso, si creerร una superficie eseguendo il loft delle curve insieme.
!
Creare un nodo NurbsCurve.ByPoints e collegare la nuova struttura di dati per creare tre curve NURBS.
!
Collegare un nodo Surface.ByLoft all'output di NurbsCurve.ByPoints. Ora รจ presente una superficie modificata. ร possibile modificare il valore Z originale della geometria. Eseguire la traslazione e osservare lโaggiornamento della geometria.
Quando si utilizza List.GetItemAtIndex, con un indice 0, Dynamo seleziona il primo elenco e tutto il relativo contenuto. Altri programmi possono selezionare il primo elemento di ogni elenco nella struttura di dati, ma Dynamo utilizza una gerarchia dall'alto verso il basso durante la gestione dei dati.
Il nodo Watch mostra che รจ presente un elenco di elenchi.
Un nodo PolyCurve.ByPoints farร riferimento a ciascun elenco e creerร la rispettiva PolyCurve. Nell'anteprima di Dynamo, sono presenti quattro PolyCurve che rappresentano ogni riga della griglia.
Collegare ogni riga del blocco di codice ai rispettivi input X e Y di un nodo Point.ByCoordinates. Fare clic con il pulsante destro del mouse sul nodo, selezionare Collegamento e scegliere Globale. In questo modo viene creata una griglia di punti. Poichรฉ รจ stato definito l'intervallo da -50 a 50, la griglia di Dynamo di default viene estesa.
Un nodo Watch mostra i punti creati. Notare la struttura di dati. ร stato creato un elenco di elenchi. Ogni elenco rappresenta una riga di punti della griglia.
Se si prova la stessa procedura per "L4", sarร possibile vedere solo i punti del terzo livello di elenco. L'elenco al livello 4 con l'indice 0 include solo il primo gruppo di punti X, restituendo solo una griglia YZ.
In questo esempio, un nodo List.GetItemAtIndex con un nodo List.Map restituisce lo stesso gruppo di punti con la stessa struttura dell'elenco di List.GetItemAtIndex con l'opzione "@L3" selezionata.
Il nodo Watch mostra che รจ presente un elenco di tre elenchi, ciascuno con 5 elementi.
In questo indice sono fornite informazioni aggiuntive su tutti i nodi utilizzati in questa guida introduttiva, nonchรฉ su altri componenti che potrebbero risultare utili. Questa รจ solo un'introduzione ad alcuni dei 500 nodi disponibili in Dynamo.
**In altri termini se si crea una larghezza del cuboide (asse X) pari a 10 e la si trasforma in un CoordinateSystem con scalatura 2x per l'asse X, il valore della larghezza resterร 10. ASM non consente l'estrazione dei vertici di un corpo in un ordine prevedibile, pertanto non รจ possibile determinare le dimensioni dopo una trasformazione.
Color.Components Elenca i componenti del colore nell'ordine seguente: alfa, rosso, verde, blu.
!
Color.Saturation Restituisce il valore di saturazione del colore.
!
Color.Hue Restituisce il valore di tonalitร del colore.
!
QUERY
!
Color.Alpha Individua il componente alfa di un colore, da 0 a 255.
!
Color.Blue Individua il componente blu di un colore, da 0 a 255.
!
Color.Green Individua il componente verde di un colore, da 0 a 255.
!
Color.Red Individua il componente rosso di un colore, da 0 a 255.
!
Integer Slider Dispositivo di scorrimento che genera numeri interi.
!
Number Crea un numero.
!
Number Slider Dispositivo di scorrimento che genera valori numerici.
!
String Crea una stringa.
!
!
Object.IsNull Determina se l'oggetto dato รจ nullo.
!
AZIONI
!
List.Chop Suddivide un elenco in un gruppo di elenchi, ognuno con il numero di voci impostato.
!
List.Count Restituisce il numero di elementi memorizzati nell'elenco dato.
!
!
List.Flatten Riduce di un determinato numero di livelli la nidificazione di una lista di elenchi.
!
!
List.FilterByBoolMask Consente di applicare un filtro ad una sequenza sulla base di indici corrispondenti in un elenco di valori booleani separato.
!
!
List.GetItemAtIndex Restituisce un elemento dall'elenco dato, situato in corrispondenza dell'indice specificato.
!
List.Map Applica una funzione a tutti gli elementi di un elenco, generando un nuovo elenco dai risultati.
!
List.Reverse Crea un nuovo elenco con gli elementi dell'elenco dato disposti in ordine inverso.
!
!
List.ReplaceItemAtIndex Sostituisce una voce posizionata in corrispondenza dell'indice specificato nell'elenco dato.
!
!
List.ShiftIndices Sposta indici nell'elenco verso destra, in base al valore specificato.
!
!
List.TakeEveryNthItem Ricava voci dall'elenco in corrispondenza di indici multipli del valore dato, dopo l'offset indicato.
!
!
List.Transpose Scambia righe e colonne in una lista di elenchi. Se alcune righe sono piรน corte di altre, nella matrice risultante vengono inseriti valori null come segnaposto, per ottenere sempre una matrice rettangolare.
!
Math.RemapRange Regola l'intervallo di un elenco di numeri, mantenendo il rapporto di distribuzione.
!
!
Math.Sin Determina il seno di un angolo.
!
Map Mappa un valore in un intervallo di input.
!
String.ToNumber Converte una stringa in un intero o un valore Double.
!
Cuboid.Length
Restituisce le dimensioni di input del cuboide e NON le dimensioni nello spazio comune.
!
Cuboid.Width
Restituisce le dimensioni di input del cuboide e NON le dimensioni nello spazio comune.
!
Cuboid.Height
Restituisce le dimensioni di input del cuboide e NON le dimensioni nello spazio comune.
!
!
BoundingBox.ToCuboid
Ottiene il riquadro di delimitazione come cuboide solido.
!
Geometry.Translate Applica la traslazione a qualsiasi tipo di geometria, con la distanza e la direzione specificate.
!
QUERY
!
Line.Direction Direzione della curva.
!
AZIONI
!
Point.Add Aggiunge un vettore ad un punto. Analoga a Translate(Vector).
!
QUERY
!
Point.X Ottiene il componente X di un punto.
!
!
Point.Y Ottiene il componente Y di un punto.
!
!
Point.Z Ottiene il componente Z di un punto.
!
Surface.PointAtParameter Restituisce il punto in corrispondenza dei parametri U e V specificati.
!
Surface.Thicken Ispessisce una superficie e crea un solido. L'estrusione avviene nella direzione delle normali su entrambi i lati della superficie.
!
AZIONI
!
Vector.Normalized Ottiene la versione normalizzata di un vettore.
!
< Minore di
!
!
> Maggiore di
!
!
== L'uguaglianza verifica la paritร tra due valori.
!
CREAZIONE
Color.ByARGB Crea un colore in base ai componenti alfa, rosso, verde e blu.
!
!
Intervallo colori Restituisce un colore da una sfumatura di colore compresa tra un colore iniziale e uno finale.
AZIONI
Color.Brightness Restituisce il valore di luminositร del colore.
CREAZIONE
GeometryColor.ByGeometryColor Visualizza la geometria con un colore.
!
AZIONI
!
View.Watch Visualizza l'output del nodo.
!
!
View.Watch 3D Visualizza un'anteprima dinamica della geometria.
!
AZIONI
Boolean Possibile selezione: true o false.
!
!
Code Block Consente la creazione diretta di codice DesignScript.
!
!
Directory Path Consente di selezionare una directory del sistema per ottenere il relativo percorso.
!
!
File Path Consente di selezionare un file nel sistema per ottenere il relativo nome file.
!
CREAZIONE
!
List.Create Crea un nuovo elenco in base agli input specificati.
!
!
List.Combine Applica un combinatore ad ogni elemento in due sequenze.
!
Number Range Crea una sequenza di numeri nell'intervallo specificato.
Number Sequence Crea una sequenza di numeri.
!
AZIONI
If Istruzione condizionale. Verifica il valore booleano dell'input di prova. Se l'input del test รจ true, il risultato produce l'input reale, altrimenti il risultato genera l'input false.
!
AZIONI
!
Math.Cos Restituisce il coseno di un angolo.
!
!
Math.DegreesToRadians Converte un angolo in gradi in un angolo in radianti.
!
!
Math.Pow Eleva un numero alla potenza specificata.
!
!
Math.RadiansToDegrees Converte un angolo in radianti in un angolo in gradi.
!
AZIONI
!
String.Concat Concatena piรน stringhe in un'unica stringa.
!
!
String.Contains Determina se la stringa data contiene la sottostringa data.
!
!
String.Join Concatena piรน stringhe in un'unica stringa, inserendo il separatore dato tra le stringhe concatenate.
!
!
String.Split Suddivide una singola stringa in un elenco di stringhe, in corrispondenza delle stringhe separatore date.
!
CREAZIONE
!
Circle.ByCenterPointRadius Crea un cerchio con un punto centrale di input e un raggio dati nel piano XY globale, con l'asse Z globale come normale.
!
!
Circle.ByPlaneRadius Crea un cerchio con centro nell'origine del piano di input (radice), posto sul piano di input, con il raggio specificato.
!
CREAZIONE
!
CoordinateSystem.ByOrigin Crea un CoordinateSystem con origine nel punto di input. Gli assi X e Y sono impostati come assi WCS X e Y.
!
CoordinateSystem.ByCylindricalCoordinates Crea un CoordinateSystem in corrispondenza dei parametri di coordinata cilindrica specificati, rispetto al sistema di coordinate specificato.
!
CREAZIONE
!
Cuboid.ByLengths Crea un cuboide con centro nell'origine del sistema di coordinate globali (WCS), con la larghezza, lunghezza e altezza specificate.
!
Cuboid.ByLengths (origin)
Crea un cuboide con centro nel punto di input e con la larghezza, lunghezza e altezza specificate.
!
Cuboid.ByLengths (coordinateSystem)
Crea un cuboide con centro nell'origine del sistema di coordinate globali (WCS), con la larghezza, lunghezza e altezza specificate.
!
Cuboid.ByCorners
Crea un cuboide che si estende dal punto piรน basso al piรน alto.
!
AZIONI
!
Curve.Extrude (distance) Estrude una curva nella direzione del vettore normale.
!
!
Curve.PointAtParameter Ottiene un punto sulla curva in corrispondenza di un parametro specificato, incluso tra StartParameter() e EndParameter().
!
AZIONI
!
Geometry.DistanceTo Restituisce la distanza tra la geometria corrente e un'altra geometria.
!
!
Geometry.Explode Separa gli elementi composti o non separati nei rispettivi componenti.
!
!
Geometry.ImportFromSAT Elenco delle geometrie importate
!
!
Geometry.Rotate (basePlane) Ruota un oggetto di un numero di gradi specificato intorno all'origine del piano e alla normale.
!
CREAZIONE
!
Line.ByBestFitThroughPoints Crea la linea di approssimazione ottimale tra i punti di un insieme diffuso.
!
!
Line.ByStartPointDirectionLength Crea una linea retta a partire dal punto, che si estende nella direzione del vettore per la lunghezza specificata.
!
!
Line.ByStartPointEndPoint Crea una linea retta tra due punti di input.
!
!
Line.ByTangency Crea una linea tangente alla curva di input, posizionata nel punto della curva corrispondente al parametro.
!
Crea
!
NurbsCurve.ByControlPoints Crea una curva BSpline mediante punti di controllo espliciti.
!
!
NurbsCurve.ByPoints Crea una curva BSpline tramite interpolazione tra i punti.
!
Crea
!
NurbsSurface.ByControlPoints Crea una NurbsSurface utilizzando punti di controllo espliciti con i gradi U e V specificati.
!
!
NurbsSurface.ByPoints Crea una NurbsSurface con i punti interpolati e i gradi U e V specificati. La superficie risultante passa attraverso tutti i punti.
!
CREAZIONE
!
Plane.ByOriginNormal Crea un piano centrato nel punto radice, con il vettore normale di input.
!
!
Plane.XY Crea un piano nel piano XY globale.
!
CREAZIONE
!
Point.ByCartesianCoordinates Definisce un punto da tre coordinate cartesiane nel sistema di coordinate dato.
!
!
Point.ByCoordinates (2D) Definisce un punto nel piano XY da due coordinate cartesiane. Il componente Z รจ 0.
!
!
Point.ByCoordinates (3D) Definisce un punto da tre coordinate cartesiane.
!
!
Point.Origin Ottiene il punto di origine (0,0,0).
!
CREAZIONE
!
Polycurve.ByPoints Crea una PolyCurve dalla sequenza di linee che collegano i punti. Per la curva chiusa l'ultimo punto dovrebbe trovarsi nella stessa posizione del punto iniziale.
!
CREAZIONE
!
Rectangle.ByWidthLength (plane) Crea un rettangolo centrato nel punto di origine del piano di input, con larghezza (lunghezza asse X del piano) e lunghezza (lunghezza asse Y del piano) di input.
!
CREAZIONE
!
Sphere.ByCenterPointRadius Crea una sfera solida centrata nel punto di input, con il raggio dato.
!
CREAZIONE
!
Surface.ByLoft Crea una superficie mediante loft tra curve di sezione trasversale di input.
!
!
Surface.ByPatch Crea una superficie mediante il riempimento di un contorno chiuso definito da curve di input.
AZIONI
!
Surface.Offset Applica un offset alla superficie in direzione della normale e in base ad una distanza specificata.
!
CREAZIONE
!
UV.ByCoordinates Crea un UV da due valori Double.
!
CREAZIONE
!
Vector.ByCoordinates Definisce un vettore a partire da tre coordinate euclidee.
!
Vector.XAxis Ottiene il vettore asse X canonico (1,0,0).
!
Vector.YAxis Ottiene il vettore asse Y canonico (0,1,0).
!
Vector.ZAxis Ottiene il vettore asse Z canonico (0,0,1).
!
CREAZIONE
!
CoordinateSystem.ByOrigin Crea un CoordinateSystem con origine nel punto di input. Gli assi X e Y sono impostati come assi WCS X e Y.
!
CoordinateSystem.ByCylindricalCoordinates Crea un CoordinateSystem in corrispondenza dei parametri di coordinata cilindrica specificati, rispetto al sistema di coordinate specificato.
!
!
+ Addizione
!
!
- Sottrazione
!
!
* Moltiplicazione
!
!
/ Divisione
!
% La divisione modulare trova il resto del primo input dopo la divisione per il secondo input.
!
!
!
!
!
!
!
