【问题标题】:Maya find if an object is instanced?Maya 查找对象是否被实例化?
【发布时间】:2016-11-07 01:03:52
【问题描述】:

在 Maya 中,有没有办法通过脚本来确定对象是否为实例?到目前为止,我尝试过的每一个技巧都不起作用。谢谢!

【问题讨论】:

    标签: python maya


    【解决方案1】:

    来自source

    # Python code
    import maya.OpenMaya as om
    
    def getInstances():
        instances = []
        iterDag = om.MItDag(om.MItDag.kBreadthFirst)
        while not iterDag.isDone():
            instanced = om.MItDag.isInstanced(iterDag)
            if instanced:
                instances.append(iterDag.fullPathName())
            iterDag.next()
        return instances
    

    编辑:

    我刚刚意识到我并没有真正回答您的问题,而只是为您提供了 Maya 场景中的所有实例。

    这里还有一个代码可以用来检查一个节点是否是一个实例:

    def pathToDagNode( fullPath ):
        if not cmds.objExists(fullPath):
            return None
        else:
            selectionList = om.MSelectionList()
            selectionList.add( fullPath )
            dagPath = om.MDagPath()
            selectionList.getDagPath( 0, dagPath )
            return dagPath
    
    dag_node = pathToDagNode( '|your|node|full|path' )
    print dag_node.isInstanced()
    

    【讨论】:

    • 可能有办法使用 maya api 2.0 做到这一点,我会尝试找出答案。
    • 我正好遇到了这个problem。由于我仍然坚持使用 Maya 2014,因此我无法继续使用 maya api 2.0。
    • 这似乎只在层次结构顶部的对象上失败。谢谢!
    • 你知道是否有办法区分实例对象和原始对象吗?两者都返回多个父母。
    【解决方案2】:

    在脚本中:

    def is_instanced(shape):
        return len (cmds.listRelatives(shape, ap=True) or []) > 1
    

    如果你有转换:

    def is_instanced_xform(xform):
        shape = cmds.listRelatives(xform, s=True)
        if not shape: 
           return False
        return len (cmds.listRelatives(shape, ap=True) or []) > 1
    

    【讨论】:

    • 这需要考虑没有形状的层次结构,但这很容易调整。谢谢你的好答案!
    • np - 但您不会在没有形状的层次结构中找到实例。您可以将 listRelatives -s 更改为 cmds.ls(cmds.listRelatives(ad=True), type=shape) 或类似的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2014-11-19
    • 2014-04-28
    相关资源
    最近更新 更多