# Zkratka

### 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 a posloupnosti

Metodu definování rozsahů a posloupností lze redukovat na základní zkratku. Při definování seznamu číselných dat v bloku kódu pomocí syntaxe „..“ použijte jako vodítko obrázek níže. Po osvojení této notace je vytváření číselných dat skutečně efektivní proces:

!

> 1. V tomto příkladu je číselný rozsah nahrazen základní syntaxí **bloku kódu** definující `beginning..end..step-size;`. Číselně vyjádřeno získáte: `0..10..1;`.
> 2. Všimněte si, že syntaxe `0..10..1;` je ekvivalentní `0..10;`. Velikost kroku 1 je výchozí hodnotou pro notaci zkratky. Proto `0..10;` přidělí posloupnost od 0 do 10 s velikostí kroku 1.
> 3. Příklad s uzlem *Sequence* je podobný, ale s tím rozdílem, že použijeme znak „#“, abychom určili, že chceme v seznamu zadat 15 hodnot, nikoli seznam, který pokračuje do 15. V tomto případě definujeme: `beginning..#ofSteps..step-size:`. Skutečná syntaxe posloupnosti je `0..#15..2`.
> 4. Pomocí *„#“* z předchozího kroku nyní ji nyní umístíme do části *step-size* syntaxe. Nyní máme *číselný rozsah* sahající od *beginning* do *end* a notace *step-size* rovnoměrně rozděluje počet hodnot mezi obě části: `beginning..end..#ofSteps`.

### 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.

!

> 1\. Vytvořte vnořené rozsahy a porovnejte notaci s „#“ a bez ní. Stejná logika se používá v základních rozsazích, ale je trochu složitější.
>
> 2\. Můžeme definovat podrozsah na libovolném místě v primárním rozsahu a všimněte si, že můžeme mít také dva podrozsahy.
>
> 3\. Řízením hodnoty „end“ v rozsahu vytvoříme více rozsahů různých délek.

V rámci logického cvičení porovnejte dvě výše uvedené zkratky a zkuste analyzovat, jak notace *podrozsahů* a *#* určují výsledný výstup.

!

### Tvorba seznamů a získání položek ze seznamu

Kromě vytváření seznamů pomocí zkratky můžeme také vytvořit seznamy za běhu. Tento seznam může obsahovat širokou škálu typů prvků a lze jej také dotazovat (nezapomeňte, že seznamy jsou samy o sobě objekty). Stručně řečeno, pomocí bloku kódu můžete vytvářet seznamy a získávat položky ze seznamu pomocí hranatých závorek:

!

> 1\. Seznamy můžete rychle vytvářet pomocí řetězců a dotazovat je pomocí položek indexů.
>
> 2\. Pomocí notace zkratky můžete vytvářet seznamy s proměnnými a dotazy.

Správa s vnořenými seznamy je podobný proces. Při použití více sad hranatých závorek si dávejte pozor na pořadí seznamu:

!

> 1\. Definujte seznam seznamů.
>
> 2\. Získání seznamu s použitím notace s jednou hranatou závorkou.
>
> 3\. Získání položky s použitím notace se dvěma hranatými závorkami.

## Cvičení: Sinusový povrch

> Kliknutím na odkaz níže si stáhněte vzorový soubor.
>
> Úplný seznam vzorových souborů najdete v dodatku.

{% file src="<https://3694670440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVszS6grrxDyBMnEEr49a%2Fuploads%2Fgit-blob-8832668bb8fcaa9a2d5df0efb880148286b3312b%2FObsolete-Nodes_Sine-Surface.dyn?alt=media>" %}

V tomto cvičení vyzkoušíme naše nové dovednosti zápisu a vytvoříme zábavný zvlněný povrch definovaný rozsahy a vzorci. Během tohoto cvičení si všimněte, jak se používá blok kódu a existující uzly aplikace Dynamo společně: K oddělení práce s daty použijeme blok kódu, zatímco uzly aplikace Dynamo jsou vizuálně rozvrženy pro čitelnost definice.

Začněte vytvořením povrchu spojením výše uvedených uzlů. Místo použití číselného uzlu k definování šířky a délky dvakrát klikněte na kreslicí plochu a do bloku kódu zadejte hodnotu `100;`.

!

!

> 1. Definujte rozsah mezi 0 a 1 s 50 děleními zadáním hodnoty `0..1..#50` do **bloku kódu**.
> 2. Připojte rozsah k uzlu **Surface.PointAtParameter**, který nabývá hodnot u a v v rozsahu 0 až 1 v celém povrchu. Nezapomeňte změnit hodnotu vázání na Kartézský součin kliknutím pravým tlačítkem myši na uzel **Surface.PointAtParameter**.

V tomto kroku použijeme první funkci k přesunutí rastru bodů nahoru v ose Z. Tento rastr bude řídit generovaný povrch podle základní funkce. Přidejte nové uzly, jak je znázorněno na obrázku níže.

!

> 1. Použijeme uzel **blok kódu** s tímto řá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.

!

> 1. I když předchozí **blok kódu** fungoval dobře, nebyl zcela parametrický. Chceme dynamicky řídit jeho parametry, takže nahradíme řádek z předchozího kroku řetězcem `(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;`. Díky tomu můžeme definovat tyto hodnoty podle vstupů.

Změnou posuvníků (v rozmezí od 0 do 10) získáme zajímavé výsledky.

!

!

> 1. Provedením transpozice na číselný rozsah obrátíme směr vlny závěsu: `transposeList = List.Transpose(sineList);`.

!

> 1. Pokud do kódu přidáme sineList a transposeList, vytvoří se deformovaný povrch vaječné skořápky: `eggShellList = sineList+transposeList;`.

Změňte hodnoty posuvníků uvedené níže, abychom získali klidnější průběh tohoto algoritmu.

!

Nakonec se budeme dotazovat na izolované části dat pomocí bloku kódu. Chcete-li regenerovat povrch s určitým rozsahem bodů, přidejte blok kódu nad uzel **Geometry.Translate** a **NurbsSurface.ByPoints**. Tento blok kódu obsahuje řádek s následujícím textem: `sineStrips[0..15..1];`. Tím se vybere prvních 16 řádků bodů (z 50). Při dalším vytvoření povrchu vidíme, že jsme vytvořili izolovanou část rastru bodů.

!

!

> 1. V posledním kroku, abychom tento **blok kódu** vytvořili více parametrický, budeme dotaz řídit pomocí posuvníku v rozsahu od 0 do 1. Provedeme to pomocí tohoto řádku kódu: `sineStrips[0..((List.Count(sineStrips)-1)*u)];`. Může se to zdát matoucí, ale řádek kódu nám umožňuje rychle změnit měřítko délky seznamu na násobitel mezi 0 a 1.

Hodnota `0.53` na posuvníku vytvoří povrch těsně za středem osnovy.

!

Posuvník `1` podle očekávání vytvoří povrch z plné osnovy bodů.

!

Při pohledu na vizuální graf můžeme zvýraznit bloky kódu a zobrazit jednotlivé funkce.

!

> 1\. První **blok kódu** nahrazuje uzel **Number**.
>
> 2\. Druhý **blok kódu** nahrazuje uzel **Number Range**.
>
> 3\. Třetí **blok kódu** nahrazuje uzly **List.Transpose**, **List.Count** a **Number Range**.
>
> 4\. Čtvrtý **blok kódu** se dotazuje na seznam seznamů, přičemž nahrazuje uzel **List.GetItemAtIndex**.
