Vlastní uzly vznikají tak, že se do nich zahrnou ostatní uzly (i další vlastní uzly), proto o nich lze přemýšlet jako o kontejnerech. Pokud tento kontejnerový uzel v grafu spustíte, spustí se všechny uzly v něm – pomocí vlastních uzlů tak můžete opakovaně používat a sdílet užitečné posloupnosti uzlů.
Pokud v grafu existuje více kopií vlastního uzlu, po úpravě základního vlastního uzlu se všechny tyto kopie aktualizují. Díky tomu můžete graf snadno aktualizovat a přizpůsobit jej změnám v pracovním postupu nebo návrhu.
Velmi užitečnou funkcí vlastních uzlů je snadné sdílení práce. Pokud zručný uživatel vytvoří složitý graf aplikace Dynamo a předá jej konstruktérovi, který je v aplikaci Dynamo nový, může tento graf zjednodušit do základní podoby. Vlastní uzel je možné otevřít a upravit jeho vnitřní graf, může však vypadat i jako jednoduchý „kontejner“. Pomocí vlastních uzlů mohou uživatelé aplikace Dynamo uchovat svůj graf v přehledné a intuitivní podobě.
Vlastní uzly je možné v aplikaci Dynamo vytvářet mnoha způsoby. V příkladech této kapitoly vytvoříme vlastní uzly přímo v uživatelském rozhraní aplikace Dynamo. Pokud jste programátor a zajímá vás formátování C# nebo Zero-Touch, naleznete podrobnější informace na této stránce na Wiki aplikace Dynamo.
V této části přejdeme do prostředí vlastního uzlu a vytvoříme jednoduchý uzel pro výpočet procent. Prostředí vlastního uzlu se od prostředí grafu aplikace Dynamo liší, ale práce v něm je prakticky stejná. Pojďme tedy vytvořit první vlastní uzel.
Chcete-li vytvořit nový vlastní uzel, spusťte aplikaci Dynamo a vyberte možnost Vlastní uzel, případně na pracovní ploše stiskněte kombinaci kláves Ctrl+Shift+N.
V dialogu Vlastnosti vlastního uzlu zadejte název, popis a kategorii.
Název: Procento
Popis: Vypočítá procentuální podíl jedné hodnoty vůči druhé hodnotě.
Kategorie: Math.Functions
Tím se otevře pracovní plocha se žlutým pozadím, která naznačuje, že pracujete ve vlastním uzlu. Na této pracovní ploše máte přístup ke všem základním uzlům aplikace Dynamo a také k uzlům v kategoriích Input a Output, které slouží k nastavení vstupu a výstupu dat u vlastních uzlů. Lze je najít v nabídce Input > Basic.
Vstupy: Vstupní uzly na vlastních uzlech vytvářejí vstupní porty. Syntaxe pro vstupní port je název_vstupu : datovýtyp = výchozí_hodnota(volitelná).
Výstupy: Podobně jako u vstupních uzlů, tyto vstupy na vlastních uzlech vytvářejí výstupní porty. Ke vstupním a výstupním portům je možné přidat vlastní komentář s informacemi o vstupech a výstupech. Vlastní komentáře jsou podrobněji popsány podrobněji v části Tvorba vlastních uzlů.
Tento vlastní uzel je možné uložit jako soubor .dyf (a nikoliv standardní .dyn). To způsobí, že bude automaticky přidán do relace a všech budoucích relací. Vlastní uzel najdete ve své knihovně v části Doplňky.
Nyní, když jsme vytvořili první vlastní uzel, se v dalších částech podrobněji podíváme na funkce vlastních uzlů a na to, jak publikovat obecné pracovní postupy. V další části vyvineme vlastní uzel, který přenese geometrii z jedné plochy na druhou.
Aplikace Dynamo nabízí širokou škálu hlavních uzlů pro úlohy vizuálního programování. Někdy však může být rychlejší a elegantnější vytvořit si uzly vlastní. Tyto uzly pak můžete používat v různých projektech, vytvářet díky nim přehlednější grafy, odesílat je do nástroje Package Manager a sdílet je s komunitou aplikace Dynamo.
Vytvořili jsme vlastní uzel a použili jej na proces v grafu aplikace Dynamo. Nyní tento uzel chceme zachovat v knihovně aplikace Dynamo pro později použití v dalších grafech. Z tohoto důvodu provedeme místní publikování uzlu. Tento postup je podobný jako publikování balíčku, další informace budou uvedeny v další kapitole.
Po místním publikování uzlu bude uzel dostupný v knihovně aplikace Dynamo po otevřené nové relace. Pokud by uzel publikován nebyl, graf aplikace Dynamo odkazující na vlastní uzel by musel tento uzel obsahovat ve své složce (další možností je uzel importovat do aplikace Dynamo pomocí možnosti Soubor > Importovat knihovnu).
Vlastní uzly a balíčky z aplikace Dynamo Sandbox ve verzi 2.17 a novějších můžete publikovat, pokud nemají žádné závislosti na hostitelském rozhraní API. Ve starších verzích je publikování vlastních uzlů a balíčků povoleno pouze v aplikacích Dynamo for Revit a Dynamo for Civil 3D.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V této části budeme pokračovat v práci s vlastním uzlem vytvořeným dříve. Po otevření vlastního uzlu PointsToSurface se graf zobrazí v Editoru uživatelských uzlů aplikace Dynamo. Vlastní uzel je možné otevřít také dvojitým kliknutím v Editoru grafu aplikace Dynamo.
Chcete-li provést místní publikování vlastního uzlu, klikněte pravým tlačítkem myši na pracovní plochu a vyberte možnost Publikovat tento vlastní uzel.
Vyplňte informace podle obrázku výše a klikněte na tlačítko Publikovat místně. Všimněte si, že pole Skupina určuje místo v nabídce aplikace Dynamo, kde bude uzel dostupný.
Vyberte složku, ve které se budou nacházet všechny místně publikované vlastní uzly. Aplikace Dynamo bude tuto složku kontrolovat při každém spuštění, proto by se mělo jednat o trvalé umístění. Přejděte do této složky a klikněte na tlačítko Vybrat složku. Uzel aplikace Dynamo je nyní místně publikován a bude k dispozici v knihovně aplikace Dynamo po každém spuštění aplikace.
Chcete-li zjistit umístění složky vlastních uzlů, klikněte na nabídku Dynamo > Předvolby > Nastavení balíčku > Cesty uzlů a balíčků.
V tomto okně se zobrazí seznam cest.
Dokumenty\DynamoCustomNodes... odkazuje na umístění místně publikovaných vlastních uzlů.
AppData\Roaming\Dynamo... odkazuje na výchozí umístění balíčků aplikace Dynamo nainstalovaných online.
Cestu k vaší místní složce můžete v seznamu přesunout dolů (výběrem cesty ke složce a kliknutím na šipku dolů). Složka uvedená nejvýše se používá jako výchozí složka pro instalace balíčků. Pokud jako výchozí složku nastavíte výchozí cestu pro instalaci balíčků aplikace Dynamo, online balíčky budou odděleny od místně publikovaných uzlů.
Změnili jsme pořadí cest, aby se pro instalaci balíčků použila výchozí cesta aplikace Dynamo.
Pokud přejdete do této místní složky, ve složce „.dyf“ (což je přípona pro soubor vlastního uzlu aplikace Dynamo) naleznete původní vlastní uzel. Po úpravě souborů v této složce se uzly aktualizují v uživatelském rozhraní. Do složky DynamoCustomNode je možné přidat další uzly a aplikace Dynamo je přidá do knihovny po restartování.
Aplikace Dynamo se nyní pokaždé načte s uzlem PointsToSurface ve skupině DynamoPrimer v knihovně.
Aplikace Dynamo nabízí několik různých metod vytváření vlastních uzlů. Vlastní uzly můžete vytvořit zcela od začátku, z existujícího grafu nebo explicitně v jazyce C#. V této části se budeme zabývat vytvořením vlastního uzlu v uživatelském rozhraní aplikace Dynamo z existujícího grafu. Tato metoda je ideální k začištění pracovního prostoru a zabalení sekvence uzlů k opakovanému použití na jiném místě.
Na obrázku níže namapujeme bod z jednoho povrchu na jiný pomocí souřadnic UV. Pomocí tohoto konceptu vytvoříme panelizovaný povrch, který odkazuje na křivky v rovině XY. Zde vytvoříme čtyřhranné panely pro naši panelizaci, ale pomocí stejné logiky můžeme vytvořit širokou řadu panelů s mapováním UV. Jedná se o skvělou příležitost k vývoji vlastního uzlu, protože v tomto grafu nebo v jiných pracovních postupech aplikace Dynamo budeme moci snadněji opakovat podobný proces.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Začneme vytvořením grafu, který chceme vnořit do vlastního uzlu. V tomto příkladu vytvoříme graf, který mapuje polygony ze základního povrchu na cílový povrch pomocí souřadnic UV. Tento proces mapování UV často používáme, proto je vhodným kandidátem pro vlastní uzel. Další informace o površích a prostoru UV naleznete na stránce Povrch. Úplný graf je UVmapping_Custom-Node.dyn ze souboru ZIP staženého výše.
Code Block: Pomocí tohoto řádku vytvořte rozsah 10 čísel v rozmezí -45 až 45:
45..45..#10;
.Point.ByCoordinates: Připojte výstup uzlu Code Block ke vstupům „x“ a „y“ a nastavte vázání na kartézský součin. Nyní byste měli mít osnovu bodů.
Plane.ByOriginNormal: Spojením výstupu Point se vstupem origin vytvořte rovinu v každém z bodů. Bude použit výchozí normálový vektor (0,0,1).
Rectangle.ByWidthLength: Spojte roviny z předchozího kroku do vstupu plane a pomocí uzlu Code Block s hodnotou 10 určete šířku a délku.
Nyní byste měli vidět osnovu obdélníků. Tyto obdélníky namapujeme na cílový povrch pomocí souřadnic UV.
Polygon.Points: Spojením výstupu uzlu Rectangle.ByWidthLength z předchozího kroku se vstupem polygon extrahujte rohové body každého obdélníku. Jedná se o body, které namapujeme na cílový povrch.
Rectangle.ByWidthLength: Pomocí uzlu Code Block s hodnotou 100 určete šířku a délku obdélníku. Toto bude hranice našeho základního povrchu.
Surface.ByPatch: Připojte uzel Rectangle.ByWidthLength z předchozího kroku ke vstupu closedCurve a vytvořte tak základní povrch.
Surface.UVParameterAtPoint: Připojte výstup Point uzlu Polygon.Points a výstup Surface uzlu Surface.ByPatch k vrácení parametru UV v každém bodu.
Nyní, když máme základní povrch a sadu souřadnic UV, můžete importovat cílový povrch a mapovat body mezi povrchy.
File Path: Vyberte cestu k souboru povrchu, který chcete importovat. Typ souboru by měl být .SAT. Klikněte na tlačítko Procházet a přejděte k souboru UVmapping_srf.sat ze souboru .zip staženého výše.
Geometry.ImportFromSAT: Připojte cestu k souboru a importujte povrch. Importovaný povrch uvidíte v náhledu geometrie.
UV: Připojte výstup parametru UV k uzlu UV.U a UV.V.
Surface.PointAtParameter: Připojte importovaný povrch a také souřadnice U a V. Nyní byste měli na cílovém povrchu vidět rastr 3D bodů.
Posledním krokem je použití 3D bodů k vytvoření pravoúhlých záplat povrchů.
PolyCurve.ByPoints: Spojením bodů na povrchu se vytvoří objekt polycurve procházející body.
Boolean: Do pracovního prostoru přidejte uzel Boolean, připojte jej ke vstupu connectLastToFirst a přepnutím na hodnotu True uzavřete objekt polycurve. Nyní byste měli vidět obdélníky namapované na povrch.
Surface.ByPatch: Propojte objekty polycurve se vstupem closedCurve a vytvořte tak záplaty povrchů.
Nyní vybereme uzly, které chceme vnořit do vlastního uzlu, a zvážíme, co chceme použít jako vstupy a výstupy našeho uzlu. Chceme, aby byl vlastní uzel co nejflexibilnější, a proto by měl být schopen mapovat libovolné polygony, nikoli pouze obdélníky.
Vyberte následující uzly (počínaje uzlem Polygon.Points), klikněte pravým tlačítkem na pracovní prostor a vyberte možnost Vytvořit vlastní uzel.
V dialogu Vlastnosti vlastního uzlu přiřaďte k vlastnímu uzlu název, popis a kategorii.
Název: MapPolygonsToSurface
Popis: Mapuje polygony ze základního na cílový povrch.
Kategorie doplňků: Geometry.Curve
Vlastní uzel výrazně začistil pracovní prostor. Vstupy a výstupy byly pojmenovány na základě původních uzlů. Upravte vlastní uzel, aby byly názvy popisnější.
Dvakrát klikněte na vlastní uzel, který chcete upravit. Tím se otevře pracovní prostor se žlutým pozadím, které představuje vnitřek uzlu.
Vstupy: Změňte názvy vstupů na baseSurface a targetSurface.
Výstupy: Přidejte další výstup pro mapované polygony.
Uložte vlastní uzel a vraťte se do domovského pracovního prostoru. Všimněte si, že uzel MapPolygonsToSurface odráží změny, které jsme právě provedli.
Robustnost vlastního uzlu lze také zvýšit přidáním vlastních komentářů. Komentáře mohou pomoci u typů vstupů a výstupů nebo vysvětlovat funkci uzlu. Komentáře se zobrazí, když uživatel umístí kurzor nad vstup, nebo výstup vlastního uzlu.
Dvakrát klikněte na vlastní uzel, který chcete upravit. Tím se znovu otevře pracovní prostor se žlutým pozadím.
Začněte upravovat vstupní kód bloku. Chcete-li vytvořit komentář, zadejte výraz "//" následovaný textem komentáře. Zadejte vše, co může pomoci objasnit uzel – zde budeme popisovat položku targetSurface.
Také nastavíme výchozí hodnotu inputSurface nastavením typu vstupu rovnajícího se hodnotě. Zde nastavíme výchozí hodnotu na původní nastavení Surface.ByPatch.
Komentáře lze použít také na výstupy.
Začněte upravovat text ve výstupním bloku kódu. Zadejte „//“ a za ním text komentáře. Zde vyjasníme výstupy Polygons a surfacePatches přidáním podrobnějšího popisu.
Přesunutím kurzoru nad vstupy vlastního uzlu zobrazíte komentáře.
S výchozí hodnotou nastavenou pro položku inputSurface můžeme také spustit definici bez zadání povrchu.