Mel / Python - Ventana para Renombrar Objetos

Hola, en esta oportunidad realizare un ejercicio que me permita cambiar el nombre de uno o varios objetos seleccionados.

El enunciado seria el siguiente:
  1. Se necesita desarrollar una ventana que me permita ingresar el nombre de los objetos.
  2. Se debe considerar si tenemos objetos seleccionados.
  3. Se debe validar los datos ingresados.
Para resolver el enunciado necesitaremos:
  1. Un procedimiento que evalué los datos:
    • Mel: recibirá el valor de la caja de texto en un argumento ($nombre).
    • Python: el procedimiento se encargara de recoger los datos en la variable nombre.
  2. Comando If para evaluar los valores.
  3. Comodín || y or para usar rangos en el If para Mel y Python respectivamente.
  4. Comando For para recorrer en todos los objetos seleccionados y cambiar el nombre.
  5. Comando confirmDialog para mostrar advertencias.
Comenzamos construyendo la ventana con una caja de texto y un botón que llamara al procedimiento. Su construcción es básica así que usaremos una distribución en columnas.

Recuerda que ambos lenguajes manejan diferente los datos ingresados en las cajas de texto, es por eso que en Mel lo enviaremos directo cuando presionemos el botón (también podemos reservar este valor en otra variable para tener un mejor control) y en Python recogeremos este dato en una variable dentro del procedimiento.

El resultado usando Mel seria el siguiente:
  1. proc renombrar(string $nombre){
  2.     $objetos=`ls -sl`;
  3.     $cantidad=size($objetos);

  4.     if (size($nombre)==0 || $cantidad==0){
  5.         confirmDialog -t "Error" -m "Ingrese un nombre o seleccione un objeto" -b "Ok";
  6.     }
  7.     else{
  8.         for($x=0;$x<$cantidad;$x++){
  9.             select $objetos[$x];
  10.             rename ($nombre+"_"+$x);
  11.             select -cl;
  12.         }
  13.     }
  14. }

  15. $vent=`window -t "Rename" -w 300 -h 100 -s off -mnb off -mxb off`;
  16. columnLayout -adj on -rs 6;

  17. text -l "Ingresa el prefijo que usaran los objetos seleccionados.";
  18. separator -h 10;
  19. $val=`textField -w 100 -tx "Nombre"`;
  20. separator -h 20;
  21. button -l "Renombrar" -h 40 -bgc .2 .2 .2 -c "renombrar(`textField -query -text $val`)";

  22. showWindow($vent);


        Su equivalente en Python seria así:
        1. import maya.cmds as cmds

        2. def renombrar():
        3.     nombre=cmds.textField(val,q=True,text=True)
        4.     objetos=cmds.ls(sl=True)
        5.     cantidad=len(objetos)
        6.     if len(nombre)==0 or cantidad==0:
        7.         cmds.confirmDialog(t="Error",m="Ingrese un nombre o seleccione un objeto",b="Ok")
        8.     else:
        9.         for x in range(cantidad):
        10.             cmds.select(objetos[x])
        11.             cmds.rename(nombre+"_"+str(x))
        12.             cmds.select(cl=True)

        13. vent=cmds.window(t="Rename",w=300,h=100,s=False,mnb=False,mxb=False)
        14. cmds.columnLayout(nch=5,adj=True,rs=6)
        15. cmds.text(l="Ingresa el prefijo que usaran los objetos seleccionados.")
        16. cmds.separator(h=10)
        17. val=cmds.textField(w=100,tx="Nombre")
        18. cmds.separator(h=20)
        19. cmds.button(l="Renombrar",h=40,bgc=(.2,.2,.2),c="renombrar()")

        20. cmds.showWindow(vent)

                El resultado seria una ventana con un casillero para escribir el nuevo nombre y un botón que ejecute el procedimiento.

                Se tiene que considerar que la ventana todavía no valida cuando colocas espacios en blanco ni caracteres especiales, así que que si usas estos Maya te pondrá alguna restricción y le cambiara el nombre de manera automática.

                Ejemplo del código en la interface de Maya.

                Espero les sea útil esta pequeña demostración del uso de ventanas.
                Un saludo.

                Comentarios