3DVF Network :
ico_magazine
Magazine
ico_boutique
Boutique
ico_cgjobs
Portail Emploi
ico_upload
Hébergement d'image
blogs
Blogs
ico_progiss
Progiss
ico_social
Social
Login Membre :
blogs
Login
?
Join
space
space
  FORUM 3DVF
  Maya Général
  Melscript

  Besion d'aide sur un script de remise a zéro pour sliders

 

Bolter, climber Work In Progress : hertrichdesign, FALCON54 et 24 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besion d'aide sur un script de remise a zéro pour sliders

n°2312
Nicklaus l​e vrai
Posté le 11-10-2011 à 18:13:06  profilanswer
 

Salut a tous bon voilà je suis en train d'essayer de faire un script mais je rencontre une difficulté, je m'explique
 
j'ai l'habitude dans mes riggs de faire mes contrôleurs dans la viewport ( je viens de 3dsmax a la base)
Là je me suis dis "pourquoi pas me faire une sorte de bouton qui, quand j'appuie dessus, me remet mes sliders à zero, sachant qu'il me faudrait un bouton par slider. A savoir que mon slider n'est qu'un circle parenté a une curve toute droite avec des limit informations sur les axes concernés.
 
------
 
Alors voilà j'ai testé un truc pour la fonction align et ça a l'air de marcher.
 
genre je crée une cube et une sphère et je veux que quand je sélectionne la sphère, le cube ait ses transform en translation qui reviennent à zéro.
 
ça donne ça :
 
 
int $RAZ = `scriptJob -ct "SomethingSelected" "dis"`;
 
proc dis()
{
string $list[] = `ls -sl`;
if($list[0]=="pSphere1" )
setAttr "pCube1.translateZ" 0;
setAttr "pCube1.translateX" 0;
setAttr "pCube1.translateY" 0;
}
 
 
 
pour cancel le script :
 
 
 
scriptJob -k $RAZ;
 
 
 
jusque là ça marche c'est cool mais bon si je dois à chaque fois renommer le script pour chaque slider c'est galère, j'ai donc décidé d'automatiser un peu.
 
 
Du coup je me suis dis "hey je vais faire un truc du genre" :
 
 
Je choisi mon contrôleur (donc la partie mobile de mon slider en supposant qu'a sa position zéro ses transform soient tous à zéro, et que tout ait été crée au centre de la grille pour éviter les problemes, c'est mieux bien sur)
 
je lance mon script et :
 
 
il renomme mon slider en "CTRLRAZBASE_1" (puis CTRLRAZBASE_2 pour le second et ainsi de suite)
 
il me crée mon bouton (ici une sphère)
 
il renomme mon ce bouton de remise a zéro en en "RAZBUTTON_1" (puis RAZBUTTON_2 pour le second et ainsi de suite)
 
il aligne puis décale sur le coté puis parente ma sphère au slider pour qu'elle suive le mouvement du slider
 
et après pour assigner la remise à zéro je galère... disons que ce que j'ai fais en renommage je ne parviens pas à le faire pour mon Scriptjob... J'aimerai que pour chaque couple CTRLRAZBASE_N+1 / RAZBUTTON_N+1 j'ai un Scriptjob $RAZ_N+1 associé qui soit créé.
 
ainsi j'aurai juste à chaque fois à sélectionner un nouveau contrôleur et lancer mon script pour que ça marche, là je ne trouve pas la soluce comme ça...
 
Est ce que quelqu'un ici avec un grand cœur pourrait me filer un coup de main?
 
 
A savoir qu'a l'avenir j'aimerai ajouter :
 
 
- un truc du genre "quand le slider est à zéro la sphère est verte et quand ce n'est pas à zéro la sphère est rouge", ça ne doit pas être bien compliqué
 
- faire en sorte qu'a sa création la sphère soit non renderable (ça doit être une commande à la con à rajouter au moment ou elle est crée ou alors je ferai une autre curve à la place au pire)
 
- voir si il n'y a pas moyen de gérer le principe de sélection un peu mieux, ici pour une remise à zéro je suis obliger de tout désélectionner et de clique après sur mon bouton de remise a zero, si j'ai un autre objet sélectionné avant de cliquer sur le bouton ça ne se remet pas a zéro...
 
_______
 
Voici le script pour l'instant:
 
 
//PARTIE RENOMMAGE DU SLIDER
 
 
int $i;
string $rename[] = `ls -sl`;
int $selSize = `size $rename`;
 
for ($i =0; $i <$selSize ; $i++){
rename ($rename[$i])  ("CTRLRAZBASE_" + ($i +1));
 
}
 
 
 
//SAUVEGARDER SOUS UNE VARIABLE
 
 
string $OBJET1forafter[] = `ls -sl`;
print $OBJET1forafter;
 
 
 
//CRÉATION DU BOUTON
 
 
select -cl;
 
 
 
polySphere -ch on -o on ;
 
 
 
//RENOMMAGE DU BOUTON  
 
 
int $i;
string $rename[] = `ls -sl`;
int $selSize = `size $rename`;
 
for ($i =0; $i <$selSize ; $i++){
rename ($rename[$i])  ("RAZBUTTON_" + ($i +1));
 
}
 
 
//SAUVEGARDER SOUS UNE VARIABLE
 
 
string $OBJET2forafter[] = `ls -sl`;
print $OBJET2forafter;
 
 
 
//PLACEMENT DU BOUTON ET PARENTAGE
 
 
 
