You are on page 1of 35

Tutorial de inicio de MAXScript!

www.davidinlines.com

Empezar con MAXScript


David Inlines
3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

Empezar con MAXScript


A. El manual B. MAXScript Primera parte ! ! ! ! ! ! ! ! ! ! ! ! ! 1.1 Diferentes componentes de un Script ! 1.1.1 Signos 1.2 Funciones en MAXScrpit. 1.3 Construccion de Listas o Arrays. 1.4 Entrar Comandos. 1.5 Identicacin de objetos y modicacin de parmetros. 1.6 Variables y mtodos para asignarlas. 1.7 Asignar Accesos 1.8 Variables globales y locales. 1.9 Listas o Arrays ! 1.9.1 Lista o Array cerrada. ! 1.9.2 Lista o Array abierta. 1.10 Operaciones y operandos.

Segunda Parte ! ! ! ! ! ! ! ! ! ! ! ! ! 2.1 Funciones. 2.2 Crear comandos de transformacin. ! 2.2.1 Comando MOVER. ! 2.2.2 Comando ESCALAR. ! 2.2.3 Comando ROTAR. 2.3 Comandos para indicar propiedades. 2.4 Comandos para aadir modicadores. 2.5 Expresar animaciones. 2.6 Argumentos. Simplicar las funciones. 2.7 if... then... else. 2.8 Bucles. ! 2.8.1 Bucle For ! 2.8.2 Bucle While

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

Tercera Parte ! ! 3.1 Crear herramientas de entorno con MAXScript. ! 3.2 Mens contextuales de botn dercho. ! 3.3 Denicin de Macros. ! 3.4 Cmo crear un botn. ! ! 3.4.1 Cmo hacerlo operativo. ! 3.5 Aadir un contador deslizante. ! ! 3.5.1 Cmo hacerlo operativo. ! 3.6 Crear mensajes de error. ! 3.7 Crear cajas otantes. ! 3.8 Editor de visual MAXScript. ! 3.9 Herramienta Macro Recorder. ! 3.10 Comando Debugger Dialog. Cuarta parte ! Comandos y funciones ms importantes utilizados en este manual.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

A. El manual
Este manual no esta preparado para formar a un programador de MAXScript con todo el sentido de la palabra, eso s, aprenderemos a entender y crear guiones que podr necesitar ms adelante: Cmo crear, abrir y ejecutar guiones. Crear guiones que generen y editen objetos. Crear funciones dentro de los guiones. Conocer que son las variables o argumentos y su efecto en una funcin. Conocer y aplicar condiciones o bucles. Crear animaciones de geometras y aadir modicadores. Crear utilidades personales operativas con persianas, paneles, botones y cajas otantes. Para poder seguirlo bien, es preferible tener unos mnimos conocimientos de programacin y conocer el funcionamiento del Autodesk 3ds Max, ya que el cdigo que aprenderemos, modica valores de objetos de dicho software. Toda la informacin de este manual esta sacada del libro "3ds Max 2012. Curso Avanzado" , Josep Molero Vera, Inforbook's, S.L. con algunas pequeas correciones. Si algo est mal desarrollado, por favor, envenme un correo a davidinlines@gmail.com para corregirlo. En mi blog personal www.davidinlines.wordpress.com he colgado algunos ejercicios y prcticas que salen en este manual.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

B. MaxScript
MAXScript es un lenguaje de programacin orientado a objetos de 3ds Max y exclusivo de 3ds Max. El dominio de este lenguaje, se pueden conseguir grandes mejoras en al utilizacin de 3ds Max, las tareas de creacin y animacin pueden ser mucho ms ecientes gracias a las operaciones programadas con MAXScript, construir modelos que, "a mano" sera muy costoso, en cambio, con unas lneas de cdigo sencillo se pueden crear cosas complejas con geometras y animaciones. MAXSript Listener: Consta de un espacio mayor donde se escriben los "Scripts" de varias lneas, es la parte rosada; abajo est la ventana donde se muestra el resultado, por ejemplo, si en la parte rosada ponemos "2+2" abajo saldr "4". Mini Listener: Se encuentra en al parte inferior izquierda del 3ds Max y se utiliza igual que el MAXScript Listener.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

Primera parte
1.1 Diferentes componentes de un script
Lnea escrita o Script: Objeto fundamental y evaluable del programa. Generalmente construido por elementos que pueden ser destinos, valores, constantes u otras lneas. Operador: Destino de operacin matemtica. Operando: Componente de una operacin. Argumento: Cualquier variable de una funcin. Factor: Elemento similar al operando, que forma parte de una expresin. Variable: Valor que se almacena en la memoria para su utilizacin posterior. Elemento de la lnea: Cualquier componente de la lnea. Destino: Generalmente sus componentes indican nombres de variables, matrices o funciones denidas por el programador. Expresin: Grupo de destinos que constituyen una operacin matemtica. Nmeros enteros: Valores numricos exactos. Nmeros reales: Valores numricos con coma otante. Cadenas: Son caracteres de texto entre comillas. Lista o Array: Serie ordenada de elementos o expresiones. Descriptores: Son ciertos caracteres que representan cheros. Comando: Es el destino cuyo nombre representa un comando del programa. Funcin: Es un destino de una funcin o comando creada por el programador. 1.1.1 Signos \ : Se utiliza para que una lnea ignore el nal de una expresin. ; : Separa expresiones dentro de una lnea. , : Separa expresiones en una Lista o Array, no es una coma otante para nmero real. . : Es la coma otante de un nmero real. Tambin es un punto de notacin entre un objeto con nombre y su parmetro. : Para comentarios aclaratorios, no se evala la lnea que lo contiene. # : Indica Lista o Array. $ : Identica el texto que sigue como el nombre de un objeto 3ds Max con nombre. Otros utilizados son: () . "

