Rhinoceros a skripty II - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Odkud pochází fotografka Anne Erhard?

V dnešní soutěži hrajeme o:



3D grafika

Rhinoceros a skripty II

18. října 2002, 00.00 | V minulém díle jsme si probrali starou metodu skriptování, která též dobře poslouží, ale nemá takové možnosti jako jazyk VBScript. S tím se dnes seznámíme natolik, abychom s ním mohli začít pracovat.

{Rhinoceros a Skripty}

Nádech VBScriptu

V minulém díle jsme si probrali starou metodu skriptování, která též dobře poslouží, ale nemá takové možnosti jako jazyk VBScript. V dnešním díle vás lehce s tímto jazykem seznámím, aby uživatel, který jej nikdy neviděl, mohl začít pracovat s námi a v průběhu seriálu si informace o tomto jazyku doplňoval z MSDN. Lidem, kteří již umí programovat ve Visual Basicu (VB) či Visual Basicu for Aplication (VBA), přechod na VBScript nebude dělat problémy. VBScript totiž výchází z jazyka VB.

Co použít za editor na scripty? Je mnoho editorů zdarma, mnoho shareware. Zaleží na vás, můžete používat i normální poznámkový blok (Notepad). Já osobně využívám služeb Code-Genie, což je editor pro programátory a dokáže rozpoznat symboliku pro mnoho jazyků včetně VBScriptu (symboliku jazyka si sami můžete upravovat).

Základy VBScriptu

Zde si probereme jak se deklarují proměnné, jak lze s nimi pracovat, jak usměrňovat tok ve skriptu a podobně. Proměnné se deklarují takto:

Dim Zkusebni_Promenna

Lze definovat více proměnných najednou:

Dim Zkusebni_Promenna, Zkusebni_Promenna2

Přiřazení proměnné hodnotu:

Zkusebni_Promenna = 10 'Priradi promenné cele cislo 10
Zkusebni_Promenna2 = 50 'Priradi promenne cele cislo 50

'Priradi promenne hodnotu Zkusebni_Promenna a pricte k ni
'hodnotu Zkusebni_Promenna2


Zkusebni_Promenna = Zkusebni_Promenna + Zkusebni_Promenna2

'Promenna ma nyni hodnotu 60

Jak vidíte poznámky se vkládají pomocí apostrofy '. Doporučuji nepoužívat diakritiku a vkládat poznámky k důležitým úsekům kódu. Hodí se to až se k němu budete vracet za měsíc i více, ale také to poslouží lidem, kteří budou po vás kód číst.

Operátory jsou zapisovány standardním způsobem.

'Scitani
Zkusebni_Promenna = Zkusebni_Promenna + Zkusebni_Promenna2

'Odecitani
Zkusebni_Promenna = Zkusebni_Promenna - Zkusebni_Promenna2

'Deleni
Zkusebni_Promenna = Zkusebni_Promenna / Zkusebni_Promenna2

'Nasobeni
Zkusebni_Promenna = Zkusebni_Promenna * Zkusebni_Promenna2

'Deleni beze zbytku
Zkusebni_Promenna = Zkusebni_Promenna \ Zkusebni_Promenna2

'Exponent
Zkusebni_Promenna = Zkusebni_Promenna ^ Exponent


Existuje samozřejmě více operátorů, ale zatím nám vystačí (doufám) pouze tyto. Pokud vás zajímají, odkážu vás opět na MSDN.

Tok lze řídit standardními příkazy, ale upozorňuji, že jsou okleštěny oproti VB. Opět jenom ty základní:

If Podminka1 Then
Prikaz_Pro_Podminku1
ElseIf Podminka2 Then
Prikaz_Pro_Podminku2
Else
Prikaz_Pro_Zbytek
End If

Řízení toku pomocí podmínky IF je snad v každém jazyce. Pokud je splněna podmínka, vykoná se daný příkaz. Chybí zde parametr GOTO, čili nelze zde skákat v kódu. Pokud chceme spouštět více příkazu za Then a psát pouze na jednom řádku, stačí příkazy oddělit dvojtečkou:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Dalším způsobem je cyklus pomocí FOR. Probíháme v cyklu dokud proměnná Pocet nenabyde hodnoty Konec. Možnosti v hranatých závorkách naznačují, že tuto volbu nemusíme použít. Lze tedy skákat po zadaných krocích a cyklus předčasně ukončit.

For Pocet = pocatek To Konec [Step Krok]
Prikazy

[Exit For]
Prikazy
Next

Aby jsem zbytečně nerozepisoval o každé funkci, objektech, nabízím vám seznamy s českým popisem.
Funkce se zapisují takto:

