TL; DR;
if cmds.window("GE_ui_window", exists=True): #If the window exists
cmds.deleteUI("GE_ui_window") #Delete it
cmds.window("GE_ui_window", title="My custom Graph Editor") #Create your custom win
cmds.frameLayout("GE_ui_frameLayout", p="GE_ui_window", lv=False, bv=False)
if cmds.scriptedPanel("GE_ui_scriptedPanel", exists=True): #If the scriptel panel already exists
cmds.deleteUI("GE_ui_scriptedPanel") #Delete it
cmds.scriptedPanel("GE_ui_scriptedPanel", unParent=True, type="graphEditor")
cmds.scriptedPanel("GE_ui_scriptedPanel", e=True, parent="GE_ui_window|GE_ui_frameLayout") #parent the scripted panel to your frame layout
cmds.showWindow("GE_ui_window")
channelLayout = cmds.formLayout("GE_ui_scriptedPanelOutlineEdForm", query=True, ca=True)[0] #Get the channel box's layout
filterLayout = cmds.formLayout("GE_ui_scriptedPanelOutlineEdForm", query=True, ca=True)[1] #Get the filter's layout
myRowLayout=cmds.rowLayout(numberOfColumns=3, p="GE_ui_scriptedPanelOutlineEdForm") #Create a row layout
cmds.button(label="Café", h=100, p=myRowLayout) #Add some buttons
cmds.button(label="Clope", p=myRowLayout)
cmds.button(label="Caca", p=myRowLayout)
#This will reorder the content of the left formLayout
cmds.formLayout("GE_ui_scriptedPanelOutlineEdForm", edit=True, af=[ \
(channelLayout, "bottom", 0), \
(channelLayout, "right", 0), \
(filterLayout, "top", 0), \
(myRowLayout, "left", 0), \
(myRowLayout, "right", 0)], \
ac=[(myRowLayout, "top", 0, filterLayout), \
(channelLayout, "top", 0, myRowLayout)])
Есть два действительно Полезные вещи, чтобы знать, когда дело доходит до редактирования пользовательского интерфейса Майи.
Флажок History -> Echo all commands
в редакторе скриптов. Это может распечатать много мусора с полезными фрагментами информации внутри.
Вторая вещь - команда whatIs
(Doc).
Эта команда принимает один аргумент типа строки и возвращает строку , указывающей, является ли аргумент встроенным «Команда», и «Мел процедура», и «Сценарий», или переменный. Если это переменная, то также указывается тип переменной. Если аргументом является процедура Mel или файл сценария , путь к файлу, содержащему сценарий или процедуру , включен в возвращаемое значение.
Эта комбинация позволит вам отслеживать, как и где создается редактор графа. Теперь давайте сделаем это.
1: Открыть граф редактор Window -> Animation Editors -> Graph Editor
GraphEditor;
tearOffPanel "Graph Editor" "graphEditor" true;
// Result: graphEditor1Window //
GraphEditor;
это время команда Run, которая выполняет tearOffPanel "Graph Editor" "graphEditor" true;
при вызове. Вот почему он появляется в редакторе скриптов.
2: Запуск whatIs "tearOffPanel";
(MEL)
// Result: Mel procedure found in: C:/Program Files/Autodesk/Maya2014/scripts/startup/tearOffPanel.mel //
С небольшим расследование в этом файле, вы можете сделать вывод, что вы можете создать совершенно новый Graph Editor с помощью команды scriptedPanel
.
3: Создайте свое собственное Graph Panel
scriptedPanel doc показать вам, как создать сценарную панель и включить его в окне. Теперь вы можете создать вам собственный редактор графов с помощью этого:
if cmds.window("GE_ui_window", exists=True):
cmds.deleteUI("GE_ui_window")
cmds.window("GE_ui_window", title="My custom Graph Editor")
cmds.frameLayout("GE_ui_frameLayout", p="GE_ui_window", lv=False, bv=False)
if cmds.scriptedPanel("GE_ui_scriptedPanel", exists=True):
cmds.deleteUI("GE_ui_scriptedPanel")
cmds.scriptedPanel("GE_ui_scriptedPanel", unParent=True, type="graphEditor", label='Sample')
cmds.scriptedPanel("GE_ui_scriptedPanel", e=True, parent="GE_ui_window|GE_ui_frameLayout")
cmds.showWindow("GE_ui_window")
4: Постарайтесь понять, как Graph Editor построен
Этот скрипт выведет иерархии виджетов в виде редактора Graph (создание пользовательский Graph Editor первый):
nbIteration = 0
def getChildren(uiItem, nbIteration):
for childItem in cmds.layout(uiItem, query=True, childArray=True):
try:
print "|___"*nbIteration + childItem
getChildren(uiItem + "|" + childItem, nbIteration+1)
except:
pass
getChildren("GE_ui_window|GE_ui_frameLayout|GE_ui_scriptedPanel", nbIteration)
Кроме того, вы можете проверить в C:\Program Files\Autodesk\Maya2014\scripts\others\graphEditorPanel.mel
, @939: global proc addGraphEditor (string $whichPanel)
Теперь вы можете понять, что многим виджетам не дано никакого имени, а только имя по умолчанию, данное Maya. Следовательно, мы не можем добавлять виджеты и родительские их с использованием полного пути, потому что этот путь будет меняться каждый раз, когда будет создан новый редактор графов.
Пункт мы будем стараться, чтобы полагаться на это GE_ui_scriptedPanelOutlineEdForm
который является formLayout
, содержащий другой formLayout
и paneLayout
.
|___|___GE_ui_scriptedPanelOutlineEdForm
|___|___|___paneLayout123 #layout containing the two channel boxes
|___|___|___|___GE_ui_scriptedPanelOutlineEd
|___|___|___|___GE_ui_scriptedPanelOutlineEdSlave
|___|___|___formLayout276 #Layout containing the "filter part"
|___|___|___|___textField63 #It's text
|___|___|___|___iconTextButton102
5: Создайте кнопки и реорганизовать содержание GE_ui_scriptedPanelOutlineEdForm
channelLayout = cmds.formLayout("GE_ui_scriptedPanelOutlineEdForm", query=True, ca=True)[0] #Get the channel box's layout
filterLayout = cmds.formLayout("GE_ui_scriptedPanelOutlineEdForm", query=True, ca=True)[1] #Get the filter's layout
myRowLayout=cmds.rowLayout(numberOfColumns=3, p="GE_ui_scriptedPanelOutlineEdForm") #Create a row layout
cmds.button(label="Café", h=100, p=myRowLayout) #Add some buttons
cmds.button(label="Clope", p=myRowLayout)
cmds.button(label="Caca", p=myRowLayout)
#This will reorder the content of the left formLayout
cmds.formLayout("GE_ui_scriptedPanelOutlineEdForm", edit=True, af=[ \
(channelLayout, "bottom", 0), \
(channelLayout, "right", 0), \
(filterLayout, "top", 0), \
(myRowLayout, "left", 0), \
(myRowLayout, "right", 0)], \
ac=[(myRowLayout, "top", 0, filterLayout), \
(channelLayout, "top", 0, myRowLayout)])
nice, я не знал о scriptedPanel – DrWeeny
Точно, что я искал, спасибо! Отличное пошаговое руководство. – john