Nacházíte se zde: Rhino3D.cz > Články > Rhinoceros > RhinoScript příloha A: Pokročilý podmíněný tok


RhinoScript příloha A: Pokročilý podmíněný tok

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

Ikona - prilohaV první příloze našeho seriálu o RhinoScriptu se dozvíte něco o pokročilém podmíněném toku - naučíte se používat struktury If..Then..ElseIf..Else a Select..Case.

A Pokročilý podmíněný tok

A.1 Příkaz If..Then..ElseIf..Else

Místo použití jednodnoho klíčového slova Else ve struktuře If..Then můžeme také přidat neomezený počet klíčových slov ElseIf.

    If strUzivatel = "Wilhelm" Then
      Rhino.Print "Dobrý den pane Hegel"
    ElseIf strUzivatel = "Bob" Then
      Rhino.Print "Dobrý den pane .. McNeel... jak se dnes máte?"
    ElseIf strUzivatel = "Student"
      Rhino.Print "Student se úspěšně přihlásil"
    Else
      Rhino.MessageBox "Nemáte oprávnění k přihlášení na tomto terminálu"
    End If

Použitím klíčových slov ElseIf můžeme někdy předejít zahnízděným strukturám If..Then.

A.2 Příkaz Select..Case

Příkaz Select..Case vám umožní velice rychle porovnávat proměnné s jinými proměnnými nebo s daty. Select..Case přispívá k lepší čitelnosti kódu než v případě struktury If..Then. Například:

    Select Case strUzivatel
    Case "Wilhelm"
      Rhino.Print "Dobrý den pane Hegel "
    Case "Bob"
      Rhino.Print "Dobrý den pane .. McNeel... jak se dnes máte?"
    Case "Student"
      Rhino.Print "Student se úspěšně přihlásil "
    Case Else
      Rhino.Print "Nemáte oprávnění k přihlášení na tomto terminálu "
    End Select

Tato struktura Select..Case dělá přesně to samé jako předchozí If..Then..ElseIf. Jakmile byla nalezena splněná podmínka, bude vykonán odpovídající blok kódu a struktura Select..Case bude přeskočena. Ke klíčovému slovu Case můžeme přidat více argumentů pomocí středníků;

    Select Case strUzivatel
    Case "Wilhelm", "Bob", "Student"
      Rhino.Print "Přihlášení bylo úspěšné"
    Case Else
      Rhino.Messagebox " Nemáte oprávnění k přihlášení na tomto terminálu"
    End Select

Jedním z hlavních vylepšení v Rhinu 3 vůči předchozím verzím je rozhraní příkazového řádku. Pomocí metod RhinoScriptu můžeme toto nové chování simulovat téměř přesně. Když vytváříte složité rozhraní, může být příkaz Select..Case velice užitečný.

Metoda Rhino.GetString() má volitelný argument, který vám umožní v příkazovém řádku zobrazit seznam voleb, na které lze klikat myší.

klikací volby

Podle nápovědy k RhinoScriptu akceptuje metoda Rhino.GetString() 3 argumenty:

    Rhino.GetString ([strMessage [, strString [, arrStrings]]])

a všechny jsou volitelné. strMessage and strString jsou jasné, ale arrStrings má pár omezení, kterým musíte před použitím této volby porozumět:

  • Povoleny jsou pouze alfanumerické znaky a podtržítko. Nelze použít tečky, čárky, pomlčky, mezery ani jiné „exotické" znaky.
  • Je povoleno maximálně 12 položek.

Předpokládejme, že jste napsali skript, který kopíruje sadu objektů, v zadaném počtu kopií a na náhodná místa do objemu vymezeného kvádrem. Skript vyžaduje 4 vstupní hodnoty:

  • ID všech objektů, které mají být kopírovány
  • Číslo, reprezentující počet kopií
  • Typické pole obálkového kvádru, reprezentující objem kvádru
  • Pole se třemi čísly, reprezentující výchozí bod kopírování