Zkusebni_Promenna = Exp(2)
'Vrati hodnotu 7,389056099

Zkusebni_Promenna = LTrim("   Zijeme jednom jednou")
'Vrati retezec "Zijeme jednom jednou"


Objekty se vytvářejí takto:

Dim fso, f, ZkouskaCteni
'Nadefinuju promenne objektu

Set fso = CreateObject("Scripting.FileSystemObject")
'Vytvorim objekt fso a jeho rodic je FileSystemObject
Set f = fso.OpenTextFile("c:\testfile.txt", 2, True)
'Vytvorim objekt f z fso, f je nyni soubor testfile.txt a muzu do nej zapisovat
f.Write "Ahoj světe!"
'Zapisu do f text
Set f = fso.OpenTextFile("c:\testfile.txt", 1)
'Znova vytvorim objekt f z fso, f je nyni soubor testfile.txt a muzu z nej pouze cist
ZkouskaCteni = f.Read(5)
'Prectu z f 5 znaku
Msgbox ZkouskaCteni
'Zobrazim dialogove okno s nactenym obsahem

Jak to použít v Rhinu

To byl teda velmi lehký základ. Jak ale dostat tyto skripty do Rhina?
Skripty musíte ukládat s příponou ".RVB". Soubory lze načítat pomocí příkazů. Slouží k tomu:
  • LoadScript
  • RunScript
Nyní si jednotlivé příkazy probereme.

LoadScript

Dialogové okno LoadScript
Po provedení příkazu se nám objeví dialogové okno, ve kterém lze pomocí tlačítka Add.. načítat skripty do paměti, tlačítkem Load je spouštět, Edit... je měnit, Remove odstranit. Dále je tu zatržítko Save. To vám umožní již načtené skripty uchovat v paměti. Rhino totiž automaticky po skončení skriptu pamět uvolní.

RunScript

Dialogové okno RunScript
Po provedení příkazu se nám objeví dialogové okno, které je podobné jako u LoadScript. Pomocí tlačítka Merge.. načteme skript ze souboru. Daný skript se objeví v textovém okně a my je můžem upravovat. Tlačítkem Save... jej můžeme zpětně uložit do souboru a Run jej spustit. Ve spodní části máme ještě volbu jazyka, pro nás je standardně zvolen VBScript.

Jak jsem v minulém díle slíbil, že si ukážeme vložení skriptu do tlačítka (přece jenom spouštění skriptů přes tyto obludná dialogová okna není to pravé), tak to bude až v příštím díle, kde si už ukážeme praktické ukázky využítí VBScriptu, a vysvětlíme si hrubou kostru objektů v Rhinu.

[-more-]{Funkce podporované ve VBScriptu}

Funkce podporované ve VBScriptu