1.2 Funciones en MAXScript


Como se ha nombrado ms arriba, si en la parte rosada del Listener ponemos cualquier suma, en la parte inferior nos devolver el resultado: 1+2 devuelve 3 1.1 + 2.2 devuelve 3.3 (ojo on el . y no la ,) 1.1 + 2 devuelvr 3.1 Para escribir texto, lo deberemos poner entre comillas: "Hola" devuelve "Hola"

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

1.3 Construccion de Listas o Arrays


#(<expr>,<expr>) #(2.2 + 3 , 3.3 + 4) Devuelve #(5.2 , 7.3) El valos <expr> puede estar construido por nmeros enteros, reales, expresiones y cadenas sin limitacin de elementos.

1.4 Entrar comandos


<nombre del comando> ( ) torus ( ) + intro devuelve un toroide en el viewport llamado "Torus001"

1.5 Identicacin de objetos y modicacin de parmetros


$<nombre del objeto>.<parmetro del objeto> = valor $Torus001.segments = 60 - Aumenta el valor de segmentos a 60 $Torus001.sides = 40 - Aumenta el valor de sides a 40. $Torus001.Radius1 = 20 - Aumenta el valor del radio 1 a 20.

1.6 Variables y mtodos para asignarlas


<destino> = <expr> Minombre = "este es mi nombre" david = "inlines" - devuelve inlines A = 2 - devuelve 2 B=5 C = #(A+B) devuelve #7 D = #(A + B, A * B) devuelve #(7,10) Micaja = box() - asigna un objeto a una variable A partir de ahora, cada vez que escriba Minombre en el Listener, le devolver "Este es mi nombre", esto signica que a la variable Minombre se le ha asignado "Este es mi nombre", as con todas las variables asignadas. - A la hora de asignar variables, no existe diferencia entre maysculas y minsculas. - Tambin se pueden asignar otros correspondientes a objetos o parmetros de 3ds max, por ejemplo colores, nombres de objetos, parmetros de dimensin, etc. - No se pueden utilizar nmeros enteros ni reales para representar nombres de variables. - Solo se utilizar el punto . para separar el nombre del objeto de su parmetro.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

1.7 Asignar accesos


Es una construccin que permite introducirse en los componentes de objetos y valores compuestos, mediante operandos de propiedades de un objeto o indexar una Lista o Array. <nombre_variable> . <operando> Micaja.length = 50 Micaja.width = 10 Micaja.height = 15 Cada vez que pulsamos intro, "Micaja"se actualiza. Si hemos creado muchas variables, podemos ver las propiedades esribiendo showProperties <elemento> por ejemplo showProperties Micaja, nos devolver: showProperties () ! .height : oat ! .length ; foat ! .lengthsegs : integer ! .width : oat ! .widthsegs : integer ! .mapcoords : boolean ! .heightsegs : integer ! .realWorldMapSize : boolean false Esto es un listado de propiedades del objeto al que corresponde la variable y a su derecha el tipo de dato que precisa. Float: dato de coma otante Integer: dato de nmero entero Booblean: True o False, tambin On/Off String: cadena entre comillas " ".

Para denir las coordenadas se utiliza el operando position y el valor de la posicin entre corchetes: <Nombre_variable>.position = [valor 1, valor 2, valor 3] micaja.position = [1, 2.0, 9]

1.8 Variables globales y locales


Las variables globales son variables que quedan memorizadas mientras no se cierre el programa. Las variables locales son aquellas son aquellas que se almacenan en la memora de forma temporal mientras el script est en funcionamiento; las variables son locales si no se le indica ningn mbito. global <destino> = <expr>

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

local <destino> = <expr> global Micaja = box( ) local Micaja = box ( ) Las persistent global hace que la variable se salve al cerrar una escena y sea restituida al abrirla de nuevo.

1.9 Listas o Arrays


Es una serie ordenada de variables almacenadas bajo un mismo nombre, es una gran variables dividida en partes denominada Elemento. 1.9.1 Lista o array cerrada: #(<expr> (, <expr>)) #(2, 5, 7, 25) devuelve #(2, 5, 7, 25) b = 12 devuelve 12 x = 60 devuelve 60 # (13, "array", cos x, #(b + 2*10.0)) devuelve #(13, <<array>>, 0.5, #(32.0)) 1.9.2. Lista o array abierta: #( ) Los elementos de la lista se aaden uno a uno entre corchetes. MiLista = # () devuelve #( ) MiLista [1] = "casa" devuelve "casa" MiLista [2] = 125 devuelve 125 MiLista [3] = 2 devuelve 2 MiLista [4] = 3 devuelve 3 MiLista devuelve #("casa", 125, 2, 3)

1.10 Operaciones y operadores


Son operaciones matemticas simples. + - * / , ^ sin x, cos x, pi... Random x y devuelve un nmero que est entre X e Y Random 10 20 puede devolver 19 o 15 Los Contadores o Incrementales son incrementos determinados por i = i + 1 puediendo sustiruis el + por cualquier otro operador (+ - * / , ^ sin x, cos x, pi,...).

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

