【问题标题】:Maya (Python): Running condition command and scriptJob command from within a moduleMaya (Python):在模块内运行条件命令和 scriptJob 命令
【发布时间】:2016-08-31 14:42:11
【问题描述】:

我正在创建一个在 Maya 启动期间加载的 UI 工具,并在 VRay 初始化后执行一些模块(否则会引发错误)。

来自我更广泛的问题here 的建议使我尝试了 condition 和 scriptJob 命令。

下面的 listener.py 代码在 Maya 的脚本编辑器中运行时有效,但是当我导入 listener 模块并使用 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)

【问题讨论】:

    标签: python conditional-statements maya


    【解决方案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'])
    

    【讨论】:

    • 感谢您的帮助和链接!我认为它正在工作,但看起来缓存中有一些变量使它看起来像是在工作。我无法在新打开的 Maya 上重现工作结果。
    • 让我知道你的解决方案,下次......同样的错误?
    • 如果我只是在脚本编辑器中运行您的代码,我会收到此错误:// Error: &lt;function is_vray_loaded at 0x0000000047E8B518&gt;; // // Error: Line 1.1: Syntax error //
    • 好的,你可以再次编辑调用命令吗:'python("is_vray_loaded()");') 但没有 () ......例如:mc.condition('vray_initialized ', initialize=True, d='idle', s='python("is_vray_loaded");')
    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2016-03-21
    • 2020-05-05
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多