2012-03-08 66 views
2

看到Photoshop Action時,我很好奇使用python爲Maya開發一個宏工具。所以我開始研究它。maya的宏工具

這裏是我的樣品,

path = "C:/Desktop/file.txt" 
a = open(path, 'w') 
#cmds.scriptEditorInfo(ch = True, chf = True) 
cmds.scriptEditorInfo(hfn=path, wh=True) 
a.close() 

我能夠記錄所有的事情。這是我記錄的信息。

CreatePolygonPyramid; 
performPolyPrimitive Pyramid 0; 
setToolTo CreatePolyPyramidCtx; 
optionVar -query toolMessageVisible; 
optionVar -query toolMessageTime; 
optionVar -query toolMessageVerticalOffset; 
optionVar -query toolMessageHorizontalOffset; 
headsUpMessage -time 0.7 -verticalOffset -40 -horizontalOffset 0 -viewport 1 -   uvTextureEditor 0"Drag on the grid."; 
changeToolIcon; 
polyPyramid -ch on -o on -w 10.727425 -cuv 3 ; 
escapeCurrentTool; 
autoUpdateAttrEd; 
updateAnimLayerEditor("AnimLayerTab"); 
statusLineUpdateInputField; 
changeToolIcon; 

問題是我無法分類的東西(只記錄所需的東西)。它只記錄所有的信息。我嘗試使用像se,sw,si,sr這樣的各種標誌的組合。但我無法選擇所需的信息。

+0

mmmh,您需要排序的信息量非常重要。根據你想要忽略的命令的數量,你可能需要在腳本編輯器中編寫每個命令來編寫一個專門的「處理」......我真的很感興趣,看看這裏有沒有人可以有解決方案。 – Korchkidu 2012-03-09 10:03:48

回答

0

如果我可能會建議一個替代方案,請嘗試使用命令repeatLast挖掘您的操作,但它並不完美,但會跳過篩選回聲。不幸的是,Autodesk忽略了該命令的文檔,可能是因爲他們打破了該機制,因爲它不知道該命令是否是python。

您可以使用下面挖掘重複過去的結構:

import maya.cmds as mc 

cmdsExecuted = mc.repeatLast(q=1, cl=1) 

瑪雅甚至親切地提供RecentCommandChanged每次repeatLast結構的變化一個事件。這使得它非常適合像Photoshop一樣監視GUI的變化。重複列表中的列表要比純粹的Maya回顯要簡單得多,並且如果能夠確定什麼時候是python,哪些不是,那麼可以保證工作。但大多數情況下,您會記錄大多數菜單項,但不會記錄工具編輯和重複項。它很容易,並不適用於所有情況,但是一個好的監控工具可以完成所有工作。

將此與撤消信息的想法相結合,你會得到一個更好的方式來收穫的東西。至於setAttr,您可以通過在節點上偵聽來直接監視這些更改,但這會變得非常複雜。

+0

爲遲到的迴應道歉。謝謝Joojaa。 – sasecse 2012-06-12 19:25:27

0

從錄製中顯示的輸出看起來像在腳本編輯器中啓用了「Echo All Commands」。你確定這是記錄行爲的必要條件嗎? 「全部回聲」總是爲您提供從初始命令執行的子命令,這通常對於調用原始命令而言是多餘的。

也許你可以結合你的腳本編輯器記錄的方式,以「回聲全部」關閉,並且還使用undo隊列作爲一個額外的記錄:cmds.undoInfo(q=True, printQueue=True)
你要麼必須先清除撤銷隊列中,當你開始錄製,或者先運行一些NOOP命令來創建一個「標記」,以知道你在隊列中的起始位置。像「setAttr」這樣的操作會留下一個空白的命名條目,但您可以查看腳本編輯器記錄以瞭解其中缺少的內容。也許這兩個組合,你會得到一個更準確的宏。

+0

爲遲到的反應道歉。謝謝Jdi。 – sasecse 2012-06-12 19:26:00

0

sasecse

我面臨的挑戰是解決你的問題。

#save your old settings 
old_echoAllLines = cmds.optionVar(q='echoAllLines') 
old_showLineNumbersIsOn = cmds.optionVar(q='showLineNumbersIsOn') 
old_stackTraceIsOn = cmds.optionVar(q='stackTraceIsOn') 
old_commandReportercmdScrollFieldReporter1SuppressResults = cmds.optionVar(q='commandReportercmdScrollFieldReporter1SuppressResults') 
old_commandReportercmdScrollFieldReporter1SuppressInfo = cmds.optionVar(q='commandReportercmdScrollFieldReporter1SuppressInfo') 
old_commandReportercmdScrollFieldReporter1SuppressWarnings = cmds.optionVar(q='commandReportercmdScrollFieldReporter1SuppressWarnings') 
old_commandReportercmdScrollFieldReporter1SuppressErrors = cmds.optionVar(q='commandReportercmdScrollFieldReporter1SuppressErrors') 
old_commandReportercmdScrollFieldReporter1SuppressStackTrace = cmds.optionVar(q='commandReportercmdScrollFieldReporter1SuppressStackTrace') 

#set environment 
cmds.optionVar(iv=('echoAllLines', 0)) 
cmds.optionVar(iv=('showLineNumbersIsOn', 0)) 
cmds.optionVar(iv=('stackTraceIsOn', 0)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressResults', 1)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressInfo', 1)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressWarnings', 1)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressErrors', 1)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressStackTrace', 1)) 

#your sample code 

path = "C:/Desktop/file.txt" 
a = open(path, 'w') 
#cmds.scriptEditorInfo(ch = True, chf = True) 
cmds.scriptEditorInfo(hfn=path, wh=True) 
a.close() 

#reset your settings 
cmds.optionVar(iv=('echoAllLines', old_echoAllLines)) 
cmds.optionVar(iv=('showLineNumbersIsOn', old_showLineNumbersIsOn)) 
cmds.optionVar(iv=('stackTraceIsOn', old_stackTraceIsOn)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressResults', old_commandReportercmdScrollFieldReporter1SuppressResults)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressInfo', old_commandReportercmdScrollFieldReporter1SuppressInfo)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressWarnings', old_commandReportercmdScrollFieldReporter1SuppressWarnings)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressErrors', old_commandReportercmdScrollFieldReporter1SuppressErrors)) 
cmds.optionVar(iv=('commandReportercmdScrollFieldReporter1SuppressStackTrace', old_commandReportercmdScrollFieldReporter1SuppressStackTrace)) 

如果我能幫助別人,我會很高興。

再見!

+2

你也許可以解釋爲什麼OP會起作用嗎? – 2015-01-17 23:41:04