コード例 #1
0
def setUpPickerGroups(control=None, atr=None, groups=[]):
    import cgm.core.classes.NodeFactory as nodeF
    import cgm.core.cgm_Meta as cgmMeta
    import cgm.core.lib.attribute_utils as ATTR

    mGroups = cgmMeta.validateObjListArg(groups, 'cgmObject')
    mControl = cgmMeta.validateObjArg(control, 'cgmObject')

    ATTR.add(mControl.mNode,
             atr,
             'enum',
             enumOptions=[mObj.p_nameBase for mObj in mGroups])
    import cgm.core.classes.NodeFactory as nodeF
    nodeF.build_conditionNetworkFromGroup(shortName,
                                          chooseAttr=i,
                                          controlObject="{0}.{1}".format(
                                              mControl.mNode, atr))

    #for i,mGrp in enumerate(mGroups):
    #    shortName = mGrp.getShortName()
    #if log.getEffectiveLevel() == 10:log.debug(shortName)
    #Let's get basic info for a good attr name
    #d = nameTools.returnObjectGeneratedNameDict(shortName,ignore=['cgmTypeModifier','cgmType'])
    #n = nameTools.returnCombinedNameFromDict(d)
    #    nodeF.build_conditionNetworkFromGroup(shortName, chooseAttr = i, controlObject = "{0}.{1}".format(mControl.mNode,atr))
    return True
コード例 #2
0
 def __createnodeasdf__(self, nodeType, name):
     '''
     :param nodeType: type of node to create
     :param name: name of the new node
     '''
     _str_func = 'cgmLight.__createnode__'        
     
     #Trying to use the light shape as the metaClass caused all sorts of issues. Best just to use the dag
     _light = d_lightCalls.get(nodeType)(name=name)
     _dag = cgmMeta.getTransform(_light)
     ATTR.add(_dag,'mClass','string',value='cgmLight')
     self.__justCreatedState__ = True
     return _dag, True
コード例 #3
0
 def __init__(self,node=None,name=None,nodeType=None, **kws):
     #>>> TO USE Cached instance ---------------------------------------------------------
     _str_func = 'cgmLight.__init__'        
     if node is None:
         if nodeType not in d_lightCalls.keys():
             raise ValueError,"Unknown light node: {0}".format(nodeType)
         if name is None:
             name = nodeType
         _light = d_lightCalls.get(nodeType)(name=name)
         _dag = cgmMeta.getTransform(_light)
         ATTR.add(_dag,'mClass','string',value='cgmLight',lock=True)
         self.__justCreatedState__ = True                
         node = _dag
             
     try: super(cgmLight, self).__init__(node,name, **kws)
     except StandardError,error:
         raise StandardError, "cgmLight.__init__ fail! | %s"%error
コード例 #4
0
def verify_aimAttrs(obj=None, aim=None, up=None, checkOnly=False):
    """
    Make sure an object has aim attributes.
    
    :parameters:
        obj(str): Object to modify
        aim(arg): Value to set with on call
        up(arg): Value to set with on call
        out(arg): Value to set with on call
        checkOnly(bool): Check only, no adding attrs

    :returns
        success(bool)
    """
    _str_func = 'verify_aimAttrs'
    _str_enum = 'x+:y+:z+:x-:y-:z-'

    _obj = VALID.objString(obj,
                           noneValid=False,
                           calledFrom=__name__ + _str_func + ">> validate obj")

    _l = [aim, up]
    _l_defaults = [aim or 2, up or 1]

    for i, a in enumerate(['axisAim', 'axisUp']):
        _d = ATTR.validate_arg(_obj, a)
        _good = False
        if mc.objExists(_d['combined']):
            if ATTR.get_type(_d) == 'enum':
                if ATTR.get_enum(_d) == _str_enum:
                    _good = True
        if not _good:
            if checkOnly:
                return False
            log.debug("|{0}| >> {1} not a good attr. Must rebuild".format(
                _str_func, _d['combined']))
            ATTR.delete(_d)
            ATTR.add(_d, 'enum', enumOptions=_str_enum, hidden=False)
            ATTR.set(_d, value=_l_defaults[i])
            ATTR.set_keyable(_d, False)
        _v = _l[i]
        if _v is not None:
            ATTR.set(_d, value=_v)

    return True
