alembicTool_lsObject

10 篇文章 1 订阅
import re

import maya.OpenMaya as OpenMaya
import maya.cmds as cmds


def toMObject(*objects):

    sel = OpenMaya.MSelectionList()
    for i in objects:
        sel.add(i)
    out = list()
    for i in xrange(sel.length()):
        obj = OpenMaya.MObject()
        sel.getDependNode(i,obj)
        out.append(obj)
    return out

def tofullPath(*MObjects):

    return [OpenMaya.MFnDagNode(i).fullPathName() for i in MObjects]


def clearRoots(roots):
    realRoots = cmds.ls(roots,long = True)
    roots = list()
    for i in xrange(len(realRoots)):
        n = True
        for r in xrange(len(roots)):
            if roots[r].startswith('%s|' % realRoots[i]):
                roots[r] = realRoots[i]
                n = False
                break
            elif realRoots[i].startswith(roots[r]):
                n = False
                break

        if n:
            roots.append(realRoots[i])
    return roots



def lsObject(roots,type = 'transform',filterName = None,fiterVisibility = True):
    '''
    roots: root objects name (string list)
    type: (string list)
    filterName: (string list)
    fiterVisibility: if is True, only return the display is window Objects

    '''

    if isinstance(filterName,basestring):
        filterName = [filterName]

    if not filterName:
        filterName = list()

    roots = clearRoots(roots)

    allDagNode = list()
    if type:
        for i in roots:
            nodes = cmds.listRelatives(i,allDescendents = True,fullPath = True,type = type)
            if nodes:
                allDagNode += nodes
            nodes = cmds.ls(i,long=True,type = type)
            if nodes:
                allDagNode += nodes

    else:
        for i in roots:
            nodes = cmds.listRelatives(i,allDescendents = True,fullPath = True)
            if nodes:
                allDagNode += nodes
            nodes = cmds.ls(i,long=True)
            if nodes:
                allDagNode += nodes


    if not filterName and not fiterVisibility:
        return allDagNode


    filterNode = list()
    if fiterVisibility:
        trf = cmds.listRelatives(roots,allDescendents = True,fullPath = True,type = 'transform')
        if trf:
            fiterVis = clearRoots([i for i in trf if not cmds.getAttr('%s.v' % i)])

            for i in allDagNode:
                if all([not i.startswith('%s|' % f) and not i == f for f in fiterVis]):
                    filterNode.append(i)

            allDagNode = filterNode

    if not filterName:
        return allDagNode

    filterNode = list()
    for i in allDagNode:
        for f in filterName:
            if re.match(r'.*%s.*' % f,i):
                filterNode.append(i)
                break

    return filterNode


def findSameName(*objects):
    name_dict = dict()
    for i in objects:
        long_name = cmds.ls(i,long=True)[0]
        name = long_name.rsplit('|',1)
        name[-1] = name[-1].split(':')[-1]
        long_name = '|'.join(name)
        if not name_dict.has_key(long_name):
            name_dict[long_name] = list()
        name_dict[long_name].append(i)
    return [name_dict[i] for i in name_dict if len(name_dict[i])>1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值