如何从另一个函数中选择导入对象名称

时间:2014-09-02 09:33:34

标签: python maya

编辑:我已经设法解决了我之前遇到过的问题,但是我没有创建另一个新问题,我遇到的这个问题与我猜的非常相似?

当我正在修改我目前正在执行的此脚本的某些内容时,只要用户在.chan对象中导入

,它就会启动此UI

目前我正在尝试编辑摄像机名称,以便当用户选择摄像机时,它会将导入摄像机的名称继承到其命名空间中。 虽然我不太确定,但我认为reader类中的customNodeTranslator函数是读取导入相机的函数吗?

这是错误的混乱:

# Error: global name 'cameraName' is not defined
# Traceback (most recent call last):
#   File "/user_data/scripts/test/maya/plugins/chan.py", line 210, in readFileIn
#     self.importTheChan = ChanFileImporter(chanRotationOrder)
#   File "/user_data/scripts/test/maya/plugins/chan.py", line 286, in __init__
#     self.cameraName = cameraName
# NameError: global name 'cameraName' is not defined # 

这是原始代码:

class customNodeTranslator(OpenMayaMPx.MPxFileTranslator):
    ...    
    ...
    ...

    def reader(self, fileObject, optionString, accessMode):
        self.initialWindow()

        try:
            fullName = fileObject.fullName()
            print ">>> full Name is %s" %fullName

            #self.fileHandle = open(fullName,"r")
            camHandle = open(fullName,"r")
            camPath = os.path.basename(camHandle.name)
            camName = os.path.splitext(camPath)[0]
            print ">>> This is the name: %s" % camName

        except:
            sys.stderr.write( "Failed to read file information\n")
            raise

        return camName

class chanImport():
    """ importing chan camera from nuke """
    def __init__(self, rotation):
        self.rotation = rotationOrder
        # create the camera
        self.cameraName = cmds.camera(n=str(camName))
        self.cameraShape = self.cameraName[1]

        cmds.select(self.cameraShape)
        cmds.scale(0.5, 0.5, 0.5)

以下代码是我修改之前的实际代码:

 class customNodeTranslator(OpenMayaMPx.MPxFileTranslator):
    ...    
    ...
    ...
    def writer( self, fileObject, optionString, accessMode ):
        try:
            fullName = fileObject.fullName()
            fileHandle = open(fullName,"w")

            selectList = OpenMaya.MSelectionList()

            OpenMaya.MGlobal.getActiveSelectionList(selectList)
            node = OpenMaya.MObject()
            depFn = OpenMaya.MFnDependencyNode()
            path = OpenMaya.MDagPath()
            iterator = OpenMaya.MItSelectionList(selectList)

                animationTime = OpenMayaAnim.MAnimControl()
    class ChanFileImporter():
        def __init__(self, rotationOrder):
            self.rotationOrder = rotationOrder
            # create the camera
            self.cameraName = cmds.camera()
            self.cameraShape = self.cameraName[1]
            cmds.select(self.cameraShape)
            cmds.scale(0.5, 0.5, 0.5)

1 个答案:

答案 0 :(得分:0)

您没有将camName传递给导入器类。事实上,您在上面的示例中根本没有调用导入器类。

如果您修改chanImport,那么它将采用您想要的名称:

class chanImport(object):
    """ importing chan camera from nuke """
     def __init__(self, camName):
        self.desiredCameraName = camName
        self.cameraName = None
        self.cameraShape = None

     def create_camera(self):
        self.cameraName, self.cameraShape =  cmds.camera(n=str(camName))
        cmds.select(self.cameraShape)
        cmds.scale(0.5, 0.5, 0.5)
        return self.cameraName

您应该可以在阅读器功能中调用它:

def reader(self, fileObject, optionString, accessMode):
    self.initialWindow()

    try:
        fullName = fileObject.fullName()
        print ">>> full Name is %s" %fullName
        camHandle = open(fullName,"r")
        camPath = os.path.basename(camHandle.name)
        camName = os.path.splitext(camPath)[0]
        print ">>> This is the name: %s" % camName
        importer = chanImport(camName)
        actual_cam_name =   importer.create_camera()
        print ">>> created " + actual_cam_name
        return actual_cam_name 
    except:
        sys.stderr.write( "Failed to read file information\n")
        raise
相关问题