Python maya宏工具

Python maya宏工具,python,scripting,macros,maya,mel,Python,Scripting,Macros,Maya,Mel,看到Photoshop的动作,我很好奇使用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; per

看到Photoshop的动作,我很好奇使用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。但我无法选择所需的信息。

如果我可以建议一种替代方法,请尝试使用命令repeatLast来挖掘您的操作,这并不完美,但比过滤回声要好。不幸的是,Autodesk忽略了该命令的文档,可能是因为他们破坏了该机制,因为它不知道该命令是否为python

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;
您可以使用以下命令挖掘“重复上次”结构:

import maya.cmds as mc

cmdsExecuted = mc.repeatLast(q=1, cl=1)
Maya甚至在每次repeatLast结构更改时都会提供一个事件RecentCommandChanged。这使得它非常适合监视GUI的更改,就像Photoshop一样。repeat last中的列表比从纯Maya echo中获得的列表要简洁得多,并且如果您能够确定某个对象何时是python,何时不是python,那么该列表将保证有效。但大多数情况下,您会记录大多数菜单项,但不会记录工具编辑和重复。它很简单,并且不适用于所有情况,但是一个好的监控工具做任何事情都有点复杂


结合undoInfo的想法,你会得到一个更好的方式来收获东西。至于setAttr,您可以通过在节点上监听直接监视这些更改,但这会变得非常复杂。

如果我可以建议一种替代方法,请尝试使用命令repeatLast来挖掘您的操作,这并不完美,但比过滤回声要好。不幸的是,Autodesk忽略了该命令的文档,可能是因为他们破坏了该机制,因为它不知道该命令是否为python

您可以使用以下命令挖掘“重复上次”结构:

import maya.cmds as mc

cmdsExecuted = mc.repeatLast(q=1, cl=1)
Maya甚至在每次repeatLast结构更改时都会提供一个事件RecentCommandChanged。这使得它非常适合监视GUI的更改,就像Photoshop一样。repeat last中的列表比从纯Maya echo中获得的列表要简洁得多,并且如果您能够确定某个对象何时是python,何时不是python,那么该列表将保证有效。但大多数情况下,您会记录大多数菜单项,但不会记录工具编辑和重复。它很简单,并且不适用于所有情况,但是一个好的监控工具做任何事情都有点复杂


结合undoInfo的想法,你会得到一个更好的方式来收获东西。至于setAttr,您可以通过在节点上侦听直接监视这些更改,但这会变得非常复杂。

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

也许您可以在关闭“全部回显”的情况下,结合使用脚本编辑器日志记录方法,并将撤消队列用作额外记录:
cmds.undoInfo(q=True,printQueue=True)


您可能需要在开始录制时首先清除撤消队列,或者首先运行一些NOOP命令来创建一个“标记”,以了解您在队列中的起始位置。像“setAttr”这样的操作会留下一个空白的命名条目,但您可以查看脚本编辑器记录以了解其间缺少了什么。如果将这两种方法结合起来,您可能会得到一个更精确的宏。

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

也许您可以在关闭“全部回显”的情况下,结合使用脚本编辑器日志记录方法,并将撤消队列用作额外记录:
cmds.undoInfo(q=True,printQueue=True)

您可能需要在开始录制时首先清除撤消队列,或者首先运行一些NOOP命令来创建一个“标记”,以了解您在队列中的起始位置。像“setAttr”这样的操作会留下一个空白的命名条目,但您可以查看脚本编辑器记录以了解其间缺少了什么。也许把这两种方法结合起来,你会得到一个更精确的宏。

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))
如果我能帮上什么忙,我会很高兴的

再见

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))
如果我能帮上什么忙,我会很高兴的


再见

嗯,你需要分类的信息量非常重要。根据要忽略的命令数量,您可能需要为脚本编辑器中编写的每个命令编写一个专用的“处理”。。。我真的很想看看这里是否有人能找到解决方案。嗯,你需要排序的信息量非常重要。根据要忽略的命令数量,您可能需要为脚本编辑器中编写的每个命令编写一个专用的“处理”。。。我真的很想看看这里是否有人能找到解决办法。为迟来的回复道歉。谢谢你,Joojaa。为迟来的回复道歉。谢谢你,Joojaa。为迟来的回复道歉。谢谢你,Jdi。为迟来的回复道歉。谢谢你,Jdi。你能为OP解释一下为什么这会起作用吗?你能为OP解释一下为什么这会起作用吗?