You are on page 1of 51

MEL

MEL (Maya Embedded Language) es un lenguaje Script. (La traducción literal es


guión), es decir un lenguaje para elaborar guiones.

Los Scripts son casi siempre interpretados y aunque solamente unos pocos son
compilados, este no es el caso de MEL. MEL es un lenguaje de secuencias de
comandos, es decir, se puede escribir un comando en MEL y ejecutar esa orden
tan pronto como se pulsa la tecla enter.

Inserción de comandos

Existen diferentes áreas en donde pueden ejecutarse comandos MEL. Si usted lo


prefiere, puede escribir su programa MEL en un editor externo y después copiar y
pegar el código en maya.

Línea de comandos

Está localizada en la parte inferior izquierda de la interfase


Script editor

Window> General Editors> Script Editor


O en el área de trabajo

Panels>Saved Layouts>Script Editor/Persp

Características del lenguaje

Como lenguaje, MEL desciende del script del shell de UNIX. Esto significa que
MEL está fuertemente basado en la ejecución de comandos para ejecutar las
acciones (como la ejecución de comandos en un shell UNIX), mas que manipular
estructuras de datos, llamadas a funciones, o el uso de métodos orientados a
objetos com en otros lenguajes.
La mayoría de los comandos que usted usa para controlar a Maya actúan como
utilidades de linea de comando UNIX: pequeños programas independientes con
muchas opciones con muchas opciones que modifican su comportamiento.

Mantener los orígenes del MEL en mente le ayudará a entender sus principales
aspectos.

Asiganción y valores

El operador de asignación es el signo igual (=). MEL también cuenta con atajos
para operadores de asignación como C y Java (+=, -=, *=, ++, --, etc).

MEL es un lenguaje fuertemente tipado, sin embargo permite declaraciones


implícitas y escritura en la mayoría de los casos Cuando se declara una variable
que también declarar su tipo y, opcionalmente, puede asignar un valor inicial.

Los nombres de variables comienzan con $, seguido de una letra, a continuación


cualquier combinación de letras, números y guiones bajos. A diferencia de Perl,
todos los tipos de variables (escalares y compuestos) comienza con $.

MEL, tiene los tipos de datos siguientes: el usual entero (int), el punto flotante
(float) y tipos de datos de string. También tiene un tipo de datos vector que es un
triple flotante (que puede ser útil cuando se trabaja con datos en 3D), los array
(una lista de tamaño variable, en los que todos los elementos son del mismo tipo),
y las matrices (matriz, una tabla de flotantes de dos dimensiones de tamaño
fijo). Los elementos de un array deben ser del mismo tipo.

int $a = 5;
float $b = 3.456;
vector $v = <<1.2, 3.4, 6.5>>;
float $ar[] = {1.2, 3.4, 4.5}; // Un array de flotantes
matrix $mtx[3][2]; // Una matriz de 3x2 de flotantess

Usted no puede hacer un array de arrays en MEL

MEL automaticamente convierte los tipos cuando es posible


Primer acercamiento a MEL:

crearemos un objeto en maya, una esfera.

Creación de una esfera

Create Nurbs Primitives Sphere

Abra el Script Editor

Window General Editors Script Editor

Ahora revisemos lo que sucede en el script editor.

Lo que usted debe ver en el Script Editor es lo siguiente:

Podemos distinguir dos comandos, el primero crea un objeto nurbsSphere con


algunas opciones incluidas, y el segundo asigna la herramienta actual a la
herramienta a la herramienta move. Tomemos los aspectos fundamentales de este
código y escriba en la línea de comandos sphere > enter.

Se crea una nurbs Sphere

Detrás de la escenas

Cuando usted usa la interfase de maya está usando indirectamente comandos


MEL que en cambio realizan el trabajo real. Detrás de las escenas, Maya corre
comandos MEL y scripts en respuesta a sus acciones con las selecciones que
hace y con los clics del ratón. Es posible monitorear estas operaciones el el Script
Editor.
1. Seleccione File New Scene.

2. Abra el Script Editor

3. Desde el menú principal del Script Editor seleccione Edit  Clear All.

4. Desde el menú principal de Maya, seleccione Create Nurbs Primities


Sphere.

Se crea una esfera en el escenario, y se despliega la siguiente línea el el


Script Editor:

Veamos ahora que sucede con los comandos MEL que realizan todas las
operaciones de la interfase

5. Desde el menú del Script Editor, seleccione Edit  Clear All.

6. Haga clic en Echo All Commands.

7. Desde el menu de Maya, seleccione Create Nurbs Primitives Sphere.

Con todos los comandos ahora haciendo eco al Script Editor, se despliegan
mucho más comandos.

Mientras que los detalles exactos de los comandos no son tan fáciles de
comprender, lo importante es saber que casi todas las operaciones que
usted realiza en Maya son de hecho el resultado final de una serie de
comandos MEL.

8. Haga clic en Echo All Commands. Para deshabilitar esta función.

Las instrucciones de control en MEL son similares a las de C y Java

if ( $a == $b) {
...
} else if ($a > $b) {
...
} else {
...
}
$a = ($b > 10) ? $c : ($c - 10);
switch ($color) {
case "blue":
...
break;
case $c1:
...
break;
default:
...
break;
}
while ($a < size($arry)) {
...
}
do {
...
} while ($a > 0);
int $i;
for ($i = 10; $i > 0; $i--) {
print($i+"...\n");
}
print("Blastoff!!!");
string $arry[3] = {"red","green","blue"};
for ($k in $arry) {
...
}

Fin de línea

Todas las instrucciones en MEL deben acabar con punto y coma.

Comentarios

MEL usa el estilo de C++ de comentarios de una sola línea al precederlos con // y
comentarios de más de una línea al colocarlos dentro de los caracteres /* */

Comandos

Los scripts MEL son esencialmente una lista de comandos que ejecuta Maya.
Cada comando posee una lista de argumentos y flags (banderas) asociados con
el. Estos argumentos pueden asignarse al escribir el comando. Si usted no los
asigna, Maya usará los valores por omisión para cualquier comando que esté
usted corriendo, estos argumentos pueden consultarse o editarse. Una bandera lo
que hace un comando (crear, editar o consultar)
// Se crea una esfera llamada "miEsfera" de radio 5
sphere -radius 5 -name "miesfera";
// Edición de el radio de miEsfera
sphere -edit -radius 3 "miEsfera";
// Imprimir el radio de miEsfera
sphere -query –radius miEsfera;

COMANDO QUERY

El resultado del comando sphere es la creación de un objeto sphere. Usted puede


