Blok kódu je jedinečná funkce aplikace Dynamo, která dynamicky propojuje prostředí vizuálního programování s textovým. Blok kódu má přístup ke všem uzlům aplikace Dynamo a umožňuje definovat celý graf v jediném uzlu. Doporučujeme této kapitole věnovat zvýšenou pozornost, protože blok kódu je základním stavebním kamenem aplikace Dynamo.
Bloky kódu umožňují pracovat v jazyce DesignScript, což je programovací jazyk používaný v aplikaci Dynamo. Jazyk DesignScript je čitelný a stručný jazyk, který nabízí okamžitou zpětnou vazbu k malým úsekům kódu, ale je v něm možné vytvářet také velké a složité programy. DesignScript také tvoří základ systému, který aplikace Dynamo používá „pod pokličkou“. Protože většina funkcí uzlů aplikace Dynamo je s tímto skriptovacím jazykem v rovnocenném vztahu, znamená to, že se lze plynule přesunout od uzlů ke skriptování.
Pro začátečníky lze uzly převést automaticky na text, což jim usnadní proces učení jazyka DesignScript, případně tím lze zpřehlednit velké části grafu. K tomu slouží proces „Uzel na kód“, který je podrobněji popsán v části Syntaxe jazyka DesignScript. Pokročilejší uživatelé si mohou pomocí bloků kódu přizpůsobovat existující funkce a vytvářet standardní programátorské konstrukce. Pro všechny uživatele nezávisle na zkušenostech je k dispozici velké množství útržků s kódem, které jim pomohou při práci na návrzích. Ačkoliv výraz „blok kódu“ může být pro neprogramátory poněkud zastrašující, ve skutečnosti se jedná o snadno použitelnou funkci. Začátečník dokáže používat blok kódu efektivně i s minimem programování, zatímco pokročilý uživatel může vytvořit skriptované definice, které bude možné vyvolat na jiném místě definice aplikace Dynamo.
Stručně řečeno, bloky kódu představují rozhraní pro textové skriptování v rámci prostředí vizuálního programování. Lze je používat jako čísla, řetězce, vzorce a další datové typy. Blok kódu je navržen přímo pro aplikaci Dynamo – uživatel může v bloku kódu definovat proměnné a ty budou následně automaticky přidány k uzlu jako vstupy:
Bloky kódu umožňují uživatelům flexibilně určit, které vstupy bude uzel obsahovat. Zde je několik způsobů, jak vytvořit základní bod se souřadnicemi (10, 5, 0):
Jakmile se seznámíte s pokročilejšími funkcemi v knihovně, zjistíte, že ruční zadání textu „Point.ByCoordinates“ je rychlejší, než hledání správného uzlu v knihovně. Pokud například zadáte Point., aplikace Dynamo zobrazí seznam možných funkcí, které lze použít pro výraz Point. Díky tomu je skriptování intuitivnější a usnadní vám používání funkcí v aplikaci Dynamo.
Blok kódu se nachází v části Core>Input>Actions>Code Block. Stačí však dvakrát kliknout na pracovní plochu a blok kódu se ihned zobrazí. Tento uzel se používá tak často, že jej lze vytvořit i dvojím kliknutím.
Bloky kódu umožňují flexibilní práci s datovými typy. Uživatel může rychle definovat čísla, řetězce a vzorce a blok kódu nastaví požadovaný výstup.
Na obrázku níže vidíte starý způsob práce, který je poněkud zdlouhavý: uživatel musí vyhledat požadovaný uzel v rozhraní, přidat uzel na pracovní plochu a poté zadat data. S blokem kódu uživateli stačí, když dvakrát klikne na pracovní plochu, čímž vytvoří uzel, a poté zadá požadovaná data splňující základní syntaxi.
Uzly number, string a formula představují příklady uzlů aplikace Dynamo, které jsou v porovnání s blokem kódu poněkud zastaralé.
„Stará škola“
Bloky kódu
Možná jste si všimli běžného tématu v názvech uzlů v aplikaci Dynamo: každý uzel používá syntaxi se znakem "." bez mezer. Je tomu tak proto, že text v horní části každého uzlu představuje skutečnou syntaxi pro skriptování a "." (neboli tečková notace) odděluje prvek od možných metod, které je možné volat. Toto umožňuje snadný přesun od vizuálního skriptování k textovému.
Jak v rámci obecné analogie tečkové notace postupovat u parametrického jablka v aplikaci Dynamo? Níže je uvedeno několik metod, které použijeme na jablko než se rozhodneme, zda je sníst. (Poznámka: Nejedná se o skutečné metody aplikace Dynamo):
Čitelné pro člověka | Tečková notace | Výstup |
---|
Nevím, jak ty, ale soudě podle výstupů v tabulce výše, to vypadá, že jablko je chutné. Myslím, že provedu operaci Jablko.snist().
S ohledem na analogii jablka se podívejte na uzel Point.ByCoordinates a určete, jak můžeme vytvořit bod pomocí bloku kódu.
Syntaxe bloku kódu Point.ByCoordinates(0,10);
předává stejný výsledek jako uzel Point.ByCoordinates v aplikaci Dynamo, s výjimkou toho, že je možné vytvořit bod pomocí jednoho uzlu. Je to mnohem efektivnější než připojení dvou samostatných uzlů k hodnotám „X“ a „Y“.
Pokud použijete uzel Point.ByCoordinates v bloku kódu, určíte vstupy ve stejném pořadí jako uzel ve výchozím natavení (X,Y).
Jakýkoliv běžný uzel v knihovně je možné volat prostřednictvím bloku kódu, pokud uzel není speciálním „uzlem uživatelského rozhraní“: uzly se speciální funkcí uživatelského rozhraní. Můžete například volat uzel Circle.ByCenterPointRadius, ale nemělo by smysl volat uzel Watch 3D.
Běžné uzly (většina knihovny) jsou obvykle tří typů. Můžete vidět, že knihovna je organizována s ohledem na tyto kategorie. Metody nebo uzly těchto tří typů jsou při volání v bloku kódu zpracovávány odlišně.
Tvorba – něco se vytvoří (nebo zkonstruuje).
Akce – provede u položky nějakou akci.
Dotaz – získá vlastnost položky, která již existuje.
Kategorie „Tvorba“ vytvoří geometrii od začátku. V bloku kódu se zadají vstupní hodnoty zleva doprava. Tyto vstupy jsou ve stejném pořadí jako vstupy uzlu shora dolů.
Pokud použijete uzel Line.ByStartPointEndPoint a porovnáte výsledek s odpovídající syntaxí v bloku kódu, zjistíte, že výsledky jsou stejné.
Akce je něco, co se provede u objektu daného typu. Aplikace Dynamo používá k provedení akce u určité položky tečkovou notaci, která je běžná v mnoha jazycích kódů. Jakmile zadáte název položky, zadejte tečku a poté název akce. Vstup metody typu Akce je umístěn v závorkách stejně jako u metody typu Tvorba, jen není třeba určovat první vstup, který uvidíte na odpovídajícím uzlu. Místo toho určíte, u kterého prvku se akce provede:
Uzel Point.Add je uzel typu Akce, takže syntaxe funguje trochu jinak.
Vstupy jsou (1) bod a (2) vektor, které se mají přidat. V bloku kódu jsme bod (položku) pojmenovali výrazem „pt“. Chcete-li přidat vektor s názvem *„vec *k bodu „pt“, zadejte výraz pt.Add(vec) neboli položka, tečka, akce. Akce Add má pouze jeden vstup nebo všechny vstupy z uzlu **Point.Add **kromě prvního. První vstup uzlu Point.Add je samotný bod.
Metody typu Dotaz získají vlastnost objektu. Vzhledem k tomu, že objekt samotný je vstupem, není třeba určovat žádné vstupy. Nejsou třeba žádné závorky.
Vázání na uzly se poněkud liší od vázání na blok kódu. U uzlů klikne uživatel pravým tlačítkem na uzel a vybere možnost vázání, kterou chce provést. Díky bloku kódu má uživatel mnohem větší kontrolu nad tím, jak jsou data strukturována. Metoda zkratky bloku kódu používá vodítka replikací k nastavení způsobu, jakým by mělo být párováno několik jednorozměrných seznamů. Čísla v šikmých závorkách „<>“ definují hierarchii výsledného vnořeného seznamu: <1>,<2>,<3> atd.
V tomto příkladu definujeme dva rozsahy pomocí zkratky (více o zkratkách naleznete v následující části této kapitoly). Stručně řečeno,
0..1;
je ekvivalentní{0,1}
a-3..-7
je ekvivalentní{-3,-4,-5,-6,-7}
. Výsledkem je seznam 2 hodnot X a 5 hodnot Y. Pokud se nepoužijí vodítka replikací společně s těmito neshodujícími se seznamy, vznikne seznam dvou bodů, který má délku nejkratšího seznamu. Pomocí vodítek replikací je možné najít všechny možné kombinace 2 a 5 souřadnic (neboli kartézský součin).Pomocí syntaxe Point.ByCoordinates
(x_vals<1>,y_vals<2>);
získáte dva seznamy s pěti položkami v každém seznamu.Pomocí syntaxe Point.ByCoordinates
(x_vals<2>,y_vals<1>);
získáte pět seznamů s dvěma položkami v každém seznamu.
Pomocí této notace můžeme také určit, který seznam bude dominantní: 2 seznamy 5 položek nebo 5 seznamů 2 položek. V tomto příkladu změna pořadí vodítek replikací vytvoří seznam řádků bodů v osnově nebo seznam sloupců bodů v osnově.
Zatímco na výše uvedené metody bloku kódu si možná budete chvíli zvykat, v aplikace Dynamo existuje i funkce s názvem „Uzel na blok“ která celý proces usnadní. Chcete-li tuto funkci použít, vyberte pole uzlů v grafu aplikace Dynamo, klikněte pravým tlačítkem na kreslicí plochu a vyberte položku „Uzel na kód“. Aplikace Dynamo tyto uzly zhustí do bloku kódu včetně všech vstupů a výstupů. Nejenže se jedná o skvělý nástroj k výuce práce s blokem kódu, ale tato funkce také umožňuje práci s efektivnějším a parametrickým grafem aplikace Dynamo. Cvičení je zakončeno využitím funkce „Uzel na kód“, nepropásněte tuto část.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Nyní demonstrujeme sílu bloku kódu převedením existující definice pole atraktoru do tvaru bloku kódu. Práce s existující definicí ukazuje, jak blok kódu souvisí s vizuálním skriptem, a je užitečná k seznámení se se syntaxí jazyka DesignScript.
Začněte znovuvytvořením definice na obrázku výše (nebo otevřením vzorového souboru).
Všimněte si, že vázání uzlu Point.ByCoordinates bylo nastaveno na hodnotu Kartézský součin.
Každý bod v osnově se posune nahoru ve směru Z podle jeho vzdálenosti od referenčního bodu.
Povrch je znovu vytvořen a zesílen, čímž se vytvoří vyboulení v geometrii relativně ke vzdálenosti od referenčního bodu.
Na začátku nejprve definujeme referenční bod: Point.ByCoordinates
(x,y,0);
. Použijeme stejnou syntaxi Point.ByCoordinates, jaká je zadána v horní části uzlu referenčního bodu.Proměnné x a y se vloží do bloku kódu, aby bylo možné je dynamicky aktualizovat pomocí posuvníků.
Přidejte posuvníky ke vstupům bloku kódu, které se pohybují v rozsahu od -50 do 50. Tímto zajistíme dosah přes celou výchozí osnovu aplikace Dynamo.
Ve druhém řádku bloku kódu definujeme zkratku, která nahradí uzel posloupnosti čísel:
coordsXY = (-50..50..#11);
. Tímto se budeme dále zabývat v další části. V tuto chvíli si všimněte, že tato zkratka odpovídá uzlu Number Sequence ve vizuálním skriptu.
Nyní chceme vytvořit osnovu z bodů v posloupnosti položek coordsXY. Za tímto účelem je vhodné použít syntaxi Point.ByCoordinates, ale také je nutné spustit Kartézský součin seznamu stejným způsobem, jako to bylo provedeno ve vizuálním skriptu. Zadejte následující řádek:
gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);
. Šikmé závorky označují odkaz na kartézský součin.Všimněte si, že v uzlu Watch3D se nachází osnova bodů přes celou osnovu aplikace Dynamo.
Nyní nastává ta náročná část: Je třeba přesunout osnovu bodů nahoru podle vzdáleností bodů od referenčního bodu. Nejprve pojmenujte tuto novou sadu bodů transPts. A vzhledem k tomu, že převod je akce na existujícím prvku, použijte místo výrazu
Geometry.Translate...
výrazgridPts.Translate
.Při čtení ze skutečného uzlu na kreslicí ploše je vidět, že obsahuje tři vstupy. Geometrie, kterou chcete převést, je již deklarována, protože na tomto prvku provádíme akci (pomocí metody gridPts.Translate). Zbývající dva vstupy budou vloženy do závorek funkce: směr a vzdálenost.
Směr je jednoduchý vstup, k jeho vertikálnímu posunutí se použije výraz
Vector.ZAxis()
.Dále je třeba vypočítat vzdálenost mezi referenčním bodem a každým bodem osnovy. Toto provedeme stejným způsobem jako akci u referenčního bodu:
refPt.DistanceTo(gridPts)
.Poslední řádek kódu nám poskytuje převedené body:
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));
Nyní máme osnovu bodů s vhodnou datovou strukturou k vytvoření povrchu Nurbs. Vytvoříme povrch pomocí
srf = NurbsSurface.ByControlPoints(transPts);
.
A nakonec, abychom povrchu dodali trochu hloubky, vytvoříme těleso pomocí výrazu
solid = srf.Thicken(5);
. V tomto případě jsme v kódu zesílili povrch o 5 jednotek, tuto hodnotu bychom však mohli deklarovat jako proměnnou (kterou můžete nazvat například tloušťka) a poté řídit její hodnotu pomocí posuvníku.
Funkce „Uzel na kód“ automatizuje celé toto právě dokončené cvičení pomocí kliknutí na tlačítko. Nejenže se jedná o výkonné řešení tvorby vlastních definic a opakovaně použitelných bloků kódu, ale také je to velmi užitečný nástroj k výuce skriptování v aplikaci Dynamo:
Začněte existujícím vizuálním skriptem z kroku 1 tohoto cvičení. Vyberte všechny uzly, klikněte pravým tlačítkem na kreslicí plochu a vyberte možnost Uzel na kód. Až tak jednoduché to je.
Aplikace Dynamo má automatizovanou textovou verzi vizuálního grafu, vázání a dalších. Vyzkoušejte si tuto funkci u vašich vizuálních skriptů a využijte výkon bloku kódu.
Jakou barvu má jablko? | Jablko.barva | červená |
Je jablko zralé? | Jablko.jeZrale | ano |
Kolik jablko váží? | Jablko.vaha | 6 oz. |
Z čeho jablko pochází? | Jablko.rodic | strom |
Co to jablko vytváří? | Jablko.produkty | semena |
Bylo toto jablko vypěstováno zde? | Jablko.vzdalenostOdSadu | 60 mi. |
Funkce lze vytvořit v bloku kódu a lze je znovu načíst jinde v definici aplikace Dynamo. Tím se vytvoří další hladina ovládacího prvku v parametrickém souboru a lze ji zobrazit jako textovou verzi vlastního uzlu. V tomto případě je „nadřazený“ blok kódu snadno dostupný a může být umístěn kdekoli na grafu. Nepotřebuje žádné dráty!
První řádek obsahuje klíčové slovo „def“, pak název funkce a názvy vstupů v závorkách. Závorky definují tělo funkce. Vrátí hodnotu s „return =“. Uzly bloku kódu, které definují funkci, nemají vstupní nebo výstupní porty, protože se volají z jiných uzlů bloku kódu.
Volejte funkci s jiným uzlem bloku kódu ve stejném souboru, a to poskytnutím stejného názvu a stejného počtu argumentů. Funguje stejně uzly v knihovně.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto cvičení vytvoříme obecnou definici, která vytvoří koule ze vstupního seznamu bodů. Poloměr těchto koulí je řízen vlastností Z každého bodu.
Začneme řadou deseti hodnot v rozsahu od 0 do 100. Tyto položky můžete vložit do uzlů Point.ByCoordinates za účelem vytvoření diagonální úsečky.
Vytvořte blok kódu a vložte naši definici.
Použijte tyto řádky kódu:
InputPt je název, který jsme zadali k reprezentaci bodů, které budou řídit funkci. Zatím funkce nic nedělá, ale v následujících krocích ji rozšíříme.
Přidáme-li funkci bloku kódu, umístíme komentář a proměnnou sphereRadius, která dotazuje pozici Z každého bodu. Nezapomeňte, že metoda inputPt.Z nevyžaduje jako metoda závorky. Toto je dotaz vlastností existujícího prvku, takže nejsou nutné žádné vstupy:
Nyní si připomeňme funkci, kterou jsme vytvořili v jiném bloku kódu. Pokud dvakrát klikneme na kreslicí plochu a vytvoříme nový blok kódu a zadáme jej do položky sphereB, všimneme si, že aplikace Dynamo navrhne funkci sphereByZ, kterou jsme definovali. Vaše funkce byla přidána do knihovny intellisense. Působivé.
Nyní zavoláme funkci a vytvoříme proměnnou s názvem Pt, která bude zahrnovat body vytvořené v dřívějších krocích:
Ve výstupu si všimneme, že máme všechny hodnoty null. Jak je to možné? Když jsme definovali funkci, vypočítali jsme proměnnou sphereRadius, ale nedefinovali jsme, co by měla funkce vrátit jako výstup. To můžeme opravit v dalším kroku.
Důležitý krok je, abychom definovali výstup funkce přidáním řádku
return = sphereRadius;
do funkce sphereByZ.Nyní vidíme, že výstupem bloku kódu jsou souřadnice Z každého bodu.
Nyní vytvoříme skutečné koule úpravou nadřazené funkce.
Nejprve definujeme kouli pomocí řádku kódu:
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
Dále změníme návratovou hodnotu na sphere místo sphereRadius:
return = sphere;
. Díky tomu uvidíme v náhledu aplikace Dynamo obří koule!
1. Chcete-li zmírnit velikost těchto koulí, aktualizujte hodnotu sphereRadius přidáním oddělovače:
sphereRadius = inputPt.Z/20;
. Nyní můžeme vidět jednotlivé koule a začít chápat vztah mezi poloměrem a hodnotou Z.
V uzlu Point.ByCoordinates změnou vázání z možnosti Nejkratší seznam na Kartézský součin vytvoříme osnovu bodů. Funkce sphereByZ je stále plně funkční, takže všechny body vytvářejí koule s poloměry na základě hodnot Z.
A jen tak na zkoušku připojíme původní seznam čísel do vstupu X uzlu Point.ByCoordinates. Teď máme krychli koulí.
Poznámka: Pokud výpočet trvá na vašem počítači dlouhou dobu, zkuste změnit číslo #10 na hodnotu #5.
Pamatujte, že funkce sphereByZ, kterou jsme vytvořili, je obecná funkce, takže můžeme vyvolat šroubovici z předchozí lekce a použít na ni tuto funkci.
Jeden poslední krok: Pojďme řídit poměr poloměru s uživatelem definovaným parametrem. Chcete-li to udělat, je nutné vytvořit nový vstup pro funkci a také nahradit rozdělovač 20 parametrem.
Aktualizujte definici sphereByZ na:
Aktualizujte podřazené bloky kódu přidáním proměnné ratio ke vstupu:
sphereByZ(Pt,ratio);
. Připojte posuvník k nově vytvořenému vstupu bloku kódu a změňte velikost poloměrů podle poměru poloměrů.
V bloku kódu je několik základních metod zkratky, které umožňují správu dat velice usnadnit. Rozdělíme si základy níže a prodiskutujeme, jak lze tuto zkratku použít k vytváření a zadávání dotazů na data.
Metodu definování rozsahů a posloupností lze redukovat na základní zkratku. Při definování seznamu číselných dat v bloku kódu pomocí syntaxe „..“ použijte jako vodítko obrázek níže. Po osvojení této notace je vytváření číselných dat skutečně efektivní proces:
V tomto příkladu je číselný rozsah nahrazen základní syntaxí bloku kódu definující
beginning..end..step-size;
. Číselně vyjádřeno získáte:0..10..1;
.Všimněte si, že syntaxe
0..10..1;
je ekvivalentní0..10;
. Velikost kroku 1 je výchozí hodnotou pro notaci zkratky. Proto0..10;
přidělí posloupnost od 0 do 10 s velikostí kroku 1.Příklad s uzlem Sequence je podobný, ale s tím rozdílem, že použijeme znak „#“, abychom určili, že chceme v seznamu zadat 15 hodnot, nikoli seznam, který pokračuje do 15. V tomto případě definujeme:
beginning..#ofSteps..step-size:
. Skutečná syntaxe posloupnosti je0..#15..2
.Pomocí „#“ z předchozího kroku nyní ji nyní umístíme do části step-size syntaxe. Nyní máme číselný rozsah sahající od beginning do end a notace step-size rovnoměrně rozděluje počet hodnot mezi obě části:
beginning..end..#ofSteps
.
Vytváření pokročilých rozsahů umožňuje jednoduše pracovat se seznamem seznamů. V příkladech níže izolujeme proměnnou od uzlu primárního rozsahu a vytvoříme další rozsah tohoto seznamu.
1. Vytvořte vnořené rozsahy a porovnejte notaci s „#“ a bez ní. Stejná logika se používá v základních rozsazích, ale je trochu složitější.
2. Můžeme definovat podrozsah na libovolném místě v primárním rozsahu a všimněte si, že můžeme mít také dva podrozsahy.
3. Řízením hodnoty „end“ v rozsahu vytvoříme více rozsahů různých délek.
V rámci logického cvičení porovnejte dvě výše uvedené zkratky a zkuste analyzovat, jak notace podrozsahů a # určují výsledný výstup.
Kromě vytváření seznamů pomocí zkratky můžeme také vytvořit seznamy za běhu. Tento seznam může obsahovat širokou škálu typů prvků a lze jej také dotazovat (nezapomeňte, že seznamy jsou samy o sobě objekty). Stručně řečeno, pomocí bloku kódu můžete vytvářet seznamy a získávat položky ze seznamu pomocí hranatých závorek:
1. Seznamy můžete rychle vytvářet pomocí řetězců a dotazovat je pomocí položek indexů.
2. Pomocí notace zkratky můžete vytvářet seznamy s proměnnými a dotazy.
Správa s vnořenými seznamy je podobný proces. Při použití více sad hranatých závorek si dávejte pozor na pořadí seznamu:
1. Definujte seznam seznamů.
2. Získání seznamu s použitím notace s jednou hranatou závorkou.
3. Získání položky s použitím notace se dvěma hranatými závorkami.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto cvičení vyzkoušíme naše nové dovednosti zápisu a vytvoříme zábavný zvlněný povrch definovaný rozsahy a vzorci. Během tohoto cvičení si všimněte, jak se používá blok kódu a existující uzly aplikace Dynamo společně: K oddělení práce s daty použijeme blok kódu, zatímco uzly aplikace Dynamo jsou vizuálně rozvrženy pro čitelnost definice.
Začněte vytvořením povrchu spojením výše uvedených uzlů. Místo použití číselného uzlu k definování šířky a délky dvakrát klikněte na kreslicí plochu a do bloku kódu zadejte hodnotu 100;
.
Definujte rozsah mezi 0 a 1 s 50 děleními zadáním hodnoty
0..1..#50
do bloku kódu.Připojte rozsah k uzlu Surface.PointAtParameter, který nabývá hodnot u a v v rozsahu 0 až 1 v celém povrchu. Nezapomeňte změnit hodnotu vázání na Kartézský součin kliknutím pravým tlačítkem myši na uzel Surface.PointAtParameter.
V tomto kroku použijeme první funkci k přesunutí rastru bodů nahoru v ose Z. Tento rastr bude řídit generovaný povrch podle základní funkce. Přidejte nové uzly, jak je znázorněno na obrázku níže.
Místo použití uzlu vzorce použijeme blok kódu s řádkem:
(0..Math.Sin(x*360)..#50)*5;
. Jednoduše řečeno, definujeme rozsah se vzorcem uvnitř něj. Tento vzorec je funkce Sinus. Funkce sinus získá v aplikaci Dynamo vstupy ve stupních, takže abychom získali plnou sinusovou vlnu, je nutné násobit hodnoty x (toto je vstup rozsahu od 0 do 1) hodnotou 360. Dále chceme stejný počet dělení jako řídicí body rastru pro každý řádek, takže definujeme padesát oddílů pomocí #50. Nakonec násobitel hodnoty 5 jednoduše zvýší amplitudu převodu, abychom viděli účinek v náhledu aplikace Dynamo.
I když předchozí blok kódu fungoval dobře, nebyl zcela parametrický. Chceme dynamicky řídit jeho parametry, takže nahradíme řádek z předchozího kroku řetězcem
(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;
. Díky tomu můžeme definovat tyto hodnoty podle vstupů.
Změnou posuvníků (v rozmezí od 0 do 10) získáme zajímavé výsledky.
Provedením transpozice na číselný rozsah obrátíme směr vlny závěsu:
transposeList = List.Transpose(sineList);
.
Pokud do kódu přidáme sineList a tranposeList, vytvoří se deformovaný povrch vaječné skořápky:
eggShellList = sineList+transposeList;
.
Změňte hodnoty posuvníků uvedené níže, abychom získali klidnější průběh tohoto algoritmu.
Nakonec se budeme dotazovat na izolované části dat pomocí bloku kódu. Chcete-li regenerovat povrch s určitým rozsahem bodů, přidejte blok kódu nad uzel Geometry.Translate a NurbsSurface.ByPoints. Tento blok kódu obsahuje řádek s následujícím textem: sineStrips[0..15..1];
. Tím se vybere prvních 16 řádků bodů (z 50). Při dalším vytvoření povrchu vidíme, že jsme vytvořili izolovanou část rastru bodů.
V posledním kroku, abychom tento blok kódu vytvořili více parametrický, budeme dotaz řídit pomocí posuvníku v rozsahu od 0 do 1. Provedeme to pomocí tohoto řádku kódu:
sineStrips[0..((List.Count(sineStrips)-1)*u)];
. Může se to zdát matoucí, ale řádek kódu nám umožňuje rychle změnit měřítko délky seznamu na násobitel mezi 0 a 1.
Hodnota 0.53
na posuvníku vytvoří povrch těsně za středem osnovy.
Posuvník 1
podle očekávání vytvoří povrch z plné osnovy bodů.
Při pohledu na vizuální graf můžeme zvýraznit bloky kódu a zobrazit jednotlivé funkce.
1. První blok kódu nahrazuje uzel Number.
2. Druhý blok kódu nahrazuje uzel Number Range.
3. Třetíblok kódu nahrazuje uzel Formula (a také uzly List.Transpose, List.Count a Number Range).
4. Čtvrtý blok kódu se dotazuje na seznam seznamů, přičemž nahrazuje uzel List.GetItemAtIndex.
Typ dat | Standardní aplikace Dynamo | Ekvivalent bloku kódu |
Čísla |
Řetězce |
Posloupnosti |
Rozsahy |
Získat položku na indexu |
Vytvořit seznam |
Zřetězit řetězce |
Podmíněné výrazy |
Uzly | Ekvivalent bloku kódu | Poznámka |
Libovolný operátor (+, &&, >=, Not atd.) | +, &&, >=, ! atd. | Všimněte si, že z „Not“ se stane „!“, ale uzel se nazývá Not, aby se odlišil od uzlu „Factorial“. |
Booleovská hodnota True | true; | Poznámka: malá písmena |
Booleovská hodnota False | false; | Poznámka: malá písmena |