- 09/01/2009 21:58
Hola, esta pregunta no se ni siquiera como plantearla, seguro le habrá pasado a muchos, me gustaría saber si existe alguna forma de solucionarlo más elegante que lo que vengo haciendo últimamente.
El tema va así, algunas veces me sucede que al ejecutar una acción dentro de un loop/bucle por alguna razón ejecuta la línea, pero no retiene los cambios. Es como si hiciera el cambio, pero luego lo sobrescribe sin motivo aparente volviendo al valor original. No tiene sentido ¿no?
Dejo un ejemplo.
[code]Fn createspline pospoints = -retorna una Spline usando las coordenadas del array pospoint.
(Tlocal ss = splineshape Pos pospoints[1]) taddnewspline ss tfor each in pospoints do t(t addknot ss 1 #smooth #curve each t) tupdateshape ss treturn ss).
(Tlocal myspline = createspline #([0,0,0], [50,0,0], [100,0,0]) -creo una Spline tmyspline, rotation, z_rotation = 45 taddmodifier myspline (Spline IK control()) -agregamos un modificador Spline IK control tlocal splinemod = myspline. Modifiers[1] tsplinemod, linktypes = 2 -los helpers no van enlazados entre sí tsplinemod, createhelper (numknots myspline) -creamos los helpers que controlanran la curva t-atencion:
-supongamos que quiero igualar la orientación de los t-controles creados mediante el modificador con la Spline tfor each in splinemod, helper_list do t(t each, rotation = myspline, rotation -igualamos la rotación con la Spline print (each, name + : + each, rotation as string) -dejamos un log para comprobar posteriormente t).
)[/code]
El log retorna que cambió la orientación de todos los controles como es de esperar:
[code]Point01: (quat 0 0 0.382683 0.9238.
Point02: (quat 0 0 0.382683 0.9238.
Point03: (quat 0 0 0.382683 0.9238 [/code]
Pero el resultado difiere, sólo cambió la orientación del primero, de alguna forma no fue capaz de retener el cambio en el resto de los nodos del array:
De hecho, si hago la rotación con autokey en el frame 1 queda animado y en el cuadro 1 todos tienen la orientación como corresponde, es como si el loop no fuera capaz de retener los valores o los sobrescribiera de alguna forma.
Alguien sabe cuál es el problema? Que estoy haciendo mal? Gracias.
Posdata: si hiciera el loop usando un índice para recorrer el array (como en el código de abajo) el resultado es exactamente el mismo.
[code]for i=1 todo splinemod, helper_list, count do.
(Tsplinemod, helper_list.rotation = myspline, rotation -igualamos la rotación con la Spline Tprint (splinemod, helper_list.name + : + splinemod, helper_list[i].rotation as string) -dejamos un log para comprobar posteriormente.
)[/code]
-- IMÁGENES ADJUNTAS --
El tema va así, algunas veces me sucede que al ejecutar una acción dentro de un loop/bucle por alguna razón ejecuta la línea, pero no retiene los cambios. Es como si hiciera el cambio, pero luego lo sobrescribe sin motivo aparente volviendo al valor original. No tiene sentido ¿no?
Dejo un ejemplo.
[code]Fn createspline pospoints = -retorna una Spline usando las coordenadas del array pospoint.
(Tlocal ss = splineshape Pos pospoints[1]) taddnewspline ss tfor each in pospoints do t(t addknot ss 1 #smooth #curve each t) tupdateshape ss treturn ss).
(Tlocal myspline = createspline #([0,0,0], [50,0,0], [100,0,0]) -creo una Spline tmyspline, rotation, z_rotation = 45 taddmodifier myspline (Spline IK control()) -agregamos un modificador Spline IK control tlocal splinemod = myspline. Modifiers[1] tsplinemod, linktypes = 2 -los helpers no van enlazados entre sí tsplinemod, createhelper (numknots myspline) -creamos los helpers que controlanran la curva t-atencion:
-supongamos que quiero igualar la orientación de los t-controles creados mediante el modificador con la Spline tfor each in splinemod, helper_list do t(t each, rotation = myspline, rotation -igualamos la rotación con la Spline print (each, name + : + each, rotation as string) -dejamos un log para comprobar posteriormente t).
)[/code]
El log retorna que cambió la orientación de todos los controles como es de esperar:
[code]Point01: (quat 0 0 0.382683 0.9238.
Point02: (quat 0 0 0.382683 0.9238.
Point03: (quat 0 0 0.382683 0.9238 [/code]
Pero el resultado difiere, sólo cambió la orientación del primero, de alguna forma no fue capaz de retener el cambio en el resto de los nodos del array:
De hecho, si hago la rotación con autokey en el frame 1 queda animado y en el cuadro 1 todos tienen la orientación como corresponde, es como si el loop no fuera capaz de retener los valores o los sobrescribiera de alguna forma.
Alguien sabe cuál es el problema? Que estoy haciendo mal? Gracias.
Posdata: si hiciera el loop usando un índice para recorrer el array (como en el código de abajo) el resultado es exactamente el mismo.
[code]for i=1 todo splinemod, helper_list, count do.
(Tsplinemod, helper_list.rotation = myspline, rotation -igualamos la rotación con la Spline Tprint (splinemod, helper_list.name + : + splinemod, helper_list[i].rotation as string) -dejamos un log para comprobar posteriormente.
)[/code]
-- IMÁGENES ADJUNTAS --