utilizar el mismo comando sphere para consultar algunas de las propiedades de la
esfera. De esta forma, el comando sphere sirve como propósito dual de crear el
objeto esfera así como para recuperar sus propiedades. Utilizado de esta forma, el
comando sphere puede ser usado en otros objetos sphere en la escena.

1. Seleccione File  New Scene


2. En la línea de comandos escriba lo siguiente:

sphere –radius 1.5 –name miEsfera

3. En la línea de comandos escriba lo siguiente:

sphere –query –radius miEsfera

4. En Command Feedback se despliega lo siguiente:

Result: 1.5

Es importante notar que se tiene que especificar el nombre de la esfera. Cuando


consulte alguna propiedad de una esfera, debe usted especificar exactamente a
qué objeto esfera se está refiriendo. Por esta razón, se le dio un nombre a la
esfera cuando se creó.

El primer uso del comando sphere creó la esfera MiEsfera. Este es un ejemplo de
la llamada al comando en modo de creación. En el modo de creación el comando
genera un nuevo objeto. en el segundo uso del comando sphere, se utilizó la
bandera –query. Con esta bandera (flag) el comando esfera opera en modo query
(consulta). Con esta bandera, el comando sphere opera en modo query y devuelve
el valor del parámetro especificado.

Comando Edit

Adicionalmente a los modos de creación y query, un comando puede también


operar en el modo edit. En el modo edit, un comando puede cambiar una
propiedad dada de un objeto.
1. En la línea de comandos ejecute lo siguiente:

sphere –edit –radius 3 miEsfera

La esfera tiene un radio de 3.

Como la bandera query, la bandera -edit, es usada para especificar que


parámetros están siendo operados. Sin embargo, a diferencia de la query
flag, la cual permite un solo valor a ser consultado en un momento dado, la
edit flag permite editar múltiples parámetros de una vez.

2. En la línea de comandos ejecute lo siguiente:

sphere –edit –radius 4 –degree 1 miEsfera

la esfera es ahora más grande y tiene una superficie a base de facetas.

El cambio en degree hace a la esfera tener una superficie lineal en vez de


la superficie cúbica suave que tenía previamente. Al igual que en el modo
query, debe darse el nombre de la esfera, de este modo Maya sabrá que
esfera se desea editar.

polyCube -name Cubert -height 3.333;


polyCube -query -height Cubert;
// Result: 3.333 //

Commandos de edición

Junto con la habilidad de consultar información puede usted también editarla.


polyCube -name Cubert -height 3.333;
polyCube -query -height Cubert;
// Result: 3.333 //
polyCube -edit -height 3.123 Cubert;
polyCube -query -height Cubert;
// Result: 3.123 //

Un aspecto importante que hay que recorder del commando edit es que puede
usted editar mas de una bandera a la vez.
polyCube -edit -height 3.123 -witdh 1.345 Cubert;
ciclos

for

la sintaxis del ciclo for es la siguiente:

for(primera_ejecución; condición_prueba; ejecución_ciclo )

operacion;

while

Modos de comando

Puede verse claramente a partir de los ejemplos anteriores que un comando


puede operar en un total de tres modos diferentes; create, query o edit. A
menos que usted lo especifique de forma explícita los modos query o edit, el
comando opera en modo create. Cuando se especifica –query o –edit en los
argumentos del comando, entonces se usa el modo apropiado.

Tipos de Variables

Mel proporciona un limitado conjunto de tipos de variables: int, float,


strig, vector y matrix. Sin embargo, estos son suficientes, para las
necesidades de script de la mayoría de los usuarios. Si se da un tipo de variable
pero no se le asigna un valor inicial, a la variable se le asigna su valor de default.

Strings

Una variable string es usada para mantener una serie de caracteres de texto. Las
variables strig pueden ser inicializadas con algún texto como se ve enseguida:

string $texto = "Hola Mundo";

Si a un string no se le asigna explícitamente un valor, se utiliza el valor de default


de un string vacío. Este es un string sin texto:

string $texto. // string vacío

Usted puede hacer un string vacío de la siguiente manera:

$texto = “”;
Una operación común llevada a cabo sobre variables string es la concatenación
(join). Esto se hace mediante el signo más (+) como podemos ver:

string $nombre = "David".

string $texto = "Mi nombre es" + $nombre"

print $texto - / / Result = Mi nombre es David

Para contar el número de caracteres en un string, se utiliza el comando size.

string $Bienvenidos = "Hola";


int $numChars; = size ( $Bienvenidos );
print $numChars; //Result: 4

Es importante entender que MEL preprocesa cada string y sustituye los caracteres
especiales dondequiera que encuentra un caracter diagonal invertida (\). Un
carácter especial es aquél que es imposible de ingresar manualmente en un editor
de texto pero existe en la tabala ASCII. Son referidos también como caracteres de
escape. Para que un string contenga un carácter de nueva línea, simplemente
utilice la secuencia de caracteres: \n. esta secuencia de caracteres es
reemplazada por el caracter ASCII equivalente de nueva línea. El siguiente
ejemplo imprime parte de un texto en una línea, y posteriormente el resto en la
línea siguiente:
print "Hola\nJuan";

El resultado es:

Otros caracteres especiales incluyen los siguientes:

\t tabulador

\r retorno de carro

\\ carácter diagonal invertida

Vectores
Las variables vector le permiten guardar tres valores de punto flotante. Los
vectores son utilizados típicamente para guardar posiciones y direcciones.

1. En el Script Editor, escriba los siguientes comandos:

Sphere;

Vector $p = << 10.0, 5.0, 2.5 >>;

Move –absolute ($p.x) ($p.y) ( $p.z);

2. Presione Ctrl+ Enter para ejecutarlos

Se crea una esfera y es movida a la posición (x= 10, y=5 y z=2.5).

Los componentes individuales del vector x, y, z son accedidos usando


$p.x, $p.y y $p.z, respectivamente. Es importante notar que para acceder
a los componentes del vector estos deben encontrarse entre paréntesis. El
siguiente ejemplo demuestra el problema de no usar paréntesis.

vector $p = << 10.0, 5.0, 2.5 >>"

print $p.x. // Error

print ( $p.x ) . //Result. i 0 . 0

3. Sds

Array

Existirán ocasiones en las que necesitará guardar una serie de variables MEL le
permite definir un array (arreglo) de variables. Con frecuencia no es conocido el
número de elementos que estarán en el array, así que MEL permite que el número
de elementos se incremente automáticamente, de acuerdo a las necesidades. Los
siguientes son ejemplos de arrays:

