Nacházíte se zde: Rhino3D.cz > Články > Rhinoceros > RhinoScript 5. díl: Pokročilé proměnné


RhinoScript 5. díl: Pokročilé proměnné

Publikováno: 13.7.2005 | Autor: David Rutten | Rubrika: Rhinoceros | Komentáře: 0 - Doporučit

Rhino Script - úvodBooleovské proměnné jsou zřejmě nejjednoduššími proměnnými. Je s nimi ale ten problém, že na ně nejsme zvyklí. Booleovské hodnoty nás samozřejmě obklopují v každodenním životě, ale ve škole jsme se neučili myslet v jejich intencích. Proto se nám zdají tak nové a neznámé.

5 Pokročilé proměnné

Booleovskou matematiku vyvinul George Boole (1815-1864) a dnes je jádrem celého digitálního průmyslu. Booleovská algebra nám nabízí nástoje pro analýzu, porovnání a popis sad a skupin dat. Booleovská algebra používá logické příkazy a booleovské proměnné (true a false, pravda a nepravda)

Ačkoliv existuje 6 booleovských operátorů (odstavec 4.1), budeme se bavit jen o třech:

  • AND
  • OR
  • NOT

5.1.2 Operátor AND

Pomocí operártoru AND můžeme porovnávat 2 (sady) booleovských hodnot. Obě sady musí býpravda, aby operátor AND vrátil hodnotu pravda:

b = vbTrue And vbTrue     b je rovno vbTrue
b = vbTrue And vbFalse    b je rovno vbFalse
b = vbFalse And vbFalse   b je rovno vbFalse

Všimněte si, že operátor And vyžaduje jednu hodnotu nalevo i napravo vedle sebe (podobně jako znaménko plus). Nezáleží na tom, která je vlevo a která vpravo. Proto použiváme operátor And tehdy, když chceme zjistit, zda byly splněny dvě podmínky:

1  Sub Main()
2     Dim blnDivka, blnDostatecnyVek, blnOK
3     Dim lngAge
4
5     blnDivka = JeUzivatelZena()
6     lngAge = Rhino.GetInteger("Kolik je vám let?")
7     If lngAge > 17 Then
8        blnDostatecnyVek = vbTrue
9     Else
10       blnDostatecnyVek = vbFalse
11    End If
12
13    blnOK = blnDostatecnyVek And blnDivka
14 End Sub

V našem případě musíte být dívka A musí vám být více než 17, abyste mohli být vyhodnoceni jako TRUE.
Všimněte si, že jsme deklarovali několik proměnných najednou. Pro každou proměnnou nemusíte používat nový řádek. Místo příkazů Dim musíte použít čárky pro oddělení proměnných.
Také si všimněte, že jsme použili funkci JeUzivatelZena(). To pochopitelně není nativní funkce. Je to příklad funkce, která musí být napsána programátorem. Tím se ale v tuto chvíli nebudeme zabývat.

Pokud potřebujeme porovnat více než dvě booleovské proměnné, můžeme použít stejný systém:

     b = blnDivka And blnDostatecnyVek And blnStudent And blnRezident

Zde porovnáváme ne méně než 4 booleovské proměnné. A všechny musí mít hodnotu pravda, pokud se má b rovnat vbTrue.

5.1.3 Operátor OR

Operátory OR a AND jsou velice podobné. Oba používají dvě (sady) booleovských proměnných. Rozdíl je v tom, že operátor OR pouze vyžaduje, aby alespoň jedna z těchto sad měla hodnotu TRUE:

b = vbTrue Or vbTrue     b je rovno vbTrue
b = vbTrue Or vbFalse    b je rovno vbTrue
b = vbFalse Or vbFalse   b je rovno vbFalse

Operátor OR tedy použijeme tehdy, když musí být splněna pouze jedna podmínka:

1  Sub Main()
2     Dim blnStudent, blnDuchodce, blnVdova, blnPostizeny
3     Dim blnPlatny
4     Dim strZprava
5
6     blnStudent = JeUzivatelStudent()
7     blnDuchodce = JeUzivatelDuchodce()
8     blnVdova = JeUzivatelVdova()
9     blnPostizeny = JeUzivatelPostizeny()
10
11    blnPlatny = blnStudent Or blnDuchodce Or blnVdova Or blnPostizeny
12
13    If blnPlatny Then
14       strZprava = "Máte nárok na podporu"
15    Else
16       strZprava = "Nemáte nárok na podporu"
17    End If
18
19    Rhino.MessageBox (strZprava)
20 End Sub

