2017-10-12 7 views
1

J'ai un script qui modifie l'onglet des calques de rendu Maya. Je me demandais s'il y avait un moyen d'avoir l'interface flottante mise à jour de façon dynamique si l'utilisateur modifie les états de l'onglet de rendu et d'autres choses en utilisant l'interface intégrée de Maya. Par exemple, les couches de rendu générées dans l'onglet de script sont mises à jour si l'utilisateur modifie les couches de rendu dans l'interface intégrée.Y at-il un moyen d'avoir une mise à jour de Maya python gui avec des changements de paramètres dans le reste de Maya?

Répondre

1

Ceci est faisable mais pas trivial.

Vous utiliseriez un scriptJob pour surveiller les modifications et mettre à jour votre interface graphique en conséquence.

Certains types de modifications sont exposés directement - par exemple, vous pouvez réagir à l'utilisateur en modifiant la plage de lecture avec un scriptJob qui réagit à un événement playbackRangeChanged. La page docs liée ci-dessus inclut la liste des événements de modification pouvant être écoutés. Si vous surveillez les changements d'attributs, vous pouvez utiliser le type scriptJob attributeChange pour exécuter un script lorsqu'un attribut particulier est modifié (par l'interface utilisateur ou par tout autre élément). Par exemple, cela affichera un message chaque fois que la modification de la longueur focale de la caméra Persp:

import maya.cmds as cmds 

def test(): 
    print "focal length:", cmds.getAttr('perspShape.focalLength') 

cmds.scriptJob(ac = ("perspShape.focalLength", test)) 

D'autres types de changements (la majorité d'entre eux) ne sont pas disponibles comme des événements prédéfinis. Vous pouvez créer vos propres événements en utilisant le condition command, mais vous devrez écrire le code qui détecte les changements. Beaucoup de gens simplifient les choses en utilisant un script qui s'exécute chaque fois que Maya est inactive et cherche des changements. Cela fonctionne, mais vous devez l'écrire attentivement car un script complexe peut ralentir beaucoup Maya - il s'exécutera chaque fois que l'utilisateur n'interagira pas avec l'interface utilisateur.