select -cl  ;
select -r $OBJET2forafter ;
select -tgl $OBJET1forafter ;
parent;
ResetTransformations;
parent -w;
move -r -os -wd 0 0 5 ;
FreezeTransformations;
select -cl  ;
select -r $OBJET2forafter ;
select -tgl $OBJET1forafter ;
parent;
 
 
 
 
 
 
//ASSIGNATION DES REMISES A ZERO (comment faire pour que cette partie soit incrementale? genre que le premier $RAZ soit $RAZ_1 pour RAZBUTTON_1 et  
 
CTRLRAZBASE_1 puis $RAZ_2 pour RAZBUTTON_2 et CTRLRAZBASE_2 et ainsi de suite?
 
 
 
 
 
int $RAZ = `scriptJob -ct "SomethingSelected" "dis"`;
 
proc dis()
{
string $list[] = `ls -sl`;
if($list[0]=="RAZBUTTON_1" )
setAttr "CTRLRAZBASE_1.translateZ" 0;
setAttr "CTRLRAZBASE_1.translateX" 0;
setAttr "CTRLRAZBASE_1.translateY" 0;
}
 
 
 
RENDRE LA SPHÈRE NON RENDERABLE
 
 
ASSIGNATION DES COULEURS  VERT slider a zéro   ROUGE slider pas à zéro
 

(Publicité)
n°2313
Nicklaus l​e vrai
Posté le 13-10-2011 à 14:02:18  profilanswer
 

Personne n'a d'idée?

n°2323
eky

Posté le 04-11-2011 à 23:55:22  profilanswer
 

si !  
cette fonction : hudSliderButton  
 
 
ou alors....
 
En plus de le surcharger, tu vas permettre de reseter des données directement dans le viewport...sans sécurité donc. ce qui est vivement déconseillé. Car un utilisateur distrait, non avertis, fatigué aura tot fait de perdre son anim .
Pourquoi ne pas simplement faire une toolbox avec des boutons dedans ??????
 
il faudra en plus Exécuter un code au démarrage (avec un scriptNode unique qui se lance au debut de chaque scene)  pour créer un jobSript qui te permettra de détecter la sélection d'un controlleur qui te permettra de reseter ? et ce pour chaque controlleur. Wow, ca fait beaucoup de controlleur ca ! et de code. je te le deconseil.
 
Mais c'est faisable ! il faut expérimenté !
 
En fait tu as n couples d'objet. on va dire A control B par job script.
le plus simple est de faire un scripJob qui test si un objet A parmi les n a été sélectionné.
 
donc....il faut savoir a l'avance quel son les objets pour scripter a l'avance une fonction switch.
qui, en fonction de la selection va executer une commande. ou pas.
 
string $B[]=`ls -sl`; /// 10 controls. ceux qu'on a sélectionné plus tôt par un `ls -sl`
string $A[]=`ls -sl`; /// 10 sphères précédemment créées  
 
string $this="";
string $exp=""; // ta future fonction sera ecrite dans cette variable et c'est cette fonction que ton job script //va appeler.
 
$exp="global proc razTestSJ()\n"; // declaration de ta futur fonction switch and raz
$exp=$exp+"{\n";
$exp=$exp+" string $sel[]=`ls -sl`;\n";
$exp=$exp+" switch ($sel[0]){\n"; // le switch qui va tester le premier element selectionné  
 
int $i=0;
for ($this in $A) // je parcours mes sphères  
{
         $exp = $exp+"  case \""+$this +"\" :\n"; // pourchaque bouton je créé une action s'il a été selectioné.
         $exp = $exp+"   print (\""+$this+ " is selected\" );\n"; // je print son nom...(tu peu tout aussi bien //reseter le controlleur associé,avec un setAttr($B[$i]+".tx" ) 0;
         $exp = $exp+"   setAttr (\""+ $B[$i]+ ".tx\" ) 0;\n"; //voila.  
         $exp = $exp+"   break;\n"; // je break
}
 
$exp=$exp+" }\n"; // je ferme le switch
$exp=$exp+"}"; // je ferme la fonction
 
print $exp; ///ici tu verras la declaration de ta futur fonction
eval ($exp); //ici je compile le code contenu dans $exp. c'est une déclaration maintenant contenu en //mémoire de maya.
 
scriptJob -ct "SomethingSelected" "global proc razTestSJ()";  //cette fonction serra appelée si l'utilisateur //selectionne quleque chose.
// ca marche.
 
un probléme...
imagine que tu importe ton personnage dans une scene.
tu as namespace qui va se créer devant pour ton personnage . comment va reagir ta fonction avec des nom modifiés ??? mal.
 Entre nous quand je veux reseter un controlleur, je vais dans attributs, et je fais 0. :p
 
Pour changer la couleur de tes controlleurs. je ne me rappel plus comment on fait. :(
mais tu peu coder sur scale...pourquoi pas.
 
 
 

n°2350
Creepy Pah​uska
Etudiant
Posté le 05-12-2011 à 19:39:47  profilanswer
 

Pour changer la couleur des controlleurs :
Override Color
 
en code ça donne ça :
 
//active les color overrides
setAttr tonObjet.overrideEnabled 1;
 
//change la couleur
//$x doit être un nombre entre 0 et 31

 
int $x;
setAttr tonObjet.overrideColor $x;


---------------
Guillaume FERRACHAT
ESMA Montpellier

Aller à :
Ajouter une réponse
  FORUM 3DVF
  Maya Général
  Melscript

  Besion d'aide sur un script de remise a zéro pour sliders

 

Haut de page
space
space
space
A Propos | Contact
Copyright © 2000-2012 3DVF. Tous droits réservés. | Infogérance serveur | tracker
space