Макро инструмент для майя - PullRequest
2 голосов
/ 08 марта 2012

Увидев Photoshop Action, мне любопытно разработать макро инструмент для Maya с использованием python. И я начал работать над этим.

Вот мой образец,

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. Но я не смог подобрать необходимую информацию.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2012

Вывод, который вы показываете из записи, выглядит так, как будто в редакторе сценариев включена команда «Echo All Commands».Вы уверены, что это необходимо для записи действий?«Echo All» всегда дает вам подкоманды, которые выполняются из исходной команды, которые обычно избыточны для вызова исходной команды.

Возможно, вы можете объединить свой подход к ведению журнала редактора скриптов с «Echo All»выключен, а также использовать очередь отмены в качестве дополнительной записи: cmds.undoInfo(q=True, printQueue=True)
Вы должны либо сначала очистить очередь отмены, когда начинаете запись, либо сначала выполнить какую-либо команду NOOP, которая создает «маркер», чтобы узнать, гдеВы начинаете в очереди.Операция, подобная setAttr, оставляет пустую именованную запись, но вы сможете просмотреть запись редактора сценариев, чтобы узнать, чего между ними не было.Может быть, с этими двумя вы получите более точный макрос.

0 голосов
/ 17 января 2015

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

Я буду счастлив, если смогу кому-нибудь помочь.

до свидания!

0 голосов
/ 16 апреля 2012

Если я могу предложить альтернативу, попробуйте использовать команду repeatLast для майнинга ваших операций, она не идеальна, но превосходит фильтрацию эха.К сожалению, Autodesk пропустил документацию команды, возможно потому, что они сломали механизм, поскольку он не знает, является ли команда python или нет.

Вы можете использовать следующую команду для извлечения повторной последней структуры:

import maya.cmds as mc

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

Maya даже любезно предоставляет событие RecentCommandChanged каждый раз, когда repeatLast структура изменяется.Это делает его идеальным для мониторинга изменений для графического интерфейса, такого как Photoshop.Повторяющийся последний список гораздо более краткий, чем тот, который вы получили бы из чистого эха майя, и гарантированно сработает, если вы сможете выяснить, когда вещь является питоном, а что нет.Но в основном вы записываете большинство пунктов меню, но не редактируете и не повторяете инструмент.Это просто и не работает для всех ситуаций, но хороший инструмент для мониторинга, который делает все, немного сложен для создания.

Объедините это с идеей undoInfo, и вы получите гораздо лучший способ сбора информации.Что касается setAttr, вы можете отслеживать эти изменения напрямую, прослушивая узлы, но это очень быстро усложняется.

...