Zkratka
V bloku kódu je několik základních metod zkratky, které umožňují správu dat velice usnadnit. Rozdělíme si základy níže a prodiskutujeme, jak lze tuto zkratku použít k vytváření a zadávání dotazů na data.
Typ dat | Standardní aplikace Dynamo | Ekvivalent bloku kódu |
Čísla | ![]() |
![]() |
Řetězce | ![]() |
![]() |
Posloupnosti | ![]() |
![]() |
Rozsahy | ![]() |
![]() |
Získat položku na indexu | ![]() |
![]() |
Vytvořit seznam | ![]() |
![]() |
Zřetězit řetězce | ![]() |
![]() |
Podmíněné výrazy | ![]() |
![]() |
Další syntaxe
Uzly | Ekvivalent bloku kódu | Poznámka |
---|---|---|
Libovolný operátor (+, &&, >=, Not, atd.) | +, &&, >=, !, atd. | Všimněte si, že z „Not“ se stane „!“, ale uzel se nazývá Not, aby se odlišil od uzlu Factorial |
Booleovská hodnota True | true; | Poznámka: malá písmena |
Booleovská hodnota False | false; | Poznámka: malá písmena |
Rozsahy
Metodu definování rozsahů a posloupností lze redukovat na základní zkratku. Použijte obrázek níže jako vodítko pro syntaxi „..“ pro definování seznamu číselných dat s blokem kódu. Po nacvičení této notace je vytvoření číselných dat skutečně efektivní proces:
- V tomto příkladu je číselný rozsah nahrazen základní syntaxí bloku kódu definující
beginning..end..step-size;
. Reprezentujeme číselně, takže získáte:0..10..1;
- Všimněte si, že syntaxe
0..10.1;
je ekvivalentní hodnotě0..10;
. Velikost kroku 1 je výchozí hodnotou pro notaci zkratky. Proto0..10;
přidělí posloupnost od 0 do 10 s velikostí kroku 1.- Příklad posloupnosti čísel je podobný, ale k určení, že chceme v seznamu zadat 15 hodnot, místo seznamu, který pokračuje do 15, použijeme „#“. V tomto případě definujeme:
beginning..#ofSteps..step-size:
. Aktuální syntaxe posloupnosti je0..#15..2
- Pomocí „#“ z předchozího kroku nyní ji nyní umístíme do části step-size syntaxe. Nyní máme číselný rozsah, který prochází od beginning do end notace step-size rovnoměrně rozloží počet hodnot mezi:
beginning..end..#ofSteps
Pokročilé rozsahy
Vytváření pokročilých rozsahů umožňuje jednoduše pracovat se seznamem seznamů. V příkladech níže izolujeme proměnnou od uzlu primárního rozsahu a vytvoříme další rozsah tohoto seznamu.
- Vytvořte vnořené rozsahy a porovnejte notaci s „#“ a bez ní. Stejná logika se používá v základních rozsazích, ale je trochu složitější.
- Můžeme definovat podrozsah na libovolném místě v primárním rozsahu a všimněte si, že můžeme mít také dva podrozsahy.
- Řízením hodnoty „end“ v rozsahu vytvoříme více rozsahů různých délek.
V rámci logického cvičení porovnejte dvě výše uvedené zkratky a zkuste analyzovat, jak notace podrozsahů a „#“ určují výsledný výstup.
Tvorba seznamů a získání položek ze seznamu
Kromě vytváření seznamů pomocí zkratky můžeme také vytvořit seznamy v průběhu provádění. Tento seznam může obsahovat širokou škálu typů prvků a lze jej také dotazovat (nezapomeňte, že seznamy jsou samy o sobě objekty). Pomocí bloku kódu můžete vytvořit seznamy se závorkami (složené závorky) a dotazovat položky ze seznamu se závorkami (čtvercové závorky):
- Seznamy můžete rychle vytvářet pomocí řetězců a dotazovat je pomocí položek indexů.
- Pomocí notace zkratky můžete vytvářet seznamy s proměnnými a dotazy.
A správa s vnořenými seznamy je podobný proces. Při použití více sad hranatých závorek si dávejte pozor na pořadí seznamu:
- Definujte seznam seznamů.
- Dotažte se na seznam s notací jedné závorky.
- Dotažte se na položku s notací dvojité závorky.
Cvičení
Stáhněte si vzorový soubor, který je přiložen k tomuto cvičení (klikněte pravým tlačítkem a vyberte příkaz Uložit odkaz jako...). Úplný seznam vzorových souborů naleznete v dodatku. Obsolete-Nodes_Sine-Surface.dyn
V tomto cvičení vyzkoušíme naše nové dovednosti zápisu a vytvoříme zábavný povrch skořápky vejce definovaný rozsahy a vzorci. Během tohoto cvičení si všimněte, jak se používá blok kódu a existující uzly aplikace Dynamo společně: K oddělení práce s daty použijeme blok kódu, zatímco uzly aplikace Dynamo jsou vizuálně rozvrženy pro čitelnost definice.
Začněte vytvořením povrchu spojením výše uvedených uzlů. Místo použití číselného uzlu k definování šířky a délky dvakrát klikněte na kreslicí plochu a do bloku kódu zadejte hodnotu
100;
.
- Definujte rozsah mezi 0 a 1 s 50 děleními zadáním hodnoty
0..1..#50
do bloku kódu.- Spojte rozsah s hodnotami Surface.PointAtParameter, které přebírají hodnoty u a v mezi 0 a 1 napříč povrchem. Nezapomeňte změnit hodnotu Vázání na Kartézský součin kliknutím pravým tlačítkem na uzel Surface.PointAtParameter.
V tomto kroku použijeme první funkci k přesunutí rastru bodů nahoru v ose Z. Tento rastr bude řídit generovaný povrch podle základní funkce.
- Přidejte vizuální uzly na kreslicí plochu, jak je znázorněno na obrázku výše.
- Místo použití uzlu vzorce používáme blok kódu s řádkem:
(0..Math.Sin(x*360)..#50)*5;
. Jednoduše řečeno, definujeme rozsah se vzorcem uvnitř něj. Tento vzorec je funkce Sinus. Funkce sinus získá v aplikaci Dynamo vstupy ve stupních, takže abychom získali plnou sinusovou vlnu, je nutné násobit hodnoty x (toto je vstup rozsahu od 0 do 1) hodnotou 360. Dále chceme stejný počet dělení jako řídicí body rastru pro každý řádek, takže definujeme padesát oddílů pomocí #50. Nakonec násobitel hodnoty 5 jednoduše zvýší amplitudu převodu, abychom viděli účinek v náhledu aplikace Dynamo.
- I když předchozí blok kódu fungoval dobře, nebyl zcela parametrický. Chceme dynamicky řídit jeho parametry, takže nahradíme řádek z předchozího kroku řetězcem
(0..Math.Sin(x*360*cyklů)..#List.Count(x))*amp;
. Díky tomu můžeme definovat tyto hodnoty podle vstupů.
- Změnou posuvníků (v rozmezí od 0 do 10) získáme zajímavé výsledky.
- Provedením převodu na číselný rozsah obrátíme směr vlny obvodového pláště:
transposeList = List.Transpose(sineList);
- Pokud přidáme seznam sineList a tranposeList:
eggShellList = sineList+transposeList;
, dojde k vytvoření zkresleného povrchu skořápky vejce
- Další změnou posuvníků uklidníme vody tohoto algoritmu.
- Nakonec se budeme dotazovat na izolované součásti dat pomocí bloku kódu. Chcete-li regenerovat povrch s určitým rozsahem bodů, přidejte blok kódu nad uzel Geometry.Translate a NurbsSurface.ByPoints. Tento řádek obsahuje text:
sineStrips[0..15..1];
. Tím se vybere prvních 16 řádků bodů (z 50). Při dalším vytvoření povrchu vidíme, že jsme vytvořili izolovanou část rastru bodů.
- V posledním kroku, abychom tento blok kódu vytvořili více parametrický, budeme dotaz řídit pomocí posuvníku v rozsahu od 0 do 1. Provedeme to pomocí tohoto řádku kódu:
sineStrips[0..((List.Count(sineStrips)-1)*u)];
. Může se to zdát matoucí, ale řádek kódu nám umožňuje rychle změnit měřítko délky seznamu na násobitel mezi 0 a 1.
- Hodnota 0,53 na posuvníku vytvoří povrch těsně za středem rastru.
- Posuvník 1 podle očekávání vytvoří povrch z plného rastru bodů.
Když se podíváme na výsledný vizuální graf, můžeme zvýraznit bloky kódu a vidět každou z jejich funkcí.
- První blok kódu nahradí uzel Number.
- Druhý blok kódu nahradí uzel Number Range.
- Třetí blok kódu nahrazuje uzel Formula (a také List.Transpose, List.Count a Number Range).
- Čtvrtý blok kódu dotazuje seznam seznamů, přičemž nahrazuje uzel List.GetItemAtIndex.