Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Geometrie je jazyk designu. Pokud má programovací jazyk nebo prostředí geometrické jádro, můžeme odemknout možnosti navrhování přesných a robustních modelů, automatizaci návrhových procedur a vytváření iterací návrhů pomocí algoritmů.
Porozumění typům geometrie a jejich vzájemným vztahům nám umožní orientovat se v kolekci uzlů geometrie, která je pro nás k dispozici v knihovně. Uzly geometrie jsou uspořádány abecedně a ne hierarchicky – zde jsou zobrazeny podobně jako jejich rozvržení v rozhraní aplikace Dynamo.
Navíc by se vytváření modelů v aplikaci Dynamo a připojení náhledu toho, co vidíme v náhledu pozadí, k toku dat v grafu mělo časem stát více intuitivní.
Všimněte si předpokládaného souřadnicového systému vykresleného pomocí rastru a barevných os
Vybrané uzly rendrují odpovídající geometrii (pokud uzel vytvoří geometrii) na pozadí, přičemž barva zvýraznění je stejná
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Geometrie je tradičně definována jako studium tvaru, velikosti, relativní polohy tvarů a vlastností prostoru. Toto pole má bohatou historii sahající tisíce let. S příchodem a popularizací počítače jsme získali mocný nástroj pro definování, zkoumání a generování geometrie. Nyní je tak snadné vypočítat výsledek složitých geometrických interakcí, že téměř nevnímáme, že to děláme.
Pokud chcete zjistit, jak může být diverzní a složitá geometrie využívána silou vašeho počítače, proveďte rychlé webové vyhledávání Stanford Bunny (Stanfordský zajíček) – kanonického modelu použitého k testování algoritmů.
Pochopení geometrie v kontextu algoritmů, výpočtů a složitosti může znít náročně. Existuje však několik klíčových a poměrně jednoduchých zásad, které můžeme stanovit jako základ pro zahájení tvorby pokročilejších aplikací:
Geometrie jsou data – pro počítač a aplikaci Dynamo se zajíček neliší od čísla.
Geometrie je založena na abstrakci – v zásadě jsou geometrické prvky popsány čísly, vztahy a vzorci v daném prostorovém souřadnicovém systému
Geometrie má hierarchii – body se spojí, aby se vytvořily úsečky, úsečky se spojí, aby se vytvořily povrchy, a tak dále
Geometrie současně popisuje součást i celek – když máme křivku, je to jak tvar i všechny možné body podél ní
V praxi tyto zásady znamenají, že je nutné vědět, s čím pracujeme (jaký typ geometrie, jak byla vytvořena atd.), abychom mohli plynule sestavovat, rozebírat a znovu seskupovat různé geometrie při vývoji složitějších modelů.
Věnujme chvíli času sledování vztahu mezi abstraktním a hierarchickým popisem geometrie. Protože tyto dva koncepty spolu souvisí, ale ne vždy zjevně, můžeme se rychle dostat do koncepčních problémů, jakmile začneme vyvíjet hlubší pracovní postupy nebo modely. Pro začátek používáme dimenzionalitu jako jednoduchý popis toho, co vytváříme. Počet kót potřebných k popisu tvaru nám dává vědět, jak je geometrie uspořádána hierarchicky.
Bod (definovaný souřadnicemi) nemá žádné kóty – jsou to jen čísla popisující jednotlivé souřadnice
Úsečka (definovaná dvěma body) má nyní jednu kótu – úsečku lze „procházet“ dopředu (kladný směr), nebo dozadu (záporný směr)
Rovina (definovaná dvěma úsečkami) má dvě kóty – nyní je možné procházet i vlevo a vpravo
Kvádr (definovaný dvěma rovinami) má tři kóty – můžeme definovat polohu vzhledem ke směru nahoru nebo dolů
Dimenzionalita je pohodlný způsob, jak začít kategorizovat geometrii, ale nemusí být nutně nejlepší. Nakonec, nemodelujeme jen body, čáry, roviny a kvádry – co když chceme provést něco s křivkami? Dále existuje celá další kategorie geometrických typů, které jsou zcela abstraktní a definují vlastnosti, například orientaci, objem nebo vztahy mezi součástmi. Nemůžeme uchopit vektor, tak jak ho definujeme vzhledem k tomu, co vidíme v prostoru? Podrobnější kategorizace geometrické hierarchie by měla rozlišovat rozdíl mezi abstraktními typy nebo „pomocnými objekty“, z nichž každý můžeme seskupovat podle toho, s čím pomáhají, a typy, které pomáhají popisovat tvar prvků modelu.
Vytváření modelů v aplikaci Dynamo není omezeno na to, co lze vytvořit pomocí uzlů. Zde jsou některé klíčové způsoby, jak posunout práci s geometrií na vyšší úroveň:
Aplikace Dynamo umožňuje importovat soubory – zkuste použít soubor CSV pro mračna bodů nebo soubor SAT pro načtení povrchů
Při práci s aplikací Revit můžeme odkazovat na prvky aplikace Revit, které se mají použít v aplikaci Dynamo
Nástroj Dynamo Package Manager nabízí další funkce pro rozšířené typy geometrie a operace – podívejte se do balíčku Mesh Toolkit.
V této části představujeme základní uzly dostupné v knihovně aplikace Dynamo, které vám pomohou vytvořit váš vlastní vizuální program v profesionální kvalitě.
Geometrie pro výpočetní návrh: Jak se v aplikaci Dynamo pracuje s geometrickými prvky? Prozkoumejte více způsobů vytváření jednoduchých nebo složitých geometrií ze základních těles.
Stavební bloky programů: Co jsou „data“ a jaké základní typy se používají v programech? Dozvíte se také další informace o začlenění matematických a logických operací do pracovního postupu návrhu
Práce se seznamy: Jak spravovat a uspořádat datové struktury? Získejte další informace o konceptu seznamu a použijte jej k efektivní správě dat návrhu.
Slovníky v aplikaci Dynamo: Co jsou slovníky? Zjistěte, jak používat slovníky k vyhledávání specifických dat a hodnot z existujících výsledků.
Aplikace Dynamo je prostředí pro vizuální programování, ve kterém lze řídit, jak budou data zpracována. Data jsou čísla nebo text, ale také geometrie. Geometrie, též nazývaná výpočetní geometrie, jsou data, která se používají k tvorbě atraktivních nebo výkonných modelů. K tomu je ovšem zapotřebí pochopit vstupy a výstupy různých typů geometrií.
Pomocí plochy v modelu reprezentujeme objekty, které vidíme v našem trojrozměrném světě. I když křivky nejsou vždy rovinnými objekty, tj. jsou trojrozměrné, prostor, který definují, je vždy svázán s jedním rozměrem. Plochy nabízejí o jeden prostor navíc a sadu dalších vlastností, které lze používat v dalších operacích modelování.
Importujme plochu do aplikace Dynamo a vyhodnoťme ji v daných parametrech, abychom zjistili, jaká data můžeme získat.
Surface.PointAtParameter vrací bod na zadané souřadnici UV
Surface.NormalAtParameter vrací normálový vektor v zadané souřadnici UV
Surface.GetIsoline vrací izoparametrickou křivku na souřadnici U nebo V – viz vstup isoDirection.
Kliknutím na odkaz níže si stáhněte vzorové soubory.
Úplný seznam vzorových souborů najdete v dodatku.
Plocha je matematický útvar definovaný funkcí a dvěma parametry. Místo parametru t
u křivek se k popisu parametrického prostoru u ploch používají parametry U
a V
. To znamená, že při práci s tímto typem geometrie můžeme odvodit více geometrických dat. Křivky například nabízejí tečné vektory a normálové roviny (které lze otáčet nebo kroutit po délce křivky), zatímco plochy nabízejí normálové vektory a tečné roviny, které jsou konzistentní s jejich orientací.
Povrch
Izokřivka U
Izokřivka V
Souřadnice UV
Kolmá rovina
Normálový vektor
Doména plochy: Doména plochy je definována jako rozsah parametrů (U,V), pro které lze vypočítat trojrozměrnou polohu bodu ležícího v této ploše. Doména v každém rozměru (U nebo V) je obvykle popisována dvěma čísly (od U Min do U Max) a (od V Min do V Max).
Ačkoliv tvar plochy nemusí vždy připomínat obdélník a některé její izokřivky mohou být utaženější nebo uvolněnější než jiné, prostor definovaný její doménou je vždy dvourozměrný. Doména ploch je v aplikaci Dynamo definována minimem 0.0 a maximem 1.0 ve směrech U i V. Rovinné nebo oříznuté plochy mohou mít různé domény.
Izokřivka (nebo izoparametrická křivka): Křivka definovaná konstantní hodnotou U nebo V na ploše a doménou hodnot pro odpovídající druhý směr U nebo V.
Souřadnice UV: Bod v parametrickém prostoru UV, definovaný souřadnicemi U, V a někdy W.
Kolmá rovina: Rovina, která je kolmá k izokřivkám U a V v dané souřadnici UV.
Normálový vektor: Vektor definující směr „nahoru“ vzhledem ke kolmé rovině.
Plochy NURBS jsou velmi podobné křivkám NURBS. Plochy NURBS si lze představit jako mřížku křivek NURBS, které směřují dvěma směry. Tvar plochy NURBS je definován řídicími body a stupněm plochy ve směrech U a V. Stejný algoritmus, tedy řídicí body, váhy a stupeň, se používá k výpočtu tvaru, normál, tečen, křivosti a dalších vlastností.
Geometrie plochy NURBS naznačuje dva směry, protože plochy NURBS jsou (nezávisle na tvaru) obdélníkové mřížky řídicích bodů. Ačkoliv tyto směry často nesouvisí s globálním systémem souřadnic, často je budeme používat k analýze modelů nebo generování dalších geometrií podle této plochy.
Stupeň (U,V) = (3,3)
Stupeň (U,V) = (3,1)
Stupeň (U,V) = (1,2)
Stupeň (U,V) = (1,1)
Polyplochy se skládají z ploch, které jsou spojeny přes hranu. Polyplochy nabízí více než jen dvourozměrnou definici UV, propojené tvary lze procházet podle jejich topologie.
Ačkoliv topologie popisuje pouze způsob, jakým jsou jednotlivé části propojeny, topologie v aplikaci Dynamo představuje také typ geometrie. Konkrétně se jedná o nadřazenou kategorii pro plochy, polyplochy a tělesa.
Spojené plochy (někdy nazývané záplaty) umožňují vytvářet složitější tvary a definovat detaily ve švech. Na hrany polyplochy je možné použít operaci zaoblení nebo zkosení.
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.
jsou první geometrický datový typ, kterému jsme se věnovali a který má známé sady vlastností popisujících tvar: Jak křivé nebo rovné? Jak dlouhé nebo krátké? Nezapomeňte, že body jsou stále stavební bloky pro definování všeho od úsečky k spline a všechny typy křivek mezi nimi.
Čára
Křivka
Oblouk
Kružnice
Elipsa
Křivka NURBS
Polycurve
NurbsCurve.ByControlPoints používá seznam bodů jako řídicí body
NurbsCurve.ByPoints nakreslí křivku procházející seznamem bodů
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Termín křivka obvykle označuje všechny různé křivé (i rovné) tvary. Křivka s velkým K je nadřazená kategorizace všech těchto typů tvarů – úseček, kružnic, spline atd. Přesněji řečeno, Křivka popisuje každý možný Bod, který lze najít vložením „t“ do kolekce funkcí, která může být v rozsahu od jednoduchých (x = -1.26*t, y = t
) až po funkce zahrnující infinitezimální počet. Bez ohledu na to, s jakým typem Křivky pracujeme, je tento parametr s názvem „t“ vlastnost, kterou můžeme vyhodnotit. Kromě toho, bez ohledu na vzhled tvaru, mají všechny Křivky také počáteční a koncový bod, který je shodný s minimálními a maximálními hodnotami t použitými k vytvoření Křivky. To nám také pomůže pochopit její směr.
Je důležité poznamenat, že aplikace Dynamo předpokládá, že doména hodnot „t“ pro křivku je chápána jako 0.0 až 1.0.
Všechny křivky také mají řadu vlastností, které lze použít k jejich popisu nebo analýze. Pokud je vzdálenost mezi počátečním a koncovým bodem nula, křivka je „uzavřená“. Každá křivka má také řadu řídicích bodů, pokud jsou všechny tyto body umístěny ve stejné rovině, křivka je „rovinná“. Některé vlastnosti se vztahují na křivku jako celek, zatímco jiné se vztahují pouze na určité body podél křivky. Například rovinnost je globální vlastnost, zatímco tečný vektor v dané hodnotě t je místní vlastnost.
Úsečky jsou nejjednodušší formou křivek. Nemusí vypadat zaobleně, ale ve skutečnosti jsou Křivky – jen bez zakřivení. Existuje několik různých způsobů vytvoření čar, nejintuitivnější je od bodu A do bodu B. Tvar čáry AB bude nakreslen mezi body, ale matematicky se prodlouží do nekonečna oběma směry.
Když propojíme obě úsečky dohromady, máme křivku. Zde máme přímočaré znázornění toho, co je řídicí bod. Úprava umístění těchto bodů změní tvar křivky. Pokud je křivka uzavřená, máme polygon. Pokud jsou všechny délky hran polygonu shodné, je popisován jako normální.
Když přidáváme více složitosti k parametrickým funkcím, které definují tvar, můžeme o jeden krok dále od čáry vytvořit oblouk, kružnici, oblouk elipsy nebo elipsu popisem jednoho nebo dvou poloměrů. Rozdíly mezi verzí oblouku a kružnice nebo elipsy spočívají pouze v tom, zda je tvar uzavřený, nebo ne.
NURBS (Nerovnoměrné racionální křivky spline) jsou matematická znázornění, která mohou přesně modelovat libovolný tvar z jednoduché dvojrozměrné úsečky, kružnice, oblouku nebo obdélníku na nejsložitější trojrozměrnou volnou organickou křivku. Díky své pružnosti (relativně málo řídicích bodů, přesto hladká interpolace podle nastavení stupňů) a přesnosti (vázané robustní matematikou) lze modely NURBS použít v jakémkoli procesu od ilustrace a animace až po výrobu.
Stupeň: Způsob definice křivky určuje rozsah vlivu řídicích bodů na křivku, kde čím vyšší je stupeň, tím větší je rozsah. Stupeň je kladné celé číslo. Toto číslo je obvykle 1, 2, 3 nebo 5, ale může to být libovolné kladné celé číslo. Úsečky a křivky NURBS jsou obvykle stupně 1 a většina křivek volného tvaru je stupeň 3 nebo 5.
Řídicí body: Řídicí body jsou seznamem alespoň Stupeň+1 bodů. Jedním z nejsnadnějších způsobů, jak změnit tvar křivky NURBS, je posunout její řídicí body.
Váha: Řídicí body mají přiřazené číslo nazývané Váha. Váhy jsou obvykle kladná čísla. Pokud mají všechny řídicí body křivky stejnou váhu (obvykle 1), křivka se nazývá neracionální, jinak se křivka nazývá racionální. Většina křivek NURBS není racionální.
Uzly: Uzly jsou seznamy čísel (Stupeň+N-1), kde N je počet řídicích bodů. Uzly se používají spolu s váhami k ovládání vlivu řídicích bodů na výslednou křivku. Jedno použití pro uzly je vytvoření zalomení v určitých bodech křivky.
Stupeň = 1
Stupeň = 2
Stupeň = 3
Všimněte si, že čím vyšší je hodnota stupně, tím více řídících bodů se používá k interpolaci výsledné křivky.
je tvořena sadou bodů, každá čára má alespoň 2 body. Jedním z nejběžnějších způsobů, jak vytvořit čáru v aplikaci Dynamo, je použití Line.ByStartPointEndPoint
.
je model používaný k přesnému znázornění křivek a povrchů. Pojďme v aplikaci Dynamo pomocí dvou různých metod vytvořit křivku NURBS ve tvaru sinusoidy a porovnat výsledky.
Tento rejstřík nabízí dodatečné informace o všech uzlech použitých v této příručce a také dalších komponentách, které mohou být užitečné. Jedná se pouze o představení některých z 500 uzlů dostupných v aplikaci Dynamo.
TVORBA
Color.ByARGB Umožňuje vytvořit barvu pomocí alfa, červené, zelené a modré složky.
Color Range Vrací barvu z barevného gradientu mezi počáteční a koncovou barvou.
AKCE
Color.Brightness Vrací hodnotu jasu této barvy.
Color.Components Zobrazí seznam složek barvy v pořadí: alfa, červená, zelená a modrá.
Color.Saturation Vrací hodnotu sytosti této barvy.
Color.Hue Vrací hodnotu odstínu této barvy.
DOTAZ
Color.Alpha Umožňuje najít alfa složku barvy, 0 až 255.
Color.Blue Umožňuje zjistit modrou složku barvy, 0 až 255.
Color.Green Umožňuje zjistit zelenou složku barvy, 0 až 255.
Color.Red Umožňuje zjistit červenou složku barvy, 0 až 255.
TVORBA
GeometryColor.ByGeometryColor Zobrazit geometrii v barvě.
AKCE
View.Watch Vizualizuje výstup uzlu.
View.Watch 3D Zobrazí dynamický náhled geometrie.
AKCE
Boolean Výběr mezi hodnotami true a false.
Code Block Umožňuje přímou tvorbu kódu DesignScript.
Directory Path Umožňuje vybrat adresář v systému a načíst jeho cestu.
File Path Umožňuje výběr souboru v systému a získá jeho název.
Integer Slider Posuvník, který vytváří celočíselné hodnoty.
místnosti Vytvoří číslo.
Number Slider Posuvník, který vytváří číselné hodnoty.
Řetězec Vytvoří řetězec.
Object.IsNull Určuje, zda má zadaný objekt hodnotu null.
TVORBA
List.Create Vytvoří nový seznam ze zadaných vstupů.
List.Combine Použije kombinátor na každý prvek ve dvou posloupnostech.
Number Range Vytvoří posloupnost čísel v zadaném rozsahu.
Number Sequence Vytvoří posloupnost čísel.
AKCE
List.Chop Rozdělí seznam do sady seznamů, z nichž každý obsahuje dané množství položek.
List.Count Vrací počet položek uložených v daném seznamu.
List.Flatten Vyrovná vnořený seznam seznamů o určitou hodnotu.
List.FilterByBoolMask Filtruje posloupnost na základě vyhledávání příslušných indexů v samostatném seznamu logických hodnot.
List.GetItemAtIndex Vrací položku z daného seznamu, která se nachází na určeném indexu.
List.Map Použije funkci na všechny prvky v seznamu, čím z výsledků vytvoří nový seznam.
List.Reverse Vytvoří nový seznam obsahující položky daného seznamu, ale v obráceném pořadí.
List.ReplaceItemAtIndex Nahradí položku z daného seznamu, která se nachází na daném indexu.
List.ShiftIndices Posune indexy v seznamu doprava o zadané množství.
List.TakeEveryNthItem Načte položky ze zadaného seznamu na indexech, které jsou násobky dané hodnoty s daným odsazením.
List.Transpose Prohodí řádky a sloupce v seznamu seznamů. Pokud jsou některé řádky kratší než jiné, budou jako zástupné znaky do výsledného pole vloženy hodnoty null, tak aby pole stále bylo pravoúhlé.
AKCE
Pokud Podmíněný výraz. Zkontroluje booleovskou hodnotu testovacího vstupu. Pokud má testovací vstup hodnotu true, výsledný výstup bude mít hodnotu true, v opačném případě bude mít hodnotu false.
AKCE
Math.Cos Vrací kosinus úhlu.
Math.DegreesToRadians Převede úhel ve stupních na úhel v radiánech.
Math.Pow Umocní číslo na danou mocninu.
Math.RadiansToDegrees Převede úhel v radiánech na úhel ve stupních.
Math.RemapRange Upraví rozsah seznamu čísel při zachování poměru rozložení.
Math.Sin Najde sinus úhlu.
Formula Vyhodnocuje matematické vzorce. K vyhodnocení používá NCalc. Viz http://ncalc.codeplex.com
Map Mapuje hodnotu do vstupního rozsahu.
AKCE
String.Concat Zřetězí více řetězců do jediného řetězce.
String.Contains Určuje, zda zadaný řetězec obsahuje daný dílčí řetězec.
String.Join Zřetězí více řetězců do jediného řetězce, přičemž vloží daný oddělovač mezi každý spojený řetězec.
String.Split Rozdělí jeden řetězec na seznam řetězců, s dělením určeným podle daných oddělovacích řetězců.
String.ToNumber Převádí řetězec na celé číslo nebo hodnotu typu double.
TVORBA
Circle.ByCenterPointRadius Vytvoří kružnici se zadaným středem a poloměrem v globální rovině XY, s rovinou Z jako normálou.
Circle.ByPlaneRadius Vytvoří kružnici vystředěnou na počátku vstupní roviny (kořenu), ležící ve vstupní rovině, se zadaným poloměrem.
TVORBA
CoordinateSystem.ByOrigin Vytvoří systém CoordinateSystem s počátkem ve vstupním bodu, s osami X a Y nastavenými jako osy X a Y v GSS.
CoordinateSystem.ByCyclindricalCoordinates Vytvoří systém CoordinateSystem v zadaných válcových souřadnicových parametrech s ohledem na zadaný souřadnicový systém.
TVORBA
Cuboid.ByLengths Vytvoří kvádr vystředěný na počátek GSS, se šířkou, délkou a výškou.
Cuboid.ByLengths (origin)
Vytvoří kvádr vystředěný na vstupním bodu, s určenou šířkou, délkou a výškou.
Cuboid.ByLengths (coordinateSystem)
Vytvoří kvádr vystředěný na počátek GSS, se šířkou, délkou a výškou.
Cuboid.ByCorners
Vytvoří kvádr s rozsahem od dolního bodu po horní bod.
Cuboid.Length
Vrátí vstupní rozměry kvádru, NE skutečné globální rozměry prostoru. **
Cuboid.Width
Vrátí vstupní rozměry kvádru, NE skutečné globální rozměry prostoru. **
Cuboid.Height
Vrátí vstupní rozměry kvádru, NE skutečné globální rozměry prostoru. **
BoundingBox.ToCuboid
Získá hraniční kvádr jako objemový kvádr.
**Jinými slovy, pokud vytvoříte šířku kvádru (osa X) o délce 10 a transformujete ji na souřadnicový systém s 2krát větším měřítkem v ose X, šířka bude stále 10. ASM neumožňuje extrahovat vrcholy tělesa v předvídatelném pořadí, takže po transformaci není možné určit rozměry.
AKCE
Curve.Extrude (distance) Vysune křivku ve směru normálového vektoru.
Curve.PointAtParameter Získá bod na křivce v určeném parametru mezi objekty StartParameter() a EndParameter().
AKCE
Geometry.DistanceTo Získá vzdálenost od této geometrie k jiné.
Geometry.Explode Rozdělí složené nebo neoddělené prvky do součástí jejich komponent.
Geometry.ImportFromSAT Seznam importovaných geometrií
Geometry.Rotate (basePlane) Otočí objekt kolem počátku roviny a normály o zadaný počet stupňů.
Geometry.Translate Posune libovolný typ geometrie o zadanou vzdálenost v daném směru.
TVORBA
Line.ByBestFitThroughPoints Vytvoří čáru nejlépe aproximující rozptýlené vykreslení bodů.
Line.ByStartPointDirectionLength Vytvoří přímou čáru od počátečního bodu, která se prodlouží ve směru vektoru o zadanou délku.
Line.ByStartPointEndPoint Vytvoří rovnou čáru mezi dvěma vstupními body.
Line.ByTangency Vytvoří tečnu ke vstupní křivce, umístěnou v bodu parametru vstupní křivky.
DOTAZ
Line.Direction Směr křivky.
Tvorba
NurbsCurve.ByControlPoints Pomocí explicitních řídicích bodů vytvoří objekt BSplineCurve.
NurbsCurve.ByPoints Vytvoří objekt BSplineCurve pomocí interpolace mezi body.
Tvorba
NurbsSurface.ByControlPoints Vytvoří objekt NurbsSurface pomocí explicitních řídicích bodů se zadanými stupni U a V.
NurbsSurface.ByPoints Vytvoří objekt NurbsSurface s určenými interpolovanými body a stupni U a V. Výsledný povrch bude procházet všemi body.
TVORBA
Plane.ByOriginNormal Vytvoří rovinu vystředěnou na kořenový bod pomocí vstupního normálového vektoru.
Plane.XY Vytvoří rovinu v prostoru XY.
TVORBA
Point.ByCartesianCoordinates Vytvoří bod v daném souřadnicovém systému pomocí 3 kartézských souřadnic.
Point.ByCoordinates (2d) Vytvoří bod v rovině XY pomocí dvou kartézských souřadnic. Komponenta Z je 0.
Point.ByCoordinates (3d) Vytvoří bod daný 3 kartézskými souřadnicemi.
Point.Origin Získá bod počátku (0,0,0).
AKCE
Point.Add Přidá k bodu vektor. Stejné jako Translate (Vector).
DOTAZ
Point.X Získá komponentu X bodu.
Point.Y Získá komponentu Y bodu.
Point.Z Získá komponentu Z bodu.
TVORBA
Polycurve.ByPoints Vytvoří objekt PolyCurve z posloupnosti čar propojujících body. U uzavřené křivky by měl poslední bod být ve stejném umístění jako počáteční bod.
TVORBA
Rectangle.ByWidthLength (Plane) Vytvoří obdélník vystředěný na kořen vstupní roviny se vstupní šířkou (délka osy X roviny) a délkou (délka osy Y roviny).
TVORBA
Sphere.ByCenterPointRadius Vytvoří těleso (kouli) vystředěné na vstupní bod se zadaným poloměrem.
TVORBA
Surface.ByLoft Vytvoří povrch pomocí šablonování mezi křivkami vstupního příčného řezu.
Surface.ByPatch Vytvoří povrch vyplněním vnitřní části uzavřené hranice definované vstupními křivkami.
AKCE
Surface.Offset Odsadí povrch ve směru normály povrchu o zadanou vzdálenost.
Surface.PointAtParameter Vrátí bod v zadaných parametrech U a V.
Surface.Thicken Rozšíří plochu na těleso vysunutím ve směru normál povrchu na obou stranách povrchu.
TVORBA
UV.ByCoordinates Vytvoří prvek UV ze dvou hodnot typu double.
TVORBA
Vector.ByCoordinates Vytvoří vektor pomocí 3 euklidovských souřadnic.
Vector.XAxis Získá kanonický vektor osy X (1,0,0).
Vector.YAxis Získá kanonický vektor osy Y (0,1,0).
Vector.ZAxis Získá kanonický vektor osy Z (0,0,1).
AKCE
Vector.Normalized Získá normalizovanou verzi vektoru.
TVORBA
CoordinateSystem.ByOrigin Vytvoří systém CoordinateSystem s počátkem ve vstupním bodu, s osami X a Y nastavenými jako osy X a Y v GSS.
CoordinateSystem.ByCyclindricalCoordinates Vytvoří systém CoordinateSystem v zadaných válcových souřadnicových parametrech s ohledem na zadaný souřadnicový systém.
+ Součet
- Odečítání
* Součin
/ Podíl
% Modulární dělení nalezne zbytek prvního vstupu po dělení druhým vstupem.
< Menší než
> Větší než
== Zkoušky rovnosti pro rovnost mezi dvěma hodnotami.
Bod není definován ničím jiným než jednou nebo více hodnotami, které se nazývají souřadnice. Počet hodnot souřadnic, které je potřeba definovat, závisí na souřadnicovém systému nebo kontextu, ve kterém se bod nachází.
Nejběžnější typ bodu v aplikaci Dynamo existuje v našem trojrozměrném globálním souřadnicovém systému a má tři souřadnice [X,Y,Z] (3D bod v aplikaci Dynamo).
2D bod v aplikaci Dynamo má dvě souřadnice [X,Y].
Parametry křivek i povrchů jsou spojité a přesahují hranu dané geometrie. Protože tvary, které definují parametrický prostor, se nacházejí v trojrozměrném globálním souřadnicovém systému, můžeme vždy převést parametrickou souřadnici do „Globální“ souřadnice. Například bod [0.2, 0.5] na povrchu je stejný jako bod [1.8, 2.0, 4.1] v globálních souřadnicích.
Bod v předpokládaných globálních souřadnicích XYZ
Bod relativní k danému souřadnicovému systému (válcový)
Bod jako souřadnice UV na povrchu
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pokud je geometrie jazykem modelu, pak body jsou abecedou. Body jsou základem, na kterém je vytvořena veškerá další geometrie – k vytvoření křivky potřebujeme alespoň dva body, k vytvoření polygonu nebo plochy sítě potřebujeme alespoň tři body, a tak dále. Definování polohy, pořadí a vztahu mezi body (zkuste funkci sinus) umožňuje definovat geometrii vyššího řádu, například věci, které známe jako kružnice nebo křivky.
Kružnice vytvořená pomocí funkcí
x=r*cos(t)
ay=r*sin(t)
.Sinusoida vytvořená pomocí funkcí
x=(t)
ay=r*sin(t)
.
Body mohou existovat také v dvojrozměrném souřadnicovém systému. Konvence má různé písmeno označující prostor, se kterým pracujete – můžeme použít [X,Y] na rovině nebo [U,V], na ploše.
Bod v euklidovském souřadnicovém systému: [X,Y,Z]
Bod v souřadnicovém systému parametru křivky: [t]
Bod v souřadnicovém systému parametru povrchu: [U,V]
Vektor je vyjádřením velikosti a směru. Můžete si jej představit jako šipku zrychlující danou rychlostí do určitého směru. Jedná se o klíčovou komponentou pro naše modely v aplikaci Dynamo. Všimněte si, že protože jsou v abstraktní kategorii „Pomocníci“, když vytvoříme vektor, v náhledu pozadí nic neuvidíme.
Úsečku můžeme použít jako náhradu pro náhled vektoru.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Rovina je dvourozměrný povrch. Můžete si jej představit jako plochý povrch, která se neomezeně rozprostírá. Každá rovina má počátek, směr X, směr Y a směr Z (nahoru).
I když jsou abstraktní, roviny mají polohu počátku, aby je bylo možné umístit do prostoru.
V aplikaci Dynamo se roviny rendrují v náhledu pozadí.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Souřadnicový systém je systém, který slouží k určení umístění bodů nebo jiných geometrických prvků. Obrázek níže vysvětluje, jak vypadá v aplikaci Dynamo a co představují jednotlivé barvy.
I když jsou abstraktní, souřadnicové systémy mají také počáteční polohu, takže je můžeme umístit do prostoru.
V aplikaci Dynamo jsou souřadnicové systémy vykreslovány v náhledu na pozadí jako bod (počátek) a úsečky definující osy (podle konvence je osa X červená, osa Y zelená a osa Z modrá).
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Vektory, roviny a souřadnicové systémy tvoří primární skupinu abstraktních typů geometrie. Pomáhají definovat umístění, orientaci a prostorový kontext pro jinou geometrii, která popisuje tvary. Pokud řeknu, že jsem v New Yorku na 42. ulici a Broadway (souřadnicový systém), stojím na úrovni ulice (Rovina), dívám se na sever (Vektor), použil jsem tyto „Pomoci“, abych definoval, kde jsem. Totéž platí pro produkt krytu telefonu nebo mrakodrap – potřebujeme tento kontext k vývoji modelu.
Vektor je geometrické množství popisující směr a velikost. Vektory jsou abstraktní, tj. představují množství, nikoli geometrický prvek. Vektory lze snadno zaměnit s body, protože oba jsou tvořeny seznamem hodnot. Klíčový rozdíl je: Body popisují pozici v daném souřadnicovém systému, zatímco vektory popisují relativní rozdíl v pozici, který je stejný jako označení „směr“.
Pokud je představa relativního rozdílu matoucí, představte si vektor AB jako „stojím v bodě A a dívám se směrem k bodu B“. Směr odtud (A) tam (B) je náš vektor.
Vektory dále rozdělíme na jejich složky pomocí stejné AB notace:
Počáteční bod vektoru se nazývá Základna.
Koncový bod vektoru se nazývá Špička nebo Směr.
Vektor AB není stejný jako Vektor BA – ten by mířil v opačném směru.
Pokud někdy budete potřebovat zábavné odlehčení na téma vektorů (a jejich abstraktní definice), podívejte se na klasickou komedii Připoutejte se, prosím! a poslechněte si často citovanou hlášku:
Roger, Roger. Jaký je náš vektor, Viktore?
Roviny jsou dvojrozměrné abstraktní „Pomůcky“. Konkrétně, roviny jsou koncepčně „ploché“, a nekonečně se roztahují ve dvou směrech. Obvykle se znázorňují jako menší obdélník poblíž jejich počátku.
Možná si myslíte: „Počkat! Počátek? To zní jako souřadnicový systém... jako ten, který používám k modelování v softwaru CAD.“
A máte pravdu. Většina modelovacích aplikací využívá stavební roviny nebo „hladiny“ k definování místního dvourozměrného kontextu, ve kterém lze tvořit výkresy. XY, XZ, YZ – nebo – rovina sever, jihovýchod může znít povědomě. Toto jsou všechny roviny, které definují nekonečný „plochý“ kontext. Roviny nemají hloubku, ale pomáhají nám také popsat směr.
Pokud chápeme roviny, jsme malý krok od pochopení souřadnicových systémů. Rovina má všechny stejné součásti jako souřadnicový systém za předpokladu, že se jedná o standardní souřadnicový systém „Euclidean“ nebo „XYZ“.
Existují však jiné alternativní souřadnicové systémy, například válcový nebo sférický. Jak uvidíme v pozdějších částech, souřadnicové systémy lze použít také na jiné typy geometrie k definování umístění na dané geometrii.
Přidání alternativních souřadnicových systémů – válcových, kulových
Pokud chcete vytvářet složitější modely, které nelze vytvořit z jedné plochy, nebo pokud chcete explicitně definovat objem, je nutné využít tělesa (a polyplochy). I obyčejná krychle je dost složitá na to, aby potřebovala šest ploch (pro každou stěnu jednu). Tělesa na rozdíl od ploch nabízejí dva klíčové koncepty – přesnější topologický popis (stěny, hrany, vrcholy) a booleovské operace.
K úpravě těles můžete použít booleovské operace. Pojďme vytvořit ostnatou kouli pomocí několika booleovských operací.
Sphere.ByCenterPointRadius: Vytvořte základní těleso.
Topology.Faces, Face.SurfaceGeometry: Vytvořte dotaz na stěny tělesa a převeďte je na geometrie ploch – v tomto případě pracujeme s koulí, která má pouze jednu stěnu.
Cone.ByPointsRadii: Pomocí bodů na ploše vytvořte kužely.
Solid.UnionAll: Sjednoťte kužely a kouli.
Topology.Edges: Vytvořte dotaz na hrany nového tělesa
Solid.Fillet: Zaoblete hrany ostnaté koule
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Booleovské operace jsou složité a jejich výpočet může být pomalý. Pomocí funkce „zmrazení“ je možné pozastavit výpočet vybraných uzlů a všech následných uzlů.
1. Zmrazte operaci sjednocení těles tím, že kliknete pravým tlačítkem myši a vyberete možnost Zmrazit
2. Vybraný uzel a všechny následné uzly se zobrazí světle šedou průhlednou barvou a související dráty budou zobrazeny přerušovaně. Náhled ovlivněné geometrie bude také zobrazen světle šedou průhlednou barvou. Nyní můžete měnit předcházející hodnoty, aniž by došlo k výpočtu booleovského sjednocení.
3. Chcete-li zmrazení zrušit, klikněte pravým tlačítkem a zrušte výběr možnosti Zmrazit.
4. Všechny ovlivněné uzly a geometrie se aktualizují a zobrazí se běžným způsobem.
Další informace o zmrazení uzlů naleznete v části Uzly a dráty.
Tělesa se skládají z jedné nebo více ploch, které tvoří objem tím, že definují hranici, která rozděluje prostor na vnitřní a vnější. Aby byl objem považován za těleso, musí být neprodyšně uzavřen, nezávisle na počtu ploch. Tělesa lze vytvářet spojováním ploch nebo polyploch nebo pomocí operací, například spojením profilů, tažením nebo rotací. Koule, krychle, kužel a válec jsou také tělesy. Krychle s odebranou stěnou se považuje za polyplochu s podobnými vlastnostmi, ale nejedná se přímo o těleso.
Rovina se skládá z jedné plochy a nejedná se o těleso.
Koule je tvořena jednou plochou a je tělesem.
Kužel je tvořen dvěma spojenými plochami utvářejícími těleso.
Válec je tvořen třemi spojenými plochami utvářejícími těleso.
Krychle je tvořena šesti spojenými plochami utvářejícími těleso.
Tělesa se skládají z prvků třech typů: vrcholů, hran a stěn. Stěny jsou plochy, které těleso tvoří. Hrany jsou křivky, které definují propojení sousedních hran a vrcholy jsou počáteční a koncové body těchto křivek. Tyto prvky je možné dotazovat prostřednictvím uzlů topologie.
Stěny
Hrany
Vrcholy
Tělesa lze upravit zaoblením nebo zkosením jejich hran, aby se odstranily ostré rohy a úhly. Operace zkosení vytvoří šikmou plochu mezi dvěma stěnami, zatímco zaoblení mezi nimi vytvoří plynulý přechod se zachováním tečnosti.
Krychlové těleso
Zkosená krychle
Zaoblená krychle
Booleovské operace s tělesy kombinují dvě nebo více těles. Jedna booleovská operace ve skutečnosti provádí čtyři operace:
Průnik dvou nebo více objektů.
Rozdělení těchto objektů v průsečících.
Odstranění nežádoucích částí geometrie.
Spojení celé geometrie dohromady.
Sjednocení: Odebere překrývající se části těles a spojí je do jednoho tělesa.
Rozdíl: Odečte jedno těleso od druhého. Odečítané těleso se nazývá nástroj. Je možné určit, které těleso bude použito jako nástroj.
Průsečík: Zachová pouze společný objem obou těles.
UnionAll: Operace sjednocení s koulí a kužely směřujícími ven.
DifferenceAll: Operace rozdílu s koulí a kužely směřujícími dovnitř.
V oblasti výpočetního modelování jsou jednou z nejrozšířenějších forem reprezentace 3D geometrie. Geometrie sítě je obvykle tvořena skupinou čtyřúhelníků nebo trojúhelníků. Může se jednat o lehkou a flexibilní alternativu k práci s NURBS. Sítě se používají ve všech ohledech od rendrování a vizualizací až po digitální výrobu a 3D tisk.
Aplikace Dynamo definuje sítě pomocí datové struktury vrcholu plochy. Na základní úrovni je tato struktura jednoduchou kolekcí bodů, které jsou seskupeny do polygonů. Body sítě se nazývají vrcholy, zatímco polygony podobné povrchu se nazývají plochy.
K vytvoření sítě je potřeba seznam vrcholů a systém seskupení těchto vrcholů do plochy nazývané skupina indexů.
Seznam vrcholů
Seznam indexových skupin pro definování ploch
Knihovna také poskytuje nástroje k úpravám sítí, opravě sítí nebo extrahování horizontálních řezů pro použití ve výrobě.
Síť je kolekce čtyřúhelníků a trojúhelníků, které představují geometrii povrchu nebo tělesa. Podobně jako u těles zahrnuje struktura objektu sítě vrcholy, hrany a plochy. Další vlastnosti, které činí sítě jedinečnými, například normály, jsou také jedinečné.
Vrcholy sítě
Hrany sítě *Hrany pouze s jednou sousední plochou se nazývají „Nahé“. Všechny ostatní hrany jsou „Oblečené“.
Plochy sítě
Vrcholy sítě jsou jednoduše seznam bodů. Index vrcholů je velmi důležitý při vytváření sítě nebo při získávání informací o struktuře sítě. Pro každý vrchol existuje také odpovídající normála vrcholu (vektor), která popisuje průměrný směr připojených ploch, a pomáhá nám pochopit „vnitřní“ a „vnější“ orientaci sítě.
Vrcholy
Normály vrcholu
Plocha je uspořádaný seznam tří nebo čtyř vrcholů. Reprezentace „povrchu“ plochy sítě je proto implikována podle polohy indexovaných vrcholů. Seznam vrcholů, které tvoří síť, již máme. Místo toho, aby jednotlivé body definovaly plochu, jednoduše použijeme index vrcholů. To nám také umožňuje použít stejný vrchol ve více než jedné ploše.
Čtyřhranná plocha vytvořená pomocí indexů 0, 1, 2 a 3
Trojúhelníková plocha vytvořená pomocí indexů 1, 4 a 2 Všimněte si, že indexové skupiny lze posunout v jejich pořadí – pokud je posloupnost seřazena proti směru hodinových ručiček, bude plocha správně definována
Jak se liší geometrie sítě od geometrie NURBS? Kdy můžete chtít použít jedno místo druhého?
V předchozí kapitole jsme viděli, že povrchy NURBS jsou definovány řadou křivek NURBS, které se pohybují ve dvou směrech. Tyto směry jsou označeny U
a V
a umožňují parametrizaci povrchu NURB podle dvourozměrné povrchové domény. Samotné křivky jsou uloženy jako rovnice v počítači, takže výsledné povrchy lze vypočítat na libovolně velkou přesnost. Může být však obtížné spojit několik povrchů NURBS dohromady. Spojením dvou povrchů NURBS vznikne polypovrch, kde různé části geometrie budou mít různé parametry UV a definice křivek.
Povrch
Křivka Isoparametric (Isoparm)
Řídicí bod povrchu
Řídicí polygon povrchu
Izoparametrický bod
Povrch rámu
Síť
Nahá hrana
Síť sítě
Hrany sítě
Normála vrcholu
Plocha sítě / Normála plochy sítě
Sítě se naopak skládají z diskrétního počtu přesně definovaných vrcholů a ploch. Síť vrcholů obecně nelze definovat pomocí jednoduchých souřadnic UV
a protože jsou plochy diskrétní, je míra přesnosti zabudována do sítě a lze ji změnit pouze zpřesněním sítě a přidáním dalších ploch. Díky nedostatku matematických popisů mohou sítě pružněji reprezentovat složité geometrie v rámci jediné sítě.
Dalším důležitým rozdílem je rozsah, ve kterém místní změna v geometrii sítě nebo NURBS ovlivňuje celý tvar. Přesun jednoho vrcholu sítě ovlivní pouze plochy, které sousedí s daným vrcholem. V površích NURBS je rozsah vlivu složitější a závisí na stupni povrchu a také na váhách a uzlech řídicích bodů. Obecně platí, že přesunutím jednoho řídicího bodu v povrchu NURBS dojde k hladší a rozsáhlejší změně geometrie.
Povrch NURBS – přesun řídicího bodu má vliv napříč celým tvarem
Geometrie sítě – přesun vrcholu má vliv pouze na přilehlé prvky
Jedna podoba, která může být užitečná, je porovnání vektorového obrázku (složeného z úseček a křivek) s rastrovým obrázkem (složeným z jednotlivých pixelů). Při přiblížení vektorového obrázku zůstanou křivky ostré a jasné, zatímco přiblížení rastrového obrázku má za následek zvětšení jednotlivých pixelů. V této analogii lze povrchy NURBS porovnat s vektorovým obrázkem, protože existuje hladký matematický vztah, zatímco síť se chová podobně jako rastrový obrázek s nastaveným rozlišením.
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ů.
Při vizuálním programování můžeme velmi rychle vygenerovat velké množství dat a vyžadovat způsob správy jejich hierarchie. Jedná se o úlohu datových struktur, organizačních schémat, ve kterých ukládáme data. Specifika datových struktur a způsob jejich použití se liší mezi jednotlivými programovacími jazyky.
V aplikaci Dynamo přidáme hierarchii k datům prostřednictvím seznamů. To prozkoumáme v pozdějších kapitolách, ale začneme jednoduše:
Seznam představuje kolekci položek umístěných do jedné struktury dat:
Mám pět prstů (položek) na ruce (seznam).
Deset domů (položek) je na mojí ulici (seznam).
Uzel Number Sequence definuje seznam čísel pomocí vstupů start, amount a step. Pomocí těchto uzlů jsme vytvořili dva samostatné seznamy deseti čísel, z nichž jeden se pohybuje v rozsahu 100–109 a druhý se pohybuje v rozsahu 0–9.
Uzel List.GetItemAtIndex slouží k výběru položky v seznamu na určitém indexu. Při výběru hodnoty 0 se první položka zobrazí v seznamu (v tomto případě 100).
Pokud použijeme stejný postup na druhý seznam, získáme hodnotu 0, první položku v seznamu.
Nyní sloučíme dva seznamy do jednoho pomocí uzlu List.Create. Uzel vytvoří seznam seznamů. Tím se změní struktura dat.
Pokud použijete znovu parametr List.GetItemAtIndex, s indexem nastaveným na hodnotu 0, získáme první řádek seznamu seznamů. To znamená, že se seznam považuje za položku, což se poněkud liší od ostatních skriptovacích jazyků. V pozdějších kapitolách se dostaneme k pokročilejší manipulaci se seznamy a datovými strukturami.
Základní koncept pro pochopení hierarchie dat v aplikaci Dynamo: S ohledem na datovou strukturu jsou seznamy považovány za položky. Jinými slovy, aplikace Dynamo funguje s postupem shora dolů pro pochopení datových struktur. Co to znamená? Pojďme to projít s příkladem.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto prvním příkladu sestavíme válec se skořepinou, který prochází hierarchií geometrie, o níž se v této části pojednává.
1. Přidejte uzel Point.ByCoordinates – po přidání uzlu na pracovní plochu vidíme bod v počátku osnovy náhledu aplikace Dynamo. Výchozí hodnoty vstupů x,y a z jsou 0.0, což nám dává bod v tomto umístění.
2. Plane.ByOriginNormal – Dalším krokem v hierarchii geometrie je rovina. Existuje několik způsobů, jak vytvořit rovinu, my pro vstup použijeme počátek a normálu. Počátek je uzel bodu vytvořený v předchozím kroku.
Vector.ZAxis – Toto je sjednocený vektor ve směru Z. Všimněte si, že nejsou k dispozici vstupy, pouze vektor o hodnotě [0,0,1]. Toto je vstupní hodnota normal pro uzel Plane.ByOriginNormal. Tím se v náhledu aplikace Dynamo zobrazí obdélníková rovina.
3. Circle.ByPlaneRadius – Rozšiřujeme hierarchii. Nyní vytvoříme oblouk z roviny v předchozím kroku. Po zapojení do uzlu se v počátku zobrazí kružnice. Výchozí poloměr v uzlu je hodnota 1.
4. Curve.Extrude – Teď provedeme vylepšení přidáním hloubky a přechodem do třetího rozměru. Tento uzel vytvoří povrch z křivky jejím vysunutím. Výchozí vzdálenost v uzlu je 1 a měli bychom ve výřezu vidět válec.
5. Surface.Thicken – Tento uzel nám umožňuje vytvořit uzavřené těleso odsazením povrchu o danou vzdálenost a uzavřením tvaru. Výchozí hodnota tloušťky je 1 a válec se skořepinou je ve výřezu zobrazen v souladu s těmito hodnotami.
6. Number Slider – Místo použití výchozích hodnot pro všechny tyto vstupy přidejte do modelu parametrický ovládací prvek.
Domain Edit – po přidání posuvníku čísla na pracovní plochu klikněte na stříšku v levé horní části a zobrazte možnosti domény.
Min/Max/Step - Změňte hodnoty min, max a step na 0,2 a 0.01. Toto provedeme, abychom mohli řídit velikost celkové geometrie.
7. Number Sliders – Ve všech výchozích vstupech zkopírujte a vložte tento posuvník čísla (vyberte posuvník, stiskněte Ctrl+C a pak Ctrl+V) několikrát, dokud nebudou mít všechny vstupy s výchozími hodnotami posuvník. Aby definice fungovala, některé hodnoty posuvníku musí být větší než nula (například k zesílení plochy je potřeba hloubka vysunutí).
8. Nyní jsme vytvořili parametrický válec se skořepinou s těmito posuvníky. Zkuste některé z těchto parametrů změnit a sledujte, jak se geometrie dynamicky aktualizuje ve výřezu aplikace Dynamo.
Number Sliders – Přidali jsme na plochu hodně posuvníků a je potřeba vyčistit rozhraní nástroje, který jsme právě vytvořili. Klikněte pravým tlačítkem na jeden posuvník, vyberte položku Přejmenovat a změňte název každého posuvníku na název odpovídající jeho parametru (Thickness (Tloušťka), Radius (Poloměr), Height (Výška) atd.).
9. V tomto okamžiku jsme vytvořili úžasnou věc s rozšiřujícím se válcem. Toto je aktuálně jeden objekt, podívejme se, jak vytvořit pole válců, které zůstávají dynamicky propojeny. Za tímto účelem vytvoříme seznam válců, místo práce s jednou položkou.
Addition (+) – Naším cílem je přidat řadu válců vedle válce, který jsme vytvořili. Pokud chceme přidat jeden válec vedle aktuálního válce, je nutné zvážit poloměr válce a tloušťku jeho skořepiny. Toto číslo získáme sečtením dvou hodnot posuvníků.
10. Tento krok je mnohem náročnější, takže ho projdeme pomalu: cílem je vytvořit seznam čísel, která definují umístění každého válce v řadě.
a. Multiplication – Nejprve chceme vynásobit hodnotu z předchozího kroku hodnotou 2. Hodnota z předchozího kroku představuje poloměr a chceme válec posunout o plný průměr.
b. Number Sequence – Pomocí tohoto uzlu vytvoříme pole čísel. První vstup je uzel multiplication z předchozího kroku do hodnoty step. Hodnotu start lze nastavit na 0.0 pomocí uzlu number.
c. Integer Slider – Pro hodnotu amount připojíme posuvník celého čísla. Tím se definuje počet vytvořených válců.
d. Output – Tento seznam zobrazuje vzdálenost přesunutou pro každý válec v poli a je parametricky řízen původními posuvníky.
11. Tento krok je dostatečně jednoduchý – zadejte posloupnost definovanou v předchozím kroku do vstupu x původního uzlu Point.ByCoordinates. Tím nahradíte posuvník pointX, který lze odstranit. Nyní se ve výřezu zobrazuje pole válců (zkontrolujte, zda je číslo posuvníku větší než 0).
12. Řetěz válců je stále dynamicky spojen se všemi posuvníky. Upravte každý posuvník, abyste viděli aktualizaci definice.
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.
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.
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.
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.
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.
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.
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:
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í.
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.
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.
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.
Rozsah barev je podobný uzlu Remap Range ve cvičení : 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ů.
Díky tomu booleovské operace šetří velké množství času. Existují tři booleovské operace pro tělesa, které určují, která část geometrie zůstane zachována.
Aplikace Dynamo kromě těchto tří operací obsahuje také uzly Solid.DifferenceAll a Solid.UnionAll, které provádějí rozdíl a sjednocení s více tělesy.
Možnosti sítě aplikace Dynamo lze rozšířit instalací balíčku . Balíček Dynamo Mesh Toolkit poskytuje nástroje k importu sítí z externích formátů souborů, vytvoření sítě z objektů geometrie aplikace Dynamo a ručnímu vytvoření sítí pomocí jejich vrcholů a indexů.
Příklad použití tohoto balíčku naleznete v .
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 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.
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 .
V tomto cvičení použijeme metody dotazování a manipulace s řetězci, abychom dekonstruovali poslední sloku díla Roberta Frosta . 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ě.
Object.IsNull
obj
booleovský
Součet (+)
var[]...[], var[]...[]
var[]...[]
Rozdíl (-)
var[]...[], var[]...[]
var[]...[]
Násobení (*)
var[]...[], var[]...[]
var[]...[]
Dělení (/)
var[]...[], var[]...[]
var[]...[]
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
Barva ARGB (Color.ByARGB)
A,R,G,B
barva
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
Odstín (Colour.Hue)
barva
Odstín
Sytost (Colour.Saturation)
barva
Sytost
Jas (Colour.Brightness)
barva
Jas
V seznamech lze uspořádat data. V operačním systému počítače existují soubory a složky. V aplikaci Dynamo se jim říká položky a seznamy. Podobně jako v operačním systému, data je možné vytvářet, upravovat a dotazovat mnoha způsoby. Tato kapitola popisuje správu seznamů v aplikaci Dynamo.
Seznam je kolekce prvků nebo položek. Vezměte si například trs banánů. Každý banán je položka v seznamu (nebo v trsu). Je jednodušší sebrat celý trs banánů, než brát každý banán jednotlivě, a to samé platí pro seskupení prvků podle parametrických vztahů v datové struktuře.
Autor fotografie: Augustus Binu.
Při nákupu potravin naskládáme všechny zakoupené položky do tašky. Tato taška je také seznamem. Pokud chceme vyrobit banánový chléb, potřebujeme 3 trsy banánů (chceme vyrobit hodně banánového chleba). Taška představuje seznam trsů banánů a každý trs představuje seznam banánů. Taška je seznam seznamů (dvourozměrný) a trs banánů je seznam (jednorozměrný).
V aplikaci Dynamo jsou data seznamu seřazena a první položka v každém seznamu má index „0“. Níže rozebereme způsob, jak v aplikaci Dynamo definovat seznamy a jak spolu více seznamů vzájemně souvisí.
Jedna věc, která se může zdát podivnou, je, že první index seznamu je vždy 0, nikoli 1. Čili pokud je řeč o první položce seznamu, ve skutečnosti máme na mysli položku s indexem 0.
Pokud byste například měli spočítat prsty na pravé ruce, existuje šance, že byste napočítali od 1 do 5. Pokud byste však vložili prsty do seznamu, aplikace Dynamo by jim přiřadila index 0 až 4. Ačkoli se toto může zdát začátečníkům v programování velmi zvláštní, nulové indexy jsou ve většině výpočetních systémů běžnou praxí.
Všimněte si, že v seznamu stále máme 5 položek; je to proto, že seznam používá systém počítání od nuly. A položky uložené v seznamu nemusí být jen čísla. Mohou to být položky jakéhokoli datového typu, který aplikace Dynamo podporuje, například body, křivky, povrchy, rodiny atd.
a. Index
b. Bod
c. Položka
Nejjednodušším způsobem, jak se je možné se dívat na datový typ uložený v seznamu je nejčastěji propojení uzlu Watch s výstupem jiného uzlu. Ve výchozím nastavení uzel Watch automaticky zobrazí všechny indexy na levé straně seznamu a data zobrazí vpravo.
Tyto indexy jsou velice důležitým prvkem při práci se seznamy.
Vstupy a výstupy náležející k seznamům se liší podle toho, jaký uzel aplikace Dynamo se použije. Jako příklad použijte seznam 5 bodů a připojte tento výstup ke dvěma různým uzlům aplikace Dynamo: PolyCurve.ByPoints a Circle.ByCenterPointRadius:
Vstup points uzlu PolyCurve.ByPoints hledá strukturu „Point[]“. Tato struktura představuje seznam bodů.
Výstup uzlu PolyCurve.ByPoints je samostatný objekt PolyCurve vytvořený ze seznamu pěti bodů.
Vstup centerPoint uzlu Circle.ByCenterPointRadius žádá o objekt „Point“.
Výstup uzlu Circle.ByCenterPointRadius je seznam pěti kružnic, jejichž středy odpovídají původnímu seznamu bodů.
Vstupní data pro uzly PolyCurve.ByPoints a Circle.ByCenterPointRadius jsou stejná, uzel PolyCurve.ByPoints však předává jeden objekt PolyCurve, zatímco uzel Circle.ByCenterPointRadius předává 5 kružnic se středy v každém bodu. Je to intuitivní: Objekt PolyCurve je vykreslen jako křivka spojující 5 bodů, zatímco kružnice v každém bodu vytvářejí jinou kružnici. Co se tedy děje s daty?
Po přejetí umístění kurzoru nad vstupem points uzlu Polycurve.ByPoints zjistíte, že vstup hledá strukturu „Point[]“. Všimněte si závorek na konci. To představuje seznam bodů a k vytvoření objektu PolyCurve je třeba na vstupu seznam pro každý objekt PolyCurve. Tento uzel proto zhušťuje každý seznam do jednoho objektu PolyCurve.
Na druhou stranu vstup centerPoint uzlu Circle.ByCenterPointRadius žádá objekt „Point“. Tento uzel hledá jeden bod jako položku k definování středu kružnice. Proto ze vstupních dat vznikne pět kružnic. Rozlišování těchto vstupů v aplikaci Dynamo vám pomůže pochopit, jak uzly při zpracování dat fungují.
Porovnávání dat je problém bez čistého řešení. Dochází k němu, pokud má uzel přístup různě velkým vstupům. Změna algoritmu porovnávání dat může vést k naprosto odlišným výsledkům.
Představte si uzel, který tvoří segmenty úseček mezi body (Line.ByStartPointEndPoint). Bude mít dva vstupní parametry, které oba předávají souřadnice bodů:
Nejjednodušším způsobem je spojovat vstupy jedna ku jedné, dokud jeden z datových proudů nedojde na konec. Tomuto se říká algoritmus „Nejkratší seznam“. Jedná se o výchozí chování uzlů aplikace Dynamo:
Algoritmus „Nejdelší seznam“ připojuje vstupy a opakovaně využívá prvky tak dlouho, dokud všechny datové proudy nedojdou na konec:
Metoda „Kartézský součin“ provede všechna možná připojení:
Jak vidíte, existují různé způsoby kreslení čar mezi těmito množinami bodů. Možnosti vázání naleznete po kliknutí pravým tlačítkem na střed uzlu a výběru nabídky „Vázání“.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pomocí tohoto základního souboru znázorníme níže operace vázání tím, že definujeme nejkratší seznam, nejdelší seznam a kartézský součin.
U uzlu Point.ByCoordinates se změní vázání, ale nic jiného se u grafu výše nezmění.
Pokud jako možnost vázání vyberete nejkratší seznam (což je také výchozí možnost), získáte základní diagonální čáru složenou z pěti bodů. Pět bodů je délka kratšího seznamu, takže vázání nejkratšího seznamu se zastaví, jakmile dorazí na konec jednoho ze seznamů.
Změnou vázání na nejdelší seznam získáte diagonální čáru, která se vertikálně rozšíří. Poslední položka v seznamu 5 položek bude opakována tak dlouho, dokud nebude dosaženo délky delšího seznamu, což je stejné chování jako metoda koncepčního diagramu.
Změnou vázání na Kartézský součin získáte všechny kombinace mezi všemi seznamy, což vytvoří osnovu bodů o rozměrech 5x10. Jedná se o datovou strukturu ekvivalentní ke kartézskému součinu, jak je ukázáno v koncepčním diagramu výše, až na to, že data jsou nyní seznamy seznamů. Pokud připojíme objekt PolyCurve, uvidíme, že každý seznam je definovaný hodnotou X, což znamená, že máme řadu vertikálních čar.
Teď, když jsme stanovili, co je to seznam, pojďme si promluvit o operacích, které s ním můžeme provádět. Představte si seznam jako balíček karet. Seznam je balíček a každá karta představuje položku.
Autor fotografie: Christian Gidlöf
Jaké dotazy ze seznamu vytvoříme? Tím získáte přístup k existujícím vlastnostem.
Počet karet v balíčku? 52.
Počet barev? 4.
Materiál? Papír.
Délka? 3.5" nebo 89 mm.
Šířka? 2.5" nebo 64 mm.
Jaké akce můžeme se seznamem provést? Tím se změní seznam podle dané operace.
Můžeme zamíchat balíček.
Můžeme ho seřadit podle hodnot.
Můžeme ho seřadit podle barev.
Můžeme balíček rozdělit.
Můžeme balíček rozdělit rozdáním karet.
Můžeme z balíčku vybrat konkrétní kartu.
Všechny výše uvedené operace mají analogické uzly aplikace Dynamo pro práci se seznamy obecných dat. Níže uvedené lekce ukážou některé základní operace, které můžeme provádět na seznamech.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Obrázek níže je základní graf, ve kterém nakreslíme čáry mezi dvěma kružnicemi, které představují základní operace se seznamy. Prozkoumáme, jak spravovat data v seznamu a jak prezentovat vizuální výsledky pomocí akcí v seznamu níže.
Začněte uzlem Code Block s hodnotou
500;
.Propojte jej se vstupem x uzlu Point.ByCoordinates.
Uzel z předchozího kroku spojte se vstupem origin uzlu Plane.ByOriginNormal.
Pomocí uzlu Circle.ByPlaneRadius spojte uzel z předchozího kroku se vstupem plane.
Pomocí uzlu Code Block určete hodnotu
50;
pro vstup radius. Toto je první kruh, který vytvoříme.Pomocí uzlu Geometry.Translate posuňte kružnici o 100 jednotek ve směru osy Z.
Pomocí uzlu Code Block definujte rozsah deseti čísel mezi 0 a 1 s tímto řádkem kódu:
0..1..#10;
Blok kódu z předchozího kroku propojte se vstupem param dvou uzlů Curve.PointAtParameter. Propojte uzel Circle.ByPlaneRadius se vstupem curve horního uzlu a uzel Geometry.Translate se vstupem curve dolního uzlu.
Pomocí uzlu Line.ByStartPointEndPoint spojte dva uzly Curve.PointAtParameter.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Uzel List.Count je jednoduchý: spočítá počet hodnot v seznamu a vrátí výsledné číslo. Tento uzel je při práci se seznamy seznamů složitější, ale to si předvedeme v následujících částech.
Uzel **List.Count ****** vrací počet řádků v uzlu Line.ByStartPointEndPoint. V tomto případě je to hodnota 10, která souhlasí s počtem bodů vytvořených z původního uzlu Code Block.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
List.GetItemAtIndex je základní způsob, jak dotazovat položku v seznamu.
Nejprve kliknutím pravým tlačítkem myši na uzel Line.ByStartPointEndPoint vypněte jeho náhled.
Pomocí uzlu List.GetItemAtIndex vybereme index 0 nebo první položku v seznamu řádků.
Chcete-li pomocí uzlu List.GetItemAtIndex vybrat jinou položku, změňte hodnotu posuvníku v rozmezí od 0 do 9.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Možnost List.Reverse obrátí pořadí všech položek v seznamu.
Chcete-li správně zobrazit obrácený seznam čar, vytvořte více čar změnou uzlu Code Block na
0..1..#50;
.Duplikujte uzel Line.ByStartPointEndPoint, vložte uzel List.Reverse mezi uzel Curve.PointAtParameter a druhý uzel Line.ByStartPointEndPoint.
Pomocí uzlů Watch3D zobrazte náhled dvou různých výsledků. První zobrazí výsledek bez obráceného seznamu. Čáry se připojují vertikálně k sousedním bodům. Obrácený seznam však spojí všechny body v opačném pořadí v druhém seznamu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
List.ShiftIndices je dobrý nástroj ke tvorbě zkroucení, šroubovicových vzorů nebo jiných podobných manipulací s daty. Tento uzel přemístí položky v seznamu do daného počtu indexů.
Stejným postupem jako při otáčení seznamu připojte uzel List.ShiftIndices k uzlu Curve.PointAtParameter a Line.ByStartPointEndPoint.
Pomocí uzlu Code Block s hodnotou 1 posuňte seznam o jeden index.
Všimněte si, že změna je jemná, ale všechny čáry v dolním uzlu Watch3D se posunuly o jeden index při připojení k druhé sadě bodů.
Pokud například změníme uzel Code Block na větší hodnotu, například 30, všimneme si významného rozdílu mezi příčnými čarami. V tomto případě funguje posun jako čočka kamery, což vytváří v původní válcové formě otočení.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Uzel List.FilterByBooleanMask odebere určité položky podle seznamu logických hodnot nebo podle hodnot true nebo false.
Aby bylo možné vytvořit seznam hodnot true nebo false, je třeba ještě trochu pracovat...
Pomocí uzlu Code Block definujte výraz pomocí této syntaxe:
0..List.Count(list);
. Připojte uzel Curve.PointAtParameter ke vstupu list. Toto nastavení projdeme více v kapitole bloku kódu, ale v tomto případě nám řádek kódu poskytuje seznam reprezentující každý index uzlu Curve.PointAtParameter.Pomocí uzlu %** (modulo)** spojte výstup uzlu _Code Block_se vstupem x a hodnotu 4 se vstupem y. Tak získáme zbytek po dělení seznamu indexů 4. Modulo je velmi užitečné pro vytváření vzorů. Všechny hodnoty budou možné zbytky po dělení 4: 0, 1, 2, 3.
Z uzlu %** (modulo)** víme, že hodnota 0 znamená, že index je dělitelný 4 (0, 4, 8 atd.). Pomocí uzlu == můžeme testovat dělitelnost porovnáním s hodnotou 0.
Uzel Watch zobrazuje pouze toto: máme vzor s hodnotou true/false, který je následující: true, false, false, false....
Pomocí tohoto vzoru true/false připojte vstupní hodnotu masky dvou uzlů List.FilterByBooleanMask.
Spojte uzel Curve.PointAtParameter s každým vstupem seznamu pro List.FilterByBooleanMask.
Výstup Filter.ByBooleanMask čte hodnoty in a out. In představuje hodnoty, které měly hodnotu masky true, zatímco out představuje hodnoty, které měly hodnotu false. Zadáním výstupů in do vstupů startPoint a endPoint uzlu Line.ByStartPointEndPoint jsme vytvořili filtrovaný seznam čar.
Uzel Watch3D ukazuje, že máme méně čar než bodů. Vybrali jsme pouze 25 % uzlů filtrováním pouze hodnot true.
Slovníky představují kolekci dat, která jsou svázána s klíči. Slovníky umožňují vyhledávat, odstraňovat a vkládat data do kolekce.
Slovník si lze představit jako chytrý způsob, jak vyhledávat data.
Funkce pro slovníky byly v aplikaci Dynamo dostupné již delší dobu, verze Dynamo 2.0 však změnila způsob, jakým se s tímto datovým typem pracuje.
Původní obrázek publikován se svolením sixtysecondrevit.com
Kromě uzlů pro slovníky zavádí aplikace Dynamo 2.0 také nové funkce pro slovníky v blocích kódu.
Je možné použít syntaxi podle obrázku níže nebo reprezentaci uzlů v jazyce DesignScript.
Protože je slovník typem objektu, je možné s ním v aplikaci Dynamo provádět následující akce.
Tyto interakce jsou užitečné zejména při spojování dat aplikace Revit s řetězci. Pojďme se podívat na případy užití v aplikaci Revit.
Aplikace Dynamo 2.0 oddělila datový typ slovník od datového typu seznam. Tato změna může výrazně změnit způsob, jakým pracujete s daty. Před verzí 2.0 byly slovníky a seznamy spojeny v jediný datový typ. Stručně řečeno, seznamy byly ve skutečnosti slovníky s celočíselnými klíči.
Slovník je datový typ, který se skládá z kolekce dvojic klíč-hodnota, kde klíč je v rámci kolekce jedinečný. Slovník nemá žádné pořadí a umožňuje vyhledávat hodnoty pomocí klíčů (a nikoliv pomocí hodnot indexů jako u seznamů). V aplikaci Dynamo 2.0 mohou být jako klíče použity pouze řetězce.
Seznam je datový list, který se skládá z kolekce hodnot v určitém pořadí. V aplikaci Dynamo seznamy používají celočíselné hodnoty indexů.
Díky oddělení slovníků od seznamů můžete slovníky používat k rychlému a snadnému ukládání a vyhledávání hodnot, aniž by bylo nutné pamatovat si hodnoty indexů nebo uchovávat data ve striktní struktuře seznamu. Během uživatelského testování jsme zjistili, že nahrazením uzlů GetItemAtIndex
slovníky došlo k výraznému zmenšení velikosti grafu.
Došlo ke změnám syntaxe, která souvisí s inicializací a prací se slovníky a seznamy v blocích kódu.
Slovníky používají následující syntaxi: {key:value}
Seznamy používají následující syntaxi: [value,value,value]
Do knihovny byly přidány nové uzly, které vám pomohou vytvářet, upravovat a dotazovat slovníky.
Seznamy vytvořené v blocích kódu verze 1.x budou po načtení skriptu automaticky převedeny do nové syntaxe seznamu, která používá hranaté závorky [ ]
místo složených závorek { }
\.
V počítačových vědách jsou slovníky, podobně jako seznamy, kolekcemi objektů. Zatímco seznamy mají položky v určitém pořadí, slovníky jsou neuspořádané kolekce. Nejsou závislé na pořadových číslech (indexech), používají místo nich klíče.
Na obrázku níže je znázorněno potenciální využití slovníků. Slovníky se často používají ke spojení dvou různých položek, které spolu nemusí souviset. V našem případě propojujeme španělské slovo s anglickým pro později vyhledání.
Vytvoří slovník, který propojí obě části dat.
Získá hodnotu s daným klíčem.
Aplikace Dynamo 2.0 nabízí několik uzlů pro slovníky. Mezi ně patří uzly pro tvorbu, akci a dotazování.
1. Uzel Dictionary.ByKeysValues
vytvoří slovník ze zadaných hodnot a klíčů. (Počet položek bude odpovídat počtu položek nejkratšího seznamu.)
2. Uzel Dictionary.Components
vytvoří komponenty ze vstupního slovníku. (Operace opačná k vytvoření slovníku.)
3. Uzel Dictionary.RemoveKeys
vytvoří nový objekt slovníku bez vstupních klíčů.
4. Uzel Dictionary.SetValueAtKeys
vytvoří nový slovník na základě vstupních klíčů a hodnot, které nahradí aktuální hodnotu u příslušných klíčů.
5. Uzel Dictionary.ValueAtKey
vrátí hodnotu na pozici vstupního klíče.
6. Uzel Dictionary.Count
vrátí počet dvojic hodnot a klíčů ve slovníku.
7. Uzel Dictionary.Keys
vrátí klíče aktuálně uložené ve slovníku.
8. Uzel Dictionary.Values
vrátí hodnoty aktuálně uložené ve slovníku.
Spojování dat ve slovnících může být užitečnou alternativou pro starý způsob práce s indexy a seznamy.
Postoupíme dále ve složitosti a přidáme do hierarchie ještě více vrstev. Datovou strukturu je možné rozšířit daleko za hranice dvourozměrného seznamu seznamů. Vzhledem k tomu, že seznamy jsou v aplikaci Dynamo položky v nich samotných a jich samotných, je možné vytvořit data s tolika rozměry kolik je jen možné.
Analogie, se kterou budeme pracovat, je založena na ruských matrjoškách. Každý seznam je možné chápat jako kontejner obsahující více položek. Každý seznam má své vlastnosti a také je chápán jako svůj vlastní objekt.
Sada ruských matrjošek (autor fotografie: Zeta) je analogií pro n-rozměrné seznamy. Každá vrstva představuje seznam a každý seznam obsahuje položky. V případě aplikace Dynamo může mít každý kontejner uvnitř více kontejnerů (představujících položky každého seznamu).
N-rozměrné seznamy se těžko vysvětlují vizuálně, v této kapitole jsme však připravili několik cvičení, která se zaměřují na práci se seznamy přesahujícími dva rozměry.
Mapování je pravděpodobně nejsložitější součástí správy dat v aplikaci Dynamo a je obzvláště důležité při práci se složitými hierarchiemi seznamů. Pomocí řady cvičení níže si ukážeme, kdy je třeba použít mapování a kombinace, když se data stanou vícerozměrnými.
Předběžná představení uzlů List.Map a List.Combine najdete v předchozí části. V posledním cvičení níže použijeme tyto uzly na složitou datovou strukturu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto cvičení je první v řadě tří, které se zaměřuje na členění importované geometrie. Každá část této řady cvičení zvýší složitost datové struktury.
Začněte souborem .sat ve složce souborů cvičení. Tento soubor můžete načíst pomocí uzlu File Path.
Pomocí uzlu Geometry.ImportFromSAT se geometrie importuje do náhledu aplikace Dynamo jako dva povrchy.
V tomto cvičení se pracuje z důvodu zjednodušení pouze s jedním povrchem.
Výběrem indexu 1 uchopte povrch. Index vyberete pomocí uzlu List.GetItemAtIndex.
Vypněte náhled geometrie v náhledu uzlu Geometry.ImportFromSAT.
Dalším krokem je rozdělení povrchu na osnovu bodů.
1. Pomocí bloku kódu vložte tyto dva řádky kódu:
0..1..#10;
0..1..#5;
.2. Připojte dvě hodnoty bloku kódu ke vstupům u a v uzlu Surface.PointAtParameter. Změňte vázání tohoto uzlu na „Vektorový součin“.
3. Výstup odhalí datovou strukturu, která je viditelná také v náhledu aplikace Dynamo.
Dále pomocí bodů z posledního kroku vygenerujte deset křivek podél povrchu.
Chcete-li se podívat, jak je datová struktura uspořádána, připojte objekt NurbsCurve.ByPoints k výstupu uzlu Surface.PointAtParameter.
Nyní můžete vypnout náhled z uzlu List.GetItemAtIndex, abyste získali jasnější výsledek.
Základní uzel List.Transpose převrátí sloupce a řádky seznamu seznamů.
Pokud se výstup uzlu List.Transpose připojí k uzlu NurbsCurve.ByPoints, přes povrch bude nyní horizontálně umístěno pět křivek.
Chcete-li dosáhnout stejného výsledku jako na obrázku, můžete v předchozím kroku vypnout náhled z uzlu NurbsCurve.ByPoints.
Zvýšíme složitost. Řekněme, že chcete provést operaci s křivkami vytvořenými v předchozím cvičení. Možná bude užitečné tyto křivky spojit s jiným povrchem a šablonovat mezi nimi. Toto vyžaduje věnování větší pozornosti datové struktuře, ale příslušná logika je stejná.
Začněte krokem z předchozího cvičení, který izoluje horní povrch importované geometrie pomocí uzlu List.GetItemAtIndex.
Pomocí uzlu Surface.Offset odsaďte povrch o hodnotu 10.
Stejným způsobem jako v předchozím cvičení definujte blok kódu s těmito dvěma řádky kódu:
0..1..#10;
0..1..#5;
.Tyto výstupy připojte ke dvěma uzlům Surface.PointAtParameter, z nichž každý má vázání nastaveno na Vektorový součin. Jeden z těchto uzlů je připojen k původnímu povrchu, zatímco druhý je připojen k odsazenému povrchu.
Vypněte náhled těchto povrchů.
Stejně jako v předchozím cvičení připojte výstupy ke dvěma uzlům NurbsCurve.ByPoints. Ve výsledku se zobrazí křivky odpovídající dvěma povrchům.
Pomocí uzlu List.Create je možné kombinovat dvě sady křivek do jednoho seznamu seznamů.
Všimněte si, že z výstupu máme dva seznamy každý po deseti položkách, přičemž každý z nich představuje připojenou sadu křivek nurbs.
Provedením operace uzlu Surface.ByLoft je možné vizuálně pochopit tuto datovou strukturu. Uzel šablonuje všechny křivky v každém dílčím seznamu.
Vypněte náhled z uzlu Surface.ByLoft v předchozím kroku.
Pokud použijete uzel List.Transpose, nezapomeňte, že se překlopí všechny sloupce a řádky. Tento uzel převede dva seznamy deseti křivek do deseti seznamů dvou křivek. Nyní je každá křivka nurbs vztažena k sousedící křivce na druhém povrchu.
Pomocí uzlu Surface.ByLoft jste vytvořili žebrovanou konstrukci.
Dále si ukážeme alternativní postup k dosažení tohoto výsledku.
Než začneme, vypněte náhled uzlu Surface.ByLoft v předchozím kroku, abyste se vyhnuli nejasnostem.
Alternativou uzlu List.Transpose je List.Combine. Tento uzel ovládá „kombinátor“ v každém dílčím seznamu.
V tomto případě použijeme uzel List.Create jako „kombinátor“, který vytvoří seznam jednotlivých položek v dílčích seznamech.
Pomocí uzlu Surface.ByLoft získáte stejné povrchy jako v předchozím kroku. Transpozice je v tomto případě jednodušší, pokud však bude datová struktura ještě složitější, uzel List.Combine je spolehlivější.
Pokud bychom v jednom z předchozích kroků chtěli přepnout orientaci křivek žebrované konstrukce, před připojením k uzlu NurbsCurve.ByPoints bychom použili uzel List.Transpose. Ten převrátí sloupce a řádky a vytvoří 5 vodorovných žeber.
Je čas postoupit o krok dál. V tomto cvičení budete pracovat s oběma importovanými povrchy a vytvoříte složitou datovou hierarchii. Stále je však naším cílem dokončení této operace pomocí stejné příslušné logiky.
Začněte u importovaného souboru z předchozího cvičení.
Stejně jako v předchozím cvičení přidejte pomocí uzlu Surface.Offset odsazení o hodnotu 10.
Všimněte si, že na výstupu se vytvořily dva povrchy s odsazeným uzlem.
Stejným způsobem jako v předchozím cvičení definujte blok kódu s těmito dvěma řádky kódu:
0..1..#20;
0..1..#20;
.Tyto výstupy připojte ke dvěma uzlům Surface.PointAtParameter, z nichž každý má vázání nastaveno na „Vektorový součin“. Jeden z těchto uzlů je připojen k původním povrchům, zatímco druhý je připojen k odsazeným povrchům.
Stejně jako v předchozím cvičení připojte výstupy ke dvěma uzlům NurbsCurve.ByPoints.
Při pohledu na výstup uzlu NurbsCurve.ByPoints si všimněte, že se jedná o seznam dvou seznamů, což je složitější struktura než v předchozím cvičení. Data jsou kategorizována podle základních povrchů, čili do strukturovaných dat byla přidána další vrstva.
Všimněte si, že v uzlu Surface.PointAtParameter se již situace stane složitější. V tomto případě máme seznam seznamů seznamů.
Než budeme pokračovat, vypněte náhled existujících povrchů.
Pomocí uzlu List.Create sloučíme křivky nurbs do jedné datové struktury, čímž vytvoříte seznam seznamů seznamů.
Připojením uzlu Surface.ByLoft získáte verzi původních povrchů, protože každý zůstane ve svém vlastním seznamu vytvořeném z původní datové struktury.
V předchozím cvičení bylo možné vytvořit žebrovanou konstrukci pomocí uzlu List.Transpose. Toto zde nebude fungovat. Transpozice by měla být použita na dvourozměrný seznam a vzhledem k tomu, že máme trojrozměrný seznam, operace „převrácení sloupců a řádků“ nebude fungovat tak snadno. Nezapomeňte, že seznamy jsou objekty, čili uzel List.Transpose převrátí naše seznamy bez dílčích seznamů, ale nepřevrátí křivky nurbs o jeden seznam níže v hierarchii.
Zde bude lépe fungovat uzel List.Combine. Když dojde na složitější datové struktury, chceme použít uzly List.Map a List.Combine.
Pokud použijeme uzel List.Create jako „kombinátor“, vytvoříme datovou strukturu, která nám bude lépe fungovat.
Datovou strukturu o jeden krok níže v hierarchii je stále třeba transponovat. Toto provedete pomocí uzlu List.Map. Funguje jako uzel List.Combine, jen má jeden vstupní seznam místo dvou a více.
Funkce použitá na uzel List.Map je List.Transpose, která převrátí sloupce a řádky dílčích seznamů v hlavním seznamu.
Nakonec můžete šablonovat křivky nurbs společně s vhodnou hierarchií dat. Tím vznikne žebrovaná konstrukce.
Nyní přidáme do geometrie hloubku pomocí uzlu Surface.Thicken se vstupním nastavením, jak je znázorněno na obrázku.
Bylo by vhodné přidat do této struktury podkladový povrch. Přidejte tedy další uzel Surface.ByLoft a jako vstup použijte první výstup uzlu NurbsCurve.ByPoints ze staršího kroku.
Protože se náhled stává nepřehledným, vypněte náhled pro tyto uzly kliknutím pravým tlačítkem na každý z nich a zrušením zaškrtnutí políčka Náhled, abyste lépe viděli výsledek.
A zesílením těchto vybraných povrchů je dokončeno i členění.
Nejedná se zrovna o nejpohodlnější houpací křeslo, ale pracuje se u něj s mnoha daty.
V posledním kroku obrátíme směr žlábkovaných členů. V předchozím kroku jsme použili transpozici, tady uděláme něco podobného.
Vzhledem k tomu, že hierarchie má ještě další vrstvu, je třeba pomocí uzlu List.Map a funkce List.Tranpose změnit směr křivek nurbs.
Mohli bychom chtít zvýšit počet vzorků běhounu, což provedeme změnou bloku kódu na
0..1..#20;
0..1..#30;
.
První verze houpacího křesla byla štíhlá, čili druhý model nabízí robustní off-roadovou verzi usazení.
Do hierarchie bude nyní přidána další vrstva. Pokud vezmeme sadu karet z původního příkladu a vytvoříme krabici, která obsahuje více sad, krabice nyní představuje seznam sad a každá sada představuje seznam karet. Tomuto se říká seznam seznamů. Podívejte se na obrázek níže, představující analogii pro tuto část: na obrázku vidíme seznam sloupečků mincí a každý sloupeček obsahuje seznam mincí.
Fotografii pořídil uživatel Dori.
Jaké dotazy můžeme provádět u seznamu seznamů? Tím získáte přístup k existujícím vlastnostem.
Počet typů mincí? 2.
Hodnoty typu mincí? 0,01 a 0,25 USD.
Materiál čtvrťáků? 75 % měď a 25 % nikl.
Materiál centů? 97,5 % zinek a 2,5 % měď.
Jaké akce můžeme provádět u seznamu seznamů? Tímto se změní seznam seznamů podle dané operace.
Výběr konkrétního sloupku čtvrťáků nebo centů.
Výběr konkrétního čtvrťáku nebo centu.
Přeuspořádání sloupků čtvrťáků a centů
Sloučení sloupků dohromady.
I zde aplikace Dynamo obsahuje analogický uzel pro každou z výše uvedených operací. Vzhledem k tomu, že pracujeme s abstraktními daty a ne s fyzickými objekty, potřebujeme sadu pravidel, která řídí pohyb nahoru a dolů v hierarchii dat.
Při práci se seznamy seznamů jsou data vrstvená a složitá, díky tomu však nastává příležitost provést skvělé parametrické operace. Níže uvedené lekce podrobně rozebírají základy a popisují několik dalších operací.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Základní koncepce této části: aplikace Dynamo zpracovává seznamy jako objekty samy o sobě. Tato hierarchie shora dolů se vyvíjí s ohledem na objektově orientované programování. Místo výběru dílčích prvků pomocí příkazu, jako je List.GetItemAtIndex, vybere aplikace Dynamo tento index v hlavním seznamu v datové struktuře. A tato položka může být i dalším seznamem. Následuje rozbor pomocí vzorového obrázku:
Pomocí bloku kódu jsme definovali dva rozsahy:
0..2; 0..3;
.Tyto rozsahy jsou připojeny k uzlu Point.ByCoordinates s vázáním nastaveným na hodnotu „Vektorový součin“. Tím se vytvoří osnova bodů a také se na výstupu vrátí seznam seznamů.
Všimněte si, že uzel Watch předává 3 seznamy se 4 položkami v každém seznamu.
Při použití funkce List.GetItemAtIndex s indexem 0 aplikace Dynamo vybere první seznam a veškerý jeho obsah. Jiné programy mohou vybrat první položku každého seznamu v datové struktuře, aplikace Dynamo však při práci s daty využívá hierarchii shora dolů.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Metoda Flatten odebere všechny vrstvy dat z datové struktury. Toto je užitečné, pokud hierarchie dat nejsou pro vaši operaci podstatné, může to však představovat riziko, protože dojde k odebrání informací. Následující příklad znázorňuje výsledek vyrovnání seznamu dat.
Zadáním jednoho řádku kódu definujte rozsah v bloku kódu:
-250..-150..#4;
Připojením bloku kódu ke vstupu x a y uzlu Point.ByCoordinates nastavíme vázání na hodnotu „Vektorový součin“, abychom získali osnovu bodů.
Uzel Watch zobrazuje, že je k dispozici seznam seznamů.
Uzel PolyCurve.ByPoints bude odkazovat na každý seznam a vytvoří příslušný objekt polycurve. Všimněte si, že v náhledu aplikace Dynamo se v osnově nachází čtyři objekty polycurve představující jednotlivé řádky.
Vložením vyrovnání před uzel objektu polycurve byl vytvořen jeden seznam pro všechny body. Uzel PolyCurve.ByPoints odkazuje na seznam k vytvoření jedné křivky a vzhledem k tomu, že všechny body jsou v jednom seznamu, vznikne jeden klikatý objekt polycurve, který prochází celým seznamem bodů.
K dispozici jsou také možnosti k vyrovnání izolovaných vrstev dat. Pomocí uzlu List.Flatten můžete definovat nastavený počet vrstev dat, které mají být vyrovnány z horní části hierarchie. Jedná se o skutečně užitečný nástroj, pokud máte potíže se složitými datovými strukturami, které nejsou nezbytně důležité pro váš pracovní postup. Další možností je použít uzel vyrovnání jako funkci v uzlu List.Map. Další informace o uzlu List.Map naleznete níže.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Při parametrickém modelování se také někdy stane, že budete chtít upravit datovou strukturu existujícího seznamu. K tomuto účelu existuje také mnoho uzlů a Chop je tou nejzákladnější verzí. Pomocí uzlu Chop je možné rozdělit seznam na podseznamy s nastaveným počtem položek.
Příkaz Rozdělit rozdělí seznamy podle dané délky seznamu. V některých případech je příkaz Rozdělit opak příkazu Vyrovnat: místo odebrání datové struktury se přidají nové vrstvy. Toto je užitečný nástroj u geometrických operací, viz příklad níže.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Metoda List.Map/Combine použije funkci sady na vstupní seznam, ale o jeden krok níže v hierarchii. Kombinace jsou stejné jako u map, kromě toho, že mohou mít více vstupů odpovídajících zadání dané funkce.
Poznámka: Toto cvičení bylo vytvořeno pomocí předchozí verze aplikace Dynamo. Většina funkčnosti metody List.Map byla vyřešena přidáním funkce List@Level . Další informace naleznete v části List@Level níže.
V rámci rychlého úvodu si zopakujme uzel List.Count z předchozí části.
Uzel List.Count spočítá všechny položky v seznamu. Pomocí tohoto nástroje znázorníme, jak funguje metoda List.Map.
Vložte dva řádky kódu do bloku kódu:
-50..50..#Nx; -50..50..#Ny;
Blok kódu vytvoří po provedení zadání do tohoto kódu dva vstupy pro proměnné Nx a Ny.
Pomocí dvou celočíselných posuvníků definujte hodnoty Nx a Ny jejich připojením k bloku kódu.
Připojte každý řádek bloku kódu do příslušných vstupů X a Y uzlu Point.ByCoordinates. Klikněte pravým tlačítkem na uzel, vyberte položku „Vázání“ a vyberte položku „Vektorový součin“. Tím se vytvoří osnova bodů. Vzhledem k tomu, že jsme definovali rozsah od -50 do 50, bude se rozsah pohybovat ve výchozí osnově aplikace Dynamo.
Uzel Watch zobrazí vytvořené body. Všimněte si datové struktury. Vytvořili jsme seznam seznamů. Každý seznam představuje řádek bodů v osnově.
Připojte uzel List.Count k výstupu uzlu Watch z předchozího kroku.
Připojte uzel Watch k výstupu uzlu List.Count.
Všimněte si, že uzel List.Count vrací hodnotu 5. Jedná se o hodnotu rovnou proměnné "Nx", jak je definována v bloku kódu. Jak je to možné?
Nejprve uzel Point.ByCoordinates použije jako primární vstup pro tvorbu seznamů vstup „x“. Pokud má proměnná Nx hodnotu 5 a proměnná Ny hodnotu 3, vznikne seznam 5 seznamů a každý z těch seznamů bude mít 3 položky.
Vzhledem k tomu, že aplikace Dynamo zpracovává seznamy jako objekty samy o sobě, na hlavní seznam v hierarchii se použije uzel List.Count. Výsledkem je hodnota 5, nebo počet seznamů v hlavním seznamu.
Pomocí uzlu List.Map bude proveden krok dolů v hierarchii a na této úrovni se provede „funkce“.
Všimněte si, že uzel List.Count nemá žádný vstup. Používá se jako funkce, takže uzel List.Count se použije na každý jednotlivý seznam, o jeden krok níže v hierarchii. Prázdný vstup uzlu List.Count odpovídá zadání seznamu uzlu List.Map.
Výsledky metody List.Count nyní obsahují 5 položek, z nichž každá má hodnotu 3. Toto představuje délku každého dílčího seznamu.
Poznámka: Toto cvičení bylo vytvořeno pomocí předchozí verze aplikace Dynamo. Většina funkčnosti metody List.Combine byla vyřešena přidáním funkce List@Level. Další informace naleznete v části List@Level níže.
V tomto cvičení použijeme funkci List.Combine a ukážeme si, jak ji lze použít k aplikaci funkce na samostatné seznamy objektů.
Začněte nastavením dvou seznamů bodů.
Pomocí uzlu Sequence vygenerujte 10 hodnot, každou s přírůstkem 10 kroků.
Výsledek připojte ke vstupu x uzlu Point.ByCoordinates. Tím se v aplikaci Dynamo vytvoří seznam bodů.
Přidejte do pracovního prostoru druhý uzel Point.ByCoordinates, použijte stejný výstup Sequence jako jeho vstup x, ale jako vstup y použijte uzel Integer Slider, který nastavte na hodnotu 31 (může to být libovolná hodnota, pokud se nepřekrývá s první sadou bodů), aby se obě sady bodů navzájem nepřekrývaly.
Dále pomocí uzlu List.Combine použijeme funkci na objekty ve 2 samostatných seznamech. V tomto případě se bude jednat o jednoduchou funkci kreslení čar.
Přidejte do pracovního prostoru uzel List.Combine a připojte 2 sady bodů jako jeho vstupy list0 a list1.
Jako vstupní funkci uzlu List.Combine použijte uzel Line.ByStartPointEndPoint.
Po dokončení jsou 2 sady bodů komprimovány/spárovány dohromady pomocí funkce Line.ByStartPointEndPoint a vrátí 10 řádků v aplikaci Dynamo.
Další příklad použití uzlu List.Combine naleznete ve cvičení v části N-rozměrné seznamy.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Funkce List@Level, která má přednost před funkcí List.Map, umožňuje přímo na vstupním portu uzlu vybrat úroveň seznamu, se kterou chcete pracovat. Tuto funkci je možné použít na libovolný příchozí vstup uzlu a umožní přístup k úrovním seznamů rychleji a snadněji než jiné metody. Stačí jen uzlu určit úroveň seznamu, kterou chcete použít jako vstup, a uzel pak provede vše ostatní.
V tomto cvičení použijeme funkci List@Level k vyčlenění určité úrovně dat.
Začneme jednoduchou 3D osnovou bodů.
Vzhledem k tomu, že je osnova vytvořena pomocí rozsahu hodnot X, Y a Z, víme, že data jsou strukturována do tří vrstev: seznam X, seznam Y a seznam Z.
Tyto vrstvy existují v různých úrovních. Úrovně jsou značeny v dolní části bubliny náhledu. Sloupce úrovní seznamu odpovídají výše uvedeným datům seznamu, aby se snadněji rozpoznalo, na které úrovni se pracuje.
Úrovně seznamu jsou uspořádány v obráceném pořadí, čili data nejnižší úrovně jsou vždy v úrovni „L1“. Toto vám pomůže zajistit, aby grafy fungovaly podle plánu, i když se něco v předcházejícím dění změní.
Chcete-li použít funkci List@Level, klikněte na tlačítko „>“. V této nabídce se zobrazí dvě zaškrtávací políčka.
Použít úrovně – Povolí funkci List@Level. Po kliknutí na tuto možnost budete moci kliknout na požadovanou úroveň seznamu a vybrat vstupní úrovně seznamu, které má uzel použít. Pomocí této nabídky můžete rychle vyzkoušet různé možnosti úrovně kliknutím nahoru nebo dolů.
Zachovat strukturu seznamu – pokud je tato možnost povolena, bude možné zachovat strukturu úrovně tohoto vstupu. Někdy můžete mít data záměrně uspořádaná do dílčích seznamů. Zaškrtnutím této možnosti můžete organizaci seznamu ponechat nedotčenou a neztratit žádné informace.
Pomocí naší jednoduché 3D osnovy je možné získat přístup a vizualizovat strukturu seznamu přepnutím mezi úrovněmi seznamu. Každá kombinace úrovně seznamu a indexu vrátí jinou sadu bodů z naší původní 3D sady.
Možnost „@L2“ v aplikaci DesignScript umožňuje vybrat pouze seznam na úrovni 2. Seznam na úrovni 2 s indexem 0 obsahuje pouze první sadu bodů Y, které vracejí pouze osnovu XZ.
Pokud se filtr úrovně změní na možnost „L1“, je možné zobrazit vše v první úrovni seznamu. Seznam na úrovni 1 s indexem 0 obsahuje všechny 3D body ve vyrovnaném seznamu.
Pokud se pokusíte o totéž u možnosti „L3“, zobrazí se pouze body třetí úrovně seznamu. Seznam na úrovni 2 s indexem 0 obsahuje pouze první sadu bodů Z, které vracejí pouze osnovu XY.
Pokud se pokusíte o totéž u možnosti „L4“, zobrazí se pouze body třetí úrovně seznamu. Seznam na úrovni 4 s indexem 0 obsahuje pouze první sadu bodů X, které vracejí pouze osnovu YZ.
Ačkoliv tento konkrétní příklad je také možné vytvořit pomocí metody List.Map, metoda List@Level výrazně zjednodušuje interakci a usnadňuje přístup k datům uzlu. Níže naleznete porovnání metod List.Map a List@Level:
Ačkoliv obě metody nabízí přístup ke stejným bodům, metoda List@Level umožňuje snadné přepínání mezi hladinami dat v rámci jednoho uzlu.
K získání přístupu k osnově bodů pomocí metody List.Map je kromě uzlu List.Map potřeba i uzel List.GetItemAtIndex. Pro každou úroveň seznamu, u které pokročíme na nižší úroveň, je třeba použít další uzel List.Map. Podle složitosti seznamů může být vyžadováno přidání značného množství uzlů List.Map do grafu, abyste získali přístup ke správné úrovni informací.
V tomto příkladu uzel List.GetItemAtIndex s uzlem List.Map vrátí stejnou sadu bodů se stejnou strukturou seznamu, jako když je v uzlu List.GetItemAtIndex vybrána možnost „@L3“.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Transpozice je základní funkcí při práci se seznamy seznamů. Stejně jako v tabulkových programech i zde transpozice převrátí sloupce a řádky datové struktury. Níže je znázorněn příklad se základní maticí a v následující části je znázorněno, jak je možné pomocí transpozice tvořit geometrické vztahy.
Nyní odstraňte uzly List.Count z předchozího cvičení, přesuňte se ke geometrii a prohlédněte si, jak jsou data strukturována.
Připojte uzel PolyCurve.ByPoints k výstupu uzlu Watch z uzlu Point.ByCoordinates.
Výstup zobrazí 5 objektů polycurve a v náhledu aplikace Dynamo se zobrazí tyto objekty křivek. Uzel aplikace Dynamo hledá seznam bodů (nebo seznam seznamů bodů v tomto případě) a vytvoří z nich jeden objekt PolyCurve. Každý seznam byl v podstatě převeden na křivku v datové struktuře.
Uzel List.Transpose zamění všechny položky se všemi seznamy v seznamu seznamů. Zní to složitě, ale je to stejná logika jako transpozice v aplikaci Microsoft Excel: záměna sloupců a řádků v datové struktuře.
Všimněte si abstraktního výsledku: transpozice změnila strukturu seznamu z 5 seznamů o 3 položkách na 3 seznamy o 5 položkách.
Všimněte si geometrického výsledku: pomocí uzlu PolyCurve.ByPoints získáte 3 objekty polycurve v kolmém směru od původních křivek.
Blok kódu využívá znaky „[]“ jako zkratku k definování seznamu. Jedná se o mnohem rychlejší a plynulejší způsob tvorby seznamů než uzel List.Create. Blok kódu je podrobněji popsán v části Bloky kódů a jazyk DesignScript. V níže uvedeném obrázku můžete vidět, jak je možné definovat seznam s více výrazy pomocí bloku kódu.
Blok kódu používá znaky „[]“ jako rychlý a snadný způsob výběru konkrétních položek ze složité datové struktury. Bloky kódu jsou podrobněji popsány v části Bloky kódů a jazyk DesignScript. V níže uvedeném obrázku můžete vidět, jak je možné dotazovat seznam s více datovými typy pomocí bloku kódu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto cvičení využívá část logiky stanovené v předchozím cvičení k úpravě povrchu. Cíl je intuitivní, nyní se však více zapojí navigace v datové struktuře. Chceme rozdělit povrch přesunem řídicího bodu.
Začněte s výše uvedeným řetězcem uzlů. Vytváříme základní povrch, který pokrývá výchozí osnovu aplikace Dynamo.
Pomocí bloku kódu vložte tyto dva řádky kódu a připojte je ke vstupům u a v uzlu Surface.PointAtParameter:
-50..50..#3;
-50..50..#5;
Zkontrolujte, zda je vázání uzlu Surface.PointAtParameter nastaveno na možnost „Vektorový součin“.
Uzel Watch zobrazuje, že byl vrácen seznam 3 seznamů, z nichž každý obsahuje 5 položek.
V tomto kroku je třeba dotazovat středový bod v osnově, kterou jste vytvořili. Chcete-li to provést, vyberte prostřední bod prostředního seznamu. To dává smysl, že?
Chcete-li potvrdit, že se jedná o správný bod, můžete toho dosáhnout kliknutím na položky uzlu Watch.
Pomocí bloku kódu zapište základní řádek kódu k dotazování se na seznam seznamů:
points[1][2];
Pomocí funkce Geometry.Translate přesuňte vybraný bod nahoru ve směru osy Z o 20 jednotek.
Nyní vybereme také prostřední řádek bodů u uzlu List.GetItemAtIndex. Poznámka: Podobně jako v předchozím kroku můžete také zadat dotaz na seznam pomocí bloku kódu s řádkem
points[1];
.
Zatím jsme se úspěšně dotázali na střed a posunuli jej nahoru. Nyní je potřeba vložit tento přesunutý bod zpět do původní datové struktury.
Nejprve je třeba nahradit položku seznamu, kterou jsme izolovali v předchozím kroku.
Pomocí metody List.ReplaceItemAtIndex nahraďte prostřední položku a použijte index 2 s náhradní položkou připojenou k přesunutému bodu (Geometry.Translate).
Výstup zobrazí, že přesunutý bod byl vložen přes vstup do prostřední položky seznamu.
Nyní, když byl seznam upraven, je třeba vložit tento seznam zpět do původní datové struktury: seznamu seznamů.
Podle stejné logiky nahraďte pomocí metody List.ReplaceItemAtIndex prostřední seznam upraveným seznamem.
Všimněte si, že bloky kódu definující index těchto dvou uzlů jsou 1 a 2, což odpovídá původnímu dotazu z bloku kódu (points[1][2]).
Po výběru seznamu na indexu 1 se v náhledu aplikace Dynamo zvýrazní datová struktura. Přesunutý bod tak byl úspěšně sloučen s původní datovou strukturou.
Z této sady bodů je možné vytvořit povrch mnoha způsoby. V tomto případě se vytvoří povrch šablonováním křivek dohromady.
Vytvořte uzel NurbsCurve.ByPoints a připojením nové datové struktury vytvořte tři křivky nurbs.
Připojte uzel Surface.ByLoft k výstupu uzlu NurbsCurve.ByPoints. Nyní máme upravený povrch. Je možné změnit původní hodnotu Z geometrie. Proveďte posun a sledujte, jak se geometrie aktualizuje!
Chtěli jste někdy v aplikaci Revit vyhledávat položky podle jejich dat?
Pokud ano, je pravděpodobné, že jste udělali něco podobného jako v následujícím příkladu.
Na obrázku níže získáme všechny místnosti v modelu aplikace Revit, zjistíme index požadované místnosti (podle čísla místnosti) a nakonec získáme místnost s tímto indexem.
Získejte všechny místnosti v modelu.
Číslo místnosti, kterou chcete najít.
Získejte číslo místnosti a její index.
Získejte místnost s daným indexem.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pojďme udělat totéž pomocí slovníků. Nejdříve je nutné získat všechny místnosti v modelu aplikace Revit.
Vybereme kategorii aplikace Revit, se kterou chceme pracovat (v tomto případě místnosti).
Přikážeme aplikaci Dynamo, aby získala všechny prvky
Data, která použijeme, jsou čísla místností.
Nyní vytvoříme slovník s danými klíči a prvky.
Uzel Dictionary.ByKeysValues vytvoří slovník podle odpovídajících vstupů.
Keys
musí být řetězce, zatímcovalues
mohou být různé typy objektů.
Nyní můžeme načíst místnost ze slovníku pomocí čísla místnosti.
Uzel
String
bude klíč, který použijeme k vyhledání objektu ze slovníku.Uzel Dictionary.ValueAtKey načte objekt ze slovníku.
Stejným způsobem lze vytvářet slovníky seskupených objektů. Pokud bychom chtěli vyhledat všechny místnosti na daném podlaží, můžeme upravit graf následovně.
Místo čísla místnosti použijeme jako klíč hodnotu parametru (v tomto případě podlaží).
Nyní můžete místnosti seskupit podle podlaží, na kterém se nacházejí.
Po seskupení místností podle podlaží, můžeme použít sdílené (jedinečné) klíče jako klíče pro slovník a seznamy místností jako prvky.
Nakonec můžeme pomocí podlaží v modelu aplikace Revit a pomocí slovníku vyhledat, které místnosti se na daném podlaží nacházejí. Uzel
Dictionary.ValueAtKey
načte jako vstup název podlaží a vrátí objekty místností na daném podlaží.
Možnosti slovníků jsou opravdu nekonečné. Možnost propojit BIM data v aplikaci Revit s prvkem samotným nabízí mnohá využití.
Dále je nutné rozhodnout, podle jakých klíčů se budou data vyhledávat. (Informace o klíčích naleznete v části )