Python 用于在Maya中自动从不同目标加载参考文件的脚本

Python 用于在Maya中自动从不同目标加载参考文件的脚本,python,maya,Python,Maya,大家好,我是为Maya编写python脚本的初学者。我正在尝试编写一个脚本,自动打开Maya文件及其引用的过程。通常,当父文件和引用文件位于不同的目标时,Maya无法打开被引用的文件,您必须浏览文件名才能打开该文件。我正在尝试将此自动化。当用户试图打开一个文件时,它应该打开它的所有引用。到目前为止,我已经知道了这一点,但主要部分是我感到困惑 import pymel.api as api def callFunc(): print "hello world" # just a prin

大家好,我是为Maya编写python脚本的初学者。我正在尝试编写一个脚本,自动打开Maya文件及其引用的过程。通常,当父文件和引用文件位于不同的目标时,Maya无法打开被引用的文件,您必须浏览文件名才能打开该文件。我正在尝试将此自动化。当用户试图打开一个文件时,它应该打开它的所有引用。到目前为止,我已经知道了这一点,但主要部分是我感到困惑

import pymel.api as api

def callFunc():
    print "hello world" # just a print cmd to check

print "registering a file reference call back"
cb = api.MSceneMessage_addCallback(api.MSceneMessage.kAfterOpen, callFunc())

def callbackOff():
    api.MSceneMessage.removeCallback(cb)

因此,当调用函数callFunc()时,所有操作都发生在这里。现在我不知道如何继续

除非有特定的理由使用pymel,否则我会使用常规Maya命令:

import maya.cmds as cmds
import os

def openFileAndRemapRefs():
    multipleFilters = "Maya Files (*.ma *.mb);;Maya ASCII (*.ma);;Maya Binary (*.mb);;All Files (*.*)"

    # Choose file to open
    filename = cmds.fileDialog2(fileFilter=multipleFilters, dialogStyle=2, fileMode=1)

    # Open file with no reference loaded
    cmds.file( filename[0], open=True, force=True );

    # Dir containing the references
    refDir = 'C:/References'

    # A list of any references found in the scene
    references = cmds.ls(type='reference')

    # For each reference found in scene, load it with the path leading up to it replaced
    for ref in references:
        refFilepath = cmds.referenceQuery(ref, f=True)
        refFilename = os.path.basename( refFilepath )       
        print 'Reference ' + ref + ' found at: ' + cmds.referenceQuery(ref, f=True)   
        cmds.file( os.path.join(refDir, refFilename), loadReference=ref, options='v=0;')

openFileAndRemapRefs()

有关
文件对话框2
文件
的更多选项,请查看位于

的Maya Python文档。Maya中有一种内置机制,称为dirmap,可自动将文件重定向到其他位置。作为一般规则,如果引用us加载时没有dirmap,那么这样做就太晚了,除非您暂停加载引用(用户可以覆盖)。谢谢。但是找到了另一种方法。@zingy您能详细说明您找到了什么其他方法来解决此问题吗?:)解决方案是我的,只有我一个人。。。直到它破裂。