Funkce Popis
Abs Vrátí absolutní hodnotu čísla
Array Vrátí variantní obsah pole se zadanými hodnotami
Asc/AscB/AscW Vrátí ASCII hodnotu znaku
Atn Vrátí arcustangent argumentu
Chr/ChrB/ChrW Vrátí znak pro specifickou ASCII hodnotu
Cbool Konvertuje hodnotu do Boolean
Cbyte Konvertuje hodnotu do Byte
Ccur Konvertuje hodnotu do Currency
Cdate Konvertuje hodnotu do Date
CDbl Konvertuje hodnotu do Double
Cint Konvertuje hodnotu do Integer
CLng Konvertuje hodnotu do Long
Cos Vrátí cosinus argumentu
CreateObject Vytvoří novou instanci ze zadaného objektu
CSng Konvertuje hodnotu do Single
Date Vrátí aktuální datum
DateSerial Konvertuje hodnoty měsíce, dne, a roku do hodnoty datumu
DateValue Vrátí část datumu z hodnoty datumu
Exp Vrátí hodnotu dle funkce e^x argumentu
Filter Vrátí řetězec pole, který odpovídá daným kriteriím filtru
Fix Vrátí celou část z čísla (Fix (1.2) = 1 a Fix(-1.2) = -1)
FormatCurrency Zformátuje hodnotu jako měna
FormatDateTime Zformátuje hodnotu jako datum nebo čas
FormatNumber Zformatuje číslo
FormatPercent Zformatuje číslo jako procenta
GetObject Vrací vztah k automation objektu
Hex Vrátí řetězec obsahující hexadecimální hodnotu čísla
InputBox Zobrazí dialogové okno s řádkem pro zadání hodnoty
InStr/InStrB Vrátí počáteční pozici daného podřetězce
InStrRev Stejné jako InStr, ale začíná na konci řetězce
Int Vrací celou část čísla (Fix (1.2) = 1 a Fix (-1.2) = -2)
IsArray Vrátí pravdu jestliže argument je pole
IsDate Vrátí pravdu jestliže argument obsahuje platnou hodnotu datumu
IsEmpty Vrátí pravdu jestliže argument není inicializován
IsNull Vrátí pravdu jestliže argument obsahuje platná data
IsNumeric Vrítá pravdu jestliže argument obsahuje platné číslo
IsObject Vrátí pravdu jestliže argument obsahuje objekt
Join Spojí sérii řetězců (opak Split)
Lcase Konvertuje řetězec do malých znaků
Left/LeftB Vrátí levou část řetězce nebo bytů pole
Len/LenB Vrátí délku řetězce nebo bytů pole
LoadPicture Nahraje objekt obrázek
Log Vrátí log argumentu
LTrim Odstraní mezery z levé strany řetězce
Mid/MidB Vrátí podřetězec ze středu řetězce nebo bytů pole
MsgBox Zobrazí dialogové okno se zprávou
Oct Vrátí řetězec obsahující octanovou hodnotu čísla
Replace Nahradí jeden podřetězec s jiným podřetězcem definovaný vícekrát
RGB Vrátí barvu založenou na hodnotách červené, zelené a modré
Right/RightB Vrátí pravou část řetězce nebo bytů pole
Rnd Vrátí další náhodné číslo z generátoru náhodných čísel
Round Zaokrouhlí hodnotu dle zadaného čísla desetinných míst
Rtrim Odstraní mezery z pravé strany řetězce
Sgn Vrátí –1 jestliže je argument záporný, 0 jestliže je nula, +1 jestliže je kladný
Sin Vrátí sinus argumentu
Space Vyplní řetězec zadaným počtem mezer
Split Rozdělí řetězec do více řetězců podle podřetězce (opak Join)
Sqr Vrátí odmocninu argumentu
StrComp Potovná řetězce
String Vyplní řetězec zadaným znakem zadaným vícekrát
StrReverse Opačné pořadí znaků v řetězci
Tan Vrátí tangent argumentu
Time Vrátí aktuální čas
TimeSerial Konvertuje hodnotu hodiny, minuty, a vteřiny do hodnoty datumu
TimeValue Vrátí část času z hodnoty datumu
Trim Odstraní mezery z levé i pravé strany řetězce
TypeName Vrátí řetězec obsahující jmené typu proměnné
VarType Vrátí celé číslo obsahující typ proměnné

[-more-]{Objekty podporované ve VBScriptu}

Objekty podporované ve VBScriptu

Objekt Popis
Dictionary Ukládá kolekci znaků a datových hodnot
Drive Zpřístupní informace o diskových jednotkách; část z FileSystemObject
Drives Obsahuje kolekci objektů jednotek; část z FileSystemObject
Err Obsahuje informace o běhových chybách
File Zpřístupní informace o souborech v adresářích; část z FileSystemObject
Files Obsahuje kolekci objektů souborů; část z FileSystemObject
FileSystemObject Poskytuje objektově orientovaný přístup k souborům a adresářům
Folder Zpřístupní adresáře; část z FileSystemObject
Folders Obsahuje kolekci z objektů adresář; část z FileSystemObject
TextStream Zpřístupní obsah souborů; část z FileSystemObject

[-more-]{Příkazy podporované ve VBScriptu}

Příkazy podporované ve VBScriptu

Příkaz Popis
Call Spustí podprogram
Const Nadeklaruje konstantu
Dim Nadeklaruje proměnou
Do/Loop Provádí smyčku dokud platí podmínka nebo když podmínka je pravdivá
Erase Přeinicializuje obsah pole o pevné velikosti a uvolní všechnu paměť přidělenou tomuto poli o pevné velikosti
For/Next Provádí smyčku při iterování proměnné
For Each/Next Provádí smyčku při iterování skrze skupinu objektů
Function/End Function Nadeklaruje funkci která bude vracet hodnotu
If/Then/Else/End If Podmíněné provádění jednoho příkazu nebo dalších
On Error Vyvolá specifikované akce jestliže vyvstane chybový stav
Option Explicit Požaduje aby všechny proměnné byli před použitím nadeklarovány
Private Nadeklaruje lokální proměnou
Public Nadeklaruje veřejnou proměnou
Randomize Inicializuje generátor náhodných čísel
ReDim Změní velikost pole
Select Case/End Select Vybere jediný podmínku ze seznamu možných podmínek
Set Přiřadí vztah k objektu nebo vytvoří nový objekt
Sub Nadeklaruje podprogram
While/Wend Provádí smyčku dokud je podmínka pravdivá

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » 3dscena  

 » Rubriky  » Go verze  

 » Rubriky  » 3D grafika  

 

 

 

Poptávka bazar

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: