Balboza 0 Report post Posted May 27, 2020 Bonjour tout le monde, J'aimerai faire un script qui permet de changer les valeurs de Mass et de Drag de mon spring (control panel) directement de mon contrôleur d'animation grâce à un attribute holder custom. J'arrive à changer ces valeurs en bougeant mon spinner, mais lorsque je reviens sur mon contrôleur, la valeur ne correspond plus a la valeur réelle de ma mass et de mon drag, mais à la valeur par défaut de mon spinner. Il faudrait que je rajoute un bout de script qui aille chercher la valeur actuelle dans mon Control panel pour l'utiliser sur le spinner. Le problème c'est que je n'ai aucune idée de comment faire cela, et que ce que j'ai déjà fait fut déjà assez douloureux à sortir XD Si l'un de vous peut m'aider, ce serait vraiment génial. Voici ce que j'ai déjà : "SPRING_Control_Custom_attribute = attributes custom_Attributes ( rollout SpringControlRollout "Spring Control" ( spinner spn_Mass "Height" range:[0,2000,500] type:#float spinner spn_Drag "Height" range:[0,10,2] type:#float on spn_Mass changed val do $'Point001'.position.controller.setMass val on spn_Drag changed val do $'Point001'.position.controller.setDrag val ) ) CustAttributes.add $.modifiers[1] SPRING_Control_Custom_attribute" Quote Share this post Link to post Share on other sites
Nicolas Caplat 2757 Report post Posted May 28, 2020 Salut, Je ne suis pas devant mon PC, ça va être compliqué d'être précis, mais dans l'idée il faudrait peut-être que la valeur par défaut de ton spinner corresponde à la valeur de ton contrôleur non ? Il y a peut-être des variables getMass et getVal ? Sinon, tu as pensé aux Wire Parameters ? Quote Share this post Link to post Share on other sites
Balboza 0 Report post Posted May 28, 2020 Coucou Nicolas, Ouais j'ai pensé aux Wire Parameters mais la valeur du Mass et du Drag du spring n'est pas modifiable par ce biais malheureusement. Et ouais je pense que tu suggères la bonne solution mais pour la réalisation , je n'ai aucune idée de la façon de faire. merci Quote Share this post Link to post Share on other sites
Nicolas Caplat 2757 Report post Posted May 29, 2020 Bonjour @Balboza, Alors, je vais tenter, pas ouvert MXS depuis des mois ... au risque de me faire chambrer par @SugaR On pourrait tenter un truc dans ce genre: "SPRING_Control_Custom_attribute = attributes custom_Attributes ( rollout SpringControlRollout "Spring Control" ( local MyMass = $'Point001'.position.controller.getMass -- je ne connais pas la syntaxe exacte pour ce contrôleur, à vérifier local MyDrag = $'Point001'.position.controller.getDrag -- je ne connais pas la syntaxe exacte pour ce contrôleur, à vérifier spinner spn_Mass "Height" range:[0,2000,MyMass] type:#float -- on injecte la variable définie précédemment en tant que valeur par défaut du spinner spinner spn_Drag "Height" range:[0,10,MyDrag] type:#float -- on injecte la variable définie précédemment en tant que valeur par défaut du spinner on spn_Mass changed val do $'Point001'.position.controller.setMass val on spn_Drag changed val do $'Point001'.position.controller.setDrag val ) ) CustAttributes.add $.modifiers[1] SPRING_Control_Custom_attribute" Quote Share this post Link to post Share on other sites
SugaR 635 Report post Posted May 29, 2020 Si je comprend bien, à chaque fois que tu sélectionnes ton spring, la valeur affiché du spinner dans le control panel est celle par default ? Si c'est le cas et de tête (je n'ai pas touché à tout ça depuis, pfioouuuu... ? ), @Nicolas Caplat est sur la bonne voie, il faut que tu rajoutes un truc dans ce genre dans la définition de ton rollout: rollout SpringControlRollout "Spring Control" ( spinner spn_Mass "Height" range:[0,2000,500] type:#float spinner spn_Drag "Height" range:[0,10,2] type:#float on SpringControlRollout open do ( spn_Mass.value = $.position.controller.getMass -- je ne connais pas la syntaxe exacte pour ce contrôleur, à vérifier spn_Drag .value = $.position.controller.getDrag -- je ne connais pas la syntaxe exacte pour ce contrôleur, à vérifier ) on spn_Mass changed val do $.position.controller.setMass val on spn_Drag changed val do $.position.controller.setDrag val ) Au passage, je te conseille de lire la doc sur Scripted Plugins ansi que sur Scripted Utilities and Rollouts d'ailleurs, je constate que tu n'a pas de parameters dans ton custom attributes, c'est plutôt important car c'est ce qui permet de rajouter tes propres parametres à un objet, quelque chose du genre: $.myParameter01 $.myParameter02 etc..., le tout link justement avec l'ui dans le rollout, et qui te permet de modifier ces valeurs ailleurs. Pas forcement necessaire en fonction de ce que tu veux faire mais généralement utile. Sinon je te constellerais aussi peut-être de démarrer par quelque chose de plus simple que les custom attributes et les animations controler, qui sont de réel plaie a dev... N'hésite pas à partager une simple scène de test avec les scripts en question si tu veux que je regarde ça plus en détails 1 Nicolas Caplat reacted to this Quote Share this post Link to post Share on other sites
Balboza 0 Report post Posted May 30, 2020 T'es un boss Nicolas!!! Merci beaucoup , j'ai passé deux soirs de suite sans succès!! Et là hop, tu me débloques ! la syntaxe exacte est " local MyMass = $'Point001'.position.controller.getMass() local MyDrag = $'Point001'.position.controller.getDrag()" Et c'est nickel , encore merci Quote Share this post Link to post Share on other sites
Balboza 0 Report post Posted May 30, 2020 Merci pour ta réponse SugaR! J'ai réussi (enfin Nicolas plutot ^^) avec ce script : " SPRING_Control_Custom_attribute = attributes custom_Attributes ( rollout SpringControlRollout "Spring Control" ( local MyMass = $'Point001'.position.controller.getMass() local MyDrag = $'Point001'.position.controller.getDrag() spinner spn_Mass "Mass" range:[0,2000,MyMass] type:#float spinner spn_Drag "Drag" range:[0,10,MyDrag] type:#float on spn_Mass changed val do $'Point001'.position.controller.setMass val on spn_Drag changed val do $'Point001'.position.controller.setDrag val ) ) CustAttributes.add $.modifiers[1] SPRING_Control_Custom_attribute " Je ne sais pas si le tiens est mieux mais en l'état ça fonctionne Merci a vous deux Le but c'est de contrôler la mass et la drag du spring qui agit sur 6 objets en passant par un seul contrôleur. Je vous ai fait un envoie avec le fichier de test et le spring et un screen du perso si vous etes curieux du contexte. https://we.tl/t-5dMMMnxmea Quote Share this post Link to post Share on other sites
SugaR 635 Report post Posted May 30, 2020 Quelle version de 3ds max ? Quote Share this post Link to post Share on other sites
Balboza 0 Report post Posted May 30, 2020 2021, ok je vais faire une save avec une version moins récente mdr J'ai une nouvelle erreur : " SPRING_Control_Custom_attribute = attributes custom_Attributes ( rollout SpringControlRollout "Spring Control" ( local MyMass = $'PtDrv_OZO_R_Spring_earA01'.position.controller[1].getMass() local MyDrag = $'PtDrv_OZO_R_Spring_earA01'.position.controller[1].getDrag() spinner spn_Mass "Mass" range:[0,2000,MyMass] type:#float spinner spn_Drag "Drag" range:[0,10,MyDrag] type:#float on spn_Mass changed val do $'PtDrv_OZO_R_Spring_earA01'.position.controller[1].setMass val on spn_Mass changed val do $'PtDrv_OZO_R_Spring_earB01'.position.controller[1].setMass val on spn_Drag changed val do $'PtDrv_OZO_R_Spring_earA01'.position.controller[1].setDrag val on spn_Drag changed val do $'PtDrv_OZO_R_Spring_earB01'.position.controller[1].setDrag val ) ) CustAttributes.add $.modifiers[1] SPRING_Control_Custom_attribute" Lorsque je mets plusieurs objets pour que leur spring soit affecté par le controleur, celui ci ne le change que pour un seul... Dans le cas présent sur le "PtDrv_OZO_R_Spring_earA01" et non le earB01 Sachant qu'il y a 12 objets à faire rentrer dans le script... ^^' Y a t'il quelque chose de particulier à faire lorsque l'on veut changer plusieurs chose à la fois? Nomemclature ou syntax? Merci , j'abandonne pour ce soir, dodo! (les enfants ne dormiront pas demain matin ! XD) https://we.tl/t-D1BSOOVXPq la version test en max2018 (si vous voulez la version pas test du singe, je l'envoie par mail perso seulement :)) Quote Share this post Link to post Share on other sites
Nicolas Caplat 2757 Report post Posted May 30, 2020 Ah bah oui logique cette " erreur" Je pense que tu dois construire ton script de façon un peu différente, avec un loop utilisant "for ..... do" . Regarde la doc MXS pour plus d'infos... je n'ai malheureusement pas du tout de temps ce week-end edit: je vais essayer de te montrer d'ici ce soir Quote Share this post Link to post Share on other sites
Nicolas Caplat 2757 Report post Posted May 30, 2020 Bon, pas le temps de tester, fait vraiment à l'arrache ... j'espère que ça fonctionnera. Il y a des choses à ajuster, mais au moins je pense que le principe est correct SPRING_Control_Custom_attribute = attributes custom_Attributes ( rollout SpringControlRollout "Spring Control" ( myObjs = selection as array --collecte les objets sélectionnés dans un array. On peut aussi utiliser des objets de la scène selon leur préfixe, suffixe, etc selon les besoins local MyMass = myObjs[1].position.controller[1].getMass() --stocke la valeur de Mass du contrôleur du premier objet sélectionné local MyDrag = myObjs[1].position.controller[1].getDrag() --stocke la valeur de Drag du contrôleur du premier objet sélectionné spinner spn_Mass "Mass" range:[0,2000,MyMass] type:#float spinner spn_Drag "Drag" range:[0,10,MyDrag] type:#float on spn_Mass changed val do ( for obj in myObjs do --loop sur les objets stockés dans l'array myObjs, ici ce sont les objets sélectionnés ( obj.position.controller[1].setMass val ) ) on spn_Drag changed val do ( for obj in myObjs do --loop sur les objets stockés dans l'array myObjs, ici ce sont les objets sélectionnés ( obj.position.controller[1].setDrag val ) ) ) ) CustAttributes.add $.modifiers[1] SPRING_Control_Custom_attribute" Quote Share this post Link to post Share on other sites
SugaR 635 Report post Posted May 30, 2020 @Nicolas Caplat A première vue c'est un poil plus complexe que ça pour myObjs = selection as array Le problème ici, c'est que tu veux choper la selection actuelle, hors la selection actuelle doit être le contrôler principal et pas les objets à modifier, à cause de: CustAttributes.add $.modifiers[1] SPRING_Control_Custom_attribute" donc ce qu'il va se passer ici, c'est que tu va stocker dans ton array 'myObjs' l'objet sur lequel tu ajoutes le custom attrib il faut donc changer l'une des deux lignes de codes dans ce cas, soit hard coder la manière dont tu récupères 'myObjs' (en utilisant par exemple les noms des objets), soit hard coder l'objet sur lequel tu veux ajouter le custom attrib. Et à mon avis aucune des deux méthodes d'ailleurs n'est à conseiller, le hard coding étant à bannir . Imagine un simple changement de nom, et faut reprendre le script, la misère... Pour ce genre de cas, ce qu'il vaut mieux faire à mon avis, c'est avoir dans la def du custom attrib une partie parameters avec soit un '#nodeTab' soit un '#maxObjectTab' SPRING_Control_Custom_attribute = attributes custom_Attributes ( parameters SpringControlParms rollout:SpringControlRollout ( nodeArray type:#nodeTab tabSizeVariable:true tabSize:0 ) rollout SpringControlRollout "Spring Control" (...) ) ou encore mieux en utilisant des weaks references SPRING_Control_Custom_attribute = attributes custom_Attributes ( parameters SpringControlParms rollout:SpringControlRollout ( weakRefArray type:#maxObjectTab tabSizeVariable:true tabSize:0 ) rollout SpringControlRollout "Spring Control" (...) ) et avoir par exemple un bouton en plus dans le rollout pour selectionner et stocker les objets à modifier derrière. Et ajouter au passage les deux paramètre type float pour "Mass" et "Drag", ce qui permet au passage d'accéder à tout ça par d'autre moyen, puisque ca devient de vrai parametre du contrôleur ($.modifiers[1].custom_Attributes.Mass via mxs par exemple), entre autres avantages (retenir la valeur actuelle par exemple). Certes ca complexifie le tout, mais bon... J'ai proposé à @Balboza qu'on regarde ça ensemble quand il aura le temps, je te transmettrais le tout si tu es intéressé 1 Nicolas Caplat reacted to this Quote Share this post Link to post Share on other sites
Nicolas Caplat 2757 Report post Posted May 30, 2020 Et bah j'avais précisé que je l'avais fait à l'arrache, c'est donc on ne peut plus vrai ? Merci @SugaR ! Quote Share this post Link to post Share on other sites