int $values[] = { 2, 5, 7, 1 } ;

string $names[3] = { "Benito" , "Pedro", "Jorge " } ;

vector $positions[2] = { <<0.5, 0.1, 1.0>>, <<2.3, 4.0, 1.2>>


} ;

float $scores[]; / / array vacio


string $miArray[ ] = {"uno","dos","tres","cuatro"};

int $miArray2[ ] = {1,2,3,4}

Puede usted obtener la longitud de su array utilizando el comando size.

string $myArray[ ] =
{"polyCube","polyShpere","polyPlane","polyCylinder"};
int $myArraySize = size($myArray);
print $myArraySize;

Cuando se define un array deben usarse los paréntesis cuadrados ([ ]).para


acceder a un elemento individual del array, debe de darse su índice dentro de los
paréntesis cuadrados.

int $values[4] = { 2, 5, 7, 1 };

print ( $values[O] ); // Result: 2

print ( $values[3] ); // Result: 1

Los índices tienen base 0, por lo que el primer elemento en el array es 0, el


segundo 1, y así sucesivamente. El rango total de índices del array va de 0 a
(número de elementos -1). Para encontrar el número total de elementos en un
array, use el comando size.

int $values[3] = { 4, 8, 9 };

int $numElementos = size ( $values );

print $numElementos. / / Result: 3

Una operación típica es anexar un elemento a el array existente. Para hacer esto,
utilice el comando size de la siguiente forma:

int $values[2] = { 5, 1 };

$values[ size($values) ] = 3: // Se anexa 3 al array

print $values- // Result. 5 1 3

También es posible añadir un elemento refiriéndose directamente a él.

int $values [ ] ; // Empty array

$values[O] = 2; // primer elemento puesto a 2


$values[2] = 7; // tercer elemento puesto a 7

print $values; // Result" 2 0 7

no existe un modo directo de eliminar elementos de un array. En vez de eso debe


de crear un nuevo array con los elementos que quiere usted mantener y copiarlos
de nuevo en el array original. El siguiente ejemplo demuestra este método al
eliminar el 3° elemento (index 2) del array

int $values[] = { 1, 2, 3, 4 };
// Eliminar el tercer elemento
int $temp[];
int $i;
for ( $i=0; $i < size($values); $i++ )
{
if ( $i == 2 ) // Saltar el tercer elemento(index 2)
continue;
$temp[size($temp)] = $values[$i];
}
$values = $temp;
print $values;

Operadores aritméticos

Los operadores aritméticos llevan a cabo todas las operaciones matemáticas


básicas sobre números incluyendo suma (+), resta (-), multiplicación (*) y división

(/).

Suma y resta

La suma y resta trabajan de la misma manera en que lo hacen para tipos


numéricos.

int $a = 3;

int $b = 5;

print ($a + $b)" // Result. 8

float $a = 2.3;
print (4 - $a)" // Result: 1.7

vector $va = <<1,2,3>>.

print ($va + <<0.5,0.5,0.5>>); // Result- 1.5 2.5 3.5

matrix $m[2][1] = << 3; 5 >>"

matrix $ n [2][1] = << 2. 1 >>"

p r i n t ($m + $n); / / Result- << 5. 6 >>

El operador suma (+) tiene un propósito diferente cuando se usa con variables
string. En este caso funciona como operador de concatenación.

string $a = "Hola";

string $b = "mundo";

print ($a + $ b ); // Result: Hola mundo

Operadores relacionales

Una tarea muy común de programación es la comparación de dos variables. Por


ejemplo, puede necesitar usted llevar a cabo una acción si la distancia de un
objeto excede cierto límite. Esto se describe en seudocódigo de la siguiente
manera:

Si la distancia es mayor que el límite entonces

Realizar acción

Fin

En MEL esto puede escribirse de la siguiente forma:

if ( $distancia > $1imite )

action ( ) ;

Si la instrucción dentro del if es verdadera la instrucción debajo se ejecuta. Si la


condición es falsa se salta la instrucción

int $a = 10;

if ( $a == 10 )
print "a es 10";

else

print "a es diferente de 10";

Si la acción incluye más de una sentencia esta debe encontrarse dentro de


corchetes.

int $a = 10

if ( $a == 10 )

print "a es 10";

int $b = $a*2;

else

print “a es diferente de 10”;

Operadores de comparación

Operadores de comparación
Relación Símbolo Ejemplo

Menor que < a<b

Menor que o igual a <= a <= b

Mayor que > a>b

Mayor que o igual a >= a >= b

Igual a == a == b
Diferente a ¡= a ¡= b

Ejemplos:

$Local = 234;

$visitante = 123;

if ( $Local > $ visitante )

print "!El equipo local ganó¡”;

if ( $ Local < $ visitante )

print "El equipo visitante ganó¡”;

if ( $ Local == $ visitante)

print "Empate" ;

operadores lógicos

Al usar los operadores lógicos usted puede combinar múltiples comparaciones y


de esta manera realizar alguna acción.

Operadores lógicos
Operador Lógico Símbolo Ejemplo

or || a || b

and && a && b

not ¡ a¡b

Ejemplo:

int $a = 10;

int $b = 12;

if ( $a > 3 || $b > 5 ) // verdadero or verdadero = verdadero


print "si"; // se imprime si

if ( $a == 5 || $b == 12 ) // falso or verdadero = verdadero

print "si"; // se imprime si

if ( $a == 3 || $b == 2 ) // falso or falso = falso

print "si"; // no se imprime

Uso del operador and (&&).

int $a = 10;
int $b = 12 ;
if ( $a == 10 && $b == 12 ) // true and true = true
print "si" ; // se imprime si
if ( $a == 10 && $b == 2 ) // true and false = false
print "si"; // no se imprime
if ( $a == 3 && $b == 2 ) // false and false = false
print "si"; / / no se imprime

El operador (¡) cambia el resultado de la comparación. Si el resultado es


verdadero, entonces se vuelve falso y viceversa. Considere el siguiente caso:

int $a = 10.
int $b = 12"
// La Comparacion es verdadera, pero el operador not (!) la
invierte por lo que el resultado es falso
if ( !($a == 10 && $b == 12) )
print "no"; // Nunca se imprime

/ / La comparación es falsa, pero el operador not (!)


invierte el resultado por lo que es verdadero
if ( !($a > 10) )
print "a no es mayor que 10"; //se imprime

Creación de un objeto de texto

En el Command Panel escriba la siguiente línea:

textCurves –t “Hola Mundo”

Presione Ctrl+Enter

En el escenario se crea un objeto con las letras que forman la palabra “Hola
Mundo”.