Segunda parte
2.1 Funciones
La funcin es un pequeo guin o parte de un guin que puede ser evaluada y ejecutada para obtener un resultado. Function o fn<nombre_de_la_funcion> <parmetros> = <expr> Para funciones recurrentes, colocamos mapped en lugar de function o fn, que son funciones dentro de otras funciones y dentro de otras funciones tantas veces como se precise. function miFuncion= ( ) miFuncion ( ) Por ejemplos, queremos crear una funcin que haga Teteras de radio 30 y 4 segmentos: function CreaTeteras = ( ! Tetera = teapot radius:30 segments: 4 ) CreaTetera () (Sin espacio en el parntesis anterior)

2.2 Crear comandos de transformacin


2.2.1 Comando MOVER move nombre_de_variable [<x,y,z>] move miesfera [70,70,0] Con este comando hemos desplazado la esfera 70 unidades en X y en Y, en Z 0. 2.2.2 Comando ESCALAR scale nombre_variable [<Sx,Sy,Sz>] Scale miesfera [2,2,1] En el eje X e Y se ha escalado por dos en el Z se queda igual (1=igual)

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

10

Tutorial de inicio de MAXScript!

www.davidinlines.com

2.2.3 Comando ROTAR Para rotar las guras, se adaptan los parmetros a la forma de especicar los ngulos en el espacio tridimensional, bajo el mtodo de Euler. 1. Se dene como variable un comando de rotacin de objeto. nombre_rotacion = eulerangles Ax Ay Az miRotacionEsfera = eulerangles 0 30 0 2. Cuando tenemos la variable denida: rotate nombre_de_variable nombre-rotacion rotate miesfera miRotacionEsfera

Normalmente siempre se trabaja con el Sistema de Coordenadas Universales (SCU), si necesitamos cambiar este, haremos lo siguiente: in coordsys <sistema especico> <nombre_rotacion> = eulerangles Ax Ay Az in coordsys local mirotacion = eulerangles 0 30 0 ! ! ! ! ! ! Los sistemas especcos son: in coordsys world si estaba en otro sistema y quiere volver al SCU. in coordsys local pasa al Sistema de Coordenadas Local. in coordsys parent pasa al Sistema de Coordenadas Ascendiente. in coordsys grid pasa al Sistema de Coordenadas de la Cuadrcula. in coordsys screen pasa al Sistema de Coordenadas de la Pantalla. in coordsys <node> pasa al Sistema de Coordenadas de Designar

2.3 Comandos para indicar propiedades


Se trata de activar (true) o desactivar (false) propiedades de la gura y cambiar valores, por ejemplo: miesfera.segments = 8 miesfera.radius = 40 miesfera.smooth = false miesfera.mapcoords = true

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

11

Tutorial de inicio de MAXScript!

www.davidinlines.com

2.4 Comandos para aadir modicadores


Un aspecto muy importante es la asignacin de modicadores mediante cdigo, se aaden mediante el comando addmodier, bastante lgico: addmodier <nombre variable> (<nombre_modicador> <parametros>) MiTetera = teapot radius: 30 addmodier MiTetera (bend angle: 45) Si queremos aadirle otro modicador igual o diferente, solo debemos ponerlo debajo del otro: MiTetera = teapot radius: 30 addmodier MiTetera (bend angle: 45) addmodier MiTetera (bend angle: 90) Para poder modicar el valor de algn parmetro, es igual que la forma anteriormente explicada: nombre_variable.comando_modicador.propiedad = valor MiTetera.bend.angle=60

IMPORTANTE: En este ejemplo, hemos utilizado el modicador Bend y solo estamos modicando el valor del ngulo, si lo que necesitamos es cambiar el el eje de giro (en X Y Z) debemos cambiar "angle" por "Axis": MiTetera.bend.axis = 0 para seleccionar el eje X MiTetera.bend.axis = 1 para seleccionar el eje Y MiTetera.bend.axis = 2 para seleccionar el eje Z Para activar alguna parte del modicador, por ejemplo el Limits, escribiremos: MiTetera.bend.limit = true para activarlos MiTetera.bend.limit = false para desacrivarlo. La mayora de modicadores trabajan as.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

12

Tutorial de inicio de MAXScript!

www.davidinlines.com

2.5 Expresar animaciones


Todo lo programado anteriormente, se puede animar con una serie de comandos: animate on ( at time tiempo_fotograma_inicio (nombre_variable.parametros>) at time tiempo_fotograma_nal (nombre_variable.<parametros>) ) Un ejemplo de una tetera en reposo y se va escalando hasta el fotograma 50 y vuelve a su posicin y escala inicial: tetera = teapot () animate on ( at time 0 (tetera.pos = [-80,0,0]; tetera.scale = [1,1,1.5]) at time 50 (tetera.pos = [80,50,0]; tetera.scale = [1,8,1.5]) at time 100 (tetera.pos = [-80,0,0]; tetera.scale = [1,1,1.5]) ) MAXScript da por denido en tiempo_fotogramas el nmero de fotogramas, para cambiar esta unidad utilizaremos las siguientes formas: s para indicar la unidad de segundos. f para indicar el nmero de fotogramas. t para "tick" unidad de resolucin de tiempo, equivalente a 1/4800 de segundo. m para indicar la unidad de minutos.

2.6 Argumentos. Simplicar las funciones


