arrow-left

Only this pageAll pages
gitbookPowered by GitBook
triangle-exclamation
Couldn't generate the PDF for 150 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Italiano

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...

Introduzione

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 Ecosystemarrow-up-right

Che cos'รจ Dynamo e come funziona?

Dynamo รจ un'applicazione di programmazione visivaarrow-up-right che puรฒ essere scaricata ed eseguita in modalitร  "Sandbox" indipendente o come plug-in per altri software come Revit, FormIt o Civil 3D.

circle-info

Ulteriori informazioni sulla [differenza tra **Dynamo Core**/**Revit**/**Sandbox**.](https://dynamobim.org/a-new-way-to-get-dynamo-sandbox/)

hashtag
Processo

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.

!

hashtag
Collegamento di nodi con fili

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.

!

hashtag
Cosa รจ possibile ottenere con Dynamo?

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.

Guida introduttiva, comunitร  e piattaforma di Dynamo

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.

hashtag
Guida introduttiva

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:

Informazioni

hashtag
Per Dynamo v2.13 e versioni successive

Dynamo รจ una piattaforma di programmazione visiva open source per progettisti.

hashtag

programmazione visiva
Seguire la bacheca su Dynamo in azione su Pinterest.arrow-up-right

Progettazione con elenchi

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.

!

Pacchetti e nodi personalizzati

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.

Strade

Che cos'รจ Dynamo e come funziona?

  • Installazione per Dynamo

  • Interfaccia utente

  • Nodi e fili

  • 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.

    • Nodi e concetti essenziali

    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.

    • Vaso parametrico

    • Punti attrattore

    !

    circle-info

    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.

    hashtag
    Comunitร 

    Dynamo non sarebbe quello che รจ senza un forte gruppo di utenti avidi e collaboratori attivi. Per coinvolgere la comunitร , รจ possibile seguire il blogarrow-up-right, aggiungere il proprio lavoro alla galleria o discutere di Dynamo nel forumarrow-up-right.

    hashtag
    Piattaforma

    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.

    Introduzione

    รˆ 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.

    hashtag
    Open source

    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/issuesarrow-up-right

    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/DynamoPrimerNewarrow-up-right

    hashtag
    Progetto Dynamo Primer

    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.

    hashtag
    Riconoscimenti

    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.

    hashtag
    Software e risorse

    Dynamo Consultare i seguenti siti per la release stabile piรน recente di Dynamo.

    https://dynamobim.com/download/arrow-up-right o https://dynamobuilds.comarrow-up-right

    *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 blogarrow-up-right.

    DynamoBIM La migliore fonte per ulteriori informazioni, contenuto di formazione e forum รจ il sito Web di DynamoBIM.

    https://dynamobim.orgarrow-up-right

    Dynamo GitHub Dynamo รจ un progetto di sviluppo open source su GitHub. Per contribuire, visitare la pagina di DynamoDS.

    https://github.com/DynamoDS/Dynamoarrow-up-right

    Contatto In caso di eventuali problemi relativi a questo documento, รจ possibile contattarci.

    [email protected]

    hashtag
    Licenza

    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

    https://www.apache.org/licenses/LICENSE-2.0arrow-up-right

    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.

    Pacchetti

    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.

    !

    Codifica in 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:

    IMAGEarrow-up-right

    Rilievi

    Elementi di base dei programmi

    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.

    !

    Impianti di pubblica utilitร 

    Dizionari nei blocchi di codice

    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.

    Geometria per la progettazione computazionale

    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.

    !

    Dynamo for Civil 3D

    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.

    Ferrovia

    Gestione catastale

    Dynamo per Revit

    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.

    !

    Ciclo di vita del motore

    Blocchi di codice e DesignScript

    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 Cloud Compute

    Python
    Blocchi di codice e DesignScript
    Geometria con DesignScript

    Nodi Dictionary

    Dynamo 2.0 consente di visualizzare un'ampia varietร  di nodi Dictionary da utilizzare. Ciรฒ include i nodi di Create, Action e Query.

    !

    hashtag
    Crea

    1. Dictionary.ByKeysValues creerร  un dizionario con le chiavi e i valori forniti. (il numero di voci corrisponderร  all'input piรน breve dell'elenco).

    hashtag
    Action

    1. Dictionary.Components produrrร  i componenti del dizionario di input. (รจ l'opposto del nodo Create).

    2. Dictionary.RemoveKeys produrrร  un nuovo oggetto dizionario con le chiavi di input rimosse.

    3. Dictionary.SetValueAtKeys

    hashtag
    Query

    1. Dictionary.Count indicherร  il numero di coppie chiave-valore presenti nel dizionario.

    2. Dictionary.Keys restituirร  le chiavi attualmente memorizzate nel dizionario.

    3. Dictionary.Values

    La correlazione complessiva dei dati con i dizionari rappresenta un'alternativa significativa al vecchio metodo di utilizzo di indici ed elenchi.

    Dynamo in Forma

    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 blogarrow-up-right e per saperne di piรน sull'integrazione cloud come versione beta, consultare questo post del blogarrow-up-right. 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.

    hashtag
    Che cos'รจ Autodesk 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.

    hashtag
    Che cos'รจ Dynamo Player in Forma?

    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.

    Nodi e concetti essenziali

    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.

    Lettore Dynamo

    Esecuzione di un grafico mediante il Lettore Dynamo e visualizzazione dei risultati in Civil 3D

    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.

    circle-info

    Per ulteriori informazioni sul Lettore Dynamo in Civil 3D, consultare la documentazione fornita nel sito Guida di Autodesk Civil 3Darrow-up-right.

    Esempi di workflow

    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.

    Nodi personalizzati

    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.

    Esecuzione di grafici in Dynamo Player

    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.

    Che cos'รจ un dizionario?

    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.

    hashtag
    Che cos'รจ un dizionario?

    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.

    Risorse

    Questa Guida introduttiva รจ solo l'inizio del viaggio alla scoperta di Dynamo for Civil 3D. Una fiorente comunitร  di utenti di Dynamo mette a disposizione una grande quantitร  di conoscenze. Esaminare alcune di queste risorse per continuare ad imparare.

    hashtag
    Guida di Civil 3D

    hashtag

    Python

    โ€‹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

    Dizionari in Dynamo

    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

    Geometria con DesignScript

    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.

    creerร  un nuovo dizionario basato sulle chiavi di input e sui valori per sostituire il valore corrente nelle chiavi corrispondenti.
  • Dictionary.ValueAtKey restituirร  il valore nella chiave di input.

  • restituirร  i valori attualmente memorizzati nel dizionario.
    hashtag
    Che cos'รจ un elenco?

    Un elenco รจ un tipo di dati composto da una raccolta di valori ordinati. In Dynamo, gli elenchi utilizzano numeri interi come valori di indice.

    hashtag
    Perchรฉ questo aspetto รจ stato cambiato e perchรฉ dovrebbe essere importante?

    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.

    hashtag
    Quali sono i cambiamenti?

    • 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 { } \.

    !


    hashtag
    Perchรฉ dovrebbe essere importante? Per cosa si utilizzerebbero questi elementi?

    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.

    !

    1. Creare un dizionario per correlare i due dati.

    2. Ottenere il valore con la chiave specificata.

    Parametri personalizzabili: Dynamo Player consente di definire i parametri di input per i grafici di automazione, consentendo di personalizzare il funzionamento del grafico in base ai requisiti specifici del progetto. รˆ possibile impostare opzioni e valori che possono essere facilmente modificati ogni volta che il grafico viene eseguito, offrendo flessibilitร  e adattabilitร  a diversi scenari.
  • 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.

  • Autodesk Formaarrow-up-right
    Progettazione con elenchi:
    Dizionari in Dynamo:
    sixtysecondrevit.comarrow-up-right

    Cos'รจ un blocco di codice?

    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.

    hashtag
    Blocco di codice: Una breve panoramica

    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.

    hashtag
    Creazione di nodi di blocco di codice

    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.

    !

    hashtag
    Numeri, stringhe e formule

    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.

    !

    1. "Vecchia scuola"

    2. Code Block

    Argomenti avanzati

    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!";
    Forum di Dynamo

    hashtag
    Autodesk University

    hashtag
    Libri

    "Getting Started"arrow-up-right
    Python.orgarrow-up-right

    Superfici

    hashtag
    Superfici in Dynamo

    hashtag
    Che cos'รจ una superficie

    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.

    hashtag
    Superficie in corrispondenza di un parametro

    Importare e valutare una superficie in corrispondenza di un parametro in Dynamo per vedere il tipo di informazioni che รจ possibile estrarre.

    !

    1. Surface.PointAtParameter restituisce il punto in corrispondenza di una coordinata UV specificata.

    2. Surface.NormalAtParameter restituisce il vettore normale in corrispondenza di una determinata coordinata UV.

    3. 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.

    hashtag
    Approfondimento su...

    hashtag
    Superficie

    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.

    1. Superficie

    2. Isocurva U

    3. 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.

    hashtag
    Superfici NURBS

    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.

    1. Grado (U,V) = (3,3)

    2. Grado (U,V) = (3,1)

    3. Grado (U,V) = (1,2)

    hashtag
    PolySurface

    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.

    Libreria di nodi

    รˆ 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).

    circle-info

    Per ulteriori informazioni sull'organizzazione dei nodi nella libreria di Dynamo principale, consultare la sezione Libreria.

    La libreria di nodi in Dynamo for Civil 3D
    1. Nodi specifici per l'utilizzo di oggetti di AutoCAD e Civil 3D

    2. Nodi generici

    3. Nodi di pacchetti di terze parti che รจ possibile installare separatamente

    circle-exclamation

    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.

    circle-info

    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.

    hashtag
    Gerarchia dei nodi

    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.

    hashtag
    Oggetti di Civil

    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.

    hashtag
    Oggetti

    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.

    Differenze tra Dynamo compute service e Desktop Dynamo

    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.

    hashtag
    Che cos'รจ DaaS?

    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.

    hashtag
    Quale versione di Dynamo sta eseguendo il codice?

    La versione รจ la 3.x e viene aggiornata di frequente in base al ramo principale open source di Dynamo.

    hashtag
    Quali pacchetti/nodi sono disponibili in questa versione 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.

    hashtag
    A cosa occorre prestare attenzione quando si scrivono i grafici per DaaS?

    • 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.

    hashtag
    Come si fa a ricordare tutto questo? E se cambiasse?

    • 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.

    hashtag
    Quanto costa?

    • Durante questa versione Beta, il tempo di calcolo non viene attualmente addebitato.

    hashtag
    Cosa occorre fare per iniziare?

    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.

    hashtag
    Protezione

    • 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.

    Aggiunta e condivisione di grafici in Dynamo Player

    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.

    Apertura di un grafico connesso in Dynamo Desktop

    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.

    Installazione per Dynamo

    hashtag
    Dynamo come estensione rispetto a Dynamo Sandbox

    Dynamo รจ un progetto di sviluppo open source attivo. Scoprire l'elenco di software che supporta Dynamoarrow-up-right.

    ! ! ! ! ! !

    hashtag
    Avvio di Dynamo come estensione

    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.

    hashtag
    Download di Dynamo Sandbox

    hashtag
    Download

    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.

    !

    circle-info

    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.

    hashtag
    Decompressione

    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.

    !

    hashtag
    Avvio

    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.

    circle-info

    **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.

    Operazioni booleane geometriche

    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.

    hashtag
    Unione

    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:

    hashtag
    Differenza

    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:

    hashtag
    Interseca

    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:

    Area di lavoro

    hashtag
    Area di lavoro principale

    L'area di lavoro di Dynamo รจ costituita da quattro elementi principali.

    !

    Introduzione ai nodi personalizzati

    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.

    hashtag
    Adattamento alla modifica

    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.

    Casi di utilizzo di Revit

    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.

    !

    Pacchetti utili

    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.

    circle-info

    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.

    hashtag
    Condivisione del lavoro

    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.

    !

    hashtag
    Molti modi per creare un nodo

    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 arrow-up-rightnella Wiki di Dynamo per una revisione piรน approfondita.

    hashtag
    Ambiente di nodi personalizzati e creazione del primo nodo personalizzato

    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.

    !

    1. Nome: Percentage

    2. Descrizione: Calculate the percentage of one value in relation to another

    3. 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.

    !

    !

    1. 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).

    2. 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.

    !

    hashtag
    Sezioni successive

    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.

    Raccogliere tutti i locali nel modello.
  • 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.

  • hashtag
    Esercizio: Dizionario dei locali

    hashtag
    Parte I: Creazione del dizionario dei locali

    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.

    !

    1. Scegliere la categoria di Revit che si desidera utilizzare (in questo caso, i locali).

    2. 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?.

    !

    1. I dati che verranno utilizzati sono il numero del locale.

    Ora verrร  creato il dizionario con le chiavi e gli elementi specificati.

    !

    1. Il nodo Dictionary.ByKeysValues creerร  un dizionario a partire dagli input appropriati.

    2. Keys deve essere una stringa, mentre values puรฒ essere diversi tipi di oggetto.

    Infine, รจ possibile recuperare un locale dal dizionario con il relativo numero.

    !

    1. String sarร  la chiave utilizzata per cercare un oggetto nel dizionario.

    2. Dictionary.ValueAtKey consentirร  ora di ottenere l'oggetto dal dizionario.

    hashtag
    Parte II: Ricerca di valori

    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.

    !

    1. Invece di utilizzare il numero del locale come chiave, รจ possibile utilizzare il valore di un parametro (in questo caso si utilizzerร  il livello).

    !

    1. Ora รจ possibile raggruppare i locali in base al livello in cui risiedono.

    !

    1. 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.

    !

    1. Infine, utilizzando i livelli nel modello di Revit, รจ possibile cercare i locali che risiedono in tale livello nel dizionario.Dictionary.ValueAtKey recupererร  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.

    Coordinata UV
  • Piano perpendicolare

  • Vettore normale

  • Grado (U,V) = (1,1)

    superficie

    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.

  • post del blogarrow-up-right
    serie YouTubearrow-up-right
    Dynamo per Revit
    Dynamo for Civil 3D
    sito Web di Dynamoarrow-up-right
    Get Dynamoarrow-up-right
    7ziparrow-up-right
    Condivisione di un grafico
    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);
    Tutte le schede attive.
  • Modalitร  anteprima

  • Controlli di zoom/panoramica

  • Nodo nell'area di lavoro

  • hashtag
    Tutte le schede attive

    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.

    !

    circle-info

    รˆ 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.

    hashtag
    Modalitร  anteprima

    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)

    hashtag
    Controlli di zoom/panoramica

    รˆ 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

    hashtag
    Nodo nell'area di lavoro

    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.

    !

    hashtag
    Civil 3D Toolkit

    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.

    hashtag
    Commenti

    Civil 3D Toolkit Feedback threadarrow-up-right

    hashtag
    Lezioni correlate di Autodesk University

    Supercharge Your Dynamo Graph with Civil 3D Toolkit | Autodesk Universityarrow-up-right

    hashtag
    Camber

    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.

    hashtag
    Commenti

    Camber Feedback Threadarrow-up-right

    hashtag
    Codice sorgente

    hashtag
    CivilConnection

    CivilConnection รจ un pacchetto di Dynamo per Revit open source che consente lo scambio di informazioni tra Civil 3D, Dynamo e Revit.

    hashtag
    Lezioni correlate di Autodesk University

    Computational modeling linear structure with Civil 3D, Revit & Dynamo CivilConnection | Autodesk Universityarrow-up-right

    Bridge Detailing 2.0: Computational modelling methods using Civil 3D, Revit & Dynamo | Autodesk Universityarrow-up-right

    Parametric modeling and automating the placement of Universal TBM Rings | Autodesk Universityarrow-up-right

    hashtag
    Codice sorgente

    hashtag
    Arkance Systems Nodes

    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.

    hashtag
    Commenti

    Arkance Systems Node Library Feedback Threadarrow-up-right

    hashtag
    Documentation

    Pacchetti

    Curve

    hashtag
    Curve in Dynamo

    hashtag
    Cos'รจ una curva?

    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.

    1. Linea

    2. Polilinea

    3. Arco

    hashtag
    Linea

    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.

    !

    hashtag
    Curva NURBS

    รจ 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.

    !

    1. NurbsCurve.ByControlPoints utilizza l'elenco di punti come punti di controllo.

    2. 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.

    hashtag
    Approfondimento su...

    hashtag
    Curve

    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.

    hashtag
    Linee

    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.

    hashtag
    Archi, cerchi, archi di ellisse ed ellissi

    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.

    hashtag
    NURBS + PolyCurve

    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.

    1. Grado = 1

    2. Grado = 2

    3. Grado = 3

    circle-info

    Notare che piรน alto รจ il valore del grado, maggiore sarร  il numero di punti di controllo utilizzati per interpolare la curva risultante.

    Vettore, piano e sistema di coordinate

    hashtag
    Vettore, piano e sistema di coordinate in Dynamo

    hashtag
    Vector

    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.

    !

    1. รˆ 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.

    hashtag
    Piano

    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).

    !

    1. Sebbene siano astratti, i piani hanno una posizione di origine in modo da poterli posizionare nello spazio.

    2. 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.

    hashtag
    Sistema di Coordinate

    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.

    !

    1. Sebbene siano astratti, anche i sistemi di coordinate hanno una posizione di origine in modo da poterli individuare nello spazio.

    2. 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.

    hashtag
    Approfondimento su...

    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.

    hashtag
    Vettore

    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:

    1. Il punto iniziale del vettore รจ denominato base.

    2. Il punto finale del vettore รจ denominato punta o senso.

    3. 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?

    hashtag
    Piano

    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.

    hashtag
    Sistema di Coordinate

    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

    Interfaccia utente

    hashtag
    Panoramica sull'interfaccia utente

    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.

    !

    1. Menu

    2. Barra degli strumenti

    3. Libreria

    4. Area di lavoro

    5. Barra di esecuzione

    hashtag
    Menu

    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.

    hashtag
    Menu di Dynamo

    Informazioni generali e impostazioni sono disponibili nel menu a discesa di Dynamo.

    !

    1. Informazioni su: indica la versione di Dynamo installata nel computer in uso.

    2. Contratto per raccogliere dati di usabilitร : consente di aderire o meno alla condivisione dei dati utente per migliorare Dynamo.

    3. Preferenze: include impostazioni quali la definizione della precisione decimale e della qualitร  di rendering della geometria dell'applicazione.

    hashtag
    Guida

    Se si รจ bloccati, consultare il menu ?. รˆ possibile accedere ad uno dei siti Web di riferimento di Dynamo tramite il browser Internet.

    1. Guide interattive: presentazioni che guidano l'utente passo passo attraverso le varie funzionalitร  di Dynamo.

    2. Esempi: fornisce file di esempio di riferimento. Disponibili solo nei programmi host, inclusi Revit e Civil 3D.

    3. Dizionario di Dynamo: rappresenta una risorsa con documentazione su tutti i nodi.

    hashtag
    Barra degli strumenti

    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.

    hashtag
    Libreria

    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ร .

    !

    hashtag
    Area di lavoro

    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 .

    !

    hashtag
    Barra di esecuzione

    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.

    !

    Impostazione di Dynamo Player in Forma

    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

    Dynamo as a Service
    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.

    hashtag
    Impostazione di Dynamo as a Service

    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.

    1. Nel sito di Forma, accedere ad Extensions sulla barra laterale sinistra e fare clic su Add extension. Apre Autodesk App Store.

    2. Cercare Dynamo e aggiungere Dynamo Player Beta. Leggere la dichiarazione di non responsabilitร  e fare clic su Agree.

    1. Ora, Dynamo Player รจ disponibile nelle estensioni. Fare clic per aprirlo.

    2. Ora รจ possibile utilizzare Dynamo Player.

    hashtag
    Impostazione di Dynamo Desktop

    Per utilizzare Dynamo Desktop, รจ necessario disporre di Dynamo, come sandbox indipendente o connesso a Revit o Civil 3D. รˆ inoltre necessario il pacchetto DynamoForma.

    hashtag
    Revit

    Seguire queste istruzioni per impostare Dynamo in Revit e il pacchetto DynamoForma.

    1. Verificare che sia installato Revit 2024.1 o versione successiva.

    2. Aprire Dynamo da Revit accedendo a Gestisci > Dynamo.

    3. In Dynamo, installare il pacchetto DynamoForma. Accedere a Pacchetti > Package Manager, quindi cercare DynamoForma.

    hashtag
    Civil 3D

    Seguire queste istruzioni per impostare Dynamo in Civil 3D e il pacchetto DynamoForma.

    1. Assicurarsi di avere installato Civil 3D 2024.1 o versione successiva.

    2. Aprire Dynamo da Civil 3D accedendo a Gestisci > Dynamo.

    3. In Dynamo, installare il pacchetto DynamoForma. Accedere a Pacchetti > Package Manager, quindi cercare DynamoForma.

    hashtag
    Dynamo Sandbox

    Seguire queste istruzioni per installare Dynamo Sandbox e il pacchetto DynamoForma.

    1. 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.

      1. Le versioni giornaliere sono versioni di sviluppo e possono includere funzionalitร  incomplete o in fase di sviluppo.

    2. 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.

    hashtag
    Accesso a Dynamo Desktop in Forma

    Innanzitutto, installiamo Dynamo Player in Forma.

    1. Nel sito di Forma, accedere ad Extensions sulla barra laterale sinistra e fare clic su Add extension. Apre Autodesk App Store.

    2. Cercare Dynamo e aggiungere Dynamo Player Beta. Leggere la dichiarazione di non responsabilitร  e fare clic su Agree.

    1. Ora, Dynamo Player รจ disponibile nelle estensioni. Fare clic per aprirlo.

    2. Nella parte superiore, fare clic su Desktop per accedere a Dynamo Desktop.

    1. Ora รจ possibile utilizzare Dynamo Player. Se in Dynamo รจ giร  aperto un grafico, fare clic su Open in Connected graph per visualizzarlo in Player.

    Connessione a Civil 3D

    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.

    hashtag
    Cronologia

    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.

    Versione di Civil 3D
    Versione di Dynamo
    Note

    Punti

    hashtag
    Punti in Dynamo

    hashtag
    Che cos'รจ un punto?

    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.

    hashtag
    Punto 2D e 3D

    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].

    !

    hashtag
    Punto su curve e superfici

    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.

    !

    1. Punto nelle coordinate XYZ globali supposte

    2. Punto rispetto ad un determinato sistema di coordinate (cilindrico)

    3. 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.

    hashtag
    Approfondimento su...

    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.

    1. Un cerchio che utilizza le funzioni x=r*cos(t) e y=r*sin(t)

    2. Una curva seno che utilizza le funzioni x=(t) e y=r*sin(t)

    hashtag
    Punto come coordinate

    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.

    1. Un punto nel sistema di coordinate euclideo: [X,Y,Z]

    2. Un punto in un sistema di coordinate di parametri delle curve: [t]

    3. Un punto in un sistema di coordinate di parametri delle superfici: [U,V]

    Superfici: punti interpolati e di controllo, loft, rivoluzione

    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.

    hashtag
    Superficie interpolata

    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.

    hashtag
    Superficie con punti di controllo

    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:

    hashtag
    Superficie di loft

    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.

    hashtag
    Superficie di rivoluzione

    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.

    Generatori di punti di Python

    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_points

    python_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_points

    python_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_points

    python_points_4

    python_points_5

    Pubblicazione nella libreria

    รˆ 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).

    circle-exclamation

    รˆ 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.

    hashtag
    Esercizio: Pubblicazione locale di un nodo personalizzato

    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.

    1. Documents\DynamoCustomNodes... si riferisce alla posizione dei nodi personalizzati pubblicati localmente.

    2. AppData\Roaming\Dynamo... si riferisce alla posizione di default dei pacchetti di Dynamo installati in linea.

    3. รˆ 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.

    !

    Stringhe

    hashtag
    Definizione di una stringa

    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.

    Curve: punti interpolati e di controllo

    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.

    hashtag
    Curva interpolata

    Per iniziare

    Ora che si sa un po' di piรน sul quadro generale, รจ possibile iniziare subito a creare il primo grafico di Dynamo in Civil 3D.

    circle-info

    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.

    hashtag

    Correlazione con Revit

    !

    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.

    hashtag
    Compatibilitร  delle versioni di Revit

    Case study di un pacchetto - Mesh Toolkit

    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ร .

    hashtag

    Sviluppo di un pacchetto

    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.

    hashtag
    Pacchetto MapToSurface

    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.

    Pubblicazione di un pacchetto

    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.

    hashtag

    Panoramica sulla geometria

    hashtag
    Geometria in Dynamo Sandbox

    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.

    Nozioni di base della geometria DesignScript

    hashtag
    Punto

    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.

    Matematica vettoriale

    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_points

    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 destro del mouse in un punto qualsiasi dell'area di disegno - Aprire la casella di ricerca nell'area di disegno

  • Fare clic con il pulsante destro del mouse e trascinare - Orbita
    hashtag
    Creazione di stringhe

    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.

    !

    hashtag
    Esercizio

    Scaricare il file di esempio facendo clic sul collegamento seguente.

    Un elenco completo di file di esempio รจ disponibile nell'Appendice.

    hashtag
    Esecuzione di una query sulle stringhe

    รˆ 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:

    !

    1. Il separatore ";" divide ogni vertice del rettangolo. In questo modo viene creato un elenco con 3 voci per ogni vertice.

    !

    1. Premendo il pulsante "+" al centro del nodo, si crea un nuovo separatore.

    2. Aggiungere una stringa "," all'area di disegno e collegarla all'input del nuovo separatore.

    3. 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.

    !

    1. 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.

    !

    hashtag
    Manipolazione di stringhe

    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:

    !Concatenatearrow-up-right

    1. Aggiungere o sottrarre stringhe alla concatenazione facendo clic sui pulsanti +/- al centro del nodo.

    2. 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:

    !

    1. L'input separator consente di creare una stringa che divide le stringhe unite.

    hashtag
    Utilizzo di stringhe

    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 nevearrow-up-right 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.

    !

    1. La stringa di base viene incollata in un nodo String.

    2. Un altro nodo String viene utilizzato per indicare il separatore. In questo caso, si utilizza una virgola.

    3. Un nodo String.Split viene aggiunto all'area di disegno e collegato alle due stringhe.

    4. 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.

    !

    1. 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".

    2. Nell'input searchFor, definire una sottostringa che si sta cercando all'interno della strofa. Utilizzare un nodo String con il testo "And miles".

    3. L'output fornisce un elenco di false e true. Questa logica booleana verrร  utilizzata per filtrare gli elementi nel passaggio successivo.

    !Splitarrow-up-right

    1. 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".

    2. 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:

    !

    1. Utilizzando due nodi List.GetItemAtIndex, รจ possibile isolare le voci utilizzando i valori di 0 e 1 come l'input index.

    2. L'output per ogni nodo fornisce, in ordine, le due righe finali.

    Per unire questi due voci in una, utilizzare il nodo String.Join:

    !Split Stringarrow-up-right

    1. Dopo aver aggiunto il nodo String.Join, si noterร  che รจ necessario un separatore.

    2. Per creare il separatore, aggiungere un nodo String all'area di disegno e digitare una virgola.

    3. 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.

    Cerchio
  • Ellisse

  • Curva NURBS

  • PolyCurve

  • linea
    NURBS
    file-download
    5KB
    Geometry for Computational Design - Curves.dyn
    arrow-up-right-from-squareOpen
    vettore
    Vectors in Dynamoarrow-up-right
    piano
    Planes in Dynamoarrow-up-right
    sistema di coordinate
    Coordinate System in Dynamoarrow-up-right
    file-download
    3KB
    Geometry for Computational Design - Coordinate System.dyn
    arrow-up-right-from-squareOpen
    punto
    file-download
    7KB
    Geometry for Computational Design - Points.dyn
    arrow-up-right-from-squareOpen

    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.

  • ! Annulla: consente di annullare l'ultima azione.
  • ! Ripeti: consente di ripetere l'azione successiva.

  • ! Esporta area di lavoro come immagine: consente di esportare l'area di lavoro visibile come file PNG.

  • Libreria
    Area di lavoro
    Se si dispone di Revit 2024, installare il pacchetto DynamoForma per 2.x.
  • Se si dispone di Revit 2025, installare il pacchetto DynamoForma.

  • Se si dispone di Civil 3D 2024, installare il pacchetto DynamoForma per 2.x.
  • 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.

    1. Se si dispone di Dynamo 2.x, installare il pacchetto DynamoForma per 2.x.

    2. 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

    build di Dynamoarrow-up-right
    7ziparrow-up-right

    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

    blog di Dynamoarrow-up-right
    Interfaccia di Dynamo, Civil 3D 2020-2022
    Interfaccia di Dynamo, Civil 3D 2023-Presente

    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.

    !

    1. Si noti il sistema di coordinate presunto sottoposto a rendering mediante griglia e assi colorati.

    2. 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.

    hashtag
    Il concetto di geometria

    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:

    1. La geometria riguarda dati: per il computer e Dynamo, un coniglio non รจ poi cosรฌ diverso da un numero.

    2. 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.

    3. La geometria ha una gerarchia: i punti sono uniti per creare linee, le linee si uniscono per creare superfici e cosรฌ via.

    4. 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.

    hashtag
    Scorrimento della gerarchia

    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.

    !Computational Geometryarrow-up-right

    1. Un punto (definito dalle coordinate) non ha dimensioni; sono solo numeri che descrivono ogni coordinata.

    2. Una linea (definita da due punti) ora presenta una dimensione: รจ possibile "percorrere" la linea in avanti (direzione positiva) o all'indietro (direzione negativa).

    3. Un piano (definito da due linee) presenta due dimensioni: ora รจ possibile passeggiare piรน a sinistra o piรน a destra.

    4. 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.

    hashtag
    Ulteriori informazioni sulla geometria

    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:

    1. 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.

    2. Quando si utilizza Revit, รจ possibile fare riferimento ad elementi di Revit da utilizzare in Dynamo.

    3. Dynamo Package Manager offre funzionalitร  aggiuntive per le operazioni e i tipi di geometria estesi. Visitare la pagina sul pacchetto Mesh Toolkitarrow-up-right.

    relativa correlazione
    file-download
    4KB
    Geometry for Computational Design - Geometry Overview.dyn
    arrow-up-right-from-squareOpen
    Dynamo Hype Video
    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_points
    Per creare una curva interpolata, รจ sufficiente trasferire una raccolta di punti al metodo
    NurbsCurve.ByPoints
    .

    La 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).

    hashtag
    Curva con punti di controllo

    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:

    circle-info

    *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):

    hashtag
    Da punto a linea

    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:

    hashtag
    Da linea a superficie

    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.

    hashtag
    Da superficie a solido

    รˆ 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.

    hashtag
    Interseca

    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.

    hashtag
    Addizione vettoriale

    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.

    hashtag
    Sottrazione vettoriale

    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.

    hashtag
    Moltiplicazione vettoriale

    La moltiplicazione vettoriale puรฒ essere considerata come lo spostamento del punto finale di un vettore nella sua direzione mediante un determinato fattore di scala.

    hashtag
    Normalizzazione della lunghezza del vettore

    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.

    hashtag
    Globale

    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.

    hashtag
    Prodotto punto

    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);
    Apertura di Dynamo

    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.

    circle-info

    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.

    hashtag
    Avvio di un nuovo grafico

    Una volta aperto Dynamo, verrร  visualizzata la schermata iniziale. Fare clic su Nuovo per aprire un'area di lavoro vuota.

    Schermata iniziale di Dynamo
    circle-info

    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.

    hashtag
    Aggiunta di nodi

    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.

    circle-info

    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.

    Interfaccia utente Nodi e fili Nodi e concetti essenziali

    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.

    I nodi possono essere posizionati dalla libreria oppure facendo clic con il pulsante destro del mouse nell'area di disegno
    circle-info

    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.

    Il grafico completato

    Riepiloghiamo quello che abbiamo fatto qui:

    1. Abbiamo scelto il documento in cui lavorare. In questo caso (e in molti casi), si desidera lavorare nel documento attivo in Civil 3D.

    2. รˆ stato definito il blocco di destinazione in cui creare l'oggetto text (in questo caso lo spazio modello).

    3. รˆ stato utilizzato un nodo String per specificare il layer su cui posizionare il testo.

    4. รˆ stato creato un punto utilizzando il nodo Point.ByCoordinates per definire la posizione in cui inserire il testo.

    5. Sono state definite le coordinate X e Y del punto di inserimento del testo utilizzando due nodi Number Slider.

    6. รˆ stato utilizzato un altro nodo String per definire il contenuto dell'oggetto text.

    7. Infine, รจ stato creato l'oggetto text.

    Vediamo i risultati del nostro nuovo grafico!

    hashtag
    Visualizzazione del risultato

    In Civil 3D, verificare che la scheda Modello sia selezionata. Dovrebbe essere visualizzato il nuovo oggetto text creato da Dynamo.

    circle-info

    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.

    Il grafico completato in azione
    circle-info

    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!

    hashtag
    Passaggi successivi

    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.

    Versione di Revit
    Prima versione di Dynamo stabile
    Ultima versione di Dynamo per Revit supportata

    2013

    2014

    2015

    2016

    hashtag
    Storia di Dynamo

    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.

    hashtag
    Esecuzione di Dynamo in Revit

    In un progetto o un editor di famiglie di Revit, individuare i moduli aggiuntivi e fare clic su Dynamo.*

    circle-exclamation

    *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.*

    circle-exclamation

    *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.

    !

    hashtag
    Congelamento di nodi

    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.

    circle-info

    รˆ possibile leggere ulteriori informazioni sul congelamento dei nodi nella sezione [4_nodes_and_wires](../4_nodes_and_wires/ "mention").

    hashtag
    Comunitร  e blog di Dynamo

    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 domandearrow-up-right. Se si รจ programmatori e si desidera essere coinvolti nello sviluppo di Dynamo, consultare il repository su Githubarrow-up-right. Inoltre, una risorsa eccezionale per le librerie di terze parti รจ Dynamo Package Managerarrow-up-right. 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.

    Confronto tra mesh e solidi

    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.arrow-up-right Passare al pacchetto nell'esercizio riportato di seguito.

    hashtag
    Installazione di Mesh Toolkit

    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.

    hashtag
    Esercizio: Intersezione di mesh

    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.

    !

    1. File Path: individuare il file mesh da importare (stanford_bunny_tri.obj). I tipi di file supportati sono .mix e .obj.

    2. Mesh.ImportFile: collegare il percorso del file per importare la mesh.

    !

    1. Point.ByCoordinates: creare un punto, che sarร  il centro di un arco.

    2. 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.

    !

    1. Code Block: consente di creare 25 numeri compresi tra 0 e 1.

    2. 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.

    3. Curve.TangentAtParameter: collegare gli stessi input del nodo precedente.

    4. 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.

    !

    1. 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.

    2. PolyCurve.Curves: dividere le PolyCurve nei relativi frammenti di curva.

    3. Curve.EndPoint: estrarre i punti finali di ogni curva.

    4. 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.

    !

    1. 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.

    hashtag
    Installazione del pacchetto

    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.

    hashtag
    Nodi personalizzati

    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.

    !

    hashtag
    PointsToSurface

    รˆ 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.

    !

    hashtag
    PolygonsToSurface

    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.

    !

    hashtag
    NurbsCrvtoSurface

    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.

    !

    hashtag
    SampleSrf

    Questo รจ un nodo semplice che crea una superficie parametrica da associare dalla griglia di origine ad una superficie ondulata nei file di esempio.

    !

    hashtag
    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.

    hashtag
    01-PanelingWithPolygons

    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.

    !

    hashtag
    02-PanelingWithPolygons-II

    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".

    !

    hashtag
    03-NurbsCrvsAndSurface

    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.

    !

    hashtag
    04-PleatedPolysurface-OffsetPoints

    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.

    !

    hashtag
    05-SVG-Import

    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.

    !

    Creazione di un nodo personalizzato
    Disinstallazione di un pacchetto

    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.

    hashtag
    Pubblicazione locale di un pacchetto

    circle-exclamation

    รˆ 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.

    !

    1. Questa cartella contiene cinque nodi personalizzati (.dyf).

    2. 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.

    !

    1. 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.

    2. La cartella dyf contiene i nodi personalizzati. Se si apre questa finestra, verranno visualizzati tutti i nodi personalizzati (file .dyf) per questo pacchetto.

    3. 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.).

    4. 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.

    hashtag
    Pubblicazione di un pacchetto in linea

    circle-exclamation

    Nota Seguire questa procedura solo se si sta effettivamente pubblicando un pacchetto personalizzato.

    1. 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.

    2. 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.

    hashtag
    Pubblica versione...

    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.

    hashtag
    Trasferimento della proprietร  di un 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]envelope. Assicurarsi di specificare il nome del pacchetto e il nome dell'account che si desidera aggiungere.

    Mesh

    hashtag
    Mesh in Dynamo

    hashtag
    Cos'รจ una mesh?

    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.

    hashtag
    Elementi della mesh

    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.

    !

    1. Elenco dei vertici

    2. Elenco dei gruppi di indici per definire le facce

    hashtag
    Mesh Toolkit

    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.

    !

    hashtag
    Approfondimento su...

    hashtag
    Mesh

    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.

    1. Vertici della mesh

    2. Bordi della mesh

      1. I bordi con una sola faccia adiacente vengono denominati "nudi". Tutti gli altri bordi sono "vestiti".

    hashtag
    Vertici + normali dei vertici

    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.

    1. Vertici

    2. Normali dei vertici

    hashtag
    Facce

    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.

    1. Una faccia quadrangolare composta con indici 0, 1, 2 e 3

    2. 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

    hashtag
    Mesh e superfici NURBS

    Quali sono le differenze tra la geometria della mesh e la geometria NURBS? Quando รจ consigliabile utilizzare una al posto dell'altra?

    hashtag
    Parametrizzazione

    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.

    1. Superficie

    2. Curva isoparametrica (isoparm)

    3. 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.

    hashtag
    Influenza locale rispetto a globale

    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.

    1. Superficie NURBS: lo spostamento di un punto di controllo ha un'influenza che si estende lungo la forma.

    2. 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.

    hashtag

    Funzioni

    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.

    hashtag
    Parent

    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.

    !

    hashtag
    Elementi derivati

    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.

    !

    hashtag
    Esercizio: Sfera per Z

    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.

    !

    1. 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.

    !

    1. 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:

    !

    1. 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.

    !

    1. Ora richiamare la funzione e creare una variabile denominata Pt per collegare i punti creati nei passaggi precedenti:

    2. 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.

    !

    1. Un passaggio importante: รจ necessario definire l'output della funzione aggiungendo la riga return = sphereRadius; alla funzione sphereByZ.

    2. 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.

    !

    1. Per prima cosa si definisce una sfera con la riga di codice: sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);.

    2. 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.

    !

    1. 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.

    !

    1. 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.

    2. 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.

    !

    1. Aggiornare la definizione di sphereByZ a:

    2. 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.

    Che cos'รจ un elenco?

    hashtag
    Che cos'รจ un elenco?

    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 Binuarrow-up-right.

    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.

    hashtag
    Indici in base zero

    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.

    hashtag
    Input e output

    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:

    !

    1. L'input points per PolyCurve.ByPoints cerca โ€œPoint[]โ€. Rappresenta un elenco di punti.

    2. L'output per PolyCurve.ByPoints รจ una PolyCurve singola creata da un elenco di cinque punti.

    3. 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.

    hashtag
    Collegamento

    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:

    hashtag
    L'elenco piรน breve

    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:

    !

    hashtag
    L'elenco piรน lungo

    L'algoritmo "l'elenco piรน lungo" continua a collegare gli input e a riutilizzare gli elementi, finchรฉ tutti i flussi non si esauriscono:

    !

    hashtag
    Globale

    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.

    !

    hashtag
    Cos'รจ la replica?

    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:

    hashtag
    Replica cartesiana

    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.

    hashtag
    Replica in formato .zip

    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 .

    hashtag
    Esercizio

    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.

    hashtag
    L'elenco piรน breve

    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.

    !

    hashtag
    L'elenco piรน lungo

    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.

    !

    hashtag
    Globale

    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.

    !

    Creazione di un nodo personalizzato

    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.

    hashtag
    Esercizio: Nodi personalizzati per il mappaggio UV

    hashtag
    Parte I: Inizio con un grafico

    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.

    !

    1. Code Block: utilizzare questa linea per creare un intervallo di 10 numeri compreso tra -45 e 4545..45..#10;.

    2. 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.

    !

    1. 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.

    2. 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.

    !

    1. 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.

    2. 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.

    !

    1. PolyCurve.ByPoints: collegare i punti sulla superficie per costruire una PolyCurve attraverso i punti.

    2. 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.

    hashtag
    Parte II: Dal grafico al nodo personalizzato

    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.

    !

    1. Nome: MapPolygonsToSurface

    2. Descrizione: mappare i poligoni da una base ad una superficie di destinazione

    3. 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.

    !

    1. Input: modificare i nomi di input in baseSurface e targetSurface.

    2. 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.

    !

    1. 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.

    2. 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.

    !

    1. Posizionare il cursore del mouse sugli input del nodo personalizzato per visualizzare i commenti.

    2. Con il valore di default impostato su inputSurface, รจ inoltre possibile eseguire la definizione senza un input Surface.

    Modifica

    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.

    hashtag
    Parametri di istanza e tipo

    !Exercisearrow-up-right

    1. 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.

    2. 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.

    !

    1. 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.

    2. รˆ 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.

    circle-info

    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.

    hashtag
    Unitร  di misura

    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.

    !

    hashtag
    Esercizio

    Scaricare il file di esempio facendo clic sul collegamento seguente.

    Un elenco completo di file di esempio รจ disponibile nell'Appendice.

    circle-exclamation

    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".

    hashtag
    Modifica dei parametri di massa dell'edificio

    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.

    !

    1. Selezionare la massa dell'edificio con il nodo Select Model Element.

    2. รˆ possibile eseguire una query su tutti i parametri di questa massa con il nodo Element.Parameters. Ciรฒ include i parametri di tipo e istanza.

    !

    1. 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.

    2. Verranno apportate modifiche all'elemento di Revit utilizzando il nodo Element.SetParameterByName.

    !

    1. 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.

    2. 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};.

    circle-exclamation

    *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).

    !

    1. Questa combinazione conferisce una nuova bizzarra progettazione alla massa dell'edificio: 100, 92, 100, 25, 13, 51.

    hashtag
    Modifica dei parametri delle facciate

    Si vedrร  ora come modificare la facciata utilizzando un processo simile.

    !

    1. 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"};.

    2. 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.

    !

    1. 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.

    Primitive geometriche

    hashtag
    Sistema di Coordinate

    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:

    hashtag
    Punto

    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:

    hashtag
    Linea

    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.

    hashtag
    Primitive 3D - Cuboide, cono, cilindro, sfera e cosรฌ via

    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.

    Introduzione ai pacchetti

    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).

    hashtag
    Installazione di un pacchetto

    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.

    !

    hashtag
    Installazione della cartella di pacchetti - DynamoUnfold

    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.

    1. Innanzitutto, accedere a Pacchetti > Package Manager > Pacchetti installati.

    2. Accanto a DynamoUnfold, selezionare il menu delle opzioni .

    3. 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.

    !

    1. 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.

    2. La cartella dyf contiene i nodi personalizzati. Questo pacchetto non รจ stato sviluppato utilizzando nodi personalizzati di Dynamo, pertanto questa cartella รจ vuota per questo pacchetto.

    3. 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.

    !

    hashtag
    Consultazione e visualizzazione delle informazioni sui pacchetti

    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.

    hashtag
    Sito Web di Dynamo Package Manager

    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.

    hashtag
    Dove vengono memorizzati i file di pacchetto in locale?

    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].

    hashtag
    Impostazione di una posizione condivisa per i pacchetti in un ufficio

    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.

    hashtag
    Caricamento di pacchetti con file binari da una posizione di rete

    hashtag
    Situazione di design

    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.

    hashtag
    Problema

    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.

    hashtag
    Soluzione

    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 .

    hashtag
    Ulteriori informazioni sui pacchetti

    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.

    Gestione di gruppi di punti

    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.

    hashtag
    Scopo

    ๐ŸŽฏ Creare un gruppo di punti per ogni descrizione di punto COGO univoca.

    hashtag
    Concetti chiave

    • Utilizzo di elenchi

    • Raggruppamento di oggetti simili con il nodo List.GroupByKey

    • Visualizzazione dell'output personalizzato nel Lettore Dynamo

    hashtag
    Compatibilitร  delle versioni

    circle-check

    Questo grafico verrร  eseguito su Civil 3D 2020 e versioni successive.

    hashtag
    Set di dati

    Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.

    hashtag
    Soluzione

    Ecco una panoramica della logica di questo grafico.

    1. Ottenere tutti i punti COGO nel documento

    2. Raggruppare i punti COGO per descrizione

    3. Creare gruppi di punti

    Procediamo!

    hashtag
    Recupero di punti COGO

    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.

    circle-info

    Se non si ha familiaritร  con gli elenchi, consultare la sezione .

    hashtag
    Raggruppamento di punti per descrizione

    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.

    hashtag
    Creazione di gruppi di punti

    Il lavoro duro รจ finito! Il passaggio finale consiste nella creazione di nuovi gruppi di punti Civil 3D dai punti COGO raggruppati.

    hashtag
    Generazione di un riepilogo

    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.

    hashtag
    Risultato

    Di seguito รจ riportato un esempio di esecuzione del grafico mediante il Lettore Dynamo.

    circle-info

    Se non si conosce il Lettore Dynamo, consultare la sezione .

    ๐ŸŽ‰ Missione compiuta!

    hashtag
    Idee

    Ecco alcune idee su come espandere le funzionalitร  di questo grafico.

    circle-info

    Modificare il raggruppamento di punti in modo che si basi sulla descrizione completa anzichรฉ sulla descrizione non elaborata.

    circle-info

    Raggruppare i punti in altre categorie predefinite scelte (ad esempio, "Foto del suolo", "Monumenti" e cosรฌ via).

    circle-info

    Creare automaticamente superfici TIN per i punti in determinati gruppi.

    Matematica

    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.

    hashtag
    Operatori aritmetici

    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.

    Icona
    Nome (Sintassi)
    Input
    Output

    hashtag
    Esercizio: Formula della spirale aurea

    Scaricare il file di esempio facendo clic sul collegamento seguente.

    Un elenco completo di file di esempio รจ disponibile nell'Appendice.

    hashtag
    Parte I: Formula parametrica

    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.

    1. 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.

    hashtag
    Parte II: Dalla formula alla geometria

    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.

    hashtag
    Parte III: Dalla spirale a Nautilus

    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.

    !

    hashtag
    Parte IV: Da Nautius a Phyllotaxis

    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.

    !

    Solidi

    hashtag
    Solidi in Dynamo

    hashtag
    Cos'รจ un solido?

    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.

    hashtag
    Operazione booleana per la creazione di un solido palla riccio

    Si possono utilizzare le per modificare i solidi. Si utilizzeranno alcune operazioni booleane per creare una palla riccio.

    !

    1. Sphere.ByCenterPointRadius: creare il solido di base.

    2. 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.

    3. Cone.ByPointsRadii

    Scaricare il file di esempio facendo clic sul collegamento seguente.

    Un elenco completo di file di esempio รจ disponibile nell'Appendice.

    hashtag
    Congelamento

    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.

    !

    1. Utilizzare il menu contestuale accessibile con il pulsante destro del mouse per congelare l'operazione di unione dei solidi.

    2. 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.

    3. Per scongelare i nodi, fare clic con il pulsante destro del mouse e deselezionare Congela.

    circle-info

    รˆ possibile leggere ulteriori informazioni sul congelamento dei nodi nella sezione [4_nodes_and_wires](../../4_nodes_and_wires/ "mention").

    hashtag
    Approfondimento su...

    hashtag
    Solidi

    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.

    1. Un piano รจ composto da una singola superficie e non รจ un solido.

    2. Una sfera รจ costituita da una superficie, ma รจ un solido.

    3. Un cono รจ composto da due superfici unite per creare un solido.

    hashtag
    Topologia

    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.

    1. Facce

    2. Spigoli

    3. Vertici

    hashtag
    Operazioni

    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.

    1. Cubo

    2. Cubo smussato

    3. Cubo raccordato

    hashtag
    Operazioni booleane

    Le operazioni booleane sui solidi sono metodi per combinare due o piรน solidi. Una singola operazione booleana significa in realtร  eseguire quattro operazioni:

    1. Intersecare due o piรน oggetti.

    2. Dividerli in corrispondenza delle intersezioni.

    3. 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.

    1. Unione: consente di rimuovere le parti sovrapposte dei solidi e di unirle in un unico solido.

    2. 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.

    3. 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.

    1. UnionAll: operazione di unione con sfera e coni rivolti verso l'esterno.

    2. DifferenceAll: operazione di differenza con sfera e coni rivolti verso l'interno.

    hashtag

    Parametrizzazione geometrica

    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.

    Traslazione, rotazione e altre trasformazioni

    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.

    hashtag
    Conversione

    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.

    hashtag
    Rotazione

    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:

    hashtag
    Scala

    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.

    Classe
    CoordinateSystem messo in scala in modo non uniforme
    CoordinateSystem tagliato

    Utilizzo di elenchi

    hashtag
    Utilizzo di elenchi

    Ora che รจ stato definito un elenco, si puรฒ parlare delle operazioni eseguibili su di esso. Si immagini un elenco come un mazzo di carte da gioco. Un mazzo รจ l'elenco e ogni carta da gioco rappresenta una voce.

    Foto di

    Sagoma dello spazio libero

    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.

    hashtag
    Scopo

    ๐ŸŽฏ Utilizzare un blocco del profilo del veicolo per generare solidi 3D della sagoma dello spazio libero lungo un modellatore.

    Nodi e fili

    hashtag
    Nodi

    In Dynamo, i nodi sono gli oggetti collegati per formare un programma visivo. Ogni nodo esegue un'operazione; talvolta puรฒ essere semplice come memorizzare un numero o puรฒ essere un'azione piรน complessa come creare o sottoporre a query la geometria.

    Logica

    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.

    hashtag
    Valori booleani

    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.

    Posizionamento dei servizi

    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.

    hashtag
    Scopo

    Binding di oggetti

    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.

    hashtag
    Esempio

    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

  • mesh
    Mesh Toolkitarrow-up-right
    case study di Mesh Toolkitarrow-up-right
    Mesh Toolkitarrow-up-right
    centerPoint
    per
    Circle.ByCenterPointRadius
    richiede
    "Point"
    .
  • L'output per Circle.ByCenterPointRadius รจ un elenco di cinque cerchi i cui centri corrispondono all'elenco originale di punti.

  • Input Examplesarrow-up-right
    Replication and Lacing Guidesarrow-up-right
    Input Examplesarrow-up-right
    Input Examplesarrow-up-right
    Input Examplesarrow-up-right
    Plane.ByOriginNormal: collegare l'output Point all'input origin per creare un piano in corrispondenza di ciascuno dei punti. Verrร  utilizzato il vettore normale di default (0,0,1).
  • 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.ByPatch: collegare l'output Rectangle.ByWidthLength del passaggio precedente all'input closedCurve per creare una superficie di base.
  • 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.

  • UV: collegare l'output del parametro UV ad un nodo UV.U e UV.V.
  • 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.

  • Surface.ByPatch: collegare le PolyCurve all'input "closedCurve" per costruire superfici di chiusura.
    Superficie
    Utilizzare C_ode Block per_ definire un elenco di parametri, con virgolette intorno ad ogni elemento per indicare una stringa. รˆ inoltre possibile utilizzare il nodo List.Create con una serie di nodi string collegati a piรน input, ma Code Block รจ piรน veloce e piรน semplice. Assicurarsi che la stringa corrisponda al nome esatto in Revit, specifico per le maiuscole e minuscole: {"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};.

    Exercisearrow-up-right
    e. Math.Cos e Math.Sin: queste due funzioni trigonometriche differenziano rispettivamente la coordinata x e la coordinata y di ogni punto parametrico.

    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.

    d. Number: per definire l'intervallo di numeri, aggiungere tre nodi di numeri all'area di disegno in ordine verticale. Dall'alto verso il basso, assegnare rispettivamente i valori di 0.000, 360.000 e 120.000. Questi determinano la rotazione della spirale. Notare i risultati di output del nodo Range dopo aver collegato i tre nodi di numero al nodo stesso.

    !

    Add (+)

    var[]...[], var[]...[]

    var[]...[]

    !

    Subtract (-)

    var[]...[], var[]...[]

    var[]...[]

    !

    Multiply (*****)

    var[]...[], var[]...[]

    var[]...[]

    !

    Divide (/)

    var[]...[], var[]...[]

    var[]...[]

    x=rcosฮธ=acosฮธebฮธx = r cos ฮธ = a cos ฮธ e^{bฮธ}x=rcosฮธ=acosฮธebฮธ
    y=rsinฮธ=asinฮธebฮธy = r sin ฮธ = a sin ฮธe^{bฮธ}y=rsinฮธ=asinฮธebฮธ
    file-download
    17KB
    Building Blocks of Programs - Math.dyn
    arrow-up-right-from-squareOpen
    DesignScript
    crescita dei semi di girasolearrow-up-right
    : costruire coni utilizzando punti sulla superficie.
  • 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.

    consente di mantenere solo il volume intersecante dei due solidi.
    solidi
    operazioni booleane
    file-download
    8KB
    Geometry for Computational Design - Solids.dyn
    arrow-up-right-from-squareOpen

    1.3.2arrow-up-right

    2017

    0.9.0arrow-up-right

    1.3.4arrow-up-right / 2.0.3arrow-up-right

    2018

    1.3.0arrow-up-right

    1.3.4arrow-up-right / 2.0.3arrow-up-right

    2019

    1.3.3arrow-up-right

    1.3.4arrow-up-right / 2.0.4arrow-up-right

    2020

    2.1.0 - Revit 2020 e versioni successive include ora Dynamo e riceve gli aggiornamenti come Revit.

    N/A

    0.6.1arrow-up-right
    0.6.3arrow-up-right
    0.6.1arrow-up-right
    0.8.2arrow-up-right
    0.7.1arrow-up-right
    1.2.1arrow-up-right
    0.7.2arrow-up-right

    Il file pkg รจ un file di testo di base che definisce le impostazioni del pacchetto. Lo si puรฒ ignorare per adesso.

    Dynamo Package Managerarrow-up-right
    misure di sicurezzaarrow-up-right
    quiarrow-up-right

    Generare un riepilogo nel Lettore Dynamo

    file-download
    33KB
    Survey_CreatePointGroups.dyn
    arrow-up-right-from-squareOpen
    file-download
    1MB
    Survey_CreatePointGroups.dwg
    arrow-up-right-from-squareOpen
    Utilizzo di elenchi
    Lettore Dynamo
    Recupero di tutti i gruppi di punti e punti COGO
    Raggruppamento dei punti COGO per descrizione
    Creazione di nuovi gruppo di punti
    L'impostazione di un nodo su รˆ output ne visualizzerร  il contenuto nell'output del Lettore Dynamo
    Esecuzione del grafico utilizzando il Lettore Dynamo e visualizzazione dei risultati nell'Area strumenti
    hashtag
    Query

    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.

    hashtag
    Azione

    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.

    hashtag
    Esercizio

    hashtag
    Operazioni 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.

    !

    1. Iniziare con un Code Block con un valore di 500;.

    2. Collegarlo all'input x di un nodo Point.ByCoordinates.

    3. Collegare il nodo del passaggio precedente all'input origin di un nodo Plane.ByOriginNormal.

    4. Utilizzando un nodo Circle.ByPlaneRadius, collegare il nodo del passaggio precedente all'input plane.

    5. Utilizzando Code Block, designare un valore di 50; per radius. Questo รจ il primo cerchio che verrร  creato.

    6. Con un nodo Geometry.Translate, spostare il cerchio verso l'alto di 100 unitร  nella direzione Z.

    7. Con un nodo Code Block, definire un intervallo di dieci numeri compreso tra 0 e 1 con questa riga di codice: 0..1..#10;.

    8. 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.

    9. Utilizzando Line.ByStartPointEndPoint, collegare i due nodi Curve.PointAtParameter.

    hashtag
    List.Count

    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.

    !Countarrow-up-right

    1. 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.

    hashtag
    List.GetItemAtIndex

    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.

    !Exercisearrow-up-right

    1. Innanzitutto, fare clic con il pulsante destro del mouse sul nodo Line.ByStartPointEndPoint per disattivare la relativa anteprima.

    2. 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.

    !

    hashtag
    List.Reverse

    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.

    !Exercisearrow-up-right

    1. Per visualizzare correttamente l'elenco invertito di linee, creare piรน linee modificando Code Block in 0..1..#50;.

    2. Duplicare il nodo Line.ByStartPointEndPoint, inserire un nodo List.Reverse tra Curve.PointAtParameter e il secondo Line.ByStartPointEndPoint.

    3. 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.

    hashtag
    List.ShiftIndices

    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.

    !Exercisearrow-up-right

    1. Nello stesso processo dell'elenco inverso, inserire List.ShiftIndices in Curve.PointAtParameter e Line.ByStartPointEndPoint.

    2. Utilizzando un Code Block, รจ stato designato un valore di "1" per spostare l'elenco in base ad un indice.

    3. 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.

    !

    hashtag
    List.FilterByBooleanMask

    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".

    !Exercisearrow-up-right

    Per creare un elenco di valori che riportano "true" o "false", รจ necessario un po' piรน di lavoro.

    1. 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.

    2. 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.

    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".

    4. Il nodo Watch mostra solo questo: รจ presente un modello true/false che riporta: true, false, false, false....

    5. Utilizzando questo modello true/false, collegarlo all'input mask di due nodi List.FilterByBooleanMask.

    6. Collegare il nodo Curve.PointAtParameter ad ogni input list per List.FilterByBooleanMask.

    7. 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.

    8. Il nodo Watch 3D mostra che le linee sono minori dei punti. รˆ stato selezionato solo il 25% dei nodi filtrando solo i valori true.

    Christian Gidlรถfarrow-up-right
    file-download
    8KB
    List-GetItemAtIndex.dyn
    arrow-up-right-from-squareOpen
    file-download
    11KB
    List-FilterByBooleanMask.dyn
    arrow-up-right-from-squareOpen
    file-download
    31KB
    Functions_SphereByZ.dyn
    arrow-up-right-from-squareOpen
    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);

    hashtag
    Concetti chiave

    • 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

    hashtag
    Compatibilitร  delle versioni

    circle-check

    Questo grafico verrร  eseguito su Civil 3D 2020 e versioni successive.

    hashtag
    Set di dati

    Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.

    hashtag
    Soluzione

    Ecco una panoramica della logica di questo grafico.

    1. Ottenere le linee caratteristiche dalla linea base del modellatore specificata

    2. Generare sistemi di coordinate lungo la linea caratteristica del modellatore con la spaziatura desiderata

    3. Trasformare la geometria del blocco del profilo in sistemi di coordinate

    4. Eseguire il loft di un solido tra i profili

    5. Creare i solidi in Civil 3D

    Procediamo!

    hashtag
    Recupero di dati sul modellatore

    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.

    Selezione del modellatore, della linea base e della linea caratteristica

    hashtag
    Generazione di sistemi di coordinate

    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.

    circle-info

    Se non si conoscono i sistemi di coordinate, consultare la sezione Vettore, piano e sistema di coordinate.

    Acquisizione di sistemi di coordinate lungo le linee caratteristiche del modellatore
    1. 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.

    circle-info

    Se non si conosce il collegamento di nodi, consultare la sezione Che cos'รจ un elenco?.

    hashtag
    Trasformazione della geometria del blocco

    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ร .

    Una visualizzazione della trasformazione della geometria tra sistemi di coordinate

    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.

    1. In questo modo la definizione di blocco viene ottenuta dal documento.

    2. Questi nodi ottengono la geometria di Dynamo degli oggetti all'interno del blocco.

    3. Questi nodi definiscono essenzialmente il sistema di coordinate da cui si sta trasformando la geometria.

    4. Infine, questo nodo esegue il lavoro effettivo di trasformazione della geometria.

    5. Notare il collegamento Piรน lungo su questo nodo.

    Ed ecco cosa si ottiene in Dynamo.

    La geometria del blocco del profilo del veicolo dopo la trasformazione

    hashtag
    Generazione di solidi

    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.

    I solidi di Dynamo dopo il loft

    hashtag
    Output di solidi 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.

    Output dei solidi in Civil 3D

    hashtag
    Risultato

    Di seguito รจ riportato un esempio di esecuzione del grafico mediante il Lettore Dynamo.

    Esecuzione del grafico mediante il Lettore Dynamo e visualizzazione dei risultati in Civil 3D
    circle-info

    Se non si conosce il Lettore Dynamo, consultare la sezione Lettore Dynamo.

    ๐ŸŽ‰ Missione compiuta!

    hashtag
    Idee

    Ecco alcune idee su come espandere le funzionalitร  di questo grafico.

    circle-info

    Aggiungere la possibilitร  di utilizzare intervalli di progressive differenti separatamente per ogni binario.

    circle-info

    Dividere i solidi in segmenti piรน piccoli che possono essere analizzati singolarmente per ricercare eventuali interferenze.

    circle-info

    Verificare se i solidi della sagoma si intersecano con gli oggetti e colorano quelli che incontrano.

    file-download
    185KB
    Rail_ClearanceEnvelope (1).dyn
    arrow-up-right-from-squareOpen
    file-download
    22MB
    Rail_ClearanceEnvelope.dwg
    arrow-up-right-from-squareOpen
    hashtag
    Struttura di un nodo

    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:

    !

    1. Nome: il nome del nodo con una convenzione di denominazione Category.Name.

    2. 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.

    3. Porte (entrata e uscita): i ricettori dei fili che forniscono i dati di input al nodo e i risultati dell'azione del nodo.

    4. 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.

    5. Icona di collegamento: indica l' specificata per gli input dell'elenco corrispondenti (verranno fornite ulteriori informazioni in seguito).

    hashtag
    Porte di input/output dei nodi

    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.

    circle-info

    Suggerimento Posizionare il cursore su una porta per visualizzare una descrizione comando contenente il tipo di dati previsto.

    !

    1. Etichetta della porta

    2. Descrizione comando

    3. Tipo di dati

    4. Default Value

    hashtag
    Stati dei nodi

    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.

    1. Input soddisfatti: un nodo con barre verticali blu sulle relative porte di input รจ collegato correttamente e tutti i relativi input sono connessi correttamente.

    2. Input non soddisfatti: รจ necessario che tali input siano collegati ad un nodo con una barra verticale rossa su una o piรน porte di input.

    3. Funzione: un nodo che genera una funzione e presenta una barra verticale grigia su una porta di output รจ un nodo di funzione.

    4. Selezionato: i nodi attualmente selezionati hanno un'evidenziazione verde acqua sul bordo.

    5. Congelato: un nodo blu traslucido viene congelato, sospendendo l'esecuzione del nodo.

    6. 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.

    7. 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.

    8. Errore: una barra di stato rossa sotto il nodo indica che il nodo si trova in uno stato di errore.

    9. 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.

    hashtag
    Gestione dei nodi di errore o di avviso

    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.

    circle-info

    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.

    !

    1. Descrizione comando di avviso: impossibile interpretare un valore "null" o i dati come Double, ossia un numero.

    2. Utilizzare il nodo Watch per esaminare i dati di input.

    3. A monte il nodo Number memorizza Red e non un numero.

    hashtag
    Congelamento di nodi

    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.

    hashtag
    Fili

    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.

    hashtag
    Flusso di programma

    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.

    !

    hashtag
    Creazione di fili

    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.

    !

    hashtag
    Modifica di fili

    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.

    !

    hashtag
    Fili di default ed evidenziati

    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.

    !

    1. Filo evidenziato

    2. 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.

    !

    hashtag
    Occultamento solo del singolo filo

    รˆ anche possibile nascondere solo il filo selezionato facendo clic con il pulsante destro del mouse sull'output Nodi > selezionare Nascondi fili.

    !

    hashtag
    Istruzioni condizionali

    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:

    Icona
    Nome (Sintassi)
    Input
    Output

    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.

    !

    hashtag
    Esercizio: Logica e geometria

    Scaricare il file di esempio facendo clic sul collegamento seguente.

    Un elenco completo di file di esempio รจ disponibile nell'Appendice.

    hashtag
    Parte I: Filtraggio di un elenco

    1. 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.

    hashtag
    Parte II: Dalla logica alla geometria

    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.

    ๐ŸŽฏ Posizionare i riferimenti di blocco del contatore del servizio idrico in corrispondenza degli offset specificati da una linea del lotto e disegnare una linea per ogni connessione dei servizi perpendicolare alla conduttura di distribuzione.

    hashtag
    Concetti chiave

    • 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

    hashtag
    Compatibilitร  delle versioni

    circle-check

    Questo grafico verrร  eseguito su **Civil 3D 2020** e versioni successive.

    hashtag
    Set di dati

    Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.

    hashtag
    Soluzione

    Ecco una panoramica della logica di questo grafico.

    1. Ottenere la geometria della curva per la conduttura di distribuzione

    2. Ottenere la geometria della curva di una linea del lotto selezionata dall'utente, invertendola se necessario

    3. Generare i punti di inserimento per i contatori

    4. Ottenere i punti sulla conduttura di distribuzione piรน vicini alle posizioni dei contatori

    5. Creare riferimenti di blocco e linee nello spazio modello

    Procediamo!

    hashtag
    Recupero della geometria della conduttura di distribuzione

    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.

    circle-info

    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").

    Recupero di oggetti da Civil 3D e unione di tutti gli elementi in un'unica PolyCurve

    hashtag
    Recupero della geometria della linea del lotto

    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.

    Selezione di una linea del lotto e verifica della direzione corretta
    1. Ottenere i punti iniziale e finale della linea del lotto.

    2. Misurare la distanza da ogni punto alla conduttura di distribuzione, quindi determinare quale distanza รจ maggiore.

    3. 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.

    hashtag
    Generazione di punti di inserimento

    รˆ 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.

    circle-info

    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").

    Creazione dei punti di inserimento per i contatori

    hashtag
    Recupero dei punti di connessione

    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.

    Recupero di punti perpendicolari sulla conduttura di distribuzione
    1. Questa รจ la PolyCurve della conduttura di distribuzione.

    2. Questi sono i punti di inserimento dei contatori.

    hashtag
    Creazione di oggetti

    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.

    hashtag
    Risultato

    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.

    Regolazione dei parametri di input in Dynamo e visualizzazione immediata dei risultati in Civil 3D

    hashtag
    Attivitร  extra: Attivazione del posizionamento sequenziale

    Si puรฒ notare che dopo aver posizionato gli oggetti per una linea del lotto, selezionando una diversa gli oggetti vengono "spostati".

    Funzionamento quando il binding di oggetti รจ attivato

    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.

    Impostazioni di binding di oggetti di Dynamo
    circle-info

    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.

    Esecuzione del grafico mediante il Lettore Dynamo e visualizzazione dei risultati in Civil 3D
    circle-info

    Se non si conosce il Lettore Dynamo, consultare la sezione [dynamo-player.md](../../dynamo-player.md "mention").

    ๐ŸŽ‰ Missione compiuta!

    hashtag
    Idee

    Ecco alcune idee su come espandere le funzionalitร  di questo grafico.

    circle-info

    Posizionare **piรน collegamenti dei servizi** contemporaneamente anzichรฉ selezionare ogni linea del lotto.

    circle-info

    Regolare gli input per posizionare invece **sportelli di ispezione per fognature** anzichรฉ i contatori del servizio idrico.

    circle-info

    **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.

    file-download
    108KB
    Land_ServicePlacement.dyn
    arrow-up-right-from-squareOpen
    file-download
    842KB
    Land_ServicePlacement.dwg
    arrow-up-right-from-squareOpen

    Notare cosa succede quando il raggio viene modificato.

    Modifica dell'input del raggio in Dynamo

    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.

    hashtag
    Un altro esempio

    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.

    Un grafico semplice che posiziona il testo al centro di un cerchio selezionato

    Tuttavia, questo รจ ciรฒ che accade quando viene selezionato un cerchio diverso.

    Funzionamento di default di Dynamo quando si seleziona un nuovo cerchio

    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).

    Impostazioni dell'unione di oggetti

    Dopo aver apportato questa modifica, otteniamo il funzionamento desiderato.

    Funzionamento con l'unione di oggetti disattivata

    hashtag
    Impostazioni di unione

    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.

    circle-info

    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.

    hashtag
    Opzione 1: Nessun dato di unione mantenuto

    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.

    circle-info

    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.

    hashtag
    Opzione 2: Memorizza nel grafico per Dynamo

    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.

    circle-info

    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.

    circle-exclamation

    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.

    hashtag
    Opzione 3: Memorizza nella Carta per Dynamo

    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.

    circle-info

    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.

    hashtag
    Opzione 4: Memorizza nella Carta per Lettore Dynamo

    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.

    circle-info

    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.

    circle-info

    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.

    Un grafico semplice per la creazione di un cerchio

    Libreria

    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.

    hashtag
    Gerarchia di librerie per le categorie

    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.

    circle-info

    Geometry รจ un menu di grande utilitร  per iniziare ad esplorare poichรฉ contiene la maggior quantitร  di nodi.

    !

    1. Libreria

    2. Categoria

    3. 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.

    !

    1. Descrizione: descrizione con linguaggio normale del nodo

    2. Icona: versione piรน grande dell'icona nel menu Libreria

    3. Input: nome, tipo di dati e struttura di dati

    hashtag
    Ricerca rapida nella Libreria

    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.

    !

    hashtag
    Ricerca per gerarchia

    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.

    !

    hashtag
    Nodi utilizzati di frequente

    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).

    hashtag
    Nodi di input

    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:

    Nodo
    Nodo

    hashtag
    Watch e Watch 3D

    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.

    circle-info

    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.

    hashtag
    Code Block

    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.

    1. Fare doppio clic per creare un nodo Code Block.

    2. Digitare Circle.ByCenterPointRadius(x,y);

    3. Fare clic sull'area di lavoro per annullare la selezione e aggiungere automaticamente gli input x e y

    Creazione

    รˆ 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.

    !

    hashtag
    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.

    hashtag
    Principi di interoperabilitร 

    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ร .

    hashtag
    Piรน elementi ed elenchi

    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.

    !

    hashtag
    Elementi DirectShape

    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.

    hashtag
    Esercizio: Generazione di elementi ed elenchi

    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.

    !

    1. Questo รจ il file aperto.

    2. 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.

    !

    1. 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.

    2. Utilizzando due nodi Select Edge, selezionare ogni bordo che rappresenta l'inclinazione al centro della facciata.

    circle-info

    *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.

    !

    1. Creare un elenco per le due curve al centro della facciata.

    2. Unire le due curve in una PolyCurve collegando il componente List.Create in un nodo Polycurve.ByJoinedCurves.

    3. 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.

    !

    1. Con un Code Block, definire un intervallo utilizzando la sintassi: 0..1..#numberOfTrusses;.

    2. 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.

    !

    1. 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.

    !

    1. Collegare il nodo Geometry.Intersect all'input list di List.Map.

    2. 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.

    !

    1. Aggiungere un nodo AdaptiveComponent.ByPoints all'area di disegno, collegare il nodo List.Transpose all'input points.

    2. 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.

    !

    hashtag
    Esercizio: Elementi DirectShape

    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.

    !

    1. Nella vista 3D, si utilizza la massa dell'edificio della lezione precedente.

    2. Lungo il bordo dell'atrio vi รจ una curva di riferimento, che verrร  utilizzata come curva di riferimento in Dynamo.

    3. Lungo il bordo opposto dell'atrio vi รจ un'altra curva di riferimento, a cui si farร  riferimento anche in Dynamo.

    !

    1. 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.

    2. Importare una curva di riferimento in Dynamo utilizzando Select Model Element e CurveElement.Curve.

    !

    1. 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.

    2. 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.

    !

    !

    1. Se si trascina il nodo DirectShape.ByGeometry nell'area di disegno, รจ possibile notare che presenta quattro input: geometry, category, material e name.

    2. 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.

    !

    Ridenominazione di strutture

    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.

    hashtag
    Scopo

    ๐ŸŽฏ Rinominare le strutture della rete di tubi in ordine in base alla progressiva di un tracciato.

    hashtag
    Concetti chiave

    • Utilizzo delle caselle di delimitazione

    • Filtraggio dei dati mediante il nodo List.FilterByBoolMask

    • Ordinamento dei dati mediante il nodo List.SortByKey

    hashtag
    Compatibilitร  delle versioni

    circle-check

    Questo grafico verrร  eseguito su Civil 3D 2020 e versioni successive.

    hashtag
    Set di dati

    Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.

    hashtag
    Soluzione

    Ecco una panoramica della logica di questo grafico.

    1. Selezionare le strutture in base al layer

    2. Ottenere le posizioni delle strutture

    3. Filtrare le strutture per offset, quindi ordinarle in base alla progressiva

    Procediamo!

    hashtag
    Selezione delle strutture

    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).

    1. Questo nodo garantisce che non vengano recuperati accidentalmente eventuali tipi di oggetto indesiderati che potrebbero condividere lo stesso layer delle strutture.

    hashtag
    Recupero delle posizioni 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.

    hashtag
    Filtraggio e ordinamento

    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.

    1. Il tracciato selezionato

    2. Le strutture che si desidera rinominare

    3. 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.

    circle-info

    Se non si conoscono gli elenchi, consultare la sezione .

    1. Verificare se l'offset della strutture รจ inferiore al valore di soglia.

    2. Sostituire eventuali valori null con false.

    3. Filtrare l'elenco di strutture e progressive.

    hashtag
    Generazione di nuovi nomi

    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").

    hashtag
    Ridenominazione di strutture

    Infine, rinominare le strutture.

    hashtag
    Risultato

    Di seguito รจ riportato un esempio di esecuzione del grafico mediante il Lettore Dynamo.

    circle-info

    Se non si conosce il Lettore Dynamo, consultare la sezione .

    ๐ŸŽ‰ Missione compiuta!

    hashtag
    Attivitร  extra: Visualizzazione in Dynamo

    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.

    hashtag
    Idee

    Ecco alcune idee su come espandere le funzionalitร  di questo grafico.

    circle-info

    Rinominare le strutture in base al relativo tracciato piรน vicino anzichรฉ selezionare un tracciato specifico.

    circle-info

    Rinominare i tubi oltre alle strutture.

    circle-info

    Impostare i layer delle strutture in base al loro tratto.

    Documentazione

    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.

    hashtag
    Deviazione

    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ร .

    hashtag
    Esercizio

    hashtag
    Parte I: Impostazione del rapporto di apertura dei pannelli in base alla deviazione dal nodo del piano

    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.

    !

    1. Aggiungere un nodo Family Types all'area di disegno e scegliere ROOF-PANEL-4PT.

    2. Collegare il nodo ad un nodo di selezione All Elements of Family Type per caricare tutti gli elementi da Revit in Dynamo.

    !

    1. Eseguire una query sulla posizione dei punti adattivi per ogni elemento con il nodo AdaptiveComponent.Locations.

    2. 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.

    !

    1. 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.

    2. Non รจ possibile collegare direttamente i risultati della deviazione all'input value perchรฉ รจ necessario riassociare i valori all'intervallo di parametri.

    !

    1. 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.

    2. 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.

    hashtag
    Parte II: Colore e documentazione

    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.

    !

    1. Rimuovere Element.SetParameterByName e i relativi nodi di input e aggiungere Element.OverrideColorInView.

    2. 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.

    !

    1. 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.

    2. 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.

    !

    1. Utilizzando un Code Block, aggiungere due numeri su due righe diverse: 0; e 255;.

    2. 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.

    !

    hashtag
    Parte III: Creazione di abachi

    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.

    !

    1. Selezionare tutti i componenti adattivi con due nodi.

    2. Estrarre la posizione di ciascun punto con AdaptiveComponent.Locations.

    3. 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.

    Intersezione e taglio

    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:

    hashtag
    Interseca

    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.

    hashtag
    Riduci

    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.

    Optimize Road Design with Dynamo for Civil 3D and Generative Design | Autodesk Universitywww.autodesk.comchevron-right
    Civil 3D and Dynamoโ€”Dynamic Culvert Design and Analysis | Autodesk Universitywww.autodesk.comchevron-right
    Getting Started with Dynamo for Civil 3D: A Beginnerโ€™s Guide | Autodesk Universitywww.autodesk.comchevron-right
    Underground Utility GIS Features to Civil 3D Pipe Networks with Dynamo | Autodesk Universitywww.autodesk.comchevron-right
    Dynamo for Civil 3D: Automated Checks of Open-Format Road Design Made Easy | Autodesk Universitywww.autodesk.comchevron-right
    Generating, Transforming, and Analyzing Railway Design Data in Civil 3D and Dynamo | Autodesk Universitywww.autodesk.comchevron-right
    Computational Design for Civil Engineers | Autodesk Universitywww.autodesk.comchevron-right
    Civil 3DDynamochevron-right
    Dynamo for Civil 3Dbooks.huiz.netchevron-right
    Dynamo in Civil 3D Introductionโ€”Unlocking the Mystery of Scripting | Autodesk Universitywww.autodesk.comchevron-right
    Helphelp.autodesk.comchevron-right

    Dati

    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.

    hashtag
    Cosa sono i dati?

    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

    GitHub - mzjensen/Camber: An open-source Dynamo package for Civil 3D.GitHubchevron-right
    Arkance Systems Node Library for Civil 3D DynamoHuizBlogchevron-right
    Ripetere la stessa operazione per i bordi inferiori della facciata in Revit.
  • 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 il blocco di codice all'input param di un nodo Curve.PlaneAtParameter e collegare il bordo superiore all'input curve. Questo fornirร  dieci piani, distribuiti uniformemente nell'estensione della facciata.
    Occorre modificare questi dati. Per creare un'istanza della trave reticolare, รจ necessario utilizzare lo stesso numero di punti adattivi definiti nella famiglia. Si tratta di un componente adattivo a tre punti, pertanto anzichรฉ tre elenchi con 10 elementi ciascuno (numberOfTrusses), si desidera ottenere 10 elenchi di tre elementi ciascuno. In questo modo รจ possibile creare 10 componenti adattivi.
  • 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.

  • Importare l'altra curva di riferimento in Dynamo utilizzando Select Model Element e CurveElement.Curve.
    L'input della categoria viene scelto tramite il nodo Categories dell'elenco a discesa. In questo caso si utilizzerร  Telaio strutturale.
  • 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".

  • primo esercizio
    secondo esercizio
    sezione del blocco di codicearrow-up-right
    Calcolare la deviazione planare con il nodo
    Polygon.PlaneDeviation
    .
    Posizionando il cursore del mouse sull'input value, รจ possibile vedere che i valori per l'input devono essere compresi tra 0 e 1 per assegnare un colore a ciascun valore. รˆ necessario riassociare i valori della deviazione a questo intervallo.
    Notare che l'output รจ un intervallo di colori anzichรฉ un intervallo di numeri.
  • 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.

  • Creare un elenco da questi due colori.
  • 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.

  • Exercisearrow-up-right
    Exercisearrow-up-right
    Exercisearrow-up-right
    Esercizio
    Esercizio
    Esercizio
    opzione Collegamento

    Generazione e modifica di stringhe di testo

    Generare i nuovi nomi

  • Rinominare le strutture

  • Ordinare le strutture in base alle progressive

    file-download
    139KB
    Utilities_RenameStructures.dyn
    arrow-up-right-from-squareOpen
    file-download
    6MB
    Utilities_RenameStructures.dwg
    arrow-up-right-from-squareOpen
    Utilizzo di elenchi
    Lettore Dynamo
    Selezione delle strutture su un determinato layer
    Utilizzo delle caselle di delimitazione per ottenere il punto di inserimento approssimativo di ogni struttura
    Filtraggio e ordinamento delle strutture
    Generazione di nuovi nomi delle strutture
    Impostazione dei nomi per le strutture
    Esecuzione del grafico mediante il Lettore Dynamo e visualizzazione dei risultati in Civil 3D
    Visualizzazione della geometria per strutture e linee caratteristiche del modellatore
    Regolazione del valore della soglia di offset del tracciato e visualizzazione delle strutture interessate in Dynamo
    Nodo

    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

    gerarchia dei nodi
    ricerche rapide dalla libreria
    nodi utilizzati piรน di frequente
    DesignScript

    !

    . Tuttavia, i dati possono anche essere di diversi tipi: una variabile che rappresenta numeri che cambiano (
    height
    ), caratteri (
    myName
    ), geometria (
    Circle
    ) o un elenco di elementi di dati (
    1,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.

    !Data and Actionsarrow-up-right

    1. Dati semplici

    2. Dati ed esecuzione corretta di un'azione (un nodo)

    3. Restituzione di una funzione generica tramite un'azione (nodo) senza input di dati

    hashtag
    Null - Assenza 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.

    Icona
    Nome/Sintassi
    Input
    Output

    !

    Object.IsNull

    obj

    booleano

    hashtag
    Strutture dei dati

    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).

    !List Breakdownarrow-up-right

    1. 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.

    2. 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).

    3. Applicando lo stesso processo al secondo elenco, si ottiene un valore di 0, la prima voce dell'elenco.

    4. 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.

    5. 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.

    hashtag
    Esercizio: Utilizzo di dati per creare una catena di cilindri

    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.

    hashtag
    Parte I: Impostazione del grafico per un cilindro con alcuni parametri modificabili

    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).

    !

    hashtag
    Parte II: Popolamento di una serie di cilindri della Parte I

    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.

    !

    file-download
    12KB
    Building Blocks of Programs - Data.dyn
    arrow-up-right-from-squareOpen

    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);
    Logo
    Logo
    Logo
    Logo
    Logo
    Logo
    Logo
    Logo
    Mundane Civil 3D Tasks to Automate with Dynamo for Civil 3D | Autodesk Universitywww.autodesk.comchevron-right

    Selezione

    hashtag
    Selezione di elementi di Revit

    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.

    hashtag
    Gerarchia di Revit

    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.

    circle-exclamation

    *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".

    hashtag
    Navigazione nel database con nodi di Dynamo

    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.

    ![](../.gitbook/assets/selecting _database_navigation_with_dynamo_nodes_02.png)

    รˆ 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.

    hashtag
    Esercizio

    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.

    !

    1. Massa dell'edificio

    2. Travi (telaio strutturale)

    3. 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.

    hashtag
    Selezione di massa e superfici

    1. 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.

    2. 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.

    1. 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.

    1. 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.

    2. 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.

    ![](images/2/selecting - exercise 05.jpg)

    1. Innanzitutto, generare gli elementi selezionati da una versione precedente al nodo Element.Faces.

    2. Quindi, utilizzare il nodo List.Count per mostrare che si stanno utilizzando 23 superfici nella massa.

    3. 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.

    hashtag
    Selezione di travi

    Ora, osservare le travi sopra l'atrio.

    1. Utilizzando il nodo Select Model Element, selezionare una delle travi.

    2. Collegare l'elemento trave al nodo Element.Geometry, cosรฌ ora la trave รจ presente nella finestra di Dynamo.

    3. รˆ 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.

    1. Collegare l'elemento trave ad un nodo Element.ElementType.

    2. Il nodo Watch mostra che l'output รจ ora un simbolo di famiglia anzichรฉ un elemento di Revit.

    3. Element.ElementType รจ una query semplice, cosรฌ รจ possibile eseguire questa operazione in Code Block con la stessa facilitร  di

    1. Per selezionare le travi rimanenti, utilizzare il nodo All Elements of Family Type.

    2. Il nodo di controllo mostra che sono stati selezionati cinque elementi di Revit.

    1. รˆ 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.

    hashtag
    Selezione di travi reticolari

    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.

    1. 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.

    2. 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.

    circle-info

    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.

    Posizionamento di lampioni

    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.

    hashtag
    Scopo

    ๐ŸŽฏ Posizionare i riferimenti di blocco dei lampioni lungo un modellatore in corrispondenza dei valori di progressiva specificati in un file Excel.

    hashtag
    Concetti chiave

    • 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

    hashtag
    Compatibilitร  delle versioni

    circle-check

    Questo grafico verrร  eseguito su Civil 3D 2020 e versioni successive.

    hashtag
    Set di dati

    Iniziare scaricando i file di esempio riportati qui sotto, quindi aprendo il file DWG e il grafico di Dynamo.

    circle-info

    รˆ consigliabile salvare il file Excel nella stessa directory del grafico di Dynamo.

    hashtag
    Soluzione

    Ecco una panoramica della logica di questo grafico.

    1. Leggere il file Excel e importare i dati in Dynamo

    2. Ottenere le linee caratteristiche dalla linea base del modellatore specificata

    3. Generare sistemi di coordinate lungo la linea caratteristica del modellatore in corrispondenza delle progressive desiderate

    Procediamo!

    hashtag
    Recupero di dati di Excel

    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.

    circle-info

    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.

    circle-info

    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.

    hashtag
    Recupero di linee caratteristiche del modellatore

    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.

    1. Selezionare il modello di modellatore in base al nome.

    2. Ottenere una linea base specifica all'interno del modellatore.

    3. Ottenere una linea caratteristica all'interno della linea base secondo il relativo codice punto.

    hashtag
    Generazione di sistemi di coordinate

    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.

    circle-info

    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.

    circle-info

    Se non si conoscono i blocchi di codice, consultare la sezione .

    hashtag
    Creazione di riferimenti di blocco

    รˆ 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.

    hashtag
    Risultato

    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.

    circle-info

    รˆ 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.

    circle-info

    Se non si conosce il Lettore Dynamo, consultare la sezione .

    ๐ŸŽ‰ Missione compiuta!

    hashtag
    Attivitร  extra: Visualizzazione in Dynamo

    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.

    1. 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.

    2. 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.

    hashtag
    Idee

    Ecco alcune idee su come espandere le funzionalitร  di questo grafico.

    circle-info

    Aggiungere una colonna rotation al file Excel e utilizzarla per guidare la rotazione dei sistemi di coordinate.

    circle-info

    Aggiungere offset orizzontali o verticali al file Excel in modo che i lampioni possano deviare dalla linea caratteristica del modellatore, se necessario.

    circle-info

    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.

    Sintassi abbreviata

    hashtag
    Sintassi abbreviata

    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

    hashtag
    Sintassi aggiuntiva

    hashtag
    Intervalli e sequenze

    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:

    !

    1. 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;.

    2. Notare che la sintassi 0..10..1; รจ equivalente a 0..10;. Una dimensione di incremento di 1 รจ il valore di default per la notazione della sintassi abbreviata. Pertanto,

    hashtag
    Intervalli avanzati

    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.

    !

    hashtag
    Creazione di elenchi e recupero di voci da un elenco

    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.

    hashtag
    Esercizio: Superficie seno

    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.

    !

    !

    1. Definire un intervallo compreso tra 0 e 1 con 50 divisioni digitando 0..1..#50 in un Code Block.

    2. 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.

    !

    1. 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.

    !

    1. 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.

    !

    !

    1. Eseguendo una trasposizione sull'intervallo di numeri, si inverte la direzione dell'onda della tenda: transposeList = List.Transpose(sineList);.

    !

    1. 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.

    !

    !

    1. 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.

    Personalizzazione

    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.

    hashtag
    Posizione dei punti

    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.

    hashtag
    Analisi dell'orientamento solare

    !

    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.

    hashtag
    Esercizio

    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.

    !

    1. Iniziare selezionando due spigoli con il nodo Select Edge. I due spigoli sono i tratti lunghi dell'atrio.

    2. Combinare i due spigoli in un elenco con il nodo List.Create.

    3. Creare una superficie tra i due spigoli con Surface.ByLoft.

    !

    1. Utilizzando Code Block, definire un intervallo da 0 a 1 con 10 valori a spaziatura uniforme: 0..1..#10;.

    2. 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.

    !

    1. Aggiungere un nodo Surface.ParameterAtPoint all'area di disegno e collegare gli input come mostrato in precedenza.

    2. Eseguire una query sui valori u di questi parametri con il nodo UV.U.

    3. Eseguire una query sui valori v di questi parametri con il nodo UV.V.

    !

    1. 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.

    2. Collega UV.U all'input u e UV.V all'input v.

    !

    1. 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.

    2. 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.

    !

    1. Passare a Pacchetti > Cerca pacchetto.

    2. Cercare LunchBox e installare LunchBox for Dynamo. Si tratta di un insieme veramente utile di strumenti per le operazioni di geometria come questa.

    1. 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.

    1. Verrร  creata un'istanza di molti elementi della geometria in Revit. Assicurarsi quindi di impostare il risolutore Dynamo su Manuale.

    2. Aggiungere un nodo Family Types all'area di disegno e selezionare ROOF-PANEL-4PT.

    3. 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.

    hashtag
    Analisi

    1. 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.

    1. Se si osserva il percorso solare, รจ possibile vedere la posizione corrente del sole in Revit.

    1. รˆ possibile fare riferimento a questa posizione del sole utilizzando il nodo SunSettings.Current.

    1. Collegare le impostazioni del sole a Sunsetting.SunDirection per ottenere il vettore solare.

    2. Dal nodo Panel Pts utilizzato per creare i componenti adattivi, utilizzare Plane.ByBestFitThroughPoints per approssimare un piano per il componente.

    3. Eseguire una query sulla normale di questo piano.

    1. 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.

    1. Math.RemapRange รจ uno strumento eccezionale per questa funzione. Prevede un elenco di input e ne riassocia i limiti a due valori obiettivo.

    2. Definire i valori obiettivo come 0.15 e_0.45_ in Code Block.

    3. Fare clic su Esegui.

    1. Collegare i valori riassociati ad un nodo Element.SetParameterByName.

    1. Collegare la stringa Aperture Ratio all'input parameterName.

    2. Collegare AdaptiveComponent all'input element.

    3. 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.

    GitHub - Autodesk/civilconnection: CivilConnection enables the exchange of information between Civil 3D, Dynamo and Revit.GitHubchevron-right

    Colore

    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.

    hashtag
    Creazione di 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.

    Elenchi n-dimensionali

    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.

    Sintassi di DesignScript

    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):

    Leggibile dall'uomo
    Notazione con punto
    Output

    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.

    L'input w rappresenta l'ampiezza della forma, pertanto si associa Number Slider ad esso.
    all'area di disegno, collegare
    Panel Pts
    dall'output
    LunchBox Quad Grid by Face
    all'input
    points
    . Collegare il nodo
    Family Types
    all'input
    familySymbol.
  • 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;
    darร  una sequenza da 0 a 10 con una dimensione di incremento di 1.
  • 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

    file-download
    20KB
    Obsolete-Nodes_Sine-Surface.dyn
    arrow-up-right-from-squareOpen
    hashtag
    Mappaggio e combinazioni

    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.

    hashtag
    Esercizio - Elenchi 2D - Base

    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.

    !Exercisearrow-up-right

    1. Si inizia con il file .sat nella cartella dei file degli esercizi. รˆ possibile selezionare questo file utilizzando il nodo File Path.

    2. 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.

    !

    1. Selezionare l'indice di 1 per acquisire la superficie superiore. Questa operazione viene eseguita con il nodo List.GetItemAtIndex.

    2. 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.

    !

    1. Per esaminare come รจ organizzata la struttura di dati, collegare NurbsCurve.ByPoints all'output di Surface.PointAtParameter.

    2. Per ora, รจ possibile disattivare l'anteprima del nodo List.GetItemAtIndex per ottenere un risultato piรน chiaro.

    !

    1. Un nodo List.Transpose di base inverte le colonne e le righe di un elenco di elenchi.

    2. Collegando l'output di List.Transpose a NurbsCurve.ByPoints, si ottengono cinque curve che percorrono orizzontalmente la superficie.

    3. รˆ possibile disattivare l'anteprima del nodo NurbsCurve.ByPoints nel passaggio precedente per ottenere lo stesso risultato nell'immagine.

    hashtag
    Esercizio - Elenchi 2D - Avanzato

    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.

    !

    1. Iniziare con un passaggio dell'esercizio precedente, isolando la superficie superiore della geometria importata con il nodo List.GetItemAtIndex.

    !

    1. Utilizzando Surface.Offset, eseguire l'offset della superficie di un valore di 10.

    !

    1. Allo stesso modo dell'esercizio precedente, definire un Code Block con queste due righe di codice: 0..1..#10; 0..1..#5;.

    2. 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.

    !

    1. Disattivare l'anteprima di queste superfici.

    2. Come nell'esercizio precedente, collegare gli output a due nodi NurbsCurve.ByPoints. Il risultato mostra le curve corrispondenti a due superfici.

    !

    1. Utilizzando List.Create, รจ possibile combinare i due gruppi di curve in un elenco di elenchi.

    2. Notare dall'output che sono presenti due elenchi con dieci voci ciascuno, che rappresentano ogni serie di curve NURBS collegate.

    3. 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.

    !

    1. Disattivare l'anteprima del nodo Surface.ByLoft nel passaggio precedente.

    2. 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.

    3. Utilizzando Surface.ByLoft, si arriva a una struttura con nervatura.

    Successivamente, verrร  illustrato un processo alternativo per ottenere questo risultato.

    !

    1. Prima di iniziare, disattivare l'anteprima di Surface.ByLoft nel passaggio precedente per evitare confusione.

    2. In alternativa a List.Transpose utilizzare List.Combine. In questo modo verrร  eseguito un "combinatore" in ogni sottoelenco.

    3. In questo caso, si utilizza List.Create come "combinatore", che crea un elenco di ogni voce nei sottoelenchi.

    4. 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.

    !

    1. 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.

    hashtag
    Esercizio - Elenchi 3D

    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.

    !

    !

    1. Come nell'esercizio precedente, utilizzare il nodo Surface.Offset per eseguire l'offset di un valore di 10.

    2. Notare dall'output che sono state create due superfici con il nodo di offset.

    !

    1. Allo stesso modo dell'esercizio precedente, definire un Code Block con queste due righe di codice: 0..1..#20; 0..1..#20;.

    2. 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.

    !

    1. Come nell'esercizio precedente, collegare gli output a due nodi NurbsCurve.ByPoints.

    2. 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.

    3. Notare che le cose diventano piรน complesse nel nodo Surface.PointAtParameter. In questo caso abbiamo un elenco di elenchi di elenchi.

    !

    1. Prima di procedere, disattivare l'anteprima delle superfici esistenti.

    2. Utilizzando il nodo List.Create, le curve NURBS vengono unite in una struttura di dati, creando un elenco di elenchi di elenchi.

    3. 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.

    !

    1. 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.

    !

    1. List.Combine funzionerร  meglio in questo caso. Per ottenere strutture di dati piรน complesse, si desidera utilizzare i nodi List.Map e List.Combine.

    2. Utilizzando List.Create come "combinatore", verrร  creata una struttura di dati che funzionerร  meglio.

    !

    1. 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รน.

    2. 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.

    !

    1. Infine, รจ possibile eseguire il loft delle curve NURBS con una gerarchia di dati corretta, restituendo una struttura con nervatura.

    !

    1. Aggiungere un po' di profonditร  alla geometria con un nodo Surface.Thicken con le impostazioni di input come mostrato.

    !

    1. 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.

    2. 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.

    !

    1. 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.

    !

    1. Poichรฉ c'รจ un livello in piรน nella gerarchia, รจ necessario utilizzare List.Map con una funzione List.Transpose per modificare la direzione delle curve NURBS.

    !

    1. 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.

    !

    Zetaarrow-up-right
    Utilizzando Geometry.Explode รจ possibile ottenere di nuovo l'elenco delle superfici. Questi due nodi funzionano allo stesso modo di Element.Faces, ma offrono opzioni alternative per fare ricerche nella geometria di un elemento di Revit.

    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;
    e ottenere gli stessi risultati.
    Il collegamento di un nodo Polygon.ByPoints restituisce una PolyCurve. Questo รจ visibile nella finestra di Dynamo. Con questo metodo, รจ stata visualizzata la geometria di un elemento ed รจ stata astratta la geometria della serie rimanente di elementi (che potrebbe essere maggiore di numero rispetto a questo esempio).
    UIarrow-up-right
    Congelamentoarrow-up-right

    Inserimento di riferimenti di blocco

  • Visualizzazione della geometria in Dynamo

  • Utilizzare i sistemi di coordinate per posizionare i riferimenti di blocco nello spazio modello

    file-download
    232KB
    Roads_CorridorBlockRefs (1).dyn
    arrow-up-right-from-squareOpen
    file-download
    54MB
    Roads_CorridorBlockRefs.dwg
    arrow-up-right-from-squareOpen
    file-download
    12KB
    LightPoles.xlsx
    arrow-up-right-from-squareOpen
    Dizionari in Dynamo
    Vettore, piano e sistema di coordinate
    Blocchi di codice e DesignScript
    Interfaccia utente
    Lettore Dynamo
    La struttura della tabella di file Excel
    Importazione dei dati di Excel in Dynamo
    Inserimento dei dati di Excel in un dizionario
    Recupero dei dati dal dizionario
    Acquisizione di sistemi di coordinate lungo le linee caratteristiche del modellatore
    Recupero delle definizioni di blocco desiderate dal documento
    Creazione di riferimenti di blocco nello spazio modello
    Esecuzione di aggiornamenti al file Excel e rapida visualizzazione dei risultati in Civil 3D
    Esecuzione del grafico mediante il Lettore Dynamo e visualizzazione dei risultati in Civil 3D
    Visualizzazione della geometria del modellatore in Dynamo

    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().

    hashtag
    Notazione con punto in Code Block

    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.

    !

    1. Utilizzando Point.ByCoordinates in Code Block, si specificano gli input nello stesso ordine del nodo predefinito (X,Y).

    hashtag
    Chiamata di nodi - Crea, Azioni, Query

    รˆ 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.

    !

    1. Crea: consente di creare (o costruire) un elemento.

    2. Azione: consente di eseguire un'azione su un elemento.

    3. Query: consente di ottenere una proprietร  di un elemento giร  esistente.

    hashtag
    Crea

    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.

    hashtag
    Azione

    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:

    !

    1. Il nodo Point.Add รจ un nodo di tipo Azione, pertanto la sintassi funziona in modo leggermente diverso.

    2. 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.

    hashtag
    Query

    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.

    hashtag
    Informazioni sul collegamento

    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.

    !

    1. 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).

    2. Utilizzando la sintassi Point.ByCoordinates(x_vals<1>,y_vals<2>); si ottengono due elenchi con cinque voci in ogni elenco.

    3. 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.

    hashtag
    Nodo da aggiungere al codice

    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.

    !

    hashtag
    Esercizio: Attrattore di superficie

    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).

    !

    1. Notare che il collegamento in Point.ByCoordinates รจ stato impostato su Globale.

    2. Ogni punto di una griglia viene spostato verso l'alto nella direzione Z in base alla sua distanza dal punto di riferimento.

    3. Viene ricreata e ispessita una superficie, creando una bombatura nella geometria rispetto alla distanza dal punto di riferimento.

    !

    1. 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.

    2. Le variabili x e y vengono inserite in Code Block in modo che sia possibile aggiornarle dinamicamente con i dispositivi di scorrimento.

    3. 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.

    !

    1. 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.

    !

    1. 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.

    2. Notare nel nodo Watch3D che รจ presente una griglia di punti nella griglia di Dynamo.

    !

    1. 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..., utilizzare gridPts.Translate.

    2. 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.

    3. direction รจ abbastanza semplice. Per spostarla verticalmente, utilizzare Vector.ZAxis().

    4. 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).

    5. La riga di codice finale fornisce i punti traslati: transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));.

    !

    1. 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);.

    !

    1. 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.

    hashtag
    Semplificazione del grafico con Nodo da aggiungere al codice

    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:

    !

    1. 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?

    Icona
    Nome (Sintassi)
    Input
    Output

    !

    Colore ARGB (Color.ByARGB)

    A,R,G,B

    colore

    hashtag
    Esecuzione di una query sui valori dei colori

    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.

    Icona
    Nome (Sintassi)
    Input
    Output

    !

    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ร .

    Icona
    Nome (Sintassi)
    Input
    Output

    !

    Tonalitร  (Color.Hue)

    colore

    Tonalitร 

    !

    Saturazione (Color.Saturation)

    colore

    Saturazione

    !

    Luminositร  (Color.Brightness)

    colore

    hashtag
    Intervallo colori

    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.

    !

    1. Definire tre colori: utilizzando un nodo Code Block, definire rosso, verde e blu collegando le combinazioni appropriate di 0 e 255.

    2. Creare l'elenco: unire i tre colori in un elenco.

    3. 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.

    4. Code Block: immettere i valori (compresi tra 0 e 1) da convertire in colori.

    hashtag
    Anteprima 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.

    !

    hashtag
    Colore sulle superfici

    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.

    !

    hashtag
    Esercizio

    hashtag
    Elica di base con colori

    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.

    !

    1. 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.

    2. 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.

    !

    1. PolyCurve.ByPoints: collegare l'output Point.ByCoordinates all'input points per il nodo. Si ottiene una curva elicoidale.

    2. 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.

    3. 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.

    !

    1. Geometry.DistanceTo: collegare l'output Curve.PointAtParameter all'input. Collegare Point.ByCoordinates all'input geometry.

    2. 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.

    !

    1. Math.RemapRange: collegare l'output Geometry.DistanceTo all'input numbers.

    2. 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.

    3. 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.

    !

    1. 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.

    !

    1. 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.

    2. Sphere.ByCenterPointRadius: per il momento, disattivare l'anteprima in questo nodo (fare clic con il pulsante destro del mouse > Anteprima).

    !

    1. Math.RemapRange: questo processo dovrebbe essere noto. Collegare l'output Geometry.DistanceTo all'input numbers.

    2. 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.

    3. Color Range: collegare l'output Math.RemapRange all'input value.

    !

    1. 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.

    2. 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).

    3. Color Range: l'input colors richiede un elenco di colori. รˆ necessario creare questo elenco dai due colori creati nel passaggio precedente.

    4. List.Create: unire i due colori in un elenco. Collegare l'output all'input colors per Color Range.

    !

    1. 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.

    !

    hashtag
    Esercizio con il colore sulle superfici

    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.

    !

    1. 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.

    2. Surface.ByLoft: generare una superficie interpolata tra l'elenco di curve NURBS.

    !

    1. File Path: selezionare un file di immagine da campionare per i dati di pixel a valle.

    2. Utilizzare File.FromPath per convertire il percorso del file in un file, quindi passare a Image.ReadFromFile per produrre un'immagine per il campionamento.

    3. Image.Pixels: immettere un'immagine e fornire un valore di esempio da utilizzare lungo le quote X e Y dell'immagine.

    4. Dispositivo di scorrimento: fornire valori di esempio per Image.Pixels.

    5. 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

    !

    Logo
    Logo
    Logo

    Importazione zero-touch

    hashtag
    Che cos'รจ zero-touch?

    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.

    !

    1. File DLL

    2. 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 .

    hashtag
    Pacchetti zero-touch

    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.

    hashtag
    Case study - Importazione di AForge

    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.

    !

    1. 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.

    2. 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.

    !

    hashtag
    Esercizio 1 - Rilevamento di spigoli

    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.

    !

    1. Utilizzare File From Path per convertire l'elemento del percorso del file in un'immagine nell'ambiente di Dynamo.

    2. Collegare il nodo File Path al nodo File.FromPath.

    3. 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.

    !

    1. 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.

    2. 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.

    !

    1. 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.

    !

    1. Aggiungere un nodo SobelEdgeDetector.SobelEdgeDetector all'area di disegno.

    2. Collegarlo a BaseUsingCopyPartialFilter.Apply e collegare l'immagine desaturata all'input image di questo nodo.

    3. 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.

    !

    hashtag
    Esercizio 2 - Creazione di rettangoli

    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.

    !

    1. Con il nodo File Path, accedere a grid.jpg nella cartella degli esercizi.

    2. 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 .

    !

    1. 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.

    !

    1. 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.

    !

    1. 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.

    !

    1. 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.

    !

    1. 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.

    2. 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.

    !

    1. 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.

  • Per applicare il filtro Grayscale, รจ necessario eseguire un'azione sull'immagine. Per questo, viene utilizzato BaseFilter.Apply. Collegare l'immagine all'input image e Grayscale.Grayscale all'input baseFilter.
  • Collegandola ad un nodo Watch Image, viene visualizzata un'immagine desaturata.

  • Logo/Immagine

    Nome

    Mesh Toolkitarrow-up-right

    Dynamo Unfoldarrow-up-right

    Rhynamoarrow-up-right

    Optimoarrow-up-right

    pagina Wiki di Dynamoarrow-up-right
    sezione dei pacchetti
    AForgearrow-up-right
    pagina di download di AForgearrow-up-right
    flickrarrow-up-right
    BlobCounterarrow-up-right
    API di creazione delle immagini AForgearrow-up-right
    mappatura della proiezionearrow-up-right
    realtร  aumentataarrow-up-right
    questo articoloarrow-up-right
    import sys
    import clr
    clr.AddReference('AForge.Imaging')
    from AForge.Imaging import *
    
    bc= BlobCounter()
    bc.ProcessImage(IN[0])
    OUT=bc
    OUT = []
    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)
    Logo

    Nodi Python

    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:

    hashtag
    Nodo Python

    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.

    hashtag
    Esercizio: Nodo personalizzato con script Python per la creazione di motivi da un modulo solido

    hashtag
    Parte I: Impostazione dello script Python

    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.

    !

    1. Rectangle.ByWidthLength: creare un rettangolo che sarร  la base del solido.

    2. Surface.ByPatch: collegare il rettangolo all'input "closedCurve" per creare la superficie inferiore.

    !

    1. 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.

    2. Polygon.Points: eseguire la query sul rettangolo traslato per estrarre i punti degli angoli.

    3. Geometry.Translate:

    Ora che sono presenti le superfici superiore e inferiore, creati i lati del solido tramite loft tra i due profili.

    !

    1. List.Create: collegare il rettangolo inferiore e il poligono superiore agli input dell'indice.

    2. Surface.ByLoft: eseguire il loft dei due profili per creare i lati del solido.

    3. 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.

    !

    1. 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.

    !

    1. Collegare l'output da Solid.ByJoinedSurfaces come primo input per il nodo Python e utilizzare un Code Block per definire gli altri input.

    2. Creare un nodo Topology.Edges e utilizzare l'output del nodo Python come input.

    3. 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.

    hashtag
    Parte II: Conversione del nodo dello script Python in nodo personalizzato

    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.

    !

    1. Input: modificare i nomi di input in modo che siano piรน descrittivi e aggiungere i tipi di dati e i valori di default.

    2. 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 = solids
    Logo
    utilizzare un blocco di codice per creare un elenco di quattro valori corrispondenti ai quattro punti, traslando un angolo del solido verso l'alto.
  • Polygon.ByPoints: utilizzare i punti traslati per ricreare il poligono superiore.

  • Surface.ByPatch: collegare il poligono per creare la superficie superiore.

  • Solid.ByJoinedSurfaces: unire le superfici per creare il modulo solido.

  • https://github.com/DynamoDS/DynamoPrimerNew/blob/master-ita/coding-in-dynamo/7_code-blocks-and-design-script/7-2_design-script-syntax.md
    DesignScript Guidearrow-up-right
    file-download
    36KB
    Python_Custom-Node.dyn
    arrow-up-right-from-squareOpen
    # 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 = solids
    Logo
    Logo

    Python e Civil 3D

    Sebbene 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:

    1. Scrivere DesignScript utilizzando un blocco di codice

    2. 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.

    circle-info

    Per ulteriori informazioni generali sull'utilizzo di Python in Dynamo, consultare la sezione .

    hashtag
    Documentazione sull'API

    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.

    circle-info

    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.

    hashtag
    Modello di codice

    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.

    1. Importa i moduli sys e clr, entrambi necessari per il corretto funzionamento dell'interprete Python. In particolare, il modulo clr consente di trattare gli spazi dei nomi .NET essenzialmente come pacchetti Python.

    2. Carica gli assiemi standard (ad esempio, DLL) per l'utilizzo delle API .NET gestite per AutoCAD e Civil 3D.

    circle-info

    Personalizzazione รˆ possibile modificare il modello Python di default modificando il file PythonTemplate.py che si trova in C:\ProgramData\Autodesk\C3D <versione>\Dynamo.

    hashtag
    Esempio

    Esaminiamo un esempio per dimostrare alcuni dei concetti essenziali della scrittura di script Python in Dynamo for Civil 3D.

    hashtag
    Scopo

    ๐ŸŽฏ Ottenere la geometria del contorno di tutti i drenaggi di un disegno.

    hashtag
    Set di dati

    Di seguito sono riportati alcuni file di esempio a cui รจ possibile fare riferimento per questo esercizio.

    hashtag
    Panoramica della soluzione

    Ecco una panoramica della logica di questo grafico.

    1. Rivedere la documentazione sull'API di Civil 3D

    2. Selezionare tutti i drenaggi nel documento in base al nome del layer

    3. Annullamento del wrapping degli oggetti di Dynamo per accedere ai membri interni dell'API di Civil 3D

    Procediamo!

    hashtag
    Revisione della documentazione sull'API

    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รน.

    hashtag
    Recupero di tutti i drenaggi

    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.

    hashtag
    Annullamento del wrapping di oggetti

    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.

    Tipo di Dynamo
    Wrapping
    circle-exclamation

    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.

    hashtag
    Script Python

    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.

    circle-info

    Fare clic sul testo sottolineato nello script per una spiegazione di ogni riga.

    circle-exclamation

    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.

    hashtag
    Creazione di PolyCurve

    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.

    hashtag
    Risultato

    Ed ecco la geometria finale di Dynamo.

    ๐ŸŽ‰ Missione compiuta!

    hashtag
    Confronto tra IronPython e CPython

    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.

    circle-info

    รˆ 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

    Python
    AutoCAD .NET API Developer's Guidearrow-up-right
    Manuale di riferimento dell'API di AutoCAD .NETarrow-up-right
    Civil 3D .NET API Developer's Guidearrow-up-right
    Civil 3D .NET API Reference Guidearrow-up-right
    file-download
    15KB
    Python_Catchments.dyn
    arrow-up-right-from-squareOpen
    file-download
    961KB
    Python_Catchments.dwg
    arrow-up-right-from-squareOpen
    proprietร  nella classe Catchmentarrow-up-right
    Libreria di nodi
    blog di Dynamoarrow-up-right
    Modello Python di default in Civil 3D
    Recupero di tutti i drenaggi nel documento in base al layer
    Il grafico finale
    Le PolyCurve di Dynamo risultanti per i contorni di drenaggio
    # 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 = output

    Elenchi di elenchi

    hashtag
    Elenchi di elenchi

    Si 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 Doriarrow-up-right.

    hashtag
    Query

    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%.

    hashtag
    Azione

    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.

    hashtag
    Esercizio

    hashtag
    Gerarchia dall'alto verso il basso

    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:

    !

    1. Con Code Block, sono stati definiti due intervalli: 0..2; 0..3;

    2. 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.

    hashtag
    List.Flatten

    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.

    !

    1. Inserire una riga di codice per definire un intervallo in Code Block: -250..-150..#4;

    2. 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.

    !

    1. 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.

    hashtag
    Suddivisione

    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.

    !

    hashtag
    List.Map

    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.

    !

    1. 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.

    2. Con due Integer Slider, definire i valori Nx e Ny collegandoli a Code Block.

    !

    1. Associare un nodo List.Count all'output del nodo Watch del passaggio precedente.

    2. 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.

    !

    1. Utilizzando un nodo List.Map, si scende di un livello nella gerarchia ed รจ possibile eseguire una "function" a questo livello.

    2. 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.

    hashtag
    List.Combine

    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.

    !

    1. Utilizzare il nodo Sequence per generare 10 valori, ciascuno con un incremento di 10 passi.

    2. Collegare il risultato all'input x di un nodo Point.ByCoordinates. In questo modo verrร  creato un elenco di punti in Dynamo.

    3. 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.

    !

    1. Aggiungere List.Combine all'area di lavoro e collegare i 2 gruppi di punti come il relativo input list0 e list1.

    2. 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.

    circle-info

    Fare riferimento all'esercizio in Elenchi n-dimensionali per vedere un altro esempio di utilizzo di List.Combine.

    hashtag
    List@Level

    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.

    1. 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.

    2. 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.

    !

    1. Per utilizzare la funzione List@Level, fare clic su '>'. Allโ€™interno di questo menu, verranno visualizzate due caselle di controllo.

    2. 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.

    !

    1. "@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.

    2. 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.

    3. 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:

    !

    1. 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.

    2. 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.

    hashtag
    Trasponi

    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.

    !

    1. Collegare un nodo PolyCurve.ByPoints all'output del nodo Watch da Point.ByCoordinates.

    2. 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.

    !

    1. 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.

    2. 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.

    hashtag
    Code Block per la creazione di elenchi

    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.

    !

    hashtag
    Query sul blocco 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.

    !

    hashtag
    Esercizio - Esecuzione di query e inserimento di dati

    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.

    !

    1. 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;.

    2. 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?

    !

    1. Per confermare che si tratta del punto corretto, รจ anche possibile fare clic sugli elementi del nodo Watch per confermare che รจ quello corretto.

    2. 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];.

    !

    1. 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.

    !

    1. Innanzitutto, si desidera sostituire l'elemento dell'elenco isolato in un passaggio precedente.

    2. 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.

    !

    1. Seguendo la stessa logica, utilizzare List.ReplaceItemAtIndex per sostituire l'elenco centrale con l'elenco modificato.

    2. 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.

    !

    1. Creare un nodo NurbsCurve.ByPoints e collegare la nuova struttura di dati per creare tre curve NURBS.

    !

    1. 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.

    Materiale dei penny? Zinco al 97,5% e rame al 2,5%.
    Mischiare le pile insieme.
    Notare che il nodo Watch fornisce 3 elenchi con 4 elementi in ogni elenco.
  • 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.

  • I risultati di List.Count ora forniscono un elenco di 5 elementi, ciascuno con un valore pari a 3. Rappresenta la lunghezza di ogni sottoelenco.
    all'area di lavoro, utilizzare lo stesso output
    Sequence
    dell'input x, ma utilizzare un
    Integer Slider
    come input y e impostarne il valore su 31 (puรฒ essere qualsiasi valore, purchรฉ non si sovrapponga al primo gruppo di punti) in modo che i 2 gruppi di punti non si sovrappongano l'uno sull'altro.
    I livelli di elenco sono organizzati in ordine inverso, in modo che i dati del livello piรน basso siano sempre in "L1". In questo modo si garantisce che i grafici funzionino come previsto, anche se qualcosa รจ cambiato a monte.
    Mantieni struttura elenco: se questa opzione รจ attivata, sarร  possibile mantenere la struttura dei livelli dell'input. Talvolta, รจ possibile organizzare i dati in sottoelenchi in modo specifico. Selezionando questa opzione, รจ possibile mantenere intatta l'organizzazione degli elenchi senza perdere alcuna informazione.
  • 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.

    Notare il risultato geometrico: utilizzando
    PolyCurve.ByPoints
    , si ottengono 3 PolyCurve nella direzione perpendicolare alle curve originali.

    Il nodo Watch mostra che รจ presente un elenco di tre elenchi, ciascuno con 5 elementi.

    Utilizzando Geometry.Translate, si sposterร  il punto selezionato verso l'alto nella direzione Z di 20 unitร .
    L'output mostra che รจ stato inserito il punto spostato nell'elemento centrale dell'elenco.
    Selezionando l'elenco in corrispondenza dell'index 1, viene visualizzata la struttura di dati evidenziata nell'anteprima di Dynamo. Il punto spostato รจ stato unito correttamente nella struttura di dati originale.
    file-download
    4KB
    Top-Down-Hierarchy.dyn
    arrow-up-right-from-squareOpen
    top-downarrow-up-right
    file-download
    4KB
    Flatten.dyn
    arrow-up-right-from-squareOpen
    Exercisearrow-up-right
    Exercisearrow-up-right
    file-download
    7KB
    Chop.dyn
    arrow-up-right-from-squareOpen
    Exercisearrow-up-right
    file-download
    6KB
    Map.dyn
    arrow-up-right-from-squareOpen
    List@Level
    Exercisearrow-up-right
    Exercisearrow-up-right
    List@Levelarrow-up-right
    Exercisearrow-up-right
    Exercisearrow-up-right
    file-download
    17KB
    Listatlevel.dyn
    arrow-up-right-from-squareOpen
    List@Levelarrow-up-right
    List@Levelarrow-up-right
    Code Block e DesignScript
    capitolo Code Block e DesignScript

    Indice dei nodi

    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.

    hashtag
    Display

    hashtag
    Colore

    hashtag
    Watch

    hashtag
    Input

    hashtag
    List

    hashtag
    Logica

    hashtag
    Matematica

    hashtag
    Stringa

    hashtag
    Geometria

    hashtag
    Cerchio

    hashtag
    Cuboide

    circle-exclamation

    **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.

    hashtag
    Curva

    hashtag
    Modificatori di geometria

    hashtag
    Linea

    hashtag
    NurbsCurve

    hashtag
    NurbsSurface

    hashtag
    Piano

    hashtag
    Punto

    hashtag
    PolyCurve

    hashtag
    Rettangolo

    hashtag
    Sphere

    hashtag
    Superficie

    hashtag
    UV

    hashtag
    Vector

    hashtag
    CoordinateSystem

    hashtag
    Operatori

    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.

    !

    !

    !

    !

    !

    !

    !