Creación de un botón del Shelf

1. En el History Panel del Script Editor seleccione el texto:

textCurves –t “Hola Mundo”

2. Desde el menú del Script Editor seleccione File Save Script to the Shelf o

haga clic en el botón y escriba un nombre para el elemento.

3. Salve el script como tipo MEL


4. El shelf ahora cuenta con un botón mediante el cual se puede ejecutar este
script simplemente haciendo clic sobre él.

Edición del Shelf

Si desea eliminar un botón del Shelf, el procedimiento es el siguiente:

1. Haga clic en la flecha que aparece del lado izquierdo del Shelf y después en
Shelf Editor.

2. Se abre el cuadro de diálogo Shelf Editor. En la pestaña Shelves y en el


cuadro Shelf Contents seleccione el comando que desea eliminar y haga
clic en el botón (delete item). Observe que también pueden ejecutarse
otras acciones de edición como renombrar y modificar color del ícono. En
este cuadro aparecen: icono, nombre, script, etiqueta. etc
Salvar Script

Puede salvar el script en una ubicación del equipo para utilizarlo


posteriormente. El procedimiento es el siguiente:

1. Seleccione el script
2. Desde el menú del Script Editor seleccione File Save Script.

o bien haga clic en el botón

5. En el cuadro de diálogo Save Selected de un nombre al Script,

6. Aquí puede modificar parámetros como el tipo de archivo y su ubicación.


Salve el Script.

3. Para usar el script desde el menú del Script Editor seleccione File Load

Script o haga clic en el botón


7. Se abre el cuadro de diálogo Open Script.

8. Seleccione el script y haga clic en el botón open

9. El script se ejecuta

Debe quedar claro que existen diferentes formas en las que puede usted ejecutar
comandos MEL:

• Command Line

Es utilizado para escribir y ejecutar comandos simples que son típicamente


de una línea de longitud. Es posible escribir más de un comando en el
Command Line utilizando punto y coma para separar cada uno, sin
embargo en la práctica esto se vuelve difícil para todos los comandos
excepto para aquellos más simples.

• Command Shell
El Commnnad Shell es una ventana que funciona como una ventana Unix.
Los comandos MEL pueden ejecutarse desde esta ventana. Para aquellas
personas con los shells de Unix pueden sentirse más a cómodos usando el
Commnnad Shell. Para acceder a este, seleccione

• Script Editor

• Shelf

• Script Files

Procedimientos y funciones

Diseño Top-Down

Cuando se diseña un script para resolver un problema complicado es raro que


alguien trate de escribir el script completo. Puesto que la programación MEL es la
creación de una serie de instrucciones que le indican a Maya el llevar a cabo una
serie de acciones, una por una, una parte sustancial del reto es determinar lo que
el script debe hacer en primer lugar.

Aunque existen otras estrategias, el acercamiento más simple, más común y más
fácil de aplicar para desarrollar software incluidos los scripts MEL es el llamado
diseño Top-Down. El diseño Top-Down requiere que primero encuentre cual es el
problema que usted está tratando de resolver con su programa. y, posteriormente
una declaración de los pasos básicos que tiene que llevar a cabo su programa
para encontrar una solución.

Una vez que ha empezado con una declaración de nivel superior o “top level” del
problema que está tratando de resolver, usted da un paso hacia la obtención del
detalle de la solución al dividirla en un paso por cada componente. Y así
sucesivamente dividir cada paso que usted ha identificado en pasos más
pequeños. Si usted hace esto con la manera en que escribe sus scripts MEL, tarde
o temprano los refinamientos cada vez más pequeños de su diseño lo llevarán
hacia la obtención de cada línea de código de su script.

Procedimientos y funciones

Los procedimientos y funciones son maneras simples de agrupar juntos una serie
de instrucciones MEL en una operación simple que su script puede volver a usar
de nuevo. Cuando un script (u otro procedimiento) utiliza uno de estos grupos
predefinidos de instrucciones MEL, se dice que ese script llama al procedimiento
o función, en el sentido de que el procedimiento o función es llamada para hacer
su trabajo.

Una función es un tipo especial de procedimiento que puede devolver un valor de


al script que lo llamó. A este valor se le llama valor de retorno de la función o el
valor que devuelve la función, entonces, existen procedimientos que devuelven
valores al script que los llamó.

Cuando empieza a escribir scripts MEL más grandes, se hace más difícil manejar
lo complejo que se vuelven. Una aproximación sencilla para manejar la
complejidad es dividirlos en partes más pequeñas y más manejables. Mientras que
el sistema completo puede ser bastante complejo, las partes individuales que lo
conforman pueden ser fácilmente entendidas. Esta aproximación consistente en
dividir una tarea de programación de cómputo en partes más pequeñas es
conocida como programación estructurada.

El objetivo de la programación estructurada es dividir el programa en piezas


funcionales más pequeñas que pueden ser reutilizadas. MEL proporciona un
medio para hacer esto a través de procedimientos. Un procedimiento es un tipo de
comando que puede llamarse en el script y realiza alguna operación. Un
procedimiento puede tomar cualquier número de variables como entrada. Pude
producir también alguna salida. Un procedimiento pude pensarse como una
máquina que es alimentada y realiza un proceso que produce un resultado.

Definiendo y Usando Procedimientos y Funciones

Antes de que usted pueda usar un procedimiento, tiene que decirle a Maya que es
lo que hace ese procedimiento al definir este. Una función o definición de
procedimiento le dice a Maya el nombre del procedimiento o función, que
argumentos (si hay) necesita para realizar su trabajo, que tipo de datos manejará
de regreso en un valor que devuelve (si es una función), y que instrucciones MEL
ejecutar cuando Maya encuentre una llamada al procedimiento en el script.

Los nombres de procedimientos y de funciones se escriben frecuentemente entre


paréntesis después de ellos, en Maya no es la excepción. Cuando defina o use un
procedimiento o función, los argumentos, si existe alguno, van dentro de
paréntesis.

El siguiente es un procedimiento muy simple que imprime la frase “Hola Mundo”

1. Abra el Script Editor.

2. Escriba el siguiente texto en el Command Panel.


3. Presione Ctrl+Enter para ejecutarlo.

Hasta ahora no sucede nada. Lo único que ha hecho es simplemente definir


el procedimiento. Para ejecutarlo, debe llamarlo.

4. Escriba el siguiente texto para ejecutarlo:

El resultado es:

A continuación otro ejemplo en el que se tiene un procedimiento que


escribe su nombre:

