Formálně je řetězec posloupnost znaků představujících písmennou konstantu nebo určitý typ proměnné. Neformálně je řetězec označení pro text. Pracovali jsme s celými i desetinnými čísly, abychom mohli řídit parametry, a stejně můžeme pracovat s textem.
Řetězce lze použít pro širokou řadu aplikací, včetně definování uživatelských parametrů, opatření sady dokumentace poznámkami a analýzy textových datasetů. Uzel řetězce se nachází v kategorii Core>Input.
Výše uvedené vzorové uzly jsou řetězce. Číslo může být reprezentováno jako řetězec, jako písmeno nebo celé pole textu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pomocí dotazů na řetězce můžete rychle analyzovat velké množství dat. O některých základních operacích, které mohou urychlit pracovní postup a pomoci při interoperabilitě softwaru, se budeme bavit.
Následující obrázek vychází z řetězce dat pocházejících z externí tabulky. Řetězec představuje vrcholy obdélníku v rovině XY. V miniaturním cvičení projdeme některé operace rozdělení řetězce:
Oddělovač „;“ rozdělí každý vrchol obdélníku. Tím se vytvoří seznam se třemi položkami pro každý vrchol.
Kliknutím na tlačítko + uprostřed uzlu vytvoříte nový oddělovač.
Na kreslicí plochu přidejte řetězec „,“ a zadejte jej do nového vstupu oddělovače.
Výsledkem je nyní seznam deseti položek. Uzel se nejprve rozdělí podle položky separator0 a potom podle položky separator1.
Zatímco výše uvedený seznam položek může vypadat jako čísla, jsou stále považovány za samostatné řetězce v aplikaci Dynamo. Aby bylo možné vytvořit body, je nutné jejich datový typ převést z řetězce na číslo. To se provádí pomocí uzlu String.ToNumber.
Tento uzel je přímočarý. Připojte výsledky uzlu String.Split ke vstupu. Výstup nevypadá jinak, ale datový typ je nyní number místo string.
Po několika základních doplňkových operacích je nyní v počátku nakreslen trojúhelník na základě původního vstupu řetězce.
Protože řetězec je obecným textovým objektem, jsou použity v široké škále aplikací. Podívejme se na některé hlavní akce v aplikaci Dynamo v části Core>String Category:
Tato metoda spojí dva řetězce v zadaném pořadí. Vezme všechny řetězcové literály v seznamu a vytvoří z nich jeden sloučený řetězec.
Následující obrázek představuje zřetězení tří řetězců:
Řetězce přidejte nebo odeberte ze zřetězení kliknutím na tlačítka +/- uprostřed uzlu.
Výstup obsahuje jeden zřetězený řetězec, včetně mezer a interpunkcí.
Metoda spojení je velmi podobný zřetězení, s výjimkou toho, že má přidanou hladinu interpunkcí.
Pokud jste pracovali v aplikaci Excel, mohli jste potkat soubor CSV. To znamená hodnoty oddělené čárkou. K vytvoření podobné datové struktury lze jako oddělovač s uzlem String.Join použít čárku (nebo v tomto případě dvě pomlčky).
Následující obrázek představuje spojení dvou řetězců:
Vstup oddělovače umožňuje vytvořit řetězec, který rozdělí spojené řetězce.
V tomto cvičení použijeme metody dotazování a manipulace s řetězci, abychom dekonstruovali poslední sloku díla Roberta Frosta Stopping By Woods on a Snowy Evening. Není to právě použití z praxe, ale pomůže nám to pochopit koncept akcí řetězců, když je použijeme na čitelné řádky básně.
Začneme základním rozdělením řetězce sloky. Nejprve si všimneme, že zápis je formátován na základě čárek. Tento formát použijeme k rozdělení každého řádku do jednotlivých položek.
Základní řetězec je vložen do uzlu String.
K označení oddělovače se používá další uzel String. V tomto případě používáme čárku.
Na kreslicí plochu je přidán uzel String.Split a je připojen ke dvěma řetězcům.
Výstup ukazuje, že jsme nyní rozdělili čáry do jednotlivých prvků.
Teď se pojďme dostat k dobré části básně: poslední dva řádky. Původní sloka byla jedna datová položka. Tato data jsme rozdělili na jednotlivé položky v prvním kroku. Teď musíme najít text, který hledáme. I když to můžeme provést výběrem posledních dvou položek seznamu, pokud by se jednalo o celou knihu, nechtěli bychom si vše pročítat a ručně izolovat jednotlivé prvky.
Místo ručního vyhledávání použijeme uzel String.Contains k vyhledání sady znaků. To je podobné jako příkaz Najít v textovém procesoru. V tomto případě získáme výsledek true nebo false, pokud je tento podřetězec nalezen v položce.
Ve vstupu searchFor definujeme podřetězec, který hledáme v rámci sloky. Použijeme uzel String s textem „And miles“.
Výstup nám dává seznam hodnot false a true. Pomocí této booleovské logiky filtrujeme prvky v dalším kroku.
List.FilterByBoolMask je uzel, který chceme použít k procházení hodnot false a true. Výstup „in“ vrátí výrazy s hodnotou „mask“ vstupu true, zatímco výstup „out“ vrací příkazy, které jsou false.
Náš výstup z „in“ je podle očekávání a dává nám poslední dva řádky sloky.
Teď chceme tyto dva řádky sloučit dohromady. Při zobrazení výstupu předchozího kroku si všimneme, že jsou v seznamu dvě položky:
Pomocí dvou uzlů List.GetItemAtIndex lze izolovat položky pomocí hodnot 0 a 1 jako vstupu index.
Výstup každého uzlu nám poskytne v pořadí poslední dva řádky.
Ke sloučení těchto dvou položek do jedné použijte uzel String.Join:
Po přidání uzlu String.Join si všimneme, že potřebujeme oddělovač.
K vytvoření oddělovače přidáme na kreslicí plochu uzel String a zadáme do něj čárku.
Poslední výstup sloučil poslední dvě položky do jedné.
Může se zdát, že je to hodně práce pro izolování posledních dvou řádků, a je to pravda, řetězcové operace často vyžadují nějakou přípravnou práci. Jsou však škálovatelné a lze je relativně snadno použít u velkých datasetů. Pokud parametricky pracujete s tabulkami a interoperabilitou, nezapomeňte na řetězcové operace.
Pokud jsou nejjednodušší formou dat čísla, nejjednodušším způsobem, jak se tato čísla mohou odlišit, je použití funkce Mathematics. Od jednoduchých operátorů, jako je dělení, až k trigonometrickým funkcím, možnost Math je skvělým způsobem, jak začít zkoumat číselné vztahy a vzory.
Operátory jsou sada komponent, které používají algebraické funkce se dvěma číselnými vstupními hodnotami, které vrací jednu výstupní hodnotu (součet, rozdíl, násobení, dělení atd.). Najdete je pod položkou Operátory > Akce.
Součet (+)
var[]...[], var[]...[]
var[]...[]
Rozdíl (-)
var[]...[], var[]...[]
var[]...[]
Násobení (*)
var[]...[], var[]...[]
var[]...[]
Dělení (/)
var[]...[], var[]...[]
var[]...[]
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Kombinací operátorů a proměnných vytvořte složitější vztah prostřednictvím vzorců. Pomocí posuvníků vytvořte vzorec, který lze řídit pomocí vstupních parametrů.
1. Vytvořte posloupnost čísel, která představuje „t“ v parametrické rovnici. Chceme tedy použít seznam, který je dostatečně velký k definici spirály.
Number Sequence: Definuje posloupnost čísel na základě tří vstupů: start, amount a step.
2. Výše uvedený krok vytvořil seznam čísel definujících parametrickou doménu. Dále vytvořte skupinu uzlů představující rovnici zlaté spirály.
Zlatá spirála je definována jako následující rovnice:
Obrázek níže znázorňuje zlatou spirálu ve vizuální programové podobě. Při procházení skupiny uzlů se snažte věnovat pozornost souvislosti mezi vizuálním programem a psanou rovnicí.
a. Number Slider: Přidejte na kreslicí plochu dva posuvníky. Tyto posuvníky budou představovat proměnné a a b parametrické rovnice. Představují konstantu, která je flexibilní, nebo parametry, které lze upravit podle požadovaného výsledku.
b. Násobení (*): Uzel násobení je reprezentován hvězdičkou. Toto použijeme opakovaně k připojení násobných proměnných
c. Math.RadiansToDegree: Hodnoty 't' je nutné převést na stupně pro jejich vyhodnocení v trigonometrických funkcích. Nezapomeňte, že aplikace Dynamo pro vyhodnocení těchto funkcí ve výchozím stavu používá stupně.
d. Math.Pow: jako funkce 't' a čísla 'e' vytvoří Finobacciho posloupnost.
e. Math.Cos a Math.Sin: Tyto dvě trigonometrické funkce odliší souřadnice X a souřadnice Y každého parametrického bodu.
f. Watch: Nyní vidíte, že náš výstup jsou dva seznamy, které budou tvořit souřadnice x a y bodů použitých k vytvoření spirály.
Většina uzlů z předchozího kroku bude fungovat dobře, ale jedná se o pracný postup. Chcete-li vytvořit efektivnější pracovní postup, přečtěte si v části DesignScript jak definovat řetězec výrazů aplikace Dynamo do jednoho uzlu. V následující řadě kroků se podíváme, jak použít parametrickou rovnici k nakreslení Fibonacciho spirály.
Point.ByCoordinates: Spojte horní uzel násobení se vstupem x a dolní část se vstupem y. Nyní vidíte parametrickou spirálu bodů na obrazovce.
Polycurve.ByPoints: Spojte uzel Point.ByCoordinates z předchozího kroku se vstupem points. Možnost connectLastToFirst můžeme nechat bez vstupu, protože neděláme uzavřený oblouk. Tím se vytvoří spirála, která prochází každým bodem definovaným v předchozím kroku.
Nyní jsme dokončili Fibonacciho spirálu. Pokračujme dvěma různými cvičeními, které pojmenujeme Loděnka a Slunečnice. Jedná se o abstrakce přírodních systémů, ale dvě různá použití Fibonacciho spirály budou dobře zastoupena.
Circle.ByCenterPointRadius: Zde použijeme kruhový uzel se stejnými vstupy jako v předchozím kroku. Výchozí hodnota poloměru je 1.0, takže je vidět okamžitý výstup kružnic. Je okamžitě vidět, jak se body dále vzdalují od počátku.
Number Sequence: Toto je původní pole 't'. Jeho připojením k hodnotě poloměru v uzlu Circle.ByCenterPointRadius se středy kružnic stále vzdalují od počátku, ale poloměry kružnic se zvětšují, což vytváří zábavný Fibonacciho kruhový graf.
Bonusové body, pokud to vytvoříte ve 3D.
Nyní, když jsme vytvořili kruhovou ulitu loděnky, přejděme k parametrickým osnovám. Použijeme základní otočení Fibonacciho spirály k vytvoření Fibonacciho rastru a výsledek bude modelován po růstu slunečnicových semen.
Jako výchozí bod použijeme stejný krok z předchozího cvičení: Vytvoření spirálového pole bodů pomocí uzlu Point.ByCoordinates.
![](../images/5-3/2/math-part IV-01.jpg)
Dále postupujte podle těchto krátkých kroků a vygenerujte řadu spirál s různým natočením.
a. Geometry.Rotate: Existuje několik možností Geometry.Rotate. Ujistěte se, že jste vybrali uzel se vstupy geometry, basePlane a degrees. Připojte položku Point.ByCoordinates ke vstupu geometrie. Klikněte pravým tlačítkem na tento uzel a ujistěte se, že je vázání nastaveno na možnost Kartézský součin.
b. Plane.XY: Připojte se ke vstupu basePlane. Budeme se otáčet kolem počátku, což je stejné umístění jako základna spirály.
c. Number Range: Pro náš vstup stupně chceme vytvořit více otočení. To můžeme rychle provést pomocí komponenty Number Range. Připojte jej ke vstupu degrees.
d. Number: A k definování rozsahu čísel přidejte na kreslicí plochu ve vertikálním pořadí tři uzly čísel. Shora dolů přiřaďte hodnoty 0.0,360.0 a 120.0 v uvedeném pořadí. Tato čísla řídí otáčení spirály. Po připojení tří uzlů čísel k uzlu si všimněte výstupních výsledků z uzlu Number Range.
Náš výstup se začíná podobat víru. Upravíme některé parametry položky Number Range a podíváme se, jak se změní výsledky.
Změňte velikost kroku uzlu Number Range z 120.0 na 36.0. Všimněte si, že tím vznikají další otáčení, a proto získáváme hustší osnovu.
Změňte velikost kroku uzlu Number Range z 36.0 na 3.6. Tím získáme mnohem hustší osnovu a směr spirály je nejasný. Dámy a pánové, vytvořili jsme slunečnici.
Pro hlubší ponoření do vývoje vizuálních programů je potřeba lépe pochopit stavební bloky programu. Tato kapitola pokrývá základní koncepty týkající se dat, která jsou přenášena dráty v programu aplikace Dynamo.
Barva je skvělý datový typ k tvorbě působivých vizuálních prvků a k rozlišení částí výstupu ve vizuálním programu. Při práci s abstraktními daty a proměnlivými čísly je někdy obtížné zjistit, co se do jaké míry mění. Toto je skvělé využití pro barvy.
Barvy v aplikaci Dynamo jsou tvořeny pomocí vstupů ARGB. To odpovídá kanálům Alfa, Červená, Zelená a Modrá. Alfa představuje průhlednost barvy, zatímco ostatní tři se používají jako primární barvy k tvorbě celého spektra barev.
Barva ARGB (Color.ByARGB)
A,R,G,B
barva
Barvy v níže uvedené tabulce se dotazují na vlastnosti, které se používají k definování barvy: Alfa, Červená, Zelená a Modrá. Všimněte si, že uzel Color.Components nám předá všechny čtyři kanály v samostatných výstupech, což je lepší k dotazování vlastností barvy.
Alfa (Colour.Alpha)
barva
A
Červená (Colour.Red)
barva
R
Zelená (Color.Green)
barva
G
Modrá (Color.Blue)
barva
B
Komponenty (Colour.Components)
barva
A,R,G,B
Barvy v tabulce níže odpovídají barevnému prostoru HSB. Rozdělení barvy na odstín, sytost a jas je pravděpodobně intuitivnější pro interpretaci barvy: Jaká barva by to měla být? Jak moc sytá má být? A jak moc světlá, či tmavá má být? Toto je rozbor odstínu, respektive sytosti, respektive jasu.
Odstín (Colour.Hue)
barva
Odstín
Sytost (Colour.Saturation)
barva
Sytost
Jas (Colour.Brightness)
barva
Jas
Rozsah barev je podobný uzlu Remap Range ve cvičení #part-ii-from-logic-to-geometry: Přemapuje seznam čísel do jiné domény. Místo mapování do číselné domény však mapuje barevný gradient podle vstupních čísel v rozsahu od 0 do 1.
Aktuální uzel funguje dobře, pokud však všechno začne fungovat napoprvé, něco je zřejmě špatně. Nejlepší způsob, jak se s barevným gradientem seznámit, je provést interaktivní test. Nyní provedeme rychlé cvičení a probereme, jak nastavit gradient s výstupními barvami odpovídajícími číslům.
Definujte tři barvy: Pomocí bloku kódu definujte červenou, zelenou a modrou zadáním příslušných kombinací hodnot 0 a 255.
Vytvořte seznam: Slučte tři barvy do jednoho seznamu.
Definujte indexy: Vytvořte seznam k definování umístění uzlů jednotlivých barev (v rozsahu od 0 do 1). Všimněte si, že u zelené barvy je hodnota 0.75. Tímto se zelená barva umístí do 3/4 přes vodorovný gradient na posuvníku rozsahu barev.
Blok kódu: Zadejte hodnoty (mezi 0 a 1), které chcete převést na barvy.
Uzel Display.ByGeometry umožňuje vybarvit geometrii ve výřezu aplikace Dynamo. Toto je užitečné při oddělení různých typů geometrie, předvedení parametrické koncepce nebo definování legendy analýzy pro simulaci. Vstupy jsou jednoduché: geometrie a barva. Vstup color je za účelem vytvoření gradientu jako na obrázku výše připojen k uzlu Color Range.
Uzel Display.BySurfaceColor umožňuje mapovat data po celém povrchu pomocí barvy. Tato funkce nabízí určité zajímavé možnosti vizualizace dat obdržených přes diskrétní analýzu, jako je analýza slunečného světla, energetická analýza a analýza blízkosti. Použití barvy na povrch v aplikaci Dynamo je podobné jako použití textury na materiál v jiných prostředích CAD. Krátké cvičení níže znázorňuje použití tohoto nástroje.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto cvičení je zaměřeno na parametrické řízení barvy rovnoběžně s geometrií. Geometrie je základní šroubovice, kterou níže definujeme pomocí bloku kódu. Jedná se o rychlý a snadný způsob tvorby parametrické funkce; vzhledem k tomu, že se soustředíme na barvu (místo geometrie), můžeme efektivně vytvořit šroubovici pomocí bloku kódu, aniž by došlo k zaplnění kreslicí plochy. K čím složitějším materiálům se příručka Primer dostane, tím častěji se bude používat blok kódu.
Blok kódu: Definujte dva bloky kódu s výše uvedenými vzorci. Toto je rychlá parametrická metoda tvorby spirály.
Point.ByCoordinates: Připojte tři výstupy z bloku kódu k souřadnicím uzlu.
Nyní je vidět pole bodů tvořících šroubovici. Dalším krokem je tvorba křivky procházející body, aby bylo možné vizualizovat šroubovici.
PolyCurve.ByPoints: Připojte výstup Point.ByCoordinates ke vstupu points u uzlu. Vznikne šroubovitá křivka.
Curve.PointAtParameter: Připojte výstup PolyCurve.ByPoints ke vstupu curve. Účelem tohoto kroku je vytvořit parametrický bod atraktoru, který se posouvá podél křivky. Vzhledem k tomu, že křivka vyhodnocuje bod v parametru, bude nutné zadat hodnotu param v rozmezí od 0 do 1.
Posuvník čísel: Po přidání na kreslicí plochu změňte hodnotu min na 0.0, hodnotu max na 1.0 a hodnotu step na 0.01. Připojte výstup posuvníku ke vstupu param u uzlu Curve.PointAtParameter. Nyní je vidět bod podél délky šroubovice, který je vyjádřen procentem posuvníku (0 v počátečním bodě, 1 v koncovém bodě).
Po vytvoření referenčního bodu nyní porovnáme vzdálenost od referenčního bodu k původním bodům, čímž se definuje šroubovice. Tato hodnota vzdálenosti bude řídit geometrii i barvu.
Geometry.DistanceTo: Připojte výstup Curve.PointAtParameter ke vstupu. Připojte uzel Point.ByCoordinates ke vstupu geometrie.
Watch: Výsledný výstup zobrazuje seznam vzdáleností od každého bodu šroubovice k referenčnímu bodu podél křivky.
Dalším krokem je řízení parametrů pomocí seznamu vzdáleností od bodů šroubovice k referenčnímu bodu. Pomocí těchto hodnot vzdáleností se definují poloměry řady koulí podél křivky. Aby se koule udržely ve vhodné velikosti, je nutné přemapovat hodnoty vzdálenosti.
Math.RemapRange: Připojte výstup Geometry.DistanceTo ke vstupu čísel.
Blok kódu: připojte blok kódu s hodnotou 0.01 ke vstupu newMin a blok kódu s hodnotou 1 ke vstupu newMax.
Watch: Připojte výstup Math.RemapRange k jednomu uzlu a výstup Geometry.DistanceTo k jinému. Porovnejte výsledky.
V tomto kroku došlo k přemapování seznamu vzdáleností do menšího rozsahu. Hodnoty newMin a newMax je možné upravit podle libosti. Hodnoty se přemapují a budou mít stejný poměr rozložení v rámci celé domény.
Sphere.ByCenterPointRadius: Připojte výstup Math.RemapRange ke vstupu radius a původní výstup Point.ByCoordinates připojte ke vstupu centerPoint.
Změňte hodnotu posuvníku čísel a sledujte, jak se aktualizuje velikost koulí. Vytvořili jsme parametrický objekt.
Velikost koulí ukazuje parametrické pole definované referenčním bodem podél křivky. Použijeme stejnou koncepci u poloměru koule, abychom mohli řídit jejich barvu.
Color Range: Přidejte horní část kreslicí plochy. Při přejetí kurzoru nad vstupem value si všimněte, že požadovaná čísla jsou v rozsahu 0 až 1. Čísla z výstupu Geometry.DistanceTo je nutné přemapovat, aby byla kompatibilní s touto doménou.
Sphere.ByCenterPointRadius: V tuto chvíli vypněte náhled u tohoto uzlu. (Klikněte pravým tlačítkem myši > Náhled.)
Math.RemapRange: Tento proces by vám měl být známý. Připojte výstup Geometry.DistanceTo ke vstupu čísel.
Blok kódu: Podobně jako v předchozím kroku vytvořte hodnotu 0 pro vstup newMin a hodnotu 1 pro zadání newMax. Všimněte si, že v tomto případě je možné definovat dva výstupy z jednoho bloku kódu.
Color Range: Připojte výstup Math.RemapRange ke vstupu value.
Color.ByARGB: Toto je akce, pomocí které se vytvoří dvě barvy. I přesto, že tento proces může vypadat neobvykle, je stejný jako u barev RGB v jiném softwaru, jen se přitom využije vizuální programování.
Blok kódu: Vytvořte dvě hodnoty 0 a 255. Připojte dva výstupy ke dvěma vstupům Color.ByARGB podle výše uvedeného obrázku (případně vytvořte jakékoli dvě požadované barvy).
Color Range: Vstup colors vyžaduje seznam barev. Tento seznam je potřeba vytvořit ze dvou barev vytvořených v předchozím kroku.
List.Create: Slučte dvě barvy do jednoho seznamu. Připojte výstup ke vstupu colors u uzlu Color Range.
Display.ByGeometryColor: Připojte položku Sphere.ByCenterPointRadius ke vstupu geometry a uzel Color Range připojte ke vstupu color. Nyní máme hladký gradient v celé doméně křivky.
Pokud změníme hodnotu posuvníku čísel z dřívější definice, barvy a velikosti se aktualizují. V tomto případě spolu barvy a velikost poloměru přímo souvisí: nyní existuje vizuální propojení mezi dvěma parametry.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Nejprve je třeba vytvořit (nebo odkázat) povrch, který se použije jako vstup pro uzel Display.BySurfaceColor. V tomto příkladu šablonujeme mezi sinusovou a kosinusovou křivkou.
Tato skupina uzlů vytváří body podél osy Z a poté je posunuje podle sinových a kosinových funkcí. Pomocí dvou seznamů bodů se poté vygenerují křivky NURBS.
Surface.ByLoft: Vygenerujte interpolovaný povrch mezi křivkami NURBS v seznamu.
File Path: Vyberte soubor obrázku, který se bude vzorkovat pro následná data pixelů.
Pomocí uzlu File.FromPath převeďte cestu k souboru na soubor a poté jej předejte do uzlu Image.ReadFromFile. Tím vytvoříte obrázek pro vzorkování.
Image.Pixels: Zadejte obrázek a zadejte hodnotu vzorku, která se má použít ve směru rozměrů X a Y obrázku.
Posuvník: Zadejte hodnoty vzorků pro uzel Image.Pixels
Display.BySurfaceColor: Namapujte pole hodnot barev přes celý povrch podél směru X, respektive Y.
Podrobný náhled výstupního povrchu s rozlišením 400x300 vzorků.
Modul Logic nebo konkrétněji Conditional Logic umožňuje určit akci nebo sadu akcí na základě testu. Po vyhodnocení testu budeme mít booleovskou hodnotu představující True
nebo False
, kterou můžeme použít k řízení toku programu.
Číselné proměnné mohou ukládat celou řadu různých čísel. Booleovské proměnné mohou ukládat pouze dvě hodnoty, které se označují jako True nebo False, Yes nebo No, 1 nebo 0. Pomocí booleovských hodnot lze výpočty provádět jen zřídka, protože jsou omezené.
Výraz „If“ je klíčovou koncepcí programování: „Pokud je tato hodnota pravdivá, toto se stane, jinak se stane něco jiného. Výsledná akce výrazu je řízena booleovskou hodnotou. Příkaz „If“ lze v aplikaci Dynamo definovat několika způsoby:
If (If)
test, true, false
výsledek
Formula (IF(x,y,z))
x, y, z
výsledek
Code Block ((x?y:z);)
x? y, z
výsledek
Pojďme si projít stručný příklad každého z těchto tří uzlů v akci pomocí podmíněného výrazu „If“.
Na tomto obrázku je hodnota boolean nastavena na hodnotu true, což znamená, že výsledkem je řetězec: „toto je výsledek, pokud je hodnota true“. Tři uzly vytvářející výraz If zde fungují identicky.
Uzly opět fungují identicky. Pokud je hodnota boolean změněna na false, výsledkem je číslo Pi, jak je definováno v původním výrazu If.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pomocí logiky rozdělíme seznam čísel do seznamu sudých čísel a seznamu lichých čísel.
a. Number Range – Přidejte na kreslicí plochu číselný rozsah.
b. Numbers – Přidejte na kreslicí plochu tři uzly čísel. Hodnoty pro jednotlivé uzly čísel by měly být: 0.0 pro start, 10.0 pro end a 1.0 pro step.
c. Output – Náš výstup je seznam 11 čísel v rozsahu od 0 do 10.
d. Modulo (%)– Number Range do x a 2.0 do y. Tím se vypočítá zbytek po dělení 2 pro každé číslo v seznamu. Výstup z tohoto seznamu nám poskytne seznam hodnot, které se mění v rozmezí 0 až 1.
e. Test rovnosti (==) – Přidá na kreslicí plochu test rovnosti. Výstup modulo připojte ke vstupu x a 0.0 ke vstupu y.
f. Watch – Výstupem testu rovnosti je seznam hodnot, které se mění na hodnotu true a false. Jedná se o hodnoty použité k oddělení položek v seznamu. 0 (nebo true) představuje sudá čísla a (1 nebo false) představuje lichá čísla.
g. List.FilterByBoolMask – Tento uzel filtruje hodnoty do dvou různých seznamů na základě vstupní booleovské hodnoty. Původní uzel number range připojte ke vstupu list a výstup testu rovnosti připojte ke vstupu mask. Výstup in představuje hodnoty true, zatímco výstup out představuje hodnoty false.
h. Watch – Výsledkem je seznam sudých čísel a seznam lichých čísel. Použili jsme logické operátory k oddělení seznamů do vzorů.
Budeme vycházet z logiky stanovené v prvním cvičení a použijeme toto nastavení na operaci modelování.
2. Vyjdeme z předchozího cvičení se stejnými uzly. Jediné výjimky (kromě změny formátu jsou):
a. Použijte uzel Sequence s těmito vstupními hodnotami.
b. Seznam in jsme odpojili od uzlu List.FilterByBoolMask. Tyto uzly zatím necháme stranou, ale později se nám v tomto cvičení budou hodit.
3. Začneme vytvořením samostatné skupiny grafů, jak je znázorněno na obrázku výše. Tato skupina uzlů představuje parametrickou rovnici k definování oblouku úsečky. Několik poznámek:
a. První uzel Number Slider představuje frekvenci vlny, měl by mít min. hodnotu 1, max. hodnotu 4 a krok 0.01.
b. Druhý uzel Number Slider představuje amplitudu vlny, měl by mít min. hodnotu 0, max. hodnotu 1 a krok 0.01.
c. PolyCurve.ByPoints – Pokud je zkopírováno výše uvedené schéma uzlu, výsledkem je sinusoida ve výřezu náhledu aplikace Dynamo.
Zde je metoda pro vstupy: použijte uzly čísel pro statické vlastnosti a posuvníky pro flexibilnější hodnoty. Chceme zachovat původní číselný rozsah, který definujeme na začátku tohoto kroku. Křivka sinu, kterou zde vytvoříme, by však měla mít určitou flexibilitu. Posunutím těchto posuvníků můžeme sledovat, jak oblouk aktualizuje svou frekvenci a amplitudu.
4. Trochu přeskočíme v definici, takže se podíváme na konec, abychom mohli odkazovat na to, k čemu míříme. První dva kroky jsou provedeny samostatně, nyní je chceme spojit. Pomocí základní sinusové křivky budeme řídit umístění komponent zipu a pomocí logiky true/false budeme přepínat mezi malými a většími poli.
a. Math.RemapRange – Pomocí číselné sekvence vytvořené v kroku 02 vytvoříme novou řadu čísel přemapováním rozsahu. Původní čísla z kroku 01 jsou v rozsahu 0-100. Tato čísla se pohybují v rozsahu od 0 do 1 podle hodnot newMin a newMax.
5. Vytvořte uzel Curve.PointAtParameter a potom připojte výstup Math.RemapRange z kroku 04 ke vstupu param.
Tento krok vytvoří body podél křivky. Čísla byla přemapována na 0 až 1, protože vstup param hledá hodnoty v tomto rozsahu. Hodnota 0 představuje počáteční bod, hodnota 1 představuje koncové body. Všechna čísla mezi hodnotami jsou vyhodnocena v rozsahu [0,1].
6. Připojte výstup z uzlu Curve.PointAtParameter k uzlu List.FilterByBoolMask, abyste oddělili seznam lichých a sudých indexů.
a. List.FilterByBoolMask – Připojte uzel Curve.PointAtParameter z předchozího kroku ke vstupu list.
b. Watch – Uzel Watch pro in a uzel Watch pro out zobrazuje, že máme dva seznamy představující sudé a liché indexy. Tyto body jsou seřazeny stejným způsobem na křivce, kterou ukážeme v dalším kroku.
7. Dále použijeme výsledek výstupu z uzlu List.FilterByBoolMask v kroku 05 k vygenerování geometrií s velikostmi podle jejich indexů.
Cuboid.ByLength – Znovu vytvořte spojení uvedená na obrázku výše, abyste získali zip podél sinusové křivky. Kvádr je pouze kvádr a definujeme jeho velikost na základě bodu křivky ve středu kvádru. Logika sudého nebo lichého rozdělení by nyní měla být v modelu jasná.
a. Seznam kvádrů v sudých indexech.
b. Seznam kvádrů v lichých indexech.
Voila! Právě jste naprogramovali proces definování rozměrů geometrie podle logické operace, kterou jsme si předvedli v tomto cvičení.
Data jsou součástí našich programů. Prochází dráty a zadávají vstupy pro uzly, kde se zpracují do nové formy výstupních dat. Pojďme si prohlédnout definici dat, jak jsou strukturována a začít je používat v aplikaci Dynamo.
Data jsou souborem hodnot kvalitativních nebo kvantitativních proměnných. Nejjednodušší forma dat jsou například čísla jako 0
, 3.14
nebo 17
. Data však mohou být také různých typů: proměnná představující měnící se čísla (height
), znaky (myName
); geometrii (Circle
) nebo seznam datových položek (1,2,3,5,8,13,...
).
V aplikaci Dynamo přidáváme data do vstupních portů uzlů – můžeme mít data bez akcí, ale potřebujeme data ke zpracování akcí, které reprezentují uzly. Pokud do pracovního prostoru přidáme uzel, pokud nebude mít k dispozici žádný vstup, bude výsledkem funkce, nikoli výsledek akce.
Jednoduchá data
Data a akce (Uzel A) se úspěšně spustí
Akce (Uzel A) bez zadání dat vrátí obecnou funkci
Dávejte pozor na nulové hodnoty. Typ 'null'
představuje nedostatek dat. I když je to abstraktní koncept, pravděpodobně se k němu dostanete při práci s vizuálním programováním. Pokud akce nevytvoří platný výsledek, uzel vrátí hodnotu null.
Testování nulových hodnot a odstraňování nulových hodnot z datové struktury je klíčovou součástí vytváření robustních programů.
Object.IsNull
obj
booleovský