Se utilizan para no hacer eterno el trabajo de crear una funcin por cada elemento, por ejemplo, si queremos hacer 20 elementos o ms, deberemos utilizar los Argumentos para simplicar el tiempo y el trabajo, asignamos unos argumentos a una funcin y a las restantes solo habr que modicar pocos valores: La funcin es: function creamiSatelite unradio unaposicion = ( ) creamisatelite <valor radio> <valor posicion> unradio y unaposicion serian nombres de argumentos de una nica variable creamitetera: miSatelite.radius = unradio miSatelite.position = unaposicion

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

13

Tutorial de inicio de MAXScript!

www.davidinlines.com

De esta manera, la funcin quedara as: function creamiSatelite unradio unaposicion = ( ! miSatelite = sphere () ! ! /*declaramos la variable miSatelite*/ ! miSatelite.radius = unradio! /*declaramos la variable un radio para ! ! ! ! ! ! ! ! colocar el valor del radio*/ ! miSatelite.position = posicion! /*Declaramos la variable deposicin para ! ! ! ! ! ! ! colocar el valor posicin [x y z]*/ ! ) ! ! ! /*llamamos a la funcin colocando los valores*/ creamisatelite 20 [0,80,0]! ! creamisatelite 10 [0,100,0]!! ! ! /*radio 20 y posicin [0,80,0]*/ /*radio 10 y posicion [0,100,0]*/

2.7 if... then... else


En programacin, la secuencia if evala la expresin indicada como condicin y si el resultado es cierto (true) pasa a evaluar la sieguiente funcin then. Por lo contrario, si el resultado es falso (false), pasara a evaluar la otra funcin else: if <condicin> then ( ! <accin true> ) else ( ! <accin false> ) Ejemplo: A= 60 B=50 micaja1 = box length : A micaja2= box length : B if A>B then ! ! ( ! ! ! ) else ! ( ! ! ! ) ! ! ! ! /*Verica si A es mayor que B*/ /*se ejecuta si A es mayor que B*/

$box001.width=100!!

$box002.height=50! !

/*Si no, cambia la altura caja02*/

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

14

Tutorial de inicio de MAXScript!

www.davidinlines.com

/*A es mayor que B, por lo tanto la anchura de la box001 pasa a 100 y la box002 permanece igual*/ Conceptos bsicos de igualdades y desigualdades: < menor que. > mayor que. <= menor o igual que. >= mayor o igual que. = igual que, siempre como asignacin de valor. == igual que, como comparacin entre valores. != no igual a o desigual.

2.8 Bucles
Se utilizan para realizar acciones repetitivas de forma automtica. Para MAXScript existen dos: For y While

2.8.1 Bucle For


Es un tipo de bucle muy representativo y utilizado en repeticiones de todo tipo: for <nombre_variable> in o = <secuencia> do o collet ! ( ! ! <expr> ! ) La expresin <secuencia> se puede representar de varias formas: 1. <expr> to <expr> : esta estructura indica que las repeticiones se producen entre las dos <expr>, siendo el incremento de la repeticin 1. Ejemplo 1: Si escribimos la siguiente lnea en el Listener: for n=20 to 30 do print n Nos devuelve: 20 21 22 23 24 25 26 27

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

15

Tutorial de inicio de MAXScript!

www.davidinlines.com

28 29 30 OK Donde cada nmero es n. Ejemplo 2: La siguiente lnea va a crear varias repeticiones de un objeto sin necesidad de repetir cada vez la operacin: miTetera = teapot ( ) for n=1 to 3 do ( ! copiTetera = copy miTetera ! copiTetera.position = [n* 60, 0, 0] ) Nos crea 4 teteras en la empezando desde la posicin [0,0,0]. 2. <expr> to <expr> by <expr> : al introducir by, la <expr> que le sigue indica el valor de incremento de repeticin. Si aadimos al primer ejemplo (print n) by 2, nos queda: for n = 20 to 30 by 2 do print n Nos devuelve: 20 22 24 26 28 30 OK 3. where <expr> : si aade este comando a alguna de las variantes anteriores, establece una condicin cierta (true) o falta (false). Se evala al principio del bucle y se ejecuta si se cumple el true. El comando do, da la orden de evaluacin y ejecucin de la expresin o funcin que sigue y que es el objeto de la creacin del bucle. Tambin se puede utilizar el comando collect en vez de do, este comando acta igual que el do, pero adems crea una lista con todos los elementos devueltos. Coloquemos collect en el ejemplo anterior: for n = 20 to 30 by 2 collect print n 16

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

Tutorial de inicio de MAXScript!

www.davidinlines.com

Nos devuelve: 20 22 24 26 28 30 #(20,22,24,26,28,30) Si aplicamos collect al ejemplo de las teteras, nos crear las teteras y adems nos crear una lista de la posicin de cada una: miTetera = teapot () for n=1 to 4 by 1 collect ( ! copiTetera = copy miTetera ! copiTetera.position = [n*60, 0, 0] ) Nos devuelve: La creacin de las teteras en diferentes posiciones y una lista con su posicin: #([60, 0,0], [120, 0, 0], [180, 0, 0], [240, 0, 0])

2.8.2 Bucle while


Este bucle se utiliza para ejecutar una funcin mientras se cumpla la condicin especicada en <expr>: while <expr> do <expr> while es el comando, la primera variable <expr> establece el rango de la condicin de certidumbre denida anteriormente, a continuacin do para ejecutar la siguiente <expr> de accin. La forma inversa sera: do <expr> while <expr> Los comandos actan de la misma forma. Ejemplo 1: a=2 while a>0 do print "cierto" La funcin devuelve: cierto cierto cierto ...

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