5. Escriba el siguiente texto, sustituya su nombre en lugar de Juan.

6. Presione Ctrl+Enter para ejecutarlo.

7. Llame al procedimiento escribiendo el siguiente texto:

8.
9. El resultado es:

Este procedimiento trabaja bien pero, ¿qué pasa si desea imprimir el


nombre de alguien más? Debe de diseñar el procedimiento para tomar el
nombre como entrada.

La sintaxis de un procedimiento es la siguiente:


Práctica lunes 18 de octubre de 2010

Ejecute un script en el que imprima cualquier nombre que usted ingrese.

Ejecute un script en el que se defina un procedimiento llamado sum el cual suma


dos números y devuelve el resultado.

Ejecute un script en el que se creen dos esferas las cuales se encuentren


desplazadas de los ejes x y y en la misma distancia a partir del origen como se
muestra a continuación:
Matrices

Una matriz es una variable muy similar a un array excepto que tiene dos
dimensiones. Mientras que un array puede ser considerado un solo renglón de
elementos, una matriz tiene tanto filas como columnas de elementos. A diferencia
de los arrays sin embargo, las matrices no pueden ser redimensionadas una vez
que han sido definidas. De esta forma, no es posible añadir elementos a una
matriz.

Una matriz se define con el número de filas y columnas que contiene

Las matrices se inicializan usando una sintaxis similar a la de los vectores. Los
elementos de la matriz se definen en un orden de filas. En el siguiente ejemplo, el
primer renglón de la matriz consiste en los valores 3, 4, 6, 7 mientras que la
segunda fila tiene los valores 3, 9, 0, 1.

Se accede a los elementos de la matriz en una manera muy similar a la de los


arrays excepto que debe darse un índice de columna.

Puesto que una matriz tiene un número fijo de filas y columnas, si usted intenta
acceder a un elemento fuera del rango de los índices se produce un error.

Manipualción de componentes de vectores

Definición e inicialización de un vector:

Impresión de uno de los componentes del vector


¿Que hace la siguiente expresión?

Suma y resta de vectores

Los vectores pueden ser manipulados matemáticamente como unidad. Pueden ser
sumados o restados:

Práctica Lunes 25 de Octubre de 2010

1. Elabore un script en el que sume los siguientes vectores:

- (1, 2, 0)

- (1, 0, 0)

- Elabore la operación en el pizarrón con los vectores

- Elabore un script que reste los vectores anteriores y Elabore la


operación en el pizarrón con los vectores

- Elabore un script en el que sume los siguientes vectores:

- (1, 2, 3) y (1, 2, 0)

- (1, 2, 3) y (0, 1, 0)

2. Ejecute el siguiente script:

3. confirmDialog
4. -title "Confirmar"
5. -message "¿Está seguro?"
6. -button "Si"
7. -button "No"
8. -defaultButton "Si"
9. -cancelButton "No"
10. -dismissString "No";
3. Coloque un botón en el Shelf que al ejecutarlo el usuario, cree un cono y
mande un Confirm Dialog que diga que se cierre el programa porque es una
prueba y que se borrará la figura. Y que al pulsar el botón adecuado la
figura se cierre.

4. Corra el siguiente script y explique su funcionamiento:

5. global proc buildIcosohedron ()


