2

Photoshop Action を見て、Python を使って 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 など、さまざまなフラグの組み合わせを使用してみました。しかし、必要な情報を選択できませんでした。

4

3 に答える 3

0

サセッセ

私はあなたの問題を解決するために挑戦しました。

#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))

少しでも誰かの役に立てれば幸いです。

さよなら!

于 2015-01-17T19:41:06.433 に答える
0

別の方法を提案する場合は、操作をマイニングするためにコマンドrepeatLastを使用してみてください。完全ではありませんが、エコーのフィルタリングに勝ります。残念ながら、オートデスクはコマンドのドキュメントを省略しました。おそらく、コマンドが python であるかどうかがわからないため、メカニズムが壊れたためです。

以下を使用して、最後の繰り返し構造をマイニングできます。

import maya.cmds as mc

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

Maya は、repeatLast構造が変更されるたびに、 RecentCommandChangedイベントを提供してくれます。これは、Photoshop のような GUI の変更を監視するのに理想的です。最後の繰り返しのリストは、純粋な Maya エコーから得られるものよりもはるかに簡潔であり、いつ Python で何がそうでないかを判断できれば、機能することが保証されています。ただし、ほとんどの場合、ほとんどのメニュー項目を記録しますが、ツールの編集や繰り返しは記録しません。それは簡単で、すべての状況で機能するわけではありませんが、すべてを行う優れた監視ツールを作成するには少し複雑です.

これを undoInfo のアイデアと組み合わせると、物事を収穫するためのはるかに優れた方法が得られます。setAttr に関しては、ノードをリッスンすることでこれらの変更を直接監視できますが、これは非常に複雑になります。

于 2012-04-16T17:13:20.977 に答える
0

記録から表示されている出力は、スクリプト エディターで [すべてのコマンドをエコー] が有効になっているように見えます。アクションを記録するために必要ですか?「Echo All」は、最初のコマンドから実行されるサブコマンドを常に提供します。これは通常、元のコマンドを呼び出すのに冗長です。

おそらく、スクリプト エディターのロギング アプローチを組み合わせて、"Echo All" をオフにし、元に戻すキューを追加の記録として使用することもできます。cmds.undoInfo(q=True, printQueue=True)
記録を開始するときに最初に元に戻すキューをクリアするか、最初に NOOP コマンドを実行する必要があります。キューのどこから開始するかを知るための「マーカー」を作成します。「setAttr」のような操作では、空白の名前付きエントリが残りますが、スクリプト エディタの記録を見て、その間に何が欠けているかを知ることができます。この 2 つを組み合わせると、より正確なマクロが得られるかもしれません。

于 2012-04-16T18:06:13.593 に答える