Maya(Python):从模块内运行条件命令和scriptJob命令

时间:2016-08-31 14:42:12

标签: python conditional-statements maya

我正在创建一个在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)

1 个答案:

答案 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'])