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

您从记录中显示的输出看起来像是在脚本编辑器中启用了“Echo All Commands”。您确定这对于记录动作是必要的吗?“Echo All”总是为您提供从初始命令执行的子命令,这些子命令通常对于调用原始命令是多余的。

也许您可以结合您的脚本编辑器日志记录方法,关闭“Echo All”,并将撤消队列用作额外记录:cmds.undoInfo(q=True, printQueue=True)
您必须在开始录制时首先清除撤消队列,或者首先运行一些 NOOP 命令这会创建一个“标记”来了解您在队列中的开始位置。像“setAttr”这样的操作会留下一个空白的命名条目,但您可以查看您的脚本编辑器记录以了解其中缺少的内容。也许将这两者结合起来,您会得到更准确的宏。

于 2012-04-16T18:06:13.593 回答
0

如果我可以提出替代方案,请尝试使用命令repeatLast来挖掘您的操作,它并不完美,但优于过滤回声。不幸的是,Autodesk 省略了命令的文档,大概是因为他们破坏了机制,因为它不知道命令是否是 python。

您可以使用以下方法来挖掘重复最后一个结构:

import maya.cmds as mc

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

Maya 甚至在每次repeatLast结构发生变化时都会提供一个事件RecentCommandChanged 。这使得它非常适合监视 GUI 的更改,就像 Photoshop 一样。repeat last 中的列表比您从纯 Maya 回声中获得的列表要简洁得多,并且如果您能弄清楚什么时候是 python 什么时候不是,那么保证工作。但大多数情况下,您会记录大多数菜单项,但不会记录工具编辑和重复。它很简单,并不适用于所有情况,但是一个可以做所有事情的好的监控工具制作起来有点复杂。

将此与 undoInfo 想法结合起来,您将获得一种更好的收获方式。至于 setAttr,您可以通过监听节点直接监控这些更改,但这很快就会变得复杂。

于 2012-04-16T17:13:20.977 回答