我正在创建一个在Maya启动期间加载的UI工具,并在VRay初始化后执行一些模块(否则会抛出错误)。
我更广泛的问题here的建议让我尝试了条件和scriptJob命令。
下面的listener.py代码在Maya的脚本编辑器中运行时有效,但是当我导入侦听器模块并使用launcher.py代码运行它时,我收到此错误:
Error: line 1: name 'is_vray_loaded' is not defined
Traceback: (most recent call last):
File "<maya console>", line 1, in <module>
NameError: name 'is_vray_loaded' is not defined
注意条件命令需要一个mel命令语法(似乎是一个bug),所以只调用普通函数不起作用并给出一个无法找到过程的错误)
以下是听众:
# vray_listener.py
import os
import maya.cmds as mc
import maya.mel as mel
vray_plugin_path_2016 = os.path.join('C:', os.sep, 'Program Files', 'Autodesk', 'Maya2016', 'vray', 'plug-ins', 'vrayformaya.mll')
#-----------------------------------------------------------------------
def is_vray_loaded():
return mc.pluginInfo(vray_plugin_path_2016, q=1, l=True)
#-----------------------------------------------------------------------
def hey():
print 'hey'
mc.condition('vray_initialized', initialize=True, d='idle', s='python("is_vray_loaded()");')
mc.scriptJob(ct=['vray_initialized', 'hey()'])
这是发射器:
# launcher.py
import sys
vray_listener_path = 'S:/path/to/module'
if vray_listener_path not in sys.path:
sys.path.append(vray_listener_path)
import vray_listener
reload(vray_listener)
答案 0 :(得分:1)
试试,
import os
import maya.cmds as mc
import maya.mel as mel
vray_plugin_path_2016 = os.path.join('C:', os.sep, 'Program Files', 'Autodesk', 'Maya2016', 'vray', 'plug-ins', 'vrayformaya.mll')
#-----------------------------------------------------------------------
def is_vray_loaded(*args):
return mc.pluginInfo(vray_plugin_path_2016, q=1, l=True)
#-----------------------------------------------------------------------
def hey(*args):
print 'hey'
mc.condition('vray_initialized', initialize=True, d='idle', s=is_vray_loaded)
mc.scriptJob(ct=['vray_initialized', 'hey'])