コード例 #5
0
def create_uvPickerNetwork(target=None,
                           name='iris',
                           mode=1,
                           enums=None,
                           count=9,
                           split=3):
    _str_func = 'create_uvPickerNetwork'
    log.debug("|{0}| >> ".format(_str_func) + '-' * 80)

    if count / split != split:
        raise ValueError, "{0} || Split must divide evently to count. count: {1} | split: {2}".format(
            _str_func, count, split)

    if not target:
        target = mc.group(em=True, name='uvPickerDefault')

    if mode == 2:
        log.debug(cgmGen.logString_msg(_str_func, '2 Attr mode'))

        if not enums:
            enums = ['{0}_{1}'.format(name, i) for i in range(2)]

        for a in enums:
            ATTR.add(target,
                     a,
                     'enum',
                     enumOptions=[str(i) for i in range(split)])

        for a in 'U', 'V':
            _a = 'res_{0}{1}'.format(name, a)
            ATTR.add(target, _a, 'float', keyable=False, hidden=False)
            ATTR.set_hidden(target, _a, False)

        mMD = cgmMeta.cgmNode(name="{0}_picker_md".format(name),
                              nodeType='multiplyDivide')
        mMD.operation = 2
        mMD.input2X = split
        mMD.input2Y = split

        mMD.doConnectIn('input1X', "{0}.{1}".format(target, enums[0]))
        mMD.doConnectIn('input1Y', "{0}.{1}".format(target, enums[1]))

        mMD.doConnectOut('outputX', '{0}.res_{1}U'.format(target, name))
        mMD.doConnectOut('outputY', '{0}.res_{1}V'.format(target, name))
    else:
        log.debug(cgmGen.logString_msg(_str_func, '1 Attr mode'))

        _d_values = {
            9: [
                [.999, .666],
                [.333, .666],
                [.666, .666],
                [.999, .333],
                [.333, .333],
                [.666, .333],
                [.999, .999],
                [.333, .999],
                [.666, .999],
            ]
        }

        l_dat = _d_values.get(count)
        if not l_dat:
            raise ValueError, "{0} | count {1} not supported".format(
                _str_func, count)

        for a in 'U', 'V':
            _a = 'res_{0}{1}'.format(name, a)
            ATTR.add(target, _a, 'float', keyable=False, hidden=False)
            ATTR.set_hidden(target, _a, False)

        mPMA = cgmMeta.cgmNode(name="{0}_picker_pma".format(name),
                               nodeType='plusMinusAverage')
        mPMA.operation = 1

        ATTR.add(target, name, 'enum', enumOptions=[str(i) for i in range(9)])
        mAttr = cgmMeta.cgmAttr(target, name)

        for i, vSet in enumerate(l_dat):
            _iterBase = "{0}_{1}".format(name, i)

            if mc.objExists('%s_condNode' % _iterBase):
                mc.delete('%s_condNode' % _iterBase)

            mNode = cgmMeta.cgmNode(name="{0}_condNode".format(_iterBase),
                                    nodeType='condition')

            mNode.secondTerm = i
            mNode.colorIfTrueR = vSet[0]
            mNode.colorIfTrueG = vSet[1]

            mNode.colorIfFalseR = 0
            mNode.colorIfFalseG = 0

            mAttr.doConnectOut('%s.firstTerm' % mNode.mNode)
            ATTR.connect('%s.outColor' % mNode.mNode,
                         "{0}.input3D[{1}]".format(mPMA.mNode, i))
            #attributes.doConnectAttr('%s.outColorR'%mNode.mNode,'%s.%s'%(c,self.connectToAttr))

        mPMA.doConnectOut('output3Dx', '{0}.res_{1}U'.format(target, name))
        mPMA.doConnectOut('output3Dy', '{0}.res_{1}V'.format(target, name))