6. {
7. float $goldenMean = ((sqrt(5)-1)/2) ;
8. vector $vert_01 = << 1, 0, $goldenMean >>;
9. vector $vert_02 = << $goldenMean, 1, 0 >>;
10. vector $vert_03 = << 1, 0, ((-1.0)*$goldenMean) >>;
11. vector $vert_04 = << $goldenMean, -1, 0 >>;
12. vector $vert_05 = << 0, ((-1.0)*$goldenMean), 1 >>;
13. vector $vert_06 = << 0, $goldenMean, 1 >>;
14. vector $vert_07 = << ((-1.0)*$goldenMean), 1, 0 >>;
15. vector $vert_08 = << 0, $goldenMean, -1 >>;
16. vector $vert_09 = << 0, ((-1.0)*$goldenMean), -1 >>;
17. vector $vert_10 = << ((-1.0)*$goldenMean), -1, 0 >>;
18. vector $vert_11 = << -1, 0, $goldenMean >>;
19. vector $vert_12 = << -1, 0, ((-1.0)*$goldenMean)>>;
20. string $surf_01[] = `polyCreateFacet
21. -constructionHistory off
22. -texture 1
23. -subdivision 1
24. -point ($vert_01.x) ($vert_01.y) ($vert_01.z)
25. -point ($vert_03.x) ($vert_03.y) ($vert_03.z)
26. -point ($vert_02.x) ($vert_02.y) ($vert_02.z)
27. `
28. ;
29. string $surf_02[] = `polyCreateFacet
30. -constructionHistory off
31. -texture 1
32. -subdivision 1
33. -point ($vert_01.x) ($vert_01.y) ($vert_01.z)
34. -point ($vert_04.x) ($vert_04.y) ($vert_04.z)
35. -point ($vert_03.x) ($vert_03.y) ($vert_03.z)
36. `
37. ;
38. string $surf_03[] = `polyCreateFacet
39. -constructionHistory off
40. -texture 1
41. -subdivision 1
42. -point ($vert_01.x) ($vert_01.y) ($vert_01.z)
43. -point ($vert_05.x) ($vert_05.y) ($vert_05.z)
44. -point ($vert_04.x) ($vert_04.y) ($vert_04.z)
45. `
46. ;
47. string $surf_04[] = `polyCreateFacet
48. -constructionHistory off
49. -texture 1
50. -subdivision 1
51. -point ($vert_01.x) ($vert_01.y) ($vert_01.z)
52. -point ($vert_06.x) ($vert_06.y) ($vert_06.z)
53. -point ($vert_05.x) ($vert_05.y) ($vert_05.z)
54. `
55. ;
56. string $surf_05[] = `polyCreateFacet
57. -constructionHistory off
58. -texture 1
59. -subdivision 1
60. -point ($vert_01.x) ($vert_01.y) ($vert_01.z)
61. -point ($vert_02.x) ($vert_02.y) ($vert_02.z)
62. -point ($vert_06.x) ($vert_06.y) ($vert_06.z)
63. `
64. ;
65. string $surf_06[] = `polyCreateFacet
66. -constructionHistory off
67. -texture 1
68. -subdivision 1
69. -point ($vert_02.x) ($vert_02.y) ($vert_02.z)
70. -point ($vert_03.x) ($vert_03.y) ($vert_03.z)
71. -point ($vert_08.x) ($vert_08.y) ($vert_08.z)
72. `
73. ;
74. string $surf_07[] = `polyCreateFacet
75. -constructionHistory off
76. -texture 1
77. -subdivision 1
78. -point ($vert_03.x) ($vert_03.y) ($vert_03.z)
79. -point ($vert_09.x) ($vert_09.y) ($vert_09.z)
80. -point ($vert_08.x) ($vert_08.y) ($vert_08.z)
81. `
82. ;
83. string $surf_08[] = `polyCreateFacet
84. -constructionHistory off
85. -texture 1
86. -subdivision 1
87. -point ($vert_03.x) ($vert_03.y) ($vert_03.z)
88. -point ($vert_04.x) ($vert_04.y) ($vert_04.z)
89. -point ($vert_09.x) ($vert_09.y) ($vert_09.z)
90. `
91. ;
92. string $surf_09[] = `polyCreateFacet
93. -constructionHistory off
94. -texture 1
95. -subdivision 1
96. -point ($vert_04.x) ($vert_04.y) ($vert_04.z)
97. -point ($vert_10.x) ($vert_10.y) ($vert_10.z)
98. -point ($vert_09.x) ($vert_09.y) ($vert_09.z)
99. `
100. ;
101. string $surf_10[] = `polyCreateFacet
102. -constructionHistory off
103. -texture 1
104. -subdivision 1
105. -point ($vert_04.x) ($vert_04.y) ($vert_04.z)
106. -point ($vert_05.x) ($vert_05.y) ($vert_05.z)
107. -point ($vert_10.x) ($vert_10.y) ($vert_10.z)
108. `
109. ;
110. string $surf_11[] = `polyCreateFacet
111. -constructionHistory off
112. -texture 1
113. -subdivision 1
114. -point ($vert_05.x) ($vert_05.y) ($vert_05.z)
115. -point ($vert_11.x) ($vert_11.y) ($vert_11.z)
116. -point ($vert_10.x) ($vert_10.y) ($vert_10.z)
117. `
118. ;
119. string $surf_12[] = `polyCreateFacet
120. -constructionHistory off
121. -texture 1
122. -subdivision 1
123. -point ($vert_05.x) ($vert_05.y) ($vert_05.z)
124. -point ($vert_06.x) ($vert_06.y) ($vert_06.z)
125. -point ($vert_11.x) ($vert_11.y) ($vert_11.z)
126. `
127. ;
128. string $surf_13[] = `polyCreateFacet
129. -constructionHistory off
130. -texture 1
131. -subdivision 1
132. -point ($vert_06.x) ($vert_06.y) ($vert_06.z)
133. -point ($vert_07.x) ($vert_07.y) ($vert_07.z)
134. -point ($vert_11.x) ($vert_11.y) ($vert_11.z)
135. `
136. ;
137. string $surf_14[] = `polyCreateFacet
138. -constructionHistory off
139. -texture 1
140. -subdivision 1
141. -point ($vert_06.x) ($vert_06.y) ($vert_06.z)
142. -point ($vert_02.x) ($vert_02.y) ($vert_02.z)
143. -point ($vert_07.x) ($vert_07.y) ($vert_07.z)
144. `
145. ;
146. string $surf_15[] = `polyCreateFacet
147. -constructionHistory off
148. -texture 1
149. -subdivision 1
150. -point ($vert_02.x) ($vert_02.y) ($vert_02.z)
151. -point ($vert_08.x) ($vert_08.y) ($vert_08.z)
152. -point ($vert_07.x) ($vert_07.y) ($vert_07.z)
153. `
154. ;
155. string $surf_16[] = `polyCreateFacet
156. -constructionHistory off
157. -texture 1
158. -subdivision 1
159. -point ($vert_12.x) ($vert_12.y) ($vert_12.z)
160. -point ($vert_07.x) ($vert_07.y) ($vert_07.z)
161. -point ($vert_08.x) ($vert_08.y) ($vert_08.z)
162. `
163. ;
164. string $surf_17[] = `polyCreateFacet
165. -constructionHistory off
166. -texture 1
167. -subdivision 1
168. -point ($vert_12.x) ($vert_12.y) ($vert_12.z)
169. -point ($vert_08.x) ($vert_08.y) ($vert_08.z)
170. -point ($vert_09.x) ($vert_09.y) ($vert_09.z)
171. `
172. ;
173. string $surf_18[] = `polyCreateFacet
174. -constructionHistory off
175. -texture 1
176. -subdivision 1
177. -point ($vert_12.x) ($vert_12.y) ($vert_12.z)
178. -point ($vert_09.x) ($vert_09.y) ($vert_09.z)
179. -point ($vert_10.x) ($vert_10.y) ($vert_10.z)
180. `
181. ;
182. string $surf_19[] = `polyCreateFacet
183. -constructionHistory off
184. -texture 1
185. -subdivision 1
186. -point ($vert_12.x) ($vert_12.y) ($vert_12.z)
187. -point ($vert_10.x) ($vert_10.y) ($vert_10.z)
188. -point ($vert_11.x) ($vert_11.y) ($vert_11.z)
189. `
190. ;
191. string $surf_20[] = `polyCreateFacet
192. -constructionHistory off
193. -texture 1
194. -subdivision 1
195. -point ($vert_12.x) ($vert_12.y) ($vert_12.z)
196. -point ($vert_11.x) ($vert_11.y) ($vert_11.z)
197. -point ($vert_07.x) ($vert_07.y) ($vert_07.z)
198. `
199. ;
200. string $united_poly[] = `polyUnite
201. -constructionHistory off
202. $surf_01
203. $surf_02
204. $surf_03
205. $surf_04
206. $surf_05
207. $surf_06
208. $surf_07
209. $surf_08
210. $surf_09
211. $surf_10
212. $surf_11
213. $surf_12
214. $surf_13
215. $surf_14
216. $surf_15
217. $surf_16
218. $surf_17
219. $surf_18
220. $surf_19
221. $surf_20
222. `
223. ;
224. polyMergeVertex
225. -distance 0.05
226. -constructionHistory off
227. ($united_poly[0] + ".vtx[0:59]")
228. ;
229. select -replace $united_poly[0];
230. rename $united_poly[0] "icosohedron1";
231. }
Vectores

En Maya los todos los vectores son 3D. Los tres componentes se llaman x, y y z.
es importante entender que los vectores no tienen una localización fija. Un vector
corresponde a un movimiento relativo, un corrimiento. En términos de posición, un
vector no tiene significado sin un punto. El vector se suma al punto para dar un
nuevo punto.

Vectores en MEL

