A MAXScript programozási nyelv

Nyelvi elemek

Azonosítók

Az azonosítók alfanumerikus karakterek és az aláhúzásjel(_) sorozatai lehetnek, vagy tetszőleges karaktersorozat egyszeres idézőjelek között, feltéve, hogy a karaktersorozat nem tartalmaz ilyen idézőjelet (például 'αβγδε').

Kulcsszavak: about, and, animate, as, at, by, case, catch, collect, continue, coordsys, do, else, exit, fn, for, fromfunction, global, if, in, local, macroscript, mapped, max, not, of, off, on, or, parameters, persistent, plugin, rcmenu, return, rollout, set, struct, then, throw, to, tool, try, undo, utility, when, where, while, with.
(A from fenntartott kulcsszó, de jelenleg nem használt.)

Határoló jelek és szimbólumok: (, ), +, *, -, /, ^, +=, -=, *=, /=, --, =, ;, <eol>, ,, [, ], :, ', &, ., {, }, #, ==, !=, <, >, >=, <=, ?, $, ..., .., \.

Fenntartott globális változók

Ide tartoznak a rendszerszinten definiált változók, amiket három csoportra bonthatunk: előredefiniált globálisok (csak olvashatóak, például: true, false, pi, red, white, x_axis, undefined), a 3ds Max rendszer globálisai (például frameRate, renderEffects) és a MAXScript rendszer állapotát tükröző rendszerglobálisok (például editorFontSize, stackLimit). Nem ajánlott, de használhatók saját változónevekként.

Literálok

Számliterálok

A MAXScript kétféle számtípust használ: 32 bites előjeles egészeket, illetve egyszeres pontosságú lebegőpontos számokat. Az ezeket jelölő literálok alakja:

[-]{<digit>}[.{<digit>}[(e|E)[+|-]{<digit>}+] 123 123.45 -0.00345 1.0e-6 .1

Írhatunk hexadecimális alakban is számokat:

0x{<hex_digit>}+ 0x0E

String-literálok

Hasonlatosan más nyelvekhez, a string-eket "-jelek közé írjuk, használhatók a megszokott escape szekvenciák is (például \n, \", \t vagy a \x{d} unicode szekvencia hexadecimális számokkal), illetve használandók a ?, * és % speciális jeleknél az alábbiak: \?, \*, \%. Érdekesség, hogy a C#-hoz hasonlóan itt is vannak verbatim string literálok, ilyen például a @"g:\temp\newfolder\render", ilyekor a \ jelek normál visszaper karakternek számítanak.

Speciális literálok

Köszönhetően annak, hogy a nyelv gyakorlatilag egy komplex modellező és animációs program vezérlőnyelve, ebből kifolyólag számos speciális literált írhatunk, így például olyanokat, amellyekkel leírhatunk időt, térbeli pozíciót, vagy hivatkozhatunk hierarchián belüli részekre.

Időliterálok:

Az idő tick-ek (ketyegések) többszöröseivel írható le. A 3ds Max-ban használt időfelbontás szerint egy másodperc 4800 ketyegést jelent, azaz a legrövidebb ábrázolható idő 1/4800-ad másodperc. A másik fontos elem a frame-ek száma, ez gyakorlatilag a képkockák számát jelenti. A másodpercenkénti képkockaszám állítható, alapértelmezés szerint 30 képkocka/másodperc (NTSC szerint).

{<decimal_number>[m|s|f|t]}+ -- perc/másodperc/képkocka/ketyegés [-]{<digit>}:{<digit>}[.{<digit>}] -- SMPTE percek:másodpercek.frame-szám [-]<decimal_number>n -- normalizált idő

 

Példa Jelentés

2.5s

2.5 másodperc

1m15s

1 perc 15 másodperc

2m30s5f2t

2 perc 30 másodperc 5 képkocka és 2 "ketyegés"

125f

125 képkocka

18.25f

18.25 képkocka

1f20t

1 képkocka és 20 "ketyegés"

2:10.0

2 perc 10 másodperc 0 képkocka (SMPTE)

0:0.29

29 képkocka (SMPTE)

0.45n

0.45 normalizált idő (az aktív időszegmens hanyad része)

Útvonalnév literálok:

Útvonalnevekkel azonosíthatók a 3ds Max jelenetben előforduló objektumok (például egy fényforrás, egy gömb geometria, egy vonal, stb.). Egy útvonalnév több ilyen objektumot is azonosíthat, ugyanis a nevekben használhatunk speciális karaktereket (?, *).

Példák:

$box01 -- az az objektum, aminek a neve 'box01' $torzs/felkar/alkar -- hierarchikus útvonal név $*box* -- minden olyan objektum, aminek a nevében szerepel a 'box' $torzs/* -- minden közvetlen gyereke a $torzs-nek $helpers/d* -- minden 'd'-vel kezdődő nevű segédobjektum

 

2D és 3D pont literálok:

Egész vagy lebegőpontos szám értékű kifejezésekből (expr).

[<expr>, <expr>] és [<expr>, <expr>, <expr>]

 

Szkript Kimenet

b = 45

45

[10, 20, 30]

[10,20,30]

[sin a, 2 * b, a^2 + b^2]

[0.173648,90,2125]

Tömbliterálok:

A tömbök értékek egy rendezett sorozata, tömbliterálokat kifejezésekből építhetünk, például:

#(1, 2, 3) -- 3 egész számot tartalmazó tömb #() -- üres tömb #(1,"foo",#(1.2, -4,#fred),[1,2,3]) -- számot, string-et, beágyazott tömböt és pontos is tartalmazó tömb

Megjegyzések

Megjegyzések írásához a /* és */ határolóelemeket használhatjuk párban. Ha a záró tag lemarad, a program a fájl végéig kikommentezettnek tekinti a programszöveget.

Példa:

/* ez egy hosszú komment lehet több sorból álló */ for i in 1 to 10 do ( /* messageBox "in loop"; */ frabulate i )