コード例 #6
0
def create_uvPickerNetworkBAK(target=None, name='iris', split=9):
    _str_func = 'create_uvPickerNetwork'
    log.debug("|{0}| >> ".format(_str_func) + '-' * 80)

    _d_values = {
        9: [
            [.999, .666],
            [.333, .666],
            [.666, .666],
            [.999, .333],
            [.333, .333],
            [.666, .333],
            [.999, .999],
            [.333, .999],
            [.666, .999],
        ]
    }

    l_dat = _d_values.get(split)
    if not l_dat:
        raise ValueError, "{0} | split {1} not supported".format(
            _str_func, split)

    if not target:
        target = mc.group(em=True, name='uvPickerDefault')

    md_pmas = {}

    for a in 'U', 'V':
        _a = '{0}{1}'.format(name, a)
        ATTR.add(target, _a, 'float', keyable=False, hidden=False)
        ATTR.set_hidden(target, _a, False)

        #if mc.objExists('%s_pma'%_iterBase):
        #mc.delete('%s_condNode'%_iterBase)

        mPMA = cgmMeta.cgmNode(name="{0}_pma".format(_iterBase),
                               nodeType='plusMinusAverage')
        mPMA.operation = 1
        md_pmas[a] = mPMA

    ATTR.add(target, name, 'enum', enumOptions=[str(i) for i in range(9)])
    mAttr = cgmMeta.cgmAttr(target, name)

    #Pma nodes -------------------------------------------------
    #Condition loop ----------------------------------------
    #place 2d texture = number of rolls
    for i, vSet in enumerate(l_dat):
        _iterBase = "{0}_{1}".format(name, i)

        if mc.objExists('%s_condNode' % _iterBase):
            mc.delete('%s_condNode' % _iterBase)

        mNode = cgmMeta.cgmNode(name="{0}_condNode".format(_iterBase),
                                nodeType='condition')

        mNode.secondTerm = i
        mNode.colorIfTrueR = vSet[0]
        mNode.colorIfTrueR = vSet[1]

        mNode.colorIfFalseR = 0
        mNode.colorIfFalseG = 0

        #attributes.doSetAttr(i_node.mNode,'colorIfTrueR',1)
        #attributes.doSetAttr(i_node.mNode,'colorIfFalseR',0)
        #i_node.colorIfTrueR = 1
        #i_node.colorIfTrueR = 0

        mAttr.doConnectOut('%s.firstTerm' % i_node.mNode)
        attributes.doConnectAttr('%s.outColorR' % i_node.mNode,
                                 '%s.%s' % (c, self.connectToAttr))
