2012-03-08 2 views
2

Увидев Photoshop Action, мне интересно разработать макро-инструмент для майя с помощью 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. Но я не мог выбрать необходимую информацию.

+0

mmmh, объем информации, необходимой для сортировки, очень важен. В зависимости от того, сколько команд вы хотите игнорировать, вам, возможно, придется написать один выделенный «лечение» для каждой команды, написанной в редакторе сценариев ... Мне действительно интересно узнать, может ли кто-нибудь здесь иметь решение. – Korchkidu

ответ

0

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

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

import maya.cmds as mc 

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

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

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

+0

Извините за поздний ответ. Спасибо, Джоджа. – sasecse

0

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

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

+0

Извините за поздний ответ. Спасибо, Jdi. – sasecse

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

Буду рад, если я могу кому-то помочь.

до свидания!

+2

Можете ли вы объяснить, почему это будет работать, пожалуйста? –