2012-03-08 6 views
2

Photoshop Action을보고 파이썬을 사용하여 마야 매크로 도구를 개발하는 것이 궁금합니다. 그래서 나는 그것에 착수하기 시작했다.마야 매크로 도구

다음

내 샘플이며,

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 작업을 채굴하는 것이 좋습니다. 완벽하지는 않지만 반향을 필터링합니다. 불행하게도 오토 데스크는 명령의 문서화를 생략했습니다. 아마도 명령이 파이썬인지 여부를 알지 못하기 때문에 메커니즘을 깨뜨린 것이기 때문입니다.

당신은 반복을 마지막으로 구조를 채굴하려면 다음을 사용할 수 있습니다

import maya.cmds as mc 

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

마야도 친절마다 repeatLast 구조 변경 RecentCommandChanged 이벤트에 을 제공합니다. 따라서 Photoshop처럼 GUI의 변경 사항을 모니터링하는 데 이상적입니다. repeat last의 목록은 순수 Maya 에코를 형성하는 것보다 훨씬 간결하며, 파이썬이 무엇인지 아닌지를 알아낼 수 있다면 작동하도록 보장됩니다. 그러나 주로 대부분의 메뉴 항목을 기록하지만 도구 편집 및 반복은 기록하지 않습니다. 그것의 쉽고 모든 상황에 대해 작동하지 않지만 다음 모든 것을 할 수있는 좋은 모니터링 도구를 만들어 약간 회선입니다.

undoInfo 아이디어와 결합하면 물건을 수확하는 훨씬 더 좋은 방법을 얻게됩니다. setAttr에 관해서는 노드에서 수신하여 직접 변경 내용을 모니터링 할 수 있지만, 실제로는 매우 복잡해집니다.

+0

늦은 응답에 대해 사과하십시오. Joojaa 감사합니다. – sasecse

0

스크립트 편집기에서 "모든 명령을 에코 (Echo All Commands)"가 활성화 된 것처럼 보이는 녹음 결과가 나타납니다. 행동을 기록하는 데 필요한 것이 확실합니까? "Echo All"은 항상 초기 명령에서 실행되는 하위 명령을 제공합니다.이 명령은 일반적으로 원래 명령을 호출하는 데 중복됩니다.

은 아마 당신은 "에코 모두"해제와 함께, 스크립트 편집기 로깅 방식을 결합 할 수 있습니다, 또한 여분의 기록으로 실행 취소 대기열을 사용 : 녹화를 시작할 때 cmds.undoInfo(q=True, printQueue=True)
가 먼저 실행 취소 대기열을 취소해야 할 것 중 하나 , 또는 "마커"를 생성하는 NOOP 명령을 먼저 실행하여 큐에서 시작하는 위치를 파악하십시오. "setAttr"과 같은 작업은 이름이 지정된 항목을 비워 둡니다 만, 스크립트 편집기 레코드를보고 그 사이에 빠진 내용을 알 수 있습니다. 어쩌면 그 둘을 합치면 더 정확한 매크로를 얻을 수 있습니다.

+0

늦은 응답에 대해 사과하십시오. Jdi 감사합니다. – sasecse

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

나는 누군가에게 도움이 될 수 있다면 기쁠 것입니다.

bye!

+2

OP가 왜 효과가 있을지 설명 할 수 있습니까? –