2015-07-23 1 views
0

J'ai la configuration suivante: J'ai une sphère qui a un modificateur morpher. Ce modificateur morpher a une certaine quantité de canaux remplis de cibles de morphes, ou sous-animations. Maintenant, je veux ajouter un contrôleur à chacun de ces sous -animations, plus précisément un contrôleur avec un script flottant. J'ai l'extrait de code qui devrait fonctionner mais quand je vais à l'éditeur de courbe, les canaux de morphing/sous-animations n'ont pas changé de contrôleur, pas plus que la valeur de leur contrôleur n'a changé.3dsmax python ajouter un script flottant aux sous-animations

import MaxPlus 
target = MaxPlus.INode.GetINodeByName('Sphere001') 
#Retrieve the morpher modifier 
mod = target.GetModifier(0) 
#ID of a float script controller 
id = MaxPlus.Class_ID(1233584870,1911625032) 
#Create float controller 
float_co = MaxPlus.Factory.CreateFloatController(id) 
#Retrieve the first morph channel/sub animation 
sub = mod.GetSubAnim(1) 
#Controller is assigned to the sub animation 
sub.AssignController(float_co,1) 
#Basic test which assigns 20 to the sub animation 
float_co.ParameterBlock.Script.Value = '20' 

Quand j'ajouter une valeur incorrecte au script, par exemple:

float_co.ParameterBlock.Script.Value = '=20' 

Je reçois une erreur et la fenêtre habituelle lorsque vous ajoutez manuellement un contrôleur à un objet ou d'un nœud. Cependant la chose étrange est celle en haut de la fenêtre: le nom de l'objet auquel elle est connectée, ne montre pas. Voir la figure pour la clarification: enter image description here

Quelqu'un peut-il me dire ce que je fais mal? Je vous remercie!

Répondre

0

Je l'ai résolu en utilisant la voie laide:

import MaxPlus 
test = MaxPlus.FPValue() 
success = MaxPlus.Core.EvalMAXScript(string_with_command,test) 

C'est utilisé deux fois: d'abord pour créer le contrôleur de script flotteur et une deuxième fois pour ajouter le script au contrôleur. Soyez prudent si quelqu'un veut essayer ceci, le script pour le contrôleur doit être une chaîne. Ne pas utiliser

x as string 

avec l'expression que vous souhaitez utiliser en tant que script pour le contrôleur de script flottant depuis maxscript évaluera x sur les délais que vous êtes en 3ds max et convertir cette valeur en une chaîne. Cette valeur sera utilisée comme script pour tous les délais qui ne sont clairement pas ce que vous voulez. Une petite entaille j'ai utilisé était:

script_value_example = '"amax #(0, ($sphere.position.x - cube.position.y))"' 

Ceci est encore une chaîne pour python et maxscript verra le « » et va l'interpréter comme une chaîne. L'inverse ne fonctionne pas, maxscript n'interprète pas '' comme une chaîne de caractères. Peut-être que cela aidera quelqu'un dans le futur. Aussi, si quelqu'un connaît la bonne façon de le faire en utilisant le code dans la question, s'il vous plaît laissez une réponse, je suis curieux de savoir.