Abychom převedli tyto požadavky do příkazové řádky podle standardů Rhina, musíme:

        A    Vyzvat uživatele k výběru objektů
        B    Vyzvat uživatele k výběru výchozího bodu pro kopírování
        C    Vyzvat uživatele k výběru objemu kvádru
        D    Vyzvat uživatele k zadání počtu kopií (nebo vytvořit výchozí hodnotu)
        E    Začít nekonečný cyklus
        F    Vytvořit volby, které budou zobrazeny v příkazovém řádku
        G    Vyzvat uživatele k výběru volby pomocí metody Rhino.GetString()
        F    Použít příkaz Select..Case statement pro určení, která volba byla vybrána
        H    Podniknout akci na základě vybrané volby. Vyzvat uživatele k předefinování vybrané volby, provedení akce nebo cokoliv jiného...

2     Dim arrIDObjektu                  'Pole obsahující všechna ID
3     Dim lngPocetKopii
4     Dim arrObjemKvadru, arrKopirovatZ 'Pole s 3D body
5     Dim strVolby(4)                   'Pole se všemi volbami
6     Dim strVysledek                   'Návratová hodnota
7
8     arrIDObjektu = Rhino.GetObjects("Vyberte objekty pro kopírování ", 0, _
9                                     vbFalse, vbTrue, vbTrue)
10    arrKopirovatZ = Rhino.GetPoint("Zadejte výchozí bod kopírování")
11    arrObjemKvadru = Rhino.GetBox(0,,"Definujte objem kopírování")
12    lngPocetKopii = Rhino.GetInteger("Počet kopií", 100, 1, 1e6)
13    'Všimněte si, že ve výše uvedeném kódu nemáme žádné odchytávání chyb
14    'Podívejte se do nápovědy Rhina, co znamenají jednotlivé argumenty
15
16    Do
17         strVolby(0) = "NovyVyber"
18         strVolby(1) = "BodPocatku"
19         strVolby(2) = "ObjemKvadru"
20         strVolby(3) = "PocetKopii_" & lngPocetKopii
21         strVolby(4) = "Kopirovat"
22         'Protože ve volbách používáme proměnnou, musíme ji
23         'pokaždé předefinovat.
24         strVysledek = Rhino.GetString("Kopírovat na náhodné umístění", _
25         "Copy", strVolby)
26
27         If IsNull(strVysledek) Then Exit Sub 'Uživatel stisknul ESCAPE
28         Select Case Left(UCase(strVysledek), 2)
29         Case "NO"
30             arrObjectsIDs = Rhino.GetObjects("Vyberte znovu objekty pro kopírování")
31         Case "BO"
32             arrKopirovatZ = Rhino.GetPoint("Vyberte nový bod", arrKopirovatZ)
33         Case "OB"
34             arrObjemKvadru = Rhino.GetBox(0)
35         Case    "PO"
36             lngPocetKopii = Rhino.GetInteger("Počet kopií", _
37                                            lngPocetKopii, 1, 1e6)
38         Case "KO"
39              Exit Do
40         Case Else
41              Rhino.Print "Uživatel zadal neznámý příkaz"
42         End Select
43    Loop
44
45    Call CopyObjectsAtRandom(arrObjectsID, arrKopirovatZ, _
46                             arrObjemKvadru, lngPocetKopii)

Zde jsme pokryli pouze tu část, která se týká uživatelského rozhraní. Předpokládáme, že existuje uživatelská funkce nazvaná CopyObjectsAtRandom(), která odvede skutečnou práci našeho skriptu.
Jeden z prvků v poli proměnných má proměnný obsah; ke hlavičce textu jsme připojili numerickou proměnnou. Pro filtrování výsledku jsme použili strukturu Select..Case. Místo analýzy celého řetězce se podíváme pouze na první dva znaky (v tomto případě jsou všechny jedničné) a zvětšíme je na velká písmena.

Přeložil Jan Slanina

Související články

Nahoru ↑