MEL array: devo leggere e ricopiare coppie di valori...

Di: urcodiaz | 26/09/2020 18:34:48
Ciao a tutti!
Sto facendo uno studio con maya sui movimenti secondare per la tesi di laurea...avrei un paio di aiuti da kiedervi!!
1) Ho due cilindri, uno sopra l'altro, imparentati tra loro; al primo do delle chiavi di animazione in modo che ad intervalli regolari oscilli a dx e sx; il secondo cilindro verrà mosso da primo e si muoverà anch'esso oscillando a dx e sx, ma con un certo ritardo rispetto al primo ed una diversa angolazione;
Inoltr ho il compito di automatizzare con MEL queste semplici prove;
Il problema sorge nel momento in cui devo attribuire al secondo cilindro le chiavi di animazione modificate del primo; m'han detto di utilizzare due array...con il findKey trovo tutte le chiavi del primo cilindro e le memorizzo in un array, poi, dopo aver modificato i valori con una formula logica (determinata dai vari esempi che ho svolto...), le applico alla seconda curva e così il movimento è automatizzato;
Ma come si caricano dati in un array? Come faccio poi a richiamare solo le coppie che mi servono, come le modifico e come le riapplico? MEL lo sto usando...ma non sono un mostro!!
vi posto il codice:
polyCylinder -r 0.5 -h 3 -ax 0 1 0;
move -r 0 -1.5 0 pCylinder1.scalePivot pCylinder1.rotatePivot;
setKeyframe {"pCylinder1"};
currentTime 20 ;
setAttr "pCylinder1.rotateZ" 45;
setKeyframe {"pCylinder1"};
currentTime 40 ;
setAttr "pCylinder1.rotateZ" 0;
setKeyframe {"pCylinder1"};
currentTime 60 ;
setAttr "pCylinder1.rotateZ" -45;
setKeyframe {"pCylinder1"};
currentTime 80 ;
setAttr "pCylinder1.rotateZ" 0;
setKeyframe |pCylinder1.translate;
setKeyframe {"pCylinder1"};
currentTime 100 ;
setAttr "pCylinder1.rotateZ" 45;
setKeyframe {"pCylinder1"};
currentTime 120 ;
setAttr "pCylinder1.rotateZ" 0;
setKeyframe {"pCylinder1"};
currentTime 140 ;
setAttr "pCylinder1.rotateZ" -45;
setKeyframe {"pCylinder1"};
currentTime 160 ;
setAttr "pCylinder1.rotateZ" 0;
setKeyframe {"pCylinder1"};
duplicate -rr; move -r 0 3 0;
parent pCylinder2 pCylinder1;
currentTime 1;
setKeyframe {"pCylinder2"};
currentTime 10 ;
setAttr "pCylinder2.rotateZ" -30;
setKeyframe {"pCylinder2"};
currentTime 35 ;
setAttr "pCylinder2.rotateZ" 30;
setKeyframe {"pCylinder2"};
currentTime 75 ;
setAttr "pCylinder2.rotateZ" -30;
setKeyframe {"pCylinder2"};
currentTime 115 ;
setAttr "pCylinder2.rotateZ" 30;
setKeyframe {"pCylinder2"};
currentTime 155 ;
setAttr "pCylinder2.rotateZ" -30;
setKeyframe {"pCylinder2"};
currentTime 170 ;
setAttr "pCylinder2.rotateZ" 0;
setKeyframe {"pCylinder2"};
Potete darmi una mano?
2) anche nel secondo caso ho problemi d'array...ho un ciclo for che costruisce una catena di joint su una curva;
Aggiunge n joint in base alla lunghezza della curva, che così viene parametrizzata e inserita da tastiera; il mio problema e che dopo la creazione eseguo un IK Spline (che come sapete ha bisogno del primo e dell'ultimo joint oltre alla curva)...devo utilizzare due array (inizio e fine ad esempio) per mantenere sempre i due joint che mi occorrono, ma come faccio a richiamare solo il primo e l'ultimo?
Codice:
proc lc (float $elasticità, float $lunghezza) {
string $contenitore[];
string $nome1, $nome2;
$contenitore = `polyPlane -n "Base"-ax 0 1 0 -w 2 -h 2 -sx 2 -sy 2`;
$nome1 = $contenitore[0];
createHair 1 1 $elasticità 1 1 1 1 $lunghezza 0 2;
$contenitore = `cylinder -n "Cilindro"-p 0 ($lunghezza/2) 0 -ax 0 1 0 -r 0.5 -hr (2*$lunghezza)`;
$nome2 = $contenitore[0];
int $i;
for ($i = 0; $i < (($lunghezza/2)+1); $i++) {
joint -p 0 (2*$i) 0;
}
select -r joint1.rotatePivot ;
select -add joint6.rotatePivot ;
select -add curve3 ;
ikHandle -sol ikSplineSolver -ccv false -pcv false -ns 4 -rtm true;
select -r Cilindro ;
select -tgl joint1 ;
newSkinCluster "-mi 5 -omi true -dr 4 -rui true";
}
lc(5,10)
spero di essere riuscito a spiegarmi...ma spero soprattutto che qualcuno di voi sia in grado di aiutarmi!!
Grazie!!

Risposte


Nessuna risposta trovata!