Ich versuche, ein Skript für Maya zu erstellen, die im Wesentlichen schnelle Auswahl Sets als Indizes innerhalb einer Liste macht.Problem beim Erstellen von benutzerdefinierten Schaltflächen in Maya
Ich habe es Speichern und Laden der Informationen mit Schaltflächen, die bereits vorhanden sind, aber ich möchte der Benutzer in der Lage sein, neue Schaltflächen zu generieren, wenn die Standardanzahl von Auswahlsätzen nicht ausreicht.
Ich habe derzeit eine Schaltfläche, die neue Schaltflächen generiert. Wenn nur eine Schaltfläche generiert wird, funktioniert es einwandfrei.
Mein erstes Problem: Wenn Sie eine zweite Schaltfläche generieren, verwendet die erste generierte Schaltfläche dann den gleichen Listenindex wie die zweite generierte Schaltfläche.
z.B. Ich erstelle eine neue Schaltfläche (Schaltfläche 4). Es speichert und lädt die Auswahl ohne Problem. Ich erstelle eine weitere neue Schaltfläche (Schaltfläche 5). Jetzt speichert und lädt Knopf 4, als ob es Knopf 5 wäre, ebenso wie Knopf 5 selbst.
Mein zweites Problem: Wenn Sie bereits eine Auswahl gespeichert haben, können Sie keine neue Schaltfläche erstellen.
Mein Code so weit ist:
import maya.cmds as mc
favsWindowName = 'favsWindow'
numButtons = 4
def favsWindowUI():
if mc.window(favsWindowName, exists=True):
mc.deleteUI(favsWindowName, wnd=True)
mc.window(favsWindowName, title="Favourites", resizeToFitChildren=True, bgc=(0.20, 0.50, 0.50), s=True)
mc.rowColumnLayout(nr=1)
mc.button("newSet", label="New Selection Set", c=("newButton()"))
mc.rowColumnLayout(nr=2)
mc.button("Load1", label="Load Slot 1", w=200, c=("Load(1)"))
mc.button("Sel1", label="Select Slot 1", w=200, c=("Sel(1)"))
mc.button("Load2", label="Load Slot 2", w=200, c=("Load(2)"))
mc.button("Sel2", label="Select Slot 2", w=200, c=("Sel(2)"))
mc.button("Load3", label="Load Slot 3", w=200, c=("Load(3)"))
mc.button("Sel3", label="Select Slot 3", w=200, c=("Sel(3)"))
mc.showWindow()
selList = []
def Load(favNum):
try:
# if a selection has already been loaded for this button, replace it.
selList[favNum-1] = mc.ls(sl=True)
except IndexError:
try:
#if the previous index exists
if selList[favNum-2] > 0:
# if a selection has not yet been loaded for this button, create it.
selList.append(mc.ls(sl=True))
except IndexError:
# if the previous index doesn't exist 'cause this is the first entry
if favNum == 1:
selList.append(mc.ls(sl=True))
else:
#if the previous index doesn't exist, raise an error.
mc.error("Load the previous selection first!")
def Sel(favNum):
try:
# if a selection has been loaded for this button, select it.
mc.select(selList[favNum-1], r=True)
except IndexError:
# if no selection has been loaded for this button, raise an error.
mc.error("No selection loaded.")
def newButton():
#generate a new button set using the next available index.
global numButtons
mc.button("Load"+str(numButtons), label="Load Slot "+str(numButtons), w=200, c=("Load(numButtons-1)"))
mc.button("Sel"+str(numButtons), label="Select Slot "+str(numButtons), w=200, c=("Sel(numButtons-1)"))
numButtons += 1
favsWindowUI()
Ich bin auch nicht sicher, warum mit den generierten Tasten Wir brauchen Load(numButtons-1)
zu verwenden, wie zum Load(numButtons)
in der NewButton Funktion im Gegensatz ... aber es scheint, das zu tun Trick.