Dynamo
Primer for v2.0
Italiano
Italiano
  • Informazioni
  • Introduzione
    • Che cos'è Dynamo e come funziona?
    • Guida introduttiva, comunità e piattaforma di Dynamo
  • Installazione per Dynamo
  • Interfaccia utente
    • Area di lavoro
    • Libreria
  • Nodi e fili
  • Nodi e concetti essenziali
    • Indice dei nodi
    • Geometria per la progettazione computazionale
      • Panoramica sulla geometria
      • Vettore, piano e sistema di coordinate
      • Punti
      • Curve
      • Superfici
      • Solidi
      • Mesh
    • Elementi di base dei programmi
      • Dati
      • Matematica
      • Logica
      • Stringhe
      • Colore
    • Progettazione con elenchi
      • Che cos'è un elenco?
      • Utilizzo di elenchi
      • Elenchi di elenchi
      • Elenchi n-dimensionali
    • Dizionari in Dynamo
      • Che cos'è un dizionario?
      • Nodi Dictionary
      • Dizionari nei blocchi di codice
      • Casi di utilizzo di Revit
  • Pacchetti e nodi personalizzati
    • Nodi personalizzati
      • Introduzione ai nodi personalizzati
      • Creazione di un nodo personalizzato
      • Pubblicazione nella libreria
    • Pacchetti
      • Introduzione ai pacchetti
      • Case study di un pacchetto - Mesh Toolkit
      • Sviluppo di un pacchetto
      • Pubblicazione di un pacchetto
      • Importazione zero-touch
  • Dynamo per Revit
    • Correlazione con Revit
    • Selezione
    • Modifica
    • Creazione
    • Personalizzazione
    • Documentazione
  • Dynamo for Civil 3D
    • Connessione a Civil 3D
    • Per iniziare
    • Libreria di nodi
    • Esempi di workflow
      • Strade
        • Posizionamento di lampioni
      • Gestione catastale
        • Posizionamento dei servizi
      • Impianti di pubblica utilità
        • Ridenominazione di strutture
      • Ferrovia
        • Sagoma dello spazio libero
      • Rilievi
        • Gestione di gruppi di punti
    • Argomenti avanzati
      • Unione di oggetti
      • Python e Civil 3D
    • Dynamo Player
    • Pacchetti utili
    • Risorse
  • Dynamo in Forma Beta
    • Impostazione di Dynamo Player in Forma
    • Aggiunta e condivisione di grafici in Dynamo Player
    • Esecuzione di grafici in Dynamo Player
    • Differenze tra Dynamo compute service e Desktop Dynamo
  • Codifica in Dynamo
    • Blocchi di codice e DesignScript
      • Cos'è un blocco di codice?
      • Sintassi di DesignScript
      • Sintassi abbreviata
      • Funzioni
    • Geometria con DesignScript
      • Nozioni di base della geometria DesignScript
      • Primitive geometriche
      • Matematica vettoriale
      • Curve: punti interpolati e di controllo
      • Traslazione, rotazione e altre trasformazioni
      • Superfici: punti interpolati e di controllo, loft, rivoluzione
      • Parametrizzazione geometrica
      • Intersezione e taglio
      • Operazioni booleane geometriche
      • Generatori di punti di Python
    • Python
      • Nodi Python
      • Python e Revit
      • Impostazione del modello di Python personalizzato
    • Modifiche al linguaggio
  • Procedure ottimali
    • Strategie sui grafici
    • Strategie di scripting
    • Riferimento per lo scripting
    • Gestione del programma
    • Utilizzo efficiente di set di dati di grandi dimensioni in Dynamo
  • Esempi di workflow
    • Introduzione ai workflow
      • Vaso parametrico
      • Punti attrattore
    • Indice concettuale
  • Guida introduttiva per sviluppatori
    • Compilazione di Dynamo dalla sorgente
      • Compilazione di DynamoRevit dalla sorgente
      • Gestione e aggiornamento delle dipendenze in Dynamo
    • Sviluppo per Dynamo
      • Per iniziare
      • Case study zero-touch - Nodo griglia
      • Esecuzione di script Python in nodi zero-touch (C#)
      • Ulteriori informazioni sul concetto di zero-touch
      • Personalizzazione avanzata dei nodi di Dynamo
      • Utilizzo di tipi COM (interoperabilità) nei pacchetti di Dynamo
      • Case study NodeModel - Interfaccia utente personalizzata
      • Aggiornamento di pacchetti e librerie di Dynamo per Dynamo 2.x
      • Aggiornamento di pacchetti e librerie di Dynamo per Dynamo 3.x
      • Estensioni
      • Definizione dell'organizzazione di pacchetti personalizzati (Dynamo 2.0 e versioni successive)
      • Interfaccia della riga di comando di Dynamo
      • Integrazione per Dynamo
      • Sviluppo per Dynamo for Revit
      • Pubblicazione di un pacchetto
      • Creazione di un pacchetto da Visual Studio
      • Estensioni come pacchetti
    • Richieste pull
    • Aspettative di test
    • Esempi
  • Appendice
    • Domande frequenti
    • Programmazione visiva e Dynamo
    • Risorse
    • Note di rilascio
    • Pacchetti utili
    • File di esempio
    • Mappa di integrazione host
    • Download del file PDF
    • Tasti di scelta rapida di Dynamo
Powered by GitBook
On this page
  • Documentazione sull'API
  • Modello di codice
  • Esempio
  • Scopo
  • Set di dati
  • Panoramica della soluzione
  • Revisione della documentazione sull'API
  • Recupero di tutti i drenaggi
  • Annullamento del wrapping di oggetti
  • Script Python
  • Creazione di PolyCurve
  • Risultato
  • Confronto tra IronPython e CPython
Edit on GitHub
Export as PDF
  1. Dynamo for Civil 3D
  2. Argomenti avanzati

Python e Civil 3D

PreviousUnione di oggettiNextDynamo Player

Last updated 1 month ago

Sebbene Dynamo sia estremamente potente come strumento di , è 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.

Per ulteriori informazioni generali sull'utilizzo di Python in Dynamo, consultare la sezione Python.

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.

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.

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.

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

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

  5. Ottiene il documento e l'editor attivi.

  6. Blocca il documento e avvia una transazione di database.

  7. Questo è il punto in cui si dovrebbe inserire la maggior parte della logica dello script.

  8. Annullare i commenti di questa riga per eseguire il commit della transazione dopo il completamento del lavoro principale.

  9. Se si desidera eseguire l'output di eventuali dati dal nodo, assegnarli alla variabile OUT alla fine dello script.

Personalizzazione È possibile modificare il modello Python di default modificando il file PythonTemplate.py che si trova in C:\ProgramData\Autodesk\C3D <versione>\Dynamo.

Esempio

Esaminiamo un esempio per dimostrare alcuni dei concetti essenziali della scrittura di script Python in Dynamo for Civil 3D.

Scopo

Set di dati

Di seguito sono riportati alcuni file di esempio a cui è possibile fare riferimento per questo esercizio.

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

  4. Creare punti di Dynamo da punti di AutoCAD

  5. Crea PolyCurve dai punti

Procediamo!

Revisione della documentazione sull'API

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.

Annullamento del wrapping di oggetti

Prima di proseguire, occorre parlare brevemente di un concetto importante. Nella sezione Libreria di nodi, è 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

Object Autodesk.AutoCAD.DynamoNodes.Object

Entity Autodesk.AutoCAD.DatabaseServices.Entity

CivilObject Autodesk.Civil.DynamoNodes.CivilObject

Entity Autodesk.Civil.DatabaseServices.Entity

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.

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.

Fare clic sul testo sottolineato nello script per una spiegazione di ogni riga.

# 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')



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



# The inputs to this node will be stored as a list in the IN variables.
 = 

 


    


    
    
adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor

with adoc.LockDocument():
    with adoc.Database as db:
        
        with db.TransactionManager.StartTransaction() as t:
                          
                
                                
                
                    
                                        
                    
                    
                        
                        
                    
            
            # Commit before end transaction
            
            pass
            
# Assign your output to the OUT variable.

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.

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.

Risultato

Ed ecco la geometria finale di Dynamo.

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.

Ottenere la geometria del contorno di tutti i drenaggi di un disegno.

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

Missione compiuta!

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

🎯
🎉
proprietà nella classe Catchment
blog di Dynamo
programmazione visiva
AutoCAD .NET API Developer's Guide
Manuale di riferimento dell'API di AutoCAD .NET
Civil 3D .NET API Developer's Guide
Civil 3D .NET API Reference Guide
15KB
Python_Catchments.dyn
961KB
Python_Catchments.dwg
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