Paneles de control (Maxscript parte VI)
Más tipos de elementos IU (III)

figura9: "Una prueba de uso de Spinner"

utility nada1 "Probando spinner"

(

local micontrolador=bezier_float()

spinner radio_esfera "Radio Esfera" range:[0,20,1] controller:micontrolador

button aplicar "Aplicar nuevo radio"

on aplicar pressed do

(

animate off at time 0 $ball.radius=micontrolador.value

$ball.radius.controller=micontrolador

)

)

 

 

Antes de poder atar la variable del campo controller tendremos que haberla definido con el tipo necesario para el dato que ha de actualizar (en este caso el radio de ball). Esto se ha hecho en este caso con la sentencia "local micontrolador=bezier_float()". Pero, como ahora no vamos a estudiar lo que hace la función bezier_float(), pasaremos a estudiar el ejemplo de la Figura 10 que consigue unos resultados parecidos a los del ejemplo anterior de manera más sencilla.

 

figura 10: "Una prueba mas sencilla de spinner"

utility nada1 "Probando spinner"

(

spinner radio_esfera "Radio Esfera" range:[0,($ball.radius)*2,$ball.radius] scale:1

on radio_esfera changed nuevo_radio do

(

$ball.radius=nuevo_radio

)

)

 

 

Para comprobar el funcionamiento de este ejemplo hemos de tener ya definida una esfera llamada ball antes de ejecutar el script. Para nuestra prueba necesitamos un objeto bien grande, de, por ejemplo, 200 unidades de radio. La manera mas rápida de hacer esto es ir al oyente (listener) y escribir la siguiente línea:

sphere name:"ball" radius:200 (enter)

Hecho esto hay que cargar y ejecutar el script. El valor que aparecerá en el recuadro será de 200. Esto se debe a que hemos definido el valor inicial de range con $ball.radius. Seguidamente hay que emplear los botones de flecha del recuadro para incrementar y decrementar el valor. Dicho valor se incrementará o decrementará de una en una unidad. Esto se debe a que hemos puesto el campo range a 1. El tamaño de la esfera va cambiando mientras pinchamos en los botones-flecha. Seguidamente hay que intentar escribir el valor para el radio de la esfera directamente en el recuadro. El cambio de tamaño sólo tiene lugar al pulsar Enter y no se puede lograr que el radio exceda las 400 unidades. Esto último se debe a que hemos especificado en range que el valor máximo no puede exceder las ,($ball.radius)*2 unidades (siendo $ball.radius el valor inicial de la esfera que hemos puesto desde el oyente).

Con spinner podemos utilizar los siguientes tipos de evento:

1) Changed: se activa cuando el usuario cambia el valor del recuadro y pulsa Enter o cuando pincha sobre los botones-flecha del recuadro. Además, se devuelve el nuevo valor del recuadro en la variable que sigue a la palabra changed (en este último ejemplo esta variable es "nuevo_radio"). En el ejemplo hemos utilizado este tipo de evento y la esfera cambia de tamaño debido a la sentencia incluida en el controlador de eventos: "$ball.radius=nuevo_radio".

2) Entered: este tipo de evento funciona como el anterior pero devuelve el valor cambiado como un string de texto.

3) Buttondown: se activa cuando el usuario aprieta un botón flecha y no devuelve ningún valor por lo que no se escribe ninguna variable entre "buttondown" y "do".

4) Buttonup: funciona como en el caso anterior pero se activa cuando el usuario deja de apretar los botones-flecha.

Slider: este tipo de elemento IU es muy similar al anterior, solo que aquí no se emplea un recuadro de entrada de datos sino una barra deslizante que el usuario empleará para controlar un proceso o suministrar un valor numérico. El formato de slider es...

Slider variable_de_acceso (range:[minimo, maximo, valor_inicial] type:tipo_slider ticks:valor orient:orientación)

El campo range funciona de manera idéntica al de spinner, type se utiliza para indicar el tipo de dato que devuelve slider (y que puede ser #integer o #float), orient se emplea para especificar si deseamos que la barra sea horizontal o vertical y por último ticks..., pues... (vergüenza y bochorno, aun no sabemos lo que hace).

En definitiva, para comprobar el funcionamiento de este tipo de elemento hemos escrito un script casi idéntico al del último ejemplo de spinner. Para usarlo hay que crear una esfera desde el oyente con la línea "sphere name:"ball" radius:200" (enter) y ejecutar el script.

La esfera cambiará de tamaño al desplazar la barra del elemento.

 

figura 11: "Una prueba sencilla de slider"

utility nada1 "Probando slider"

(

slider radio_esfera "Radio Esfera" range:[0,($ball.radius)*2,$ball.radius] ticks:0

on radio_esfera changed nuevo_radio do

(

$ball.radius=nuevo_radio

)

 

Slider puede usar los tipos de evento changed, buttondown y buttonup, que funcionan de la misma forma que en spinner y devuelven idénticos valores.

figura 9
figura 10
figura 11
Anterior Siguiente