Ulteriori informazioni sul concetto di zero-touch
Last updated
Last updated
Dopo aver capito come si crea un progetto zero-touch, possiamo approfondire le specifiche della creazione di un nodo, illustrando l'esempio ZeroTouchEssentials nella pagina di Dynamo su Github.
Molti dei nodi standard di Dynamo sono essenzialmente nodi zero-touch, come la maggior parte dei nodi Math, Color e DateTime riportati sopra.
Per iniziare, scaricare il progetto ZeroTouchEssentials da qui: https://github.com/DynamoDS/ZeroTouchEssentials.
In Visual Studio, aprire il file della soluzione ZeroTouchEssentials.sln
e creare la soluzione.
Il file
ZeroTouchEssentials.cs
contiene tutti i metodi che importeremo in Dynamo.
Aprire Dynamo e importare ZeroTouchEssentials.dll
per ottenere i nodi a cui faremo riferimento negli esempi seguenti.
Gli esempi di codice derivano da e in genere corrispondono a ZeroTouchEssentials.cs. La documentazione XML è stata rimossa per mantenerli concisi e ogni esempio di codice creerà il nodo nell'immagine che si trova sopra.
Dynamo supporta la definizione dei valori di default per le porte di input in un nodo. Questi valori di default verranno forniti al nodo se le porte non dispongono di connessioni. I valori di default vengono espressi utilizzando il meccanismo C# di definizione degli argomenti facoltativi nella Guida per programmatori C#. Le impostazioni di default vengono specificate nel seguente modo:
Impostare i parametri del metodo su un valore di default: inputNumber = 2.0
.
Il valore di default verrà mostrato quando si posiziona il cursore sulla porta di input del nodo.
La restituzione di più valori è un po' più complessa rispetto alla creazione di più input e dovrà essere eseguita utilizzando un dizionario. Le voci del dizionario diventano porte sul lato di output del nodo. Vengono create più porte restituite nel modo seguente:
Aggiungere using System.Collections.Generic;
per utilizzare Dictionary<>
.
Aggiungere using Autodesk.DesignScript.Runtime;
per utilizzare l'attributo MultiReturn
. Fa riferimento a "DynamoServices.dll" dal pacchetto NuGet di DynamoServices.
Aggiungere l'attributo [MultiReturn(new[] { "string1", "string2", ... more strings here })]
al metodo. Le stringhe fanno riferimento alle chiavi del dizionario e diventeranno i nomi delle porte di output.
Restituire Dictionary<>
dalla funzione con le chiavi che corrispondono ai nomi dei parametri nell'attributo: return new Dictionary<string, object>
.
Fare riferimento a questo esempio di codice in ZeroTouchEssentials.cs.
Un nodo che restituisce più output.
Notare che ora sono presenti due porte di output denominate in base alle stringhe immesse per le chiavi del dizionario.
È buona norma aggiungere ai nodi Dynamo una documentazione che descriva la funzione del nodo, gli input, gli output, i tag di ricerca, ecc. Questa operazione viene eseguita tramite i tag della documentazione XML. La documentazione XML viene creata nel modo seguente:
Qualsiasi testo di commento preceduto da tre barre è considerato documentazione.
Ad esempio: /// Documentation text and XML goes here
Dopo le tre barre, creare tag XML sopra i metodi che Dynamo leggerà durante l'importazione del file .dll.
Ad esempio: /// <summary>...</summary>
Attivare la documentazione XML in Visual Studio scegliendo Progetto > NomeProgetto > Properties > Compilazione
e selezionando File di documentazione XML
.
Visual Studio genererà un file XML nella posizione specificata.
I tipi di tag sono i seguenti:
/// <summary>...</summary>
è la documentazione principale per il nodo e comparirà come descrizione comando sul nodo nella barra laterale di ricerca sinistra.
/// <param name="inputName">...</param>
creerà la documentazione per parametri di input specifici.
/// <returns>...</returns>
creerà la documentazione per un parametro di output.
/// <returns name = "outputName">...</returns>
creerà la documentazione per più parametri di output.
/// <search>...</search>
abbinerà il nodo ai risultati della ricerca in base ad un elenco separato da virgole. Ad esempio, se si crea un nodo che suddivide una maglia, si possono aggiungere tag come "mesh", "subdivision" e "catmull-clark".
Di seguito è riportato un nodo di esempio con descrizioni di input e output, nonché una sintesi che verrà visualizzata nella libreria.
Fare riferimento a questo esempio di codice in ZeroTouchEssentials.cs.
Notare che il codice per questo nodo di esempio contiene:
Un riepilogo del nodo
Una descrizione dell'input
Descrizione di un output
Dynamo non dispone di una parola chiave new
, pertanto gli oggetti dovranno essere costruiti utilizzando metodi di costruzione statici. Gli oggetti vengono costruiti nel modo seguente:
Rendere interno il costruttore internal ZeroTouchEssentials()
, se non diversamente richiesto.
Costruire l'oggetto con un metodo statico, ad esempio public static ZeroTouchEssentials ByTwoDoubles(a, b)
.
Nota Dynamo utilizza il prefisso "By" per indicare che un metodo statico è un costruttore e, sebbene sia facoltativo, l'utilizzo di "By" aiuterà la libreria ad adattarsi meglio allo stile esistente di Dynamo.
Fare riferimento a questo esempio di codice in ZeroTouchEssentials.cs.
Dopo l'importazione del file dll ZeroTouchEssentials, nella libreria sarà presente un nodo ZeroTouchEssentials. Questo oggetto può essere creato utilizzando il nodo ByTwoDoubles
Le librerie di Dynamo possono utilizzare tipi di geometria di Dynamo nativi come input e creare nuova geometria come output. I tipi di geometria vengono creati nel seguente modo:
Fare riferimento al file ProtoGeometry.dll nel progetto includendo using Autodesk.DesignScript.Geometry;
nella parte superiore del file C# e aggiungendo il pacchetto NuGet ZeroTouchLibrary al progetto.
Importante Per gestire le risorse della geometria non restituite dalle funzioni, vedere la sezione Istruzioni Dispose/using riportata di seguito.
Nota Gli oggetti geometrici di Dynamo vengono utilizzati come qualsiasi altro oggetto trasferito alle funzioni.
Fare riferimento a questo esempio di codice in ZeroTouchEssentials.cs.
Un nodo che ottiene la lunghezza di una curva e la raddoppia.
Questo nodo accetta un tipo di geometria curve come input.
Le risorse della geometria che non vengono restituite dalle funzioni dovranno essere gestite manualmente, a meno che non si stia utilizzando Dynamo versione 2.5 o successiva. In Dynamo 2.5 e versioni successive, le risorse della geometria vengono gestite internamente dal sistema, tuttavia, potrebbe essere ancora necessario rimuovere la geometria manualmente se si dispone di un caso di utilizzo complesso o se è necessario ridurre la memoria in un determinato momento. Il motore di Dynamo gestirà eventuali risorse della geometria restituite da funzioni. Le risorse della geometria non restituite possono essere gestite manualmente nei seguenti modi:
Con un'istruzione using:
L'istruzione using è documentata qui.
Per ulteriori informazioni sulle nuove funzionalità di stabilità introdotte in Dynamo 2.5, vedere Dynamo Geometry Stability Improvements.
Con le chiamate manuali di Dispose:
Quando si pubblica una versione più recente di una libreria, i nomi dei nodi potrebbero cambiare. Le modifiche ai nomi possono essere specificate in un file Migrations in modo che i grafici creati con versioni precedenti di una libreria continuino a funzionare correttamente quando si esegue un aggiornamento. Le migrazioni vengono implementate nel seguente modo:
Creare un file .xml
nella stessa cartella di .dll
con il seguente formato: "BaseDLLName".Migrations.xml.
Nel file .xml
, creare un singolo elemento <migrations>...</migrations>
.
All'interno dell'elemento migrations, creare elementi <priorNameHint>...</priorNameHint>
per ogni modifica del nome.
Per ogni modifica del nome, fornire un elemento <oldName>...</oldName>
e <newName>...</newName>
.
Fare clic con il pulsante destro del mouse e selezionare
Aggiungi > Nuovo elemento
.Scegliere
File XML
.Per questo progetto, il nome del file Migrations è
ZeroTouchEssentials.Migrations.xml
.
Questo codice di esempio indica a Dynamo che qualsiasi nodo denominato GetClosestPoint
è ora denominato ClosestPointTo
.
Fare riferimento a questo esempio di codice in ProtoGeometry.Migrations.xml.
Zero-Touch attualmente non supporta l'uso di generics. Possono essere utilizzati, ma non nel codice che viene importato direttamente dove il tipo non è impostato. I metodi, le proprietà o le classi che sono generici e senza il tipo impostato non possono essere esposti.
Nell'esempio seguente, un nodo zero-touch di tipo T
non verrà importato. Se il resto della libreria viene importato in Dynamo, risulteranno mancante delle eccezioni del tipo.
L'utilizzo di un tipo generico con il tipo impostato in questo esempio verrà importato in Dynamo.