我正在 PySide 中为 Maya 编写项目经理。它的目的是浏览项目内容以便快速访问。所以我希望它自动重新扫描新设置的项目目录。据我所知,maya ScriptJob 命令中没有像“Project Changed”这样的事件。任何建议将不胜感激!
问问题
507 次
1 回答
0
你是对的,因为 Maya 的命令中没有任何“项目更改”事件scriptJob
,所以你必须对此进行一些修改。以下答案暗示修改 Maya 的文件。因此,如果您需要在多台计算机上部署项目管理器,您还必须部署对 Maya 文件所做的修改。
可能有一个更简单的解决方案,但无法找到如何使用现有事件有效地做到这一点。
笔记:
我使用的是 Maya 2014,所以根据您的实际版本更改提供的路径。
解决方案 1 - 基于 PyMel:
- 去
C:\Program Files\Autodesk\Maya2014\Python\Lib\site-packages\pymel\core
system.py
在您喜欢的编辑器中打开- 搜索
Workspace
班级(@547
在我的system.py
) 编辑
chdir
函数 (@621
):@classmethod def chdir(self, newdir): _OpenMaya.MUserEventMessage.postUserEvent('ProjectChanged') return cmds.workspace( dir=newdir )
打开一个新的Maya(需要重新启动Maya才能使修改生效)
在脚本编辑器中运行此代码:
import maya.OpenMaya as om #Register a new event (IE: Tell maya that this event really exists) om.MUserEventMessage.registerUserEvent('ProjectChanged') from pymel.all import * #This function will be called when the project will be changed #Do your real stuff inside def myCallbackFunction(data): print('Got a ChangedProject event!') #Tell Maya to run myCallbackFunction when ProjectCHanged occurs callbackId = om.MUserEventMessage.addUserEventCallback('ProjectChanged', myCallbackFunction) #Whange your project directory: # - The ProjectChanged signal will be sent # - Maya will catch it and execute myCallbackFunction # - This will print 'Got a ChangedProject event!' workspace.chdir(r"C:\Users\dhasselhoff\Documents\maya\projects\hookedonafeeling")
- 如果要在完成后删除回调函数:
om.MUserEventMessage.removeCallback(callbackId)
- 如果要在完成后删除回调函数:
解决方案 2 - 基于 MEL:
- 去
C:\Program Files\Autodesk\Maya2014\scripts\others
setProject.mel
在您喜欢的编辑器中打开编辑
setProject
函数 (@359
):... // Restore the current directory. The project may have changed, but the cur dir // need not workspace -dir $oldCurrentDir; python("import maya.OpenMaya as om\nom.MUserEventMessage.postUserEvent('ProjectChanged')"); } // Try to set it directly from the name given else { sp_setLocalWorkspaceWithoutPopupDialog $newProject; python("import maya.OpenMaya as om\nom.MUserEventMessage.postUserEvent('ProjectChanged')"); }
打开一个新的Maya(需要重新启动Maya才能使修改生效)
在脚本编辑器中运行此代码:
import maya.OpenMaya as om #Register a new event (IE: Tell maya that this event really exists) om.MUserEventMessage.registerUserEvent('ProjectChanged') #This function will be called when the project will be changed #Do your real stuff inside def myCallbackFunction(data): print('Got a ChangedProject event!') #Tell Maya to run myCallbackFunction when ProjectCHanged occurs callbackId = om.MUserEventMessage.addUserEventCallback('ProjectChanged', myCallbackFunction) #Whange your project directory: # - The ProjectChanged signal will be sent # - Maya will catch it and execute myCallbackFunction # - This will print 'Got a ChangedProject event!' mel.eval('setProject("C:\Users\dhasselhoff\Documents\maya\projects\hookedonafeeling");')
- 如果要在完成后删除回调函数:
om.MUserEventMessage.removeCallback(callbackId)
- 如果要在完成后删除回调函数:
于 2015-07-27T11:23:33.567 回答