コード例 #7
0
def siblingSDK_wip(mTarget = 'L_ring_limb_part',matchType = False,
                   d_attrs = d_default):
    _str_func = 'siblingSDK_wip'
    log.info(cgmGEN.logString_start(_str_func))
    
    if mTarget is None:
        mTarget = cgmMeta.asMeta(sl=1)
        if mTarget:mTarget = mTarget[0]
    else:
        mTarget = cgmMeta.asMeta(mTarget)
        
    #mParent -----------------------------------------------------------------------------
    mParent = mTarget.moduleParent
    mParentSettings = mParent.rigNull.settings
    
    #pprint.pprint([mParent,mParentSettings])
    _settings = mParentSettings.mNode

    #Siblings get ------------------------------------------------------------------------
    mSiblings = mTarget.atUtils('siblings_get',excludeSelf=False, matchType = matchType)
    md = {}
    #Need to figure a way to get the order...
    for i,mSib in enumerate(mSiblings):
        log.info(cgmGEN.logString_start(_str_func, mSib.__repr__()))
        
        _d = {}
        
        ml_fk = mSib.atUtils('controls_get','fk')
        if not ml_fk:
            log.warning('missing fk. Skippping...')
            continue
        
        
        if 'thumb' not in mSib.mNode:
            ml_fk = ml_fk[1:]
            
        
        
        _d['fk'] = ml_fk
        ml_sdk = []
        
        str_part = mSib.get_partNameBase()

        
        for mFK in ml_fk:
            mSDK = mFK.getMessageAsMeta('sdkGroup')
            if not mSDK:
                mSDK =  mFK.doGroup(True,True,asMeta=True,typeModifier = 'sdk')            
            ml_sdk.append(mSDK)
            
            

        for a,d in d_attrs.iteritems():
            log.info("{0} | ...".format(a))
            
            _aDriver = "{0}_{1}".format(a,i)
            #_aDriver = "{0}_{1}".format(str_part,a)
            if not mParentSettings.hasAttr(_aDriver):
                ATTR.add(_settings, _aDriver, attrType='float', keyable = True)
            
            
            for mSDK in ml_sdk:
                mc.setDrivenKeyframe("{0}.{1}".format(mSDK.mNode, d['d']),
                                     currentDriver = "{0}.{1}".format(_settings, _aDriver),
                                     itt='linear',ott='linear',                                         
                                     driverValue = 0, value = 0)
                
                #+ ------------------------------------------------------------------
                pos_v = d.get('+')
                pos_d = d.get('+d', 1.0)
                
                if pos_v:
                    mc.setDrivenKeyframe("{0}.{1}".format(mSDK.mNode, d['d']),
                                     currentDriver = "{0}.{1}".format(_settings, _aDriver),
                                     itt='linear',ott='linear',                                         
                                     driverValue = pos_d, value = pos_v)
                
                
                #- ----------------------------------------------------------
                neg_v = d.get('-')
                neg_d = d.get('-d', -1.0)
                    
                if neg_v:
                    mc.setDrivenKeyframe("{0}.{1}".format(mSDK.mNode, d['d']),
                                     currentDriver = "{0}.{1}".format(_settings, _aDriver),
                                     itt='linear',ott='linear',                                         
                                     driverValue = neg_d, value = neg_v)        
 
            
        _d['sdk'] = ml_sdk
        md[mSib] = _d