17

Tutorial de inicio de MAXScript!

www.davidinlines.com

De forma automtica e ininterrumpida, nunca para hasta que se nalice de alguna forma.

Ejemplo 2: a=2 while a<0 do print "cierto" Devuelve: undened.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

18

Tutorial de inicio de MAXScript!

www.davidinlines.com

Tercera parte
3.1 Crear herramientas de entorno con MAXScript (utilidades y persianas)
Los Scripts son cdigos de programacin que hacen ciertas cosas automatizadas, podemos crear un "botn" para activar ese Script directamente, para crearlo haremos: Utility <Nombre_variable> <"Cadena_literal"> ( button Cadena_literal "nombre_para_boton" ) utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ) Devuelve: Rollout:botnTetera Esto signica que nos "ha aceptado" crear el botn, vamos a Utilities en Panel de comandos de 3ds Max y abrimos MAXScript, all veremos en la persiana Utilities, que se nos ha creado el botn Crear Tetera, si lo seleccionamos, se nos abrir un men con el nombre Tetera, si pulsamos encima, no har nada porque no tiene ningun cdigo programado pero as se crea un botn para crear, por ejemplo, una tetera. Se pueden utilizar los elementos opcionales: rolledUp: <true o false> , silentErrors:<true o false>, newRolloutFloater (), Rollout para crear persianas individuales otantes y addrollout(), las puede introducir en otras.

3.2 Mens contextuales de botn derecho.


Como el ttulo indica, son mens que se encuentran en el men que se abre pulsando el botn derecho del ratn: rcmenu <nombre_variable> (<cuerpo_rcmenu>)

3.3 Denicin de Macros


Los son guiones que ejecutan operaciones u ordenes especiales, a travs de los iconos de las barras de heramientas y que son generadas mediante el comando macroScript:

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

19

Tutorial de inicio de MAXScript!

www.davidinlines.com

macroScript <nombre_variable> category: <cadena_literal_macro> buttonText: <cadena_literal_botn> toolTip: <cadena_literal_herramienta> icon: #(<cadena_literal_icono>, <nmero_icono_a_utilizar>) o icon: <cadena_literal_icono> ! silentErrors: <true o false> ! (<cuerpo_de_la_macro>) Es aconsejable no utilizar esta sintaxis si no se tiene un buen conocimiento de MAXScript. Existen otras funcionalidad que pueden ser generadas mediante comandos o funciones MAXScript: ! ! ! ! ! Herramientas para pintar en entorno Painter Interface Guiones para Plug-ins Persianas de control ActiveX Dilogos Generacin dinmica de persianas

3.4 Cmo crear un botn


Ms arriba explico como se crea el botn. La sintaxis es: Utility <Nombre_variable> <"Cadena_literal"> ( button Cadena_literal "nombre_para_boton" ) utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ) Devuelve: Rollout:botnTetera button es el comando para crear botones, con su nombre de variable asignada a continuacin, le sigue entrecomillas la cadena de texto del literal que ha de aparecen en el botn (button creaBotn "Tetera"). Pueden utilizarse dos elementos opcionales: images: <imagen o lista de imagenes>, si queremos utilizar una imagen o ! varias en vez de una cadena.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

20

Tutorial de inicio de MAXScript!

www.davidinlines.com

toolTip: <cadena_indicacion_operacion>, este comando crea una etiqueta de texto complementario, cuando nos colocamos encima sale un texto con lo que hemos apuntado en cadena_indicacion_operacion.

3.4.1 Cmo hacerlo operativo


Los botones necesitan un cdigo interno para que sean funcionales, por ejemplo, nuestro botn se llama Crear Tetera - Tetera, pero no hace nada; vamos a escribirle el cdigo para que cree una tetera: Para ello, aadiremos una funcin de accin on, emparejada al comando respectivo: on <nombre_variable> pressed do ( accin ) utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! on creaBotn pressed do ! ( ! ! bot = teapot() ! ) )

3.5 Aadir un Contador Deslizante


Normalmente, cuando no se impone ninguna medida, crea las guras con valores predeterminados, con un Contador Deslizante podemos controlar esos valores: slider <nombre_variable> <"cadena_literal"> range [min,max,valor] slider CDradio "radio" range: [0, 100, 30] Comando Slider, le sigue la cadena del literal del contador deslizante y seguidamente en parmetro que representa el rango, el contexto valor, es un argumento o variable interna que corresponde al valor predenido. Otros parmetros opcionales pueden ser: type:#otante: indica la tipologa del valor entre coma otante y entero, el valor predenido es otante. tick: indica las seales de divisin del rango que quiere que aparezcan. orient: indica la orientacin del deslizador, la forma predenida es horizontal.

Vamos a aadir un contador deslizante al botn de crear la tetera:

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

21

Tutorial de inicio de MAXScript!

www.davidinlines.com

utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! on creaBotn pressed do ! ( ! ! bot = teapot() ! ) )

3.5.1 Cmo hacerlo operativo


El procedimiento es similar que con el botn: on <nombre_variable_slider> changed <argumento> do ( ! expresin propiedad ) utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! on creaBotn pressed do ! ( ! ! global bot = teapot() ! ) ! ! on CDradio changed valor do ! ! (! ! ! ! bot.radius = valor ! ! ) )

3.6 Crear mensajes de error


