APUNTES

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

Transcript of APUNTES

Page 1: APUNTES

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

Page 2: APUNTES

Script editor

Window> General Editors> Script Editor

Page 3: APUNTES

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.

Page 4: APUNTES

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

Page 5: APUNTES

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

L

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.

Page 6: APUNTES

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":

Page 7: APUNTES

... 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";

Page 8: APUNTES

// 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.

Page 9: APUNTES

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;

Page 10: APUNTES

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 = “”;

Page 11: APUNTES

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

Page 12: APUNTES

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

Page 13: APUNTES

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

Page 14: APUNTES

$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;

Page 15: APUNTES

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 )

Page 16: APUNTES

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

Page 17: APUNTES

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

Page 18: APUNTES

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

Page 19: APUNTES

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

Page 20: APUNTES

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

Page 21: APUNTES

Salvar Script

Puede salvar el script en una ubicación del equipo para utilizarlo posteriormente. El procedimiento es el siguiente:

1. Seleccione el script

Page 22: APUNTES

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

Page 23: APUNTES

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

Page 24: APUNTES

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

Page 25: APUNTES

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.

Page 26: APUNTES

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:

Page 27: APUNTES

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:

Page 28: APUNTES

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

Page 29: APUNTES

¿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";

Page 30: APUNTES

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)

Page 31: APUNTES

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. ̀

Page 32: APUNTES

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

Page 33: APUNTES

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

Page 34: APUNTES

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. }

Page 35: APUNTES

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

Page 36: APUNTES

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)

Page 37: APUNTES

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.

Page 38: APUNTES

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.

Page 39: APUNTES

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:

222 bac += ; es decir:

22 bac +=

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

c = 22 ba +

Para cualquier vector 2D la longitud es simplemente:

c = 22 yx +

Para un vector 3D, la longitud es:

c = 222 zyx ++

Page 40: APUNTES

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:

Page 41: APUNTES

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

Page 42: APUNTES

¿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

Page 43: APUNTES

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.

Page 44: APUNTES

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 bcos(θ)

La siguientes ecuaciones se derivan de la anterior:

cos(θ) =

θ = cos-1

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.

a • b

a b

a • b

a b

Page 45: APUNTES

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)

Page 46: APUNTES

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

Page 47: APUNTES

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

Page 48: APUNTES

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.

Page 49: APUNTES

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";

Page 50: APUNTES

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

Page 51: APUNTES

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.