Tato procedura zjistí, zda máte nebo nemáte nárok na podporu. Musíte být buď student, důchodce, vdova nebo postižený. Nemusíte splňovat dva nebo více požadavků najednou. Samozřejmě pokud *budete* splňovat současně dva nebo více požadavků, budete mít stále nárok na podporu.

Zatím se nedělejte hlavu s konstrukcí If..Then..Else. Objasníme si ji v 6. dílu.

5.1.4 Operátor NOT

A nakonec operátor NOT - ten je od předchozích dvou poněkud odlišný. Nepoužívá dvě sady booleovských proměnných, místo toho provádí inverzi jedné sady. Operátor NOT může být umístěn před každou booleovskou proměnnou. Příklad operátoru NOT jsme tu už dříve měli v kapitole 4.2. Poujeme jej k inverzi booleovské hodnoty:

    blnHodnota = Not blnHodnota

Jakmile začnete používat booleovské operátory, vše se stane velice rychle složitým:

    blnHodnota = (blnA Or blnB) And (blnC Or Not blnB) And Not blnA

Takovéto řádky jsou prakticky nečitelné pro kohokoliv jiného než pro programátora. Proto bych vám rád představil grafický systém mapování booleovských hodnot. Omezíme se na 3 proměnné, protože jich zřídka použijete více.

Vennův diagram

 

 

Grafickým systémem je diagram se třemi překrývajícími se kružnicemi. Horní kružnice je má název A, levá dolní B a pravá dolní C. Říká se tomu Vennův diagram.

    A = vbTrue kdekoliv uvnitř kružnice A
    A = vbFalse kdekoliv vně kružnice A

Venn regiony

 

 

5.1.5 Příklady booleovských diagramů

Zde vidíte pár ukázek booleovských diagramů. Pokud je výraz pod diagramem vyhodnocen jako pravda, bude oblast v diagramu zobrazena tmavší barvou.

Venn příklady

A nyní si jich pár zkuste sami...

Venn - zkuste si sami

 

Zde je příklad metody, která vrací booleovskou hodnotu:

    b = Rhino.IsCurveClosed(strIDKrivky)

Pokud je křivka se zadaným ID uzavřená, pak bude mít b hodnotu vbTrue. Pokud je křivka otevřená, bude mít b hodnotu vbFalse.

Zde je příklad metody, která používá booleovskou hodnotu:

    Rhino.EnableRedraw (vbFalse)

Pokud použijeme vbFalse, bude překreslování pohledů Rhina zakázáno. Pokud zadáme vbTrue, bude překreslování povoleno.


5.2.1 Pokročilé řetězce

Řetězce jsou na pochopení snadnější než booleovské proměnné. S řetězci se pojí mnoho doprovodných funkcí, bez nichž byste mnohdy nemohli žít. Nejdříve však musíte pochopit, jak řetězce fungují...

Příklad řetězce

Ve vbScriptu chápeme řetězec jako posloupnost znaků. Znak (anglicky Character nebo 'Char') je číslo indexu ASCII tabulky. ASCII tabulka se skládá z 256 buněk (začíná se počítat od nuly) s jedním znakem v každé buňce:

Ascii-hodnota    33   !   výkřičník
Ascii-hodnota    48   0   nula
Ascii-hodnota    49   1   jednička
Ascii-hodnota    65   A   velké A
Ascii-hodnota    97   a   malé a
Ascii-hodnota   126   ~   tilda

Řetězce nejsou vázány na konkrétní písmo. Většina písem obsahuje správné znaky pro všechny ASCII kódy, ale jiná (například DingBat fonts) jednoduše používají obrázky.

Řetězce mají určitou délku. Do řetězce můžete snadno přidat text pomocí operátoru ampersand (&). Pokud chcete řetězec zkrátit, musíte použít jednu z mnoha funkcí, které s řetězci pracují.

Když pracujeme s Rhinem, budeme vždy zároveň pracovat se řetězci, protože všechny objekty v Rhinu mají identifikátor, ID. A toto ID je - řetězec. Kdykoliv chceme získat nějakou informaci o objektu (Rhino.IsCurveClosed(), Rhino.IsSurfaceTrimmed(), Rhino.PointCoordinates()), potřebujeme znát jeho ID. Adresování objektů si probereme později...

ID objektu

Přeložil Jan Slanina

Nahoru ↑