Un vector se define usando el tipo de dato vector. Debido a que MEL no hace
distinción entre puntos y vectores, todas las operaciones que se aplican a los
puntos. Pueden ser aplicadas a los vectores.

Suma

La suma de dos vectores a y b produce otro vector c, como se ve en la siguiente


figura.

Figura 1. Suma de vectores


Para sumar dos vectores se suman los componentes individuales, lo cual da como
resultado un nuevo vector.

c= a + b

= (ax + bx, ay + by, az + bz)

Propiedades de la suma de vectores:

A+b=b+a (Propiedad conmutativa)

A + (b + c) = (a + b) + c (Propiedad asociativa)

A+0=a (Propiedad de identidad de la suma)

A + (-a) = 0 (Propiedad aditiva inversa)

Resta de vectores

La resta de dos vectores a y b resulta en otro vector c como se ve en la siguiente


figura 2.

c=a–b

las líneas punteadas en la figura muestran una forma más intuitiva de ver la resta
de vectores.la resta puede ser vista como una suma con el segundo vector en la
dirección opuesta.

c = a + (-b)
Figura 2 resta de vectores

Propiedades de la resta de vectores

a –b ≠ b – a (No conmutatividad de la resta)

a – (b-c) ≠(a-b)-c (No asociatividad de la resta)

a–0=a (identidad de la resta)

Escalado

Puede modificarse la longitud de un vector al escalarlo. Un vector es escalado al


multiplicar cada componente por un escalar, s.

b = sa

la figura 3 muestra el resultado de escalar el vector por 2 y por -1. Al escalar el


vector por -1 se obtiene la dirección opuesta de este.
Figura 3. Escalado de un vector

Propiedades del escalado de vectores

(st)a = s(ta) (Propiedad asociativa)

(s + t)a = sa + ta (Propiedad distributiva)

1a = a (identidad del producto)

Longitud

El cálculo de la longitud de un vector se hace utilizando el teorema de Pitágoras


mostrado en la figura 4. Se trata de un triángulo rectángulo.
Figura 4. Teorema de Pitágoras.

c es la hipotenusa, el lado más grande del triángulo. Esta también es la longitud de


un vector 2D. (a, b), dado el teorema de Pitágoras, el valor de c es el siguiente:

c 2 = a 2 + b 2 ; es decir:

c = a2 + b2

Se utiliza la barra vertical doble para indicar la longitud de un vector.

c = a 2 + b 2

Para cualquier vector 2D la longitud es simplemente:

c = x 2 + y 2

Para un vector 3D, la longitud es:

c = x 2 + y 2 + z 2
Se sigue el mismo procedimiento para un vector de n dimensiones.

MEL

Para calcular la longitud de un vector se utiliza el comando mag

Para calcular la longitud de un vector 2D, puede usarse el comando hypot.

El resultado:

Array de flotantes

Para calcular la longitud de un vector como un array de flotantes se utiliza la


operación de raíz cuadrada de la suma de los cuadrados (sqrt)

Distancia entre dos puntos

Para calcular la distancia entre dos puntos utilice el siguiente procedimiento:

El resultado es:
Normalizar un vector:

Los vectores con longitud 1 son también llamados vectores normales. Para
normalizar un vector use el comando unit:

Se imprime:

Ahora se utiliza el comando:

Se imprime entonces:

Array (flotantes)

Si el vector es un float array, se puede usar el comando normalize.

Manipualción de componentes de vectores

Definición e inicialización de un vector:

Impresión de uno de los componentes del vector


¿Que hace la siguiente expresión?

Suma y resta de vectores

Los vectores pueden ser manipulados matemáticamente como unidad. Pueden ser
sumados o restados:

practica

Figura 5. Suma de vectores


Figura 6. Resta de vectores

Vectores

Producto punto (dot product)

El producto punto se denota usando el carácter punto medio (•). Dados dos
vectores, a y b, el producto punto se calcula de la siguiente forma.

a • b = axbx + ayby + azbz

note que el resultado es un escalar. El producto punto es también referido como el


producto interno, o más precisamente el producto euclidiano interno.

Angulo entre vectores

La figura siguiente muestra dos vectores a, y b, y el ángulo θ entre ellos.


Figura 7. Ángulo entre vectores

El cálculo del ángulo se basa en el producto punto (•) de dos vectores. El producto
punto puede ser calculado también de la siguiente manera:

a • b = a  bcos(θ)

La siguientes ecuaciones se derivan de la anterior:

a•b
cos(θ) =
a  b

a•b
θ = cos-1
a  b

Note que el resultado del ángulo θ, está en radianes. El valor va desde 0 (cuando
los dos vectores son colineales) a π radianes (180 grados), cuando los vectores
están en direcciones opuestas.
MEL

El comando ángulo pude ser usado para calcular el ángulo entre dos vectores:

El resultado de los comandos anteriores es:

La funcionalidad del comando ángulo puede ser replicado usando otros


comandos. El producto punto de dos vectores se calcula usando el comando dot.
El comando acos regresa el arco coseno (cos -1) del ángulo dado.

El resultado es:

Practica jueves 28 de octubre de 2010

1. Para los siguientes vectores obtenga mediante MEL para cada caso:

a= (1,2), b= (-3, 4), c= (-1, 3)

a= (-2, -3), b= (1, 0), c= (6, 5)

a= (-1, -2), b= (4, -1), c= (5, 2)

a) a + b; b + c

b) c – a; a – b

c) escale los vectores a y c seleccione el escalar.

d) Calcule la longitud de cada vector así como de los vectores


resultantes en los puntos a y b.

2. Utilizando el comando hypot, calcule la longitud de los siguientes vectores.

(1.2, 4.5, 0.0), (3.8, 1.3, 0.0), (6.2, 5.9, 0.0)


3. Elabore un procedimiento para calcular la longitud de los siguientes
vectores como array de flotantes:

(2.4, 4.6, 7.3)

(1.2, 5.7, 1.1)

(3.8, 4.3, 2.1)

4. Obtenga la distancia entre los puntos siguientes:

(2, 0, 0)

(7, 0, 0)

5. Imprima la longitud de los vectores del punto 3 y normalícelos.

6. Obtenga el ángulo entre los siguientes grupos de vectores:

7. (1, 0, 0); (1, 2, 0) y (1, 1.5, 0); (0.9, 3, 0)

8. Resuelva todos los puntos anteriores de forma analítica

Transformaciones

Las transformaciones son críticas para muchos aspectos de Maya. Cualquier


operación que mueva, escale, rote, recorte o proyecte un punto, involucra una
transformación. Una transformación es un mapeo de un punto desde un lugar
hacia otro.