MAXScript nos permite crear mensajes de error para nuestros Scripts: try <expresin_referida> catch messageBox <cadena_de_error> try nos permite abrir la expresin referida de una accin, que cuando se ejecuta incorrectamente, genera, mediante el comando catch, el mensaje indicado en la cadena. Si aade messageBox, el mensaje aparecer en una caja de dilogo.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

22

Tutorial de inicio de MAXScript!

www.davidinlines.com

El Script nuestro, da error si se intenta modicar el radio antes de crear la tetera, vamos a aadir un mensaje de error a nuestro botn de crear la Tetera: utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! on creaBotn pressed do ! ( ! ! global bot = teapot() ! ) ! ! on CDradio changed valor do ! ! (! ! ! ! try ! ! ! bot.radius = valor ! ! ! catch ! ! ! messageBox "Pulse el botn Tetera y luego modique el radio, ! ! ! ! ! ! ! ! sin tetera no hay radio" ! ! ) ) Existe otra forma para evitar mensajes de error, mediante el comando enabled: false o Cdradio enabled: true, con esta funcin, est indicando que para posibilitar la utilizacin del deslizante, primero debe crear la tetera, si no es as, el deslizante queda inutilizado a la espera de pulsar el botn Tetera: utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! enabled: false ! on creaBotn pressed do ! ( ! ! global bot = teapot() ! ! CDradio.enabled = true ! ) ! ! on CDradio changed valor do ! ! (! ! ! ! bot.radius = valor ! ! ) )

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

23

Tutorial de inicio de MAXScript!

www.davidinlines.com

3.7 Crear cajas otantes


Para poder colocar el botn creado en una ventana, debemos crear esa ventana: Nombre_Caja = newRolloutFloater <cadena_de_literal> <anchura_caja> <altura_caja> miCajaFlotante = newRolloutFloater "Nueva Persiana" 150 150 newRolloutFloater es el comando, le sigue la cadena que corresponde al literal o etiqueta de la caja y a continuacin las dimensiones de la caja. Para que la ventana se abra en un punto en concreto, y no en el medio como forma predeterminada, debemos aadir: <situacin_desde_arriba> <situacin_desde_izquierda> Quedara: Nombre_Caja = newRolloutFloater <cadena_de_literal> <anchura_caja> <altura_caja> <situacin_desde_arriba> <situacin_desde_izquierda> miCajaFlotante = newRolloutFloater "Nueva Persiana" 150 150 100 100 Una vez creada la caja otante, vamos a aadir una persiana determinada utilizando addrollout al nal del guin. Vamos a colocar en la ventana otante nuestro botn de crear la Tetera: miCajaFlotante = newRolloutFloater "Crea Tetera" 150 150 100 100 rollout botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! enabled: false ! on creaBotn pressed do ! ( ! ! global bot = teapot() ! ! CDradio.enabled = true ! ) ! ! on CDradio changed valor do ! ! (! ! ! ! bot.radius = valor ! ! ) ) addrollout botnTetera miCajaFlotante

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

24

Tutorial de inicio de MAXScript!

www.davidinlines.com

3.8 Editor de Visual MAXScript


Este editor basado en Visual Basic nos ayuda a realizar las ventanas de forma interactiva. Por este procedimiento, no har falta crear los guiones en el editor convencional, ya que se puede utilizar un entorno sumamente intuitivo. Sus zonas son: Barra de mens: operaciones tpicas como Archivo, edicin, etc... Barra de herramientas estndar: las operaciones tpicas en iconos. Ventana de edicin: es el lado izquierdo, donde se van colocando los elementos y los va transformando y adaptando... Tablas de propiedades y valores: en el lado derecho, disponiendo de los campos adecuados de denominacin y captacin de funciones. Barra de herramientas inferior: donde se despliegan los diferentes botones de funcionalidades, que se pueden arrastrar hacia la ventana editora. El chero se guarda en extensin propia de Visual MAXScript " .vms", pero conviene guardarlo en " .ms", de esta manra lo compila para ser ejecutado como guin e incluso es fusionado en otros guiones si es necesario.

3.9 Herramienta Macro Recorder


Esta herramienta nos permite realizar macros grabando todas las acciones que vamos haciendo. Si lo activamos (MAXScript - Macro Recorder), a partir de ese momento se van grabando todas las acciones que vamos haciendo (Crear esferas, teteras, modicar parmetros, etc.), se pueden ver en el Listener, si estamos satisfechos con lo que hemos hecho, podemos guardarlo con extensin .ms y abrirlo cuando lo necesitemos.

3.10 Comando Debugger Dialog


MAXScript Debugger es una funcin que facilita el depurado de los guiones evaluando variables globales, locales y otros aspectos bastante ms avanzados.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

25

Tutorial de inicio de MAXScript!

www.davidinlines.com

Cuarta Parte
Comandos y cdigos ms importantes utilizados en este manual
(Sintaxis + ejemplo) Entrar comandos <nombre del comando> () ----------------------------------------------------------------------------------------------------------------------teapot()

Declarar variables <destino> = <expr> ----------------------------------------------------------------------------------------------------------------------Tetera = teapot ()

Modicacin de parmetros e identicacin $<nombre_del_objeto>.<Parmetro_del_objeto> = valor ----------------------------------------------------------------------------------------------------------------------$Teapot.radius = 20

Asignar accesos <nombre_variable>.<operando> ----------------------------------------------------------------------------------------------------------------------MiTetera.radius = 50

