2017-08-26 1 views
0

En ce moment j'essaye de faire un script qui change l'orientation du pivot dans Maya. (Cette fonctionnalité est déjà dans la Maya Modeling Toolbox mais je veux en faire une version personnalisée et simplifiée) Cependant, j'ai des problèmes avec ma fonction. Voici le code:Maya-Python manipMoveContext

cmds.optionMenu(label = 'Pivot', changeCommand = pivotOrient) 

cmds.menuItem(label='Object',) 
cmds.menuItem(label='World') 
cmds.menuItem(label='Component') 
cmds.menuItem(label='Normal') 


def pivotOrient(p): 
    if p == 'Object': 
     cmds.manipMoveContext(e= True, mode= 0) 
    elif p == 'World': 
     cmds.manipMoveContext(e= True, mode= 2) 
    elif p == 'Component': 
     cmds.manipMoveContext(e= True, mode= 10) 
    else: 
     cmds.manipMoveContext(e= True, mode= 3) 

Il dit "# Erreur: RuntimeError: fichier ligne 40: Aucun nom d'objet spécifié #."

Pouvez-vous me aider avec ce problème? Je suis désolé, je suis encore un débutant à l'écriture Python et Maya. Merci d'avance.

+0

vous voudrez peut-être changer le titre de votre question, car l'erreur que vous obtenez est liée à la comme vous utilisez la commande 'manipMoveContext'; rien à voir avec les listes déroulantes :) – mapofemergence

Répondre

2

La commande manipMoveContext requiert le premier argument pour spécifier le contexte, en mode edit ou query (voir: http://help.autodesk.com/cloudhelp/2016/ENU/Maya-Tech-Docs/CommandsPython/manipMoveContext.html#hExamples).

Dans le scénario de cas le plus simple, vous pouvez utiliser 'Move' comme premier argument pour vos appels, en tant que tels: cmds.manipMoveContext('Move', e=True, mode=0)

Mais pour des scénarios moins futiles (ou même simplement de généraliser votre code et de le rendre plus robuste) vous devez comprendre comment les manipulateurs et les contextes fonctionnent et ajouter une certaine logique à votre fonction pivotOrient.

Le simple fait comme une allusion à ce que je veux dire, vous pouvez consulter ceux-ci:

Aussi, essayez de jouer avec ceci:

curctx = cmds.currentCtx() 
print curctx 
if cmds.superCtx(curctx, ex=1): 
    ctx = cmds.superCtx(curctx, q=1) 
    typ = cmds.contextInfo(ctx, q=1, c=1) 
    print ctx, typ 
+0

Ce doc en fait trop vieux;) http://help.autodesk.com/cloudhelp/2016/ENU/Maya-Tech-Docs/CommandsPython/manipMoveContext.html – Achayan

+0

vous avez raison @ Achayan, je viens d'éditer la réponse. J'avoue que je vérifie rarement l'édition Maya, en regardant les docs ... pour ce genre de choses, ça n'a pas changé depuis un moment ... :) – mapofemergence