判断动画文件中mesh是否始终隐藏


def get_all_hide_mesh(pm_nodes):
    """
    判断该物体是不是始终处于隐藏状态

     物体显示                →出cache
    物体隐藏
        查找属性链接
            帧  有显示      →出cache
            表达式          →出cache
            其他  递归
                找到帧或表达式
                其他 找父物体

    Args:
        pm_nodes: 传入一个物体列表,遍历获取所有物体及层级下的mesh节点

    Returns:

    """
    all_mesh = []
    pass_node = []
    cache_node = []

    all_displayLayer = pm.ls(type='displayLayer')
    for displayLayer in all_displayLayer:
        if not displayLayer.v.get():
            for obj in displayLayer.listConnections(type=['mesh', 'transform']):
                if obj.nodeType() == 'mesh':
                    pass_node.append(obj)
                pass_node.extend(obj.listRelatives(ad=1, type='mesh'))

    for i in pm_nodes:
        all_mesh.extend(i.listRelatives(type='mesh', ad=1))
        if pm.nodeType(i) == 'mesh':
            all_mesh.append(i)

    for mesh in all_mesh:
        obj = pm.PyNode(mesh)
        if obj in pass_node:
            continue
        if obj.isVisible():
            cache_node.append(mesh)
        else:
            while True:
                print obj
                if obj.v.get():
                    obj = obj.getParent()
                else:
                    if get_keyframe(obj.v):
                        if obj.nodeType() == 'mesh':
                            cache_node.append(obj)
                        break
                    else:
                        if obj.nodeType() == 'mesh':
                            pass_node.append(obj)
                        pass_node.extend(obj.listRelatives(ad=1, type='mesh'))
                        break

    return [cache_node, pass_node]


评论
  目录