玛雅ls获取reference节点所存在的问题以及解决方案

文章 此情可待成追忆
2021-4-8 16:18 143人浏览 0人回复
原作者: 胡安迪 收藏 邀请
这两天写个工具需要获取当前场景中的所有reference节点以作分析场景,遇到个通用的问题记录一下,比如当前场景中从大纲看只有两个reference,然而通过下面简单代码可以获取超过两个reference

import maya.cmds as cmds

from pprint import pprint

pprint(cmds.ls(type="reference"))
pprint(cmds.ls(rf=True))


可以看到获取的列表中reference节点有5个,大纲中只有2个,多余的3个reference节点实际是无用节点,我们通过下面的代码获取reference节点信息会报错,也就会导致工具的bug

cmds.referenceQuery("xxx", f=True)
# Error: RuntimeError: file <maya console> line 1: Reference node 'xxxRN' is not associated with a reference file. #

解决这个问题实际很简单,使用异常过滤一下就可以

import maya.cmds as cmds

from pprint import pprint

allRefs = cmds.ls(type="reference")

refs = []

for ref in allRefs:
    try:
        cmds.referenceQuery(ref, f=True)
        refs.append(ref)
    except:
        pass
        
pprint(refs)


那么如何清理这些无用的reference节点呢,写几行代码吧

import maya.cmds as cmds

allRefs = cmds.ls(type="reference")

for ref in allRefs:
    try:
        cmds.referenceQuery(ref, f=True)
    except:
        cmds.lockNode(ref, lock=False)
        cmds.delete(ref)
        print("%s deleted!" % ref)

今天的文字就分享到这里

路过

雷人

握手

鲜花

鸡蛋

最新评论

相关分类
热门教程
返回顶部
客服