Mostrar propiedades de un objeto showProperties <elemento> ----------------------------------------------------------------------------------------------------------------------showProperties MiTetera

Denir coordenadas <nombre_variable>.position = [valor 1, valor 2, valor 3] ----------------------------------------------------------------------------------------------------------------------MiTetera.position = [1, 2.9, 8]

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

26

Tutorial de inicio de MAXScript!

www.davidinlines.com

Variables globales y locales global <destino> = <expr> ----------------------------------------------------------------------------------------------------------------------global MiTetera = teapot() global <destino> = <expr> ----------------------------------------------------------------------------------------------------------------------global MiTetera = teapot ()

Construccin de Listas o Arrays #(<expr>,<expr>) ----------------------------------------------------------------------------------------------------------------------#(caja = box width:150 position:[0,0,100], esfera= sphere radius:15 position:[100,0,0])

Crear funciones function miFuncion= ( ) miFuncion ( ) ----------------------------------------------------------------------------------------------------------------------function CreaTeteras = ( ! Tetera = teapot radius:30 segments: 4 ) CreaTetera () (Sin espacio en el parntesis anterior)

Mover move nombre_de_variable [<x,y,z>] ----------------------------------------------------------------------------------------------------------------------move miesfera [70,70,0]

Escalar scale nombre_variable [<Sx,Sy,Sz>] ----------------------------------------------------------------------------------------------------------------------Scale miesfera [2,2,1]

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

27

Tutorial de inicio de MAXScript!

www.davidinlines.com

Rotar 1. Se dene como variable un comando de rotacin de objeto. nombre_rotacion = eulerangles Ax Ay Az ----------------------------------------------------------------------------------------------------------------------miRotacionEsfera = eulerangles 0 30 0 2. Cuando tenemos la variable denida: rotate nombre_de_variable nombre-rotacion ----------------------------------------------------------------------------------------------------------------------rotate miesfera miRotacionEsfera

Modicar el eje de coordenadas in coordsys <sistema especico> <nombre_rotacion> = eulerangles Ax Ay Az ----------------------------------------------------------------------------------------------------------------------in coordsys local mirotacion = eulerangles 0 30 0

Activar o desactivar propiedades <elemento>.<propiedad> = true o false ----------------------------------------------------------------------------------------------------------------------MiTetera.smooth = true

Aadir modicadores addmodier <nombre variable> (<nombre_modicador> <parametros>) ----------------------------------------------------------------------------------------------------------------------MiTetera = teapot radius: 30 Modicar el valor del modicador addmodier MiTetera (bend angle: 45) Modicar otro valor del modicador MiTetera.bend.axis = 0 (0 para X, 1 para Y, 2 para Z)

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

28

Tutorial de inicio de MAXScript!

www.davidinlines.com

Expresar animaciones animate on ( at time tiempo_fotograma_inicio (nombre_variable.parametros>) at time tiempo_fotograma_nal (nombre_variable.<parametros>) ) ----------------------------------------------------------------------------------------------------------------------tetera = teapot () animate on ( at time 0 (tetera.pos = [-80,0,0]; tetera.scale = [1,1,1.5]) at time 50 (tetera.pos = [80,50,0]; tetera.scale = [1,8,1.5]) at time 100 (tetera.pos = [-80,0,0]; tetera.scale = [1,1,1.5]) )

Argumentos. Simplicar las funciones function creamiSatelite unradio unaposicion = ( ) creamisatelite <valor radio> <valor posicion> unradio y unaposicion serian nombres de argumentos de una nica variable creamitetera: ----------------------------------------------------------------------------------------------------------------------miSatelite.radius = unradio miSatelite.position = unaposicion function creamiSatelite unradio unaposicion = ! ( ! ! miSatelite = sphere () ! ! ! ! miSatelite.radius = unradio ! ! ! ! ! ! ! ! ! ! miSatelite.position = posicion! ! ! ! ! ! ! ! ! ) ! ! !

/*declaramos la variable miSatelite*/ /*declaramos la variable un radio para ! ! colocar el valor del radio*/ /*Declaramos la variable de posicin para ! colocar el valor posicin [x y z]*/

/*llamamos a la funcin colocando los valores*/ creamisatelite 20 [0,80,0]! ! creamisatelite 10 [0,100,0]!! ! ! /*radio 20 y posicin [0,80,0]*/ /*radio 10 y posicion [0,100,0]*/

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

29

Tutorial de inicio de MAXScript!

www.davidinlines.com

Bucle if if <condicin> then ( ! <accin true> ) else ( ! <accin false> ) ----------------------------------------------------------------------------------------------------------------------A= 60 B=50 micaja1 = box length : A micaja2= box length : B if A>B then ! ! ! ! ! ! ( ! ! $box001.width=100 !! ! ) else ! ( ! ! $box002.height=50 ! ! ! ) /*Verica si A es mayor que B*/ /*se ejecuta si A es mayor que B*/

/*Si no, cambia la altura caja02*/

Bucle for for <nombre_variable> in o = <secuencia> do o collet ! ( ! ! <expr> ! ) ----------------------------------------------------------------------------------------------------------------------Ejemplo 1: miTetera = teapot ( ) for n=1 to 3 do ( ! copiTetera = copy miTetera ! copiTetera.position = [n* 60, 0, 0] )

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

30

Tutorial de inicio de MAXScript!

www.davidinlines.com