コード例 #8
0
def SDK_wip(ml = [], matchType = False,
            d_attrs = d_default, skipLever = True, skipFKBase = []):
    _str_func = 'siblingSDK_wip'
    log.info(cgmGEN.logString_start(_str_func))
    
    if not ml:
        ml = cgmMeta.asMeta(sl=1)
    else:
        ml = cgmMeta.asMeta(ml)
    
    #mParent -----------------------------------------------------------------------------
    mParent = ml[0].moduleParent
    mParentSettings = mParent.rigNull.settings
    
    #pprint.pprint([mParent,mParentSettings])
    _settings = mParentSettings.mNode

    #Siblings get ------------------------------------------------------------------------
    #mSiblings = mTarget.atUtils('siblings_get',excludeSelf=False, matchType = matchType)
    mSiblings = ml
    
    md = {}
    d_int = {}
    
    #Need to figure a way to get the order...
    for i,mSib in enumerate(mSiblings):
        log.info(cgmGEN.logString_start(_str_func, mSib.__repr__()))
        
        _d = {}
        
        ml_fk = mSib.atUtils('controls_get','fk')
        if not ml_fk:
            log.warning('missing fk. Skippping...')
            continue
        
        if skipLever or skipFKBase:
            if i in skipFKBase:
                ml_fk = ml_fk[1:]
            elif skipLever and mSib.getMessage('rigBlock') and mSib.rigBlock.getMayaAttr('blockProfile') in ['finger']:
                ml_fk = ml_fk[1:]
            
        #if 'thumb' not in mSib.mNode:
        #    ml_fk = ml_fk[1:]
            
        
        
        _d['fk'] = ml_fk
        ml_sdk = []
        

        
        for ii,mFK in enumerate(ml_fk):
            mSDK = mFK.getMessageAsMeta('sdkGroup')
            if not mSDK:
                mSDK =  mFK.doGroup(True,True,asMeta=True,typeModifier = 'sdk')            
            ml_sdk.append(mSDK)
            
            if not d_int.get(ii):
                d_int[ii] = []
            
            d_int[ii].append(mSDK)
            
        _d['sdk'] = ml_sdk
        
        md[mSib] = _d
        
    #pprint.pprint(md)
    #pprint.pprint(d_int)
    #return
    
    for a,d in d_attrs.iteritems():
        log.info(cgmGEN.logString_sub(_str_func,a))
        for i,mSib in enumerate(mSiblings):
            log.info(cgmGEN.logString_sub(_str_func,mSib))  
            d_sib = copy.deepcopy(d)
            d_idx = d.get(i,{})
            if d_idx:
                _good = True
                for k in ['d','+d','-d','+','-']:
                    if not d_idx.get(k):
                        _good = False
                        break
                if _good:
                    log.info(cgmGEN.logString_msg(_str_func,"Found d_idx on mSib | {0}".format(d_idx))) 
                    d_use = copy.deepcopy(d_idx)
            else:d_use = copy.deepcopy(d_sib)
            
            d2 = md[mSib]
            str_part = mSib.getMayaAttr('cgmName') or mSib.get_partNameBase()
            
            #_aDriver = "{0}_{1}".format(a,i)
            _aDriver = "{0}_{1}".format(a,str_part)
            if not mParentSettings.hasAttr(_aDriver):
                ATTR.add(_settings, _aDriver, attrType='float', keyable = True)            
            
            log.info(cgmGEN.logString_msg(_str_func,"d_sib | {0}".format(d_sib))) 
            for ii,mSDK in enumerate(d2.get('sdk')):
                
                d_cnt = d_idx.get(ii,{}) 
                if d_cnt:
                    log.info(cgmGEN.logString_msg(_str_func,"Found d_cnt on mSib | {0}".format(d_cnt))) 
                    d_use = copy.deepcopy(d_cnt)
                else:d_use = copy.deepcopy(d_sib)
                
                log.info(cgmGEN.logString_msg(_str_func,"{0}| {1} | {2}".format(i,ii,d_use))) 
                
                if d_use.get('skip'):
                    continue                
                
                d_ease = d_use.get('ease',{})
                v_ease = d_ease.get(ii,None)
                
                l_rev = d_sib.get('reverse',[])
                
                if  issubclass( type(d_use['d']), dict):
                    d_do = d_use.get('d')
                else:
                    d_do = {d_use['d'] : d_use}
                    
                    
                for k,d3 in d_do.iteritems():
                    
                    if d3.get('skip'):
                        continue

                    mc.setDrivenKeyframe("{0}.{1}".format(mSDK.mNode, k),
                                         currentDriver = "{0}.{1}".format(_settings, _aDriver),
                                         itt='linear',ott='linear',                                         
                                         driverValue = 0, value = 0)
                    
                    #+ ------------------------------------------------------------------
                    pos_v = d3.get('+')
                    pos_d = d_use.get('+d', 1.0)
                    if v_ease is not None:
                        pos_v = pos_v * v_ease
                    
                    if i in l_rev:
                        print("...rev pos")
                        pos_v*=-1
                    
                    ATTR.set_max("{0}.{1}".format(_settings, _aDriver),pos_d)
                    
                    if pos_v:
                        mc.setDrivenKeyframe("{0}.{1}".format(mSDK.mNode, k),
                                         currentDriver = "{0}.{1}".format(_settings, _aDriver),
                                         itt='linear',ott='linear',                                         
                                         driverValue = pos_d, value = pos_v)
                    
                    
                    #- ----------------------------------------------------------
                    neg_v = d3.get('-')
                    neg_d = d_use.get('-d', -1.0)
                    if v_ease is not None:
                        neg_v = neg_v * v_ease                
                    
                    if i in l_rev:
                        print("...rev neg")                        
                        neg_v*=-1
                            
                    ATTR.set_min("{0}.{1}".format(_settings, _aDriver),neg_d)
                        
                    if neg_v:
                        mc.setDrivenKeyframe("{0}.{1}".format(mSDK.mNode, k),
                                         currentDriver = "{0}.{1}".format(_settings, _aDriver),
                                         itt='linear',ott='linear',                                         
                                         driverValue = neg_d, value = neg_v)