p’ = p* transformación

El punto de entrada p es transformado en otro punto p’ las coordenadas de p =


(px, py, pz) son mapeadas, respectivamente, a las nuevas coordenadas p’ = (p’x,
p’y, p’z).

Si se aplica una transformación a un punto y el punto resultante es el mismo que


el punto original, no se ha aplicado realmente una transformación efectiva. Una
transformación como esta es llamada transformación identidad. Aplicar una
transformación identidad a un punto no cambiará sus coordenadas.

p = p* transformación identidad

Interfases

Las mejores interfases de usuario son generalmente las más simples y están
construidas teniendo en cuenta los siguientes aspectos subyacentes que se tratan
de resolver:

• ¿Cómo espera trabajar el usuario con un script o programa desconocido, y


que puede hacer el programa para dar cabida a estas expectativas?

• ¿Qué información necesita el script o programa del usuario como entrada y


que información necesita el usuario ver para proporcionar esa entrada?

• ¿Cuál es la mejor manera en que puede implementarse el diálogo de


información entre el usuario y el programa para minimizar la confusión del
usuario y maximizar la conveniencia?

• Cuando el script o programa finaliza, ¿que clase de retroalimentación


necesita el usuario de manera que este sepa que el programa ha hecho lo
correcto?

El responder estas preguntas es a menudo la parte más difícil de la programación.

El uso de los DIalog Box

Algunos elementos de los menús y de las herramientas tienen una interacción


sofisticada con el usuario.

• Primero, si es necesario, se selecciona uno o más objetos.

• Se hace clic o se arrastra con el ratón para activar un elemento de menú o


herramienta.

• El elemento de menú o la herramienta crea una ventana para preguntar por


más información. Esta ventana se le llama caja de diálogo puesto que
permite que el usuario indique como debe de realizarse una tarea, es decir
se lleva a cabo un diálogo con el usuario Figura 8.

Figura 8. Caja de diálogo

• Cuando el usuario hace clic en un botón de la caja de diálogo con una


etiqueta como OK, el cuadro de diálogo desaparece y el script realiza la
tarea.

Muchos elementos de menú en Maya le permiten seleccionar realizar sus tareas


con la configuración común o con una configuración que usted ha elegido.

Estructura de un Dialog Box

Los DIalog Boxes consisten en un número de controles que se encuentran unidos


en una estructura general llamada layout. Los controles proporcionan la forma en
que el usuario llene el Dialog Box con la información que necesita el script,
mientras que el layout determina como se desplegarán esos controles.
Partes más comunes de los Dialog Box

Menus en un Dialog Box trabajan igual que los menus en la ventana de Maya. En
sus Dialog Boxes, usted puede crear un menú con un número de alternativas cada
una de las cuales corre un script MEL.

Tabs son una de las formas en que MEL le permite agrupar controles en un Dialog
Box, de forma que el usuario puede seleccionar ver un solo conjunto a la vez.

Confirm Dialog

Cuando su script necesita pedir al usuario por una de varias opciones, puede usar
el commando MEL confirm dialog para detener temporalmente la ejecución de su
script y crear un pequeño Dialog Box que pide al usuario seleccionar de un
conjunto de botones.

Uno de los botones, llamado el Default Button, está marcado de forma especial
(dependiendo de Sistema Operativo y Versión de Maya). Presionar Enter produce
el mismo resultado que hacer clic en el Default Button.

Otro botón es el Cancel button,


// Se crea un confirm dialog con botones Si y No.
$respuesta = `confirmDialog -title "Confirme"
-message "Si o No? Es su desicion..."
-button "Si"
-button "No"
-defaultButton "Si"
-cancelButton "No"
-dismissString "No"`;

Cuando corre este comando confirmDialog, el script se detendrá y producirá la


ventana mostrada en la figura 9. Cuando el usuario hace clic en un botón la
ejecución del script finaliza y se coloca el nombre del botón en la variable
$returnVal. La tecla enter ejecuta el botón Si y la tecla Esc ejecuta el botón No.

El valor que atrapa la variable del dialogo corresponde al botón presionado.

Otro uso para confirmDialog es presentar un mensaje importante como una


advertencia al usuario:
confirmDialog -title "Warning"
-message "Everything is about to be deleted"
-button "OK";
Puesto que existe un solo botón, el cual ignora el dialogo la respuesta del usuario
no importa en este caso, en vez de eso, el diálogo simplemenbte presenta una
advertencia.

Banderas

Algunas banderas de confirmDialog son las siguientes:

-icon (-icn): el usuario puede especificar uno de los cuatro iconos estándar
“question”, “information”, “warning” y “critical”.

-backgraoundColor (-bgc) es el color de fondo del diálogo los argumentos


corresponden a los colores rojo, verde, y azul en sus componentes. Cada
componente tiene un rango que va de el valor 0.0 a 1.0

Pidiendo texto al usuario mediante promptDialog

El comando promptDialog trabaja de manera similar a confirmDialog, pero incluye


en el cuadro de diálogo un campo de texto en el cual el usuario puede ingresar
texto:

string $buttonResponse = `promptDialog -title "Make Sphere"


-message
"Name for your new sphere?"
-button "OK"
-button "Cancel"
-defaultButton "OK" `;

Práctica lunes 1° de Noviembre de 2010

Se requiere trabajar con un proyecto por parte de un grupo de usuarios. Solo los
usuarios autorizados tienen permitido abrir dicho proyecto. Coloque un botón el
Shelf que al ejecutarse abra un promptDialog en el cuál el usuario ingrese una
clave. El diálogo contendrá dos botones Aceptar y cancelar, al hacer clic en
cancelar aparecerá un confirmDialog que indicará que la aplicación ha sido
terminada por el usuario, y contendrá un solo botón: Aceptar. Si se introduce una
clave incorrecta en el promptDialog aparecerá un confirmDialog que indicará que
la clave no es válida y la aplicación se cerrará, al dar clic en el único botón
(Aceptar) la ejecución se detiene. Si se ingresa la calve correcta en el
promptDialog y se hace clic en el botón Aceptar aparecerá un promptDialog que
servirá para que el usuario confirme que desea abrir el archivo. Al dar clic en el
botón aceptar que es el único que posee, se abre un promptDialog con tres
botones: Si, No, y No estoy seguro, al dar clic en Si se abre el archivo indicado, al
dar clic en No se detiene la aplicación y al dar clic en No estoy seguro se abre un
promptDialog dando información al usuario. Coloque iconos en los promptDialog
así como color de fondo.

You might also like