在看到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等各种标志的组合。但是我无法选择所需的信息。
答案 0 :(得分:0)
如果我可以提出替代方案,请尝试使用命令 repeatLast 来挖掘您的操作,但这并不完美,但可以过滤回声。不幸的是,Autodesk省略了命令的文档,大概是因为它们破坏了机制,因为它不知道命令是否是python。
您可以使用以下方法挖掘重复的最后一个结构:
import maya.cmds as mc
cmdsExecuted = mc.repeatLast(q=1, cl=1)
每次 repeatLast 结构更改时,Maya都会提供 RecentCommandChanged 事件。这使得它非常适合像Photoshop一样监控GUI的变化。重复最后的列表比纯粹的Maya回声更简洁,并且如果你能弄清楚什么是python而不是什么,保证可以工作。但大多数情况下,您会记录大多数菜单项,但不记录工具编辑和重复。它很容易,并不适用于所有情况,但是一个好的监控工具可以完成所有事情,但是它有点令人费解。
将此与undoInfo理念相结合,您将获得更好的收获方式。对于setAttr,您可以通过监听节点直接监视这些更改,但这很快就会变得复杂。
答案 1 :(得分:0)
您从录制中显示的输出看起来就像您在脚本编辑器中启用了“Echo All Commands”。你确定这是记录行动所必需的吗? “Echo All”总是为您提供从初始命令执行的子命令,这些子命令通常是调用原始命令的冗余。
也许您可以结合脚本编辑器日志记录方法,关闭“Echo All”,并使用撤消队列作为额外记录:cmds.undoInfo(q=True, printQueue=True)
您可能必须在开始录制时首先清除撤消队列,或者首先运行一些创建“标记”的NOOP命令以了解您在队列中的起始位置。像“setAttr”这样的操作会留下一个空白的命名条目,但是您可以查看脚本编辑器记录以了解它们之间缺少的内容。也许将这两个结合起来,你会得到一个更准确的宏。
答案 2 :(得分: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))
如果我能帮助某人,我会很高兴。
再见!