Další práce s funkcí Zero-Touch
Last updated
Last updated
Když nyní víme, jak vytvořit projekt Zero-Touch, můžeme se podrobněji seznámit se specifiky vytváření uzlu a projít si příklad ZeroTouchEssentials na Githubu aplikace Dynamo.
Mnoho standardních uzlů aplikace Dynamo jsou v podstatě uzly Zero-Touch, například většina výše uvedených uzlů Math, Color a DateTime.
Nejprve si stáhněte projekt ZeroTouchEssentials z tohoto umístění: https://github.com/DynamoDS/ZeroTouchEssentials
V aplikaci Visual Studio otevřete soubor řešení ZeroTouchEssentials.sln
a sestavte řešení.
Soubor
ZeroTouchEssentials.cs
obsahuje všechny metody, které budeme importovat do aplikace Dynamo.
Otevřete aplikaci Dynamo a importujte knihovnu ZeroTouchEssentials.dll
, abyste získali uzly, na které budeme odkazovat v následujících příkladech.
Příklady kódu jsou získány ze souboru ZeroTouchEssentials.cs a obecně se s ním shodují. Dokumentace XML byla odstraněna, aby byl projekt stručnější, a každý příklad kódu vytvoří uzel na obrázku nad ním.
Aplikace Dynamo podporuje definici výchozích hodnot vstupních portů v uzlu. Tyto výchozí hodnoty budou do uzlu zadány, pokud porty nemají žádná připojení. Výchozí hodnoty jsou vyjádřeny pomocí mechanismu jazyka C# pro zadávání volitelných argumentů popsaném v Příručce programování v jazyce C#. Výchozí hodnoty jsou určeny následujícím způsobem:
Nastavte parametry metody na výchozí hodnotu: inputNumber = 2.0
Výchozí hodnota se zobrazí, když umístíte kurzor nad vstupní port uzlu.
Vracení více hodnot je o něco složitější než vytváření více vstupů a je třeba je vracet pomocí slovníku. Položky slovníku se stanou porty na výstupní straně uzlu. Porty vracející více hodnot se vytvářejí následujícím způsobem:
Přidejte using System.Collections.Generic;
pro použití položky Dictionary<>
.
Přidejte using Autodesk.DesignScript.Runtime;
pro použití atributu MultiReturn
. Tento kód odkazuje na knihovnu DynamoServices.dll z balíčku DynamoServices NuGet.
Přidejte do metody atribut [MultiReturn(new[] { "string1", "string2", ... more strings here })]
. Řetězce odkazují na klíče ve slovníku a stanou se názvy výstupních portů.
Vraťte Dictionary<>
z funkce s klíči, které odpovídají názvům parametrů v atributu: return new Dictionary<string, object>
Podívejte se na tento příklad kódu v souboru ZeroTouchEssentials.cs.
Uzel, který vrací více výstupů.
Všimněte si, že nyní existují dva výstupní porty pojmenované podle řetězců, které jsme zadali pro klíče slovníku.
Osvědčeným postupem je přidat k uzlům aplikace Dynamo dokumentaci, která popisuje funkci uzlu, vstupy, výstupy, vyhledávací štítky atd. To se provádí pomocí štítků dokumentace XML. Dokumentace XML je vytvořena následujícím způsobem:
Za dokumentaci se považuje jakýkoli text komentáře, kterému předcházejí tři lomítka.
Například: /// Documentation text and XML goes here
Za třemi lomítky vytvořte nad metodami štítky XML, které aplikace Dynamo přečte při importu knihovny DLL.
Například: /// <summary>...</summary>
Povolte dokumentaci XML v aplikaci Visual Studio výběrem možnosti Project > Project Properties > Build
a zaškrtnutím políčka XML documentation file
.
Aplikace Visual Studio vygeneruje soubor XML v zadaném umístění.
Typy štítků jsou následující:
/// <summary>...</summary>
je hlavní dokumentace pro uzel a zobrazí se jako popisek nad uzlem v levém postranním panelu vyhledávání.
/// <param name="inputName">...</param>
vytvoří dokumentaci pro specifické vstupní parametry.
/// <returns>...</returns>
vytvoří dokumentaci pro výstupní parametr.
/// <returns name = "outputName">...</returns>
vytvoří dokumentaci pro více výstupních parametrů.
/// <search>...</search>
porovná uzel s výsledky hledání na základě seznamu odděleného čárkou. Pokud například vytvoříme uzel, který rozdělí síť, může být vhodné přidat štítky jako „sít“, „dělení“ a „catmull-clark“.
Níže je uveden příklad uzlu s popisem vstupu a výstupu a také souhrnem, který se zobrazí v knihovně.
Podívejte se na tento příklad kódu v souboru ZeroTouchEssentials.cs.
Všimněte si, že kód pro tento vzorový uzel obsahuje:
Souhrn uzlu
Popis vstupu
Popis výstupu
Aplikace Dynamo nemá klíčové slovo new
, takže objekty bude nutné konstruovat pomocí statických konstrukčních metod. Objekty jsou konstruovány následujícím způsobem:
Změňte konstruktor na vnitřní internal ZeroTouchEssentials()
, pokud není vyžadováno jinak.
Konstruujte objekt pomocí statické metody, například public static ZeroTouchEssentials ByTwoDoubles(a, b)
.
Poznámka: Aplikace Dynamo používá předponu „By“ pro označení statické metody jako konstruktoru, a i když je to volitelné, použití předpony „By“ pomůže vaší knihovně lépe se přizpůsobit existujícímu stylu aplikace Dynamo.
Podívejte se na tento příklad kódu v souboru ZeroTouchEssentials.cs.
Po importu knihovny dll ZeroTouchEssentials bude v knihovně uzel ZeroTouchEssentials. Tento objekt lze vytvořit pomocí uzlu ByTwoDoubles
.
Knihovny aplikace Dynamo mohou jako vstupy použít nativní typy geometrie aplikace Dynamo a jako výstupy vytvořit novou geometrii. Typy geometrie se vytvářejí následujícím způsobem:
Odkaz na knihovnu ProtoGeometry.dll v projektu vložte pomocíusing Autodesk.DesignScript.Geometry;
na začátek souboru C# a přidáním balíčku ZeroTouchLibrary NuGet do projektu.
Důležité: Spravujte zdroje geometrie, které nejsou vráceny z funkcí. Další informace naleznete v části Příkazy dispose/using níže.
Poznámka: Objekty geometrie aplikace Dynamo jsou používány jako jakékoli jiné objekty předávané funkcím.
Podívejte se na tento příklad kódu v souboru ZeroTouchEssentials.cs.
Uzel, který získá délku křivky a zdvojnásobí ji.
Tento uzel přijímá jako vstup typ geometrie Křivka.
Zdroje geometrie, které nejsou vráceny z funkcí, bude nutné spravovat ručně, pokud nepoužíváte aplikaci Dynamo verze 2.5 nebo novější. V aplikaci Dynamo 2.5 a novějších verzích jsou zdroje geometrie interně zpracovány systémem, ale i přesto může být nutné odstranit geometrii ručně, pokud máte složitý případ použití nebo potřebujete omezit paměť v pevně dané době. Modul aplikace Dynamo zpracuje všechny zdroje geometrie, které jsou vráceny z funkcí. Zdroje geometrie, které nejsou vráceny, lze zpracovat ručně následujícími způsoby:
Pomocí příkazu using:
Příkaz using je zdokumentován zde.
Další informace o nových funkcích stability v aplikaci Dynamo 2.5 naleznete v části Vylepšení stability geometrie aplikace Dynamo.
Pomocí ručního volání příkazu Dispose:
Při publikování novější verze knihovny se mohou změnit názvy uzlů. Změny názvů lze zadat v souboru migrace, aby grafy vytvořené na základě předchozích verzí knihovny správně fungovaly i po aktualizaci. Migrace jsou implementovány následujícím způsobem:
Vytvořte soubor .xml
ve stejné složce jako soubor .dll
v následujícím formátu: „BaseDLLName“.Migrations.xml.
V souboru .xml
vytvořte jeden prvek <migrations>...</migrations>
.
V prvku migrace vytvořte prvky <priorNameHint>...</priorNameHint>
pro každou změnu názvu.
Pro každou změnu názvu zadejte prvek <oldName>...</oldName>
a <newName>...</newName>
.
Klikněte pravým tlačítkem myši a vyberte příkaz
Add > New Item
.Zvolte
XML File
.Pro tento projekt bychom soubor migrace pojmenovali
ZeroTouchEssentials.Migrations.xml
.
Tento vzorový kód sděluje aplikaci Dynamo, že každý uzel s názvem GetClosestPoint
má nyní název ClosestPointTo
.
Podívejte se na tento příklad kódu v souboru ProtoGeometry.Migrations.xml.
Funkce Zero-Touch v současné době nepodporuje použití generických typů. Lze je použít, ale ne v kódu, který je přímo importován tam, kde tento typ není nastaven. Metody, vlastnosti nebo třídy, které jsou obecné a nemají sadu typů, nelze zpřístupnit.
V níže uvedeném příkladu nebude importován uzel Zero-Touch typu T
. Pokud bude zbytek knihovny importován do aplikace Dynamo, budou existovat výjimky chybějících typů.
Použití obecného typu s typem nastaveným v tomto příkladu bude importováno do aplikace Dynamo.