MaxScript a dezvoltat mijloace de introspecție, adică este posibil să se determine tipul și structura obiectului în timpul executării programului sau atunci când funcționează în consola (Listener).
Certificatul funcției MaxScript și metdy responsabil pentru introspectie, împrăștiate în diferite secțiuni, care nu este foarte convenabil.
Ulterior, atunci când metoda de transfer se va face referire numai la metode legate de introspecție. Acest lucru nu înseamnă că clasa nu are alte metode.
În scris acest articol nu a avut scopul de a oferi o descriere completă a fiecărei funcții menționate. Detalii complete pot fi găsite în sistemul de ajutor pentru MaxScript.
Unele pasaje din articol este o traducere în limba română materiale din sistemul de ajutor pentru MaxScript.
oportun
Funcția caută și afișează mesaje despre variabilele globale pe baza variabilelor nume de șablon specificate și valorile de clasă. Un sinonim pentru apropos () este un ajutor ().
Trebuie remarcat faptul că, în toate numele MaxScript de funcții încorporate, clase, și alte entități permanente sunt variabile globale.
Trebuie remarcat faptul că, deși această caracteristică are promițătoare alias «ajutor», unele informații cu privire la obiectul desfășurat de interes (adică, o variabilă globală), funcția nu emite. Cu toate acestea, aceasta poate ajuta la detectarea obiectelor, existența pe care nu ai știut existat.
showClass
display-uri funcționale în fereastra consolei de informații cu privire la clasa (sau clase) MaxScript. Primul argument este nevoie pentru a căuta un șablon (un șir cu wildcards) nume de clase, numele superclasele și / sau nume de proprietăți. Șablonul arata ca:
"
unde
Una dintre cele mai utile aplicații de funcții pentru a oferi o listă de proprietăți pentru interesele clasei. Ie atunci când există o clasă cunoscută de obiect (obține clasă de obiecte este întotdeauna posibil prin intermediul classOf () funcția) și doriți să modificați una dintre proprietățile, dar numele proprietății nu este cunoscută, apoi folosind funcția showClass (), puteți afla numele proprietății și tipul acesteia.
De exemplu, puteți vizualiza toate proprietățile Box de clasă:
getPropertyController
setPropertyController
Obțineți acces la controler, care este atribuit unui obiect de proprietate, puteți utiliza getPropertyController () și setPropertyController (). În cazul în care proprietatea nu este atribuit operatorului, funcția getPropertyController () returnează valoarea nedefinită.
hasProperty
Funcția hasProperty () vă permite să verificați dacă proprietatea specificată a obiectului. Ca argument, funcția are un șir de șablon cu metacaractere.
apel Funcția utilizează intern showProperties () și, prin urmare, are aceleași caracteristici lucrare.
isProperty
Funcția isProperty () vă permite să verificați dacă un obiect are o proprietate specificat. Ca argument, funcția ia numele liniei sau fără metacaractere.
hasProperty () și isProperty () este similară, dar în unele cazuri, dau rezultate diferite:
hasProperty b "numele"
isProperty b "numele"
Faptul că hasProperty () utilizează funcția de apel showProperties rezultat () în care se verifică modelul de numele proprietății. isProperty () funcție încearcă să acceseze proprietatea specificată a obiectului. Caseta de clasă pentru funcția showProperties obiect () returnează doar o listă a proprietăților de clasă Box. dar nu clase părinte. Proprietatea numele este deținut de clasa Node. astfel încât funcția hasProperty () nu-l și vezi isProperty () - vede.
isPropertyAnimatable
Functia returneaza true. În cazul în care proprietatea specificat există și poate fi animată.
-- imprima o listă a tuturor proprietăților domeniului de aplicare
-- indicând posibilitatea animarea
pentru i în getPropNames s formatati "% Proprietate:% - Animatable:% \ n" s.name i (isPropertyAnimatable s i)
Sphere01 de proprietate: #smooth - Animatable: true
Sphere01 de proprietate: #radius - Animatable: true
Sphere01 de proprietate: #mapCoords - Animatable: fals
Sphere01 de proprietate: #segs - Animatable: true
Sphere01 de proprietate: #slice - Animatable: fals
Sphere01 de proprietate: #hemisphere - Animatable: true
Sphere01 de proprietate: #sliceFrom - Animatable: true
Sphere01 de proprietate: #sliceTo - Animatable: true
Sphere01 de proprietate: #chop - Animatable: fals
Sphere01 de proprietate: #recenter - Animatable: fals
Dacă vom crea un obiect de clasă Box si uita-te prin lista de proprietăți showClass () și showProperties (). constatăm că setul de caracteristici este diferită:
Proprietățile obiectului (clasa instanță) a apărut realWorldMapSize de proprietate. A fost adăugat la realWorldMapSizeInterface interfață. Mecanismul de interfață MaxScript, în esență, realizează ideea de moștenire multiplă. De exemplu, a declarat că interfața sunt toate primitivele geometrice standard și modificatori nektoroye.
Această zonă este foarte slab documentat în sistemul de ajutor pentru MaxScript. Dacă nu intra în detalii 3ds Max arhitectura, interfețele în ceea ce privește MaxScript, sunt clase în care este evidențiat anumite funcționalități. Astfel, fiecare clasă poate avea nu numai propriile lor proprietăți și metode, dar, de asemenea, cu proprietăți și metode de interfețele lor, precum și moștenit de la clasa părinte proprietățile, metodele și interfețele.
Class Box este interfața realWorldMapSizeInterface. Clasa Box este un clase descendent (moștenire ierarhie) GeometryClass. nod. MAXWrapper. Valoare. Dintre aceste clase părinte numai nod clasă are mai multe interfețe. Astfel, atunci când creați o instanță a clasei Box. obiectul moștenește proprietățile și interfețele de clasă Box. și toate clasele sale mamă.
Trebuie remarcat faptul că showProperties funcția () funcționează numai cu cel mai recent nivel de moștenire. De exemplu, clasa instanță Box are o interfata INodeLayerProperties. moștenită de la clasa nod. Această interfață este, printre altele, are capacitatea de a displayByLayer. Codul de mai jos funcționează fără erori:
Acest exemplu arată că, de asemenea, puteți merge la orice proprietate cu privire la orice interfață (care are ca obiect), folosind un punct-notație nume de interfață ierarhică. Aceeași acțiune, în cele mai multe cazuri se pot face mai ușor:
Această metodă funcționează dacă numele interfeței de proprietate nu se repetă printre numele proprietăților obiectului și / sau între numele altor proprietăți ale interfeței.
Lista de interfețe obiect poate fi accesat folosind showInterfaces () funcție:
Returnează superclasa argumentul. Ie clasă care moștenește argumentul de clasă. Expresia superClassOf arg classOf expresie de fapt echivalent (classOf arg).
isKindOf
Functia returneaza true. dacă obiectul este o instanță a acestei clase sau instanta a unei clase moștenită de la aplicația.
Cu această caracteristică este convenabil să verifice obiectul aparține unei anumite clase. De exemplu, trebuie să faci o operație pe toate camerele selectate în scenă. În cel mai simplu caz, problema este rezolvată trivial. Dar dacă presupunem că pot exista izolat nu numai aparatul de fotografiat și scena sunt diferite tipuri de aparat de fotografiat, decizia este mai complicată. Această problemă poate fi rezolvată cu ajutorul funcției classOf (). dar, în acest caz, vor fi verificate doar corela o anumită clasă și trebuie să faci câteva verificări. Pur și simplu utilizați funcția isKindOf ():
pentru obj în selecție do (
în cazul în care camera de isKindOf obj do (
-- Noi facem operația cu obiectul camerei
-- de exemplu, imprima numele obiectului
Aici, condiția este verificat obiect aparținând unei clase de aparat de fotografiat. sau o clasă care derivă din clasa aparat de fotografiat. Toate tipurile de aparate foto din 3ds Max trebuie să fie moștenită de la clasa de aparat foto. Acest lucru este valabil pentru ambele tipuri de built-in (camera gratuit și camera țintă), precum și tipurile de camere, adăugați plug-in-uri terțe părți (de exemplu, VRayPhysicalCamera). Astfel, operația va fi efectuată numai cu aparate foto și camere video.
Se întoarce adevărat. în cazul în care argumentul - definirea structurii.
Se întoarce adevărat. în cazul în care argumentul - instanța a structurii.
Se întoarce adevărat. în cazul în care argumentul - controller.
Se întoarce adevărat. în cazul în care argumentul - un plugin scris în MAXScript.
Se întoarce adevărat. în cazul în care argumentul - clasa plugin, scris în MAXScript.
Se întoarce adevărat. în cazul în care argumentul - un atribut personalizat MaxScript (MAXScript Atribut personalizat).
Notă. Deoarece atributele definite de utilizator sunt un caz special de plug-in, scris în MaxScript, funcția isMSPlugin () va reveni, de asemenea, adevărat.
Returnează true, în cazul în care argumentul - atribuie un obicei de clasă MaxScript.
proprietăți Introspektsionnye MAXWrapper și metode ale clasei
class MAXWrapper este clasa de bază pentru toate clasele care reprezintă obiecte 3ds Max, cum ar fi obiecte geometrice modificatori, materiale, etc. Instanțe de clase moștenite de la MAXWrapper. conțin referiri la obiecte legate de 3ds Max, care le permite să urmeze obiect. Acest lucru permite MaxScript știe când obiectul a fost supus unor transformări, utilizatorii de la distanță, sau s-au schimbat proprietățile sale.
După cum probabil ați observat, mai multe funcții introspektsionnye iau ca argument obiecte de tip MAXWrapper.
clasa MAXWrapper are mai multe proprietăți legate de introspecție, dar ele sunt destul de specifice și sunt rareori folosite în activitatea practică cu MaxScript.
MAXClass Returnează o matrice de valori (adică clase) care aparțin acestei superclasă.
Proprietatea include un identificator intern (ID) 3ds Max clasă pentru clase și obiecte moștenite de la clasa de MAXWrapper. Este o serie de două numere întregi, care identifică în mod unic clasa.
Proprietatea include un identificator intern (ID) al 3ds Max superclasei pentru clase si obiecte.
O listă completă a proprietăților clasei MAXWrapper - vezi Asistență sistem MaxScript ..
Returnează argumentul un nume de clasă ca un șir de caractere.
În 3ds Max multe obiecte depind de alte obiecte. Materialul depinde de hărțile lor, obiect geometric depinde de elementul de bază, etc. Mecanismul intern al 3ds Max determină dependențele relație între obiecte.
În MaxScript acolo Refs structura. care definește patru funcții pentru a lucra cu dependențe:
refs.dependents
Returnează o serie de alte obiecte (sau, mai degrabă, referiri la aceste obiecte) 3ds Max, care depind de un anumit obiect (toate obiectele sunt descendenții clasei MAXWrapper). Dacă argumentul opțional immediateOnly este adevărat, acesta va fi returnat numai obiecte dependente în mod direct.
De exemplu, următoarea expresie indică faptul că materialul hartă difuză atribuită foo obiect. Materiale folosite Material_ # 1, # 2 Material_, Material_ # 3 în hartă textura map_ # 2: Noise.
# (Material_ # 3, Material_ # 2, map_ # 2: Zgomot, Material_ # 1)
Funcții în MaxScripttakzhe sunt obiecte. Definirea funcției este expresia care este rezultatul unui obiect de tip MAXScriptFunction. În mod implicit, numele acestui obiect va fi numele funcției fiind definită. Cu toate acestea, expresia care definește o funcție returnează o valoare care poate fi atribuită o altă variabilă:
PF1 = fn func1 a b = (a - b)
În acest caz, variabilele func1 FP1 și se referă la același obiect, dar variabilele sunt diferite și independente una de cealaltă.
Dacă luăm în considerare sistemul clasic stil C, în exemplul de mai sus, func1 este un nume de funcție, și FP1 - un indicator de funcție. Și, se înțelege că func1 - este constantă, și FP1 - variabilă. Cu toate acestea, în ambele aceste identificator MaxScript numit un obiect de referință și sunt identificatori de variabile. Astfel, variabila func1 poate fi înlocuită în orice moment, prin atribuirea acesteia orice alt obiect (funcție, număr etc.), iar funcția accesată prin PF1 variabilă. Dacă variabila FP1 este de asemenea înlocuită, de exemplu, pe obiect functie nu va invoca o singură variabilă, obiectul funcție este recuperată de către colectorul de gunoi.
concluzie
În acest articol, am încercat să adune informații cu privire la cele mai importante și upotrebimykh (din perspectiva mea) funcții, proprietăți și metode legate de introspecție MaxScript. Este posibil ca pentru domeniul de aplicare al acestui articol au fost câteva puncte importante și interesante. Este posibil ca unele lucruri nu am acordat suficientă atenție. MaxScript de referință pentru a vă ajuta - există aproape totul.