Mel / Python - Procedimiento - Objetos intercalados en dos ejes

Hola, en esta oportunidad realizare un ejercicio en el que pondremos en práctica el envió de datos a un procedimiento o función, el cual usara estos datos para construir una cadena de objetos intercalados los cuales se moverán en dos ejes el X y el Y.

El enunciado seria el siguiente:
  1. Se necesita crear una cadena de objetos que intercalen en su eje X.
  2. La cantidad de filas es variable.
  3. Se debe hacer uso de un procedimiento o función para enviar datos.
  4. El tamaño de los objetos es fijo.
Para resolverlo necesitaremos:
  1. Un procedimiento que reciba dos atributos:
    • nomObj: recibe el nombre del objeto que deseemos asignar.
    • max: cantidad total de filas y columnas a crear.
  2. Comando For para repetir las instrucciones.
  3. Comando If para evaluar y asignar los parents.
  4. Operador % para conseguir el residuo del dato a evaluar.
Comenzaremos definiendo el procedimiento "objInter" que recibirá los dos valores para construir nuestros objetos.

Realizaremos un primer For que contendrá al If que evalué el residuo de la variable del For, esta acción conseguirá averiguar si el valor del For es par o impar al evaluarlo sobre el número dos, con esta información declaramos un nuevo for que realice el desplazamiento de los objetos que esta creando el For principal.

El resultado usando Mel seria el siguiente:
  1. proc objInter(string $nomObj, int $max){

  2.    for ($x=0;$x<$max;$x++)
  3.     {
  4.       if(($x%2)>0)
  5.       {
  6.          for ($y=1;$y<=$max;$y++)
  7.          { 
  8.             sphere -n ($nomObj+"_"+$x) -r 2; 
  9.             move ($y*4) ($x*4) 0; 
  10.          } 
  11.       } 
  12.       else{
  13.          for ($y=0;$y<$max;$y++){ 
  14.             sphere -n ($nomObj+"_"+$x) -r 2; 
  15.             move (($y*4)+2) ($x*4) 0; 
  16.          }
  17.       }
  18.    }
  19.  
  20. objInter("esfera",10);


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

        2. def objInter(nomObj,max):

        3.    for x in range(max):
        4.       if x%2 > 0:
        5.          for y in range(max):
        6.             cmds.sphere(n=nomObj+'_'+str(x),r=2)
        7.             cmds.move(y*4,x*4,0)
        8.       else:
        9.          for y in range(max):
        10.             cmds.sphere(n=nomObj+'_'+str(x),r=2)
        11.             cmds.move((y*4)+2,x*4,0)
        12.    cmds.select(clear=True)

        13. objInter('esfera',10)

                El resultado seria un bloque de objetos intercalados como vemos en la imagen de abajo.

                Objetos intercalados.

                Recuerda: El tamaño de los objetos es fijo, pero se puede hacer más dinámica la instrucción si le enviamos un argumento que se llame objSize a nuestro procedimiento y este evalué el tamaño del objeto para ajustar su desplazamiento en los ejes X y Y.

                Ahora prueba cambiar esferas por cubos o el objeto que desees.

                Espero les sea útil este pequeño ejercicio.

                Un saludo.

                Comentarios