Créer un script qui parcourra 3 états différents dans Maya Python
Je souhaite créer un script dans Maya en utilisant Python et le lier sur un raccourci clavier. Chaque fois que j'exécute le script, je veux parcourir 3 états, cube / cylindre / plan. Ainsi, par exemple, la première fois que j'exécute le script, il créera un cube, la deuxième fois supprimera le cube et créera un cylindre la troisième fois supprimera le cylindre et créera un plan., La quatrième fois supprimera le plan et créera un cube, etc. cela se produit jusqu'à ce que l'utilisateur décide de la primitive qu'il veut et termine la boucle. J'ai essayé d'utiliser la boucle while mais j'ai lamentablement échoué.
J'ai fini avec ceci:
def createCube():
return "cube"
def createCylinder():
return "cylinder"
def createPlane():
return "plane"
def numbers_to_primitives(argument):
switcher = {
1: createCube,
2: createCylinder,
3: createPlane,
}
# Get the function from switcher dictionary
func = switcher.get(argument, lambda: "Invalid primitive")
# Execute the function
print func()
numbers_to_primitives(2)
Cela semble fonctionner. Mais je prévois des problèmes lors de l'exécution de la commande encore et encore, car je crée de plus en plus de primitives au lieu de remplacer celles existantes. Aurait-il également besoin de créer un bouton bascule pour parcourir ces derniers?
Réponses
Vous avez plusieurs problèmes de questions à résoudre. Tout d'abord, vous voulez utiliser le script dans une touche de raccourci, ce qui signifie qu'il devrait produire un résultat différent à chaque fois que vous appelez numbers_to_primitive () sans aucun argument. Vous devez donc d'abord enregistrer et lire l'état actuel. Vous pouvez procéder de plusieurs manières. Si vous n'avez besoin que de l'état dans la session maya actuelle, vous pouvez utiliser une variable globale comme celle-ci:
state = 0
def box():
print "Box"
def cyl():
print "Cylinder"
def sph():
print "Sphere"
def creator():
global state
print "current state", state
state = state + 1
if state > 2:
state = 0
creator()
De cette façon, la variable d'état parcourt les valeurs 0-2. Vous voulez maintenant créer une géométrie et la remplacer dès que la fonction est à nouveau appelée. Cela fonctionne de manière très similaire: enregistrez l'objet actuel et supprimez-le dès que la fonction est appelée à nouveau comme ceci:
import maya.cmds as cmds
state = 0
transformName = "" #again a global variable
def box():
print "Box"
global transformName #to use the global variable you have do use "global" keyword
transformName, shape = cmds.polyCube()
def cyl():
print "Cylinder"
global transformName
transformName, shape = cmds.polyCylinder()
def sph():
print "Sphere"
global transformName
transformName, shape = cmds.polySphere()
def creator():
global state
funcs = [box, cyl, sph]
print "current state", state
print "TransformName", transformName
if cmds.objExists(transformName):
cmds.delete(transformName)
funcs[state]()
state = state + 1
if state > 2:
state = 0
Vous pouvez maintenant appeler la fonction creator () et à chaque fois, elle supprimera l'ancien objet et en créera un nouveau.