# Definizione dell'organizzazione di pacchetti personalizzati (Dynamo 2.0 e versioni successive)

La realizzazione del layout desiderato per il pacchetto dipende dai tipi di nodi che verranno inclusi nel pacchetto. I nodi derivati da NodeModel, i nodi ZeroTouch e i nodi personalizzati hanno tutti un processo leggermente diverso per la definizione della categorizzazione. È possibile combinare questi tipi di nodi all'interno dello stesso pacchetto, ma sarà necessaria una combinazione delle strategie descritte di seguito.

## NodeModel

Per default, le librerie NodeModel vengono organizzate in base alla struttura delle classi.

```c#
namespace SampleLibraryUI.Examples
```

```c#
// Class Attribute
[NodeName("MyNodeModel")]
public class MyNewNodeModel : NodeModel

// or

// Constructor
public ButtonCustomNodeModel()
{
    this.Name = "MyNodeModel";
}

```

Il nodo si troverà in Moduli aggiuntivi in:

```
SampleLibraryUI/Examples/MyNodeModel
```

È inoltre possibile eseguire l'override della categoria utilizzando l'attributo NodeCategory nella classe o nel costruttore come mostrato di seguito.

```c#
// Class Attribute
[NodeCategory("NewSampleLibraryUI.Examples")]

// or

// Constructor
public ButtonCustomNodeModel()
{
    this.Category = "NewSampleLibraryUI.Examples";
}
```

Il nodo si troverà ora in Moduli aggiuntivi in:

```
NewSampleLibraryUI/Examples/MyNodeModel
```

## ZeroTouch

Per default, anche le librerie ZeroTouch vengono organizzate in base alla struttura delle classi.

```c#
namespace MyZTLibrary
```

```c#
public class Utilities
{
    public double doubleValue(double num)
    {
        return num * 2;
    }
}
```

Il nodo si troverà in Moduli aggiuntivi in:

```
MyZTLibrary/Utilities/doubleValue
```

È inoltre possibile sostituire la posizione della struttura delle classi utilizzando un file XML di personalizzazione di Dynamo.

* Il file XML deve essere denominato di conseguenza ed essere incluso nella cartella `extra` del pacchetto.
  * `PackageName_DynamoCustomization.xml`

```xml
<?xml version="1.0"?>
<doc>
    <assembly>
        <name>MeshToolkit</name>
    </assembly>
    <namespaces>
        <!--Remap Namespaces-->
        <namespace name="Autodesk.Dynamo.MeshToolkit">
            <category>MeshToolkit</category>
        </namespace>
        <namespace name="Autodesk.Dynamo.MeshToolkit.Display">
                <category>Display</category>
        </namespace>
    </namespaces>
    <classes>
        <!--Remap Class Names-->
        <class name="Autodesk.Dynamo.MeshToolkit.Display.MeshDisplay" shortname="MeshDisplay"/>
        <class name="Autodesk.Dynamo.MeshToolkit.Mesh" shortname="Mesh"/>
    </classes>
</doc>

```

## CustomNodes

I nodi personalizzati vengono organizzati in base al parametro `Category Name` specificato durante la creazione dei nodi (utilizzando la nuova finestra di dialogo Nodo personalizzato).

**AVVISO**\
L'utilizzo della notazione con il punto nei nomi o nelle categorie dei nodi determinerà ulteriori sottocategorie nidificate. Il segno `.` fungerà da delimitatore per determinare la gerarchia aggiuntiva. Questo è un nuovo comportamento nella libreria per Dynamo 2.0.

Il nome della categoria può essere successivamente aggiornato nel file .dyf (XML o JSON)

```json
{
  "Uuid": "85066088-1616-40b1-96e1-c33e685c6948",
  "IsCustomNode": true,
  "Category": "MyCustomNodes.Utilities.Actions",
  "Description": "This is an example custom nodes.",
  "Name": "doubleValue",
  "ElementResolver": {
    "ResolutionMap": {}
  },...
```

```xml
<Workspace Version="1.3.0.0000" X="100" Y="100" zoom="1.0000000" Description="This is an example custom nodes." Category="MyCustomNodes.Utilities.Actions" Name="doubleValue" ID="85066088-1616-40b1-96e1-c33e685c6948">
```

## Strategie di migrazione dei nodi del pacchetto

Quando l'autore di un pacchetto decide di rinominare un nodo precedentemente esistente in una nuova release, dovrebbe fornire un mezzo per eseguire la migrazione dei grafici che contengono nodi con i vecchi nomi. Questa operazione può essere eseguita nei seguenti modi:

I nodi **ZeroTouch** utilizzano un file `Namespace.Migrations.XML` che si trova nella cartella `bin` dei pacchetti, ad esempio:

Da `MyZeroTouchLib.MyNodes.SayHello` a `MyZeroTouchLib.MyNodes.SayHelloRENAMED`

```xml
<?xml version="1.0"?>
<migrations>
  <priorNameHint>
    <oldName>MyZeroTouchLib.MyNodes.SayHello</oldName>
    <newName>MyZeroTouchLib.MyNodes.SayHelloRENAMED</newName>
  </priorNameHint>
</migrations>
```

**I nodi derivati da NodeModel** utilizzano l'attributo `AlsoKnownAs` nella classe, ad esempio:

Da `SampleLibraryUI.Examples.DropDownExample` a `SampleLibraryUI.Examples.DropDownExampleRENAMED`

```c#
namespace SampleLibraryUI.Examples
{
    [NodeName("Drop Down Example")]
    [NodeDescription("An example drop down node.")]
    [IsDesignScriptCompatible]
    [AlsoKnownAs("SampleLibraryUI.Examples.DropDownExample")]
    public class DropDownExampleRENAMED : DSDropDownBase
    {
        ...
    }
{
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/it/1_developer_primer_intro/3_developing_for_dynamo/9-defining-custom-package-organisation-dynamo2.0+.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