----------------------------------------------------------------------------------------------------------------------Ejemplo 2: Con by miTetera = teapot () for n=1 to 4 by 1 collect ( ! copiTetera = copy miTetera ! copiTetera.position = [n*60, 0, 0] ) ----------------------------------------------------------------------------------------------------------------------Ejemplo 3: Con collect miTetera = teapot () for n=1 to 4 by 1 collect ( ! copiTetera = copy miTetera ! copiTetera.position = [n*60, 0, 0] )

Bucle while do <expr> while <expr> ----------------------------------------------------------------------------------------------------------------------1. a=2 while a>0 do print "cierto" La funcin devuelve: cierto cierto cierto ... De forma automtica e ininterrumpida, nunca para hasta que se nalice de alguna forma. ----------------------------------------------------------------------------------------------------------------------Ejemplo 2 a=2 while a<0 do print "cierto" Devuelve: undened.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

31

Tutorial de inicio de MAXScript!

www.davidinlines.com

Crear un botn Utility <Nombre_variable> <"Cadena_literal"> ( button Cadena_literal "nombre_para_boton" ) ----------------------------------------------------------------------------------------------------------------------utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ) Devuelve: Rollout:botnTetera ! ! Hacerlo operativo on <nombre_variable> pressed do ( accin ) ----------------------------------------------------------------------------------------------------------------------utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! on creaBotn pressed do ! ( ! ! bot = teapot() ! ) ) Crear un deslizador slider <nombre_variable> <"cadena_literal"> range [min,max,valor] ----------------------------------------------------------------------------------------------------------------------slider CDradio "radio" range: [0, 100, 30] Aplicado---------------------------------------------------------------------------------------------------------! utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! on creaBotn pressed do ! ( ! ! bot = teapot() ! ) )

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

32

Tutorial de inicio de MAXScript!

www.davidinlines.com

! !

Hacerlo operativo on <nombre_variable_slider> changed <argumento> do ( ! expresin propiedad ) ----------------------------------------------------------------------------------------------------------------------utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! on creaBotn pressed do ! ( ! ! global bot = teapot() ! ) ! ! on CDradio changed valor do ! ! (! ! ! ! bot.radius = valor ! ! ) )

Crear mensajes de error try <expresin_referida> catch messageBox <cadena_de_error> ----------------------------------------------------------------------------------------------------------------------Ejemplo 1: ! ( ! ! ! ! ! ! ! ! ! ! ! ! ! ! ) utility botnTetera "Crear Tetera" button creaBotn "Tetera" slider CDradio "Radio" range: [0,100,30] on creaBotn pressed do ( ! global bot = teapot() ) ! on CDradio changed valor do ! (! ! ! try ! ! bot.radius = valor ! ! catch ! ! messageBox "Pulse el botn Tetera y luego modique el radio, ! ! ! ! ! ! ! sin tetera no hay radio" ! )

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

33

Tutorial de inicio de MAXScript!

www.davidinlines.com

----------------------------------------------------------------------------------------------------------------------Ejemplo 2: utility botnTetera "Crear Tetera" ( ! button creaBotn "Tetera" ! slider CDradio "Radio" range: [0,100,30] ! enabled: false ! on creaBotn pressed do ! ( ! ! global bot = teapot() ! ! CDradio.enabled = true ! ) ! ! on CDradio changed valor do ! ! (! ! ! ! bot.radius = valor ! ! ) )

Practica nal de la tercera parte:


Crear una ventana con cuadro para introducir texto + mensaje de error. Este Script cambia el nombre al objeto seleccionado: MiCajaFlot = newRolleroutFloater Nuevo Nombre 250 75 ! /*Crea la caja otante*/ rollout persianaText Editor de Texto ! ! /*Crea la persiana*/ ( ! edittext persianaText Nombre: text: <Teclee el nuevo nombre aqu> /*campo ! ! ! ! ! ! ! ! ! ! ! ! nombre*/ ! on cambioDeNombre entered nuevoTexto do ! ( ! ! if $.text == undened then messagebox Seleccione un objeto ! ! else $.name = cambioDeNombre.text! /*Establece mensaje de error*/ ! ) ) addrollout persianaText micajaFlot ! /*aade persiana a la caja otante*/

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

34

Tutorial de inicio de MAXScript!

www.davidinlines.com

A la hora de programar, debe tener cuidado en cualquier tipo de error, ya que este, podra ocasionar un problema al Script y dejarlo sin funcionar por un simple error diminuto; estas precauciones no solo debe tomarlas para programar en MAXScript, sino, en todos los lenguajes de programacin, debemos tener en cuenta unas pautas: Utilizar encabezamientos denitorios del guin Ideas claras en las operaciones que ha de realizar el guin. Es bueno realizar un pseudocodigo en papel antes de llevarlo a MAXScript. No denir las variables con letras o palabras indenidas, elija palabras que sean signicativas de la funcin para una mejor comprensin del depurado. Es buena costumbre aadir comentarios en la mayora de lneas para saber que est haciendo. Reconocer perfectamente el mbito de las variables para saber claramente cundo han de usarse las variables globales. Sangrar las lneas de manera que los parntesis queden de forma ordenada en las columnas. Y horas, pase horas y horas para disfrutar de este lenguaje de programacin para 3ds Max y hacer cosas automticas con unas lneas de cdigo. La web www.scriptspot.com es una buena web para descargar scripts programados en MAXScript, ver como funcionan y como estn hechos.

3ds Max 2012. Curso Avanzado. Josep Molero Vera, Inforbooks

35

You might also like