Exemplo n.º 1
0
def _reload():
    '''
    reload carefully and re-register the RED9_META_REGISTRY
    '''
    Red9.core._reload()
    reload(cgm_General)    
    reload(cgm_Meta)
    reload(cgm_PuppetMeta)
    reload(cgm_RigMeta)
    reload(cgmPy.validateArgs)
    reload(rigger.ModuleFactory)
    reload(rigger.JointFactory)
    reload(rigger.TemplateFactory)
    reload(rigger.PuppetFactory)
    reload(rigger.RigFactory)
    reload(rigger.ModuleShapeCaster)
    reload(rigger.ModuleControlFactory)
    
    reload(classes.DraggerContextFactory)
    reload(classes.SnapFactory)
    reload(lib.rayCaster)
    reload(lib.meta_Utils)
    reload(lib.shapeCaster)
    
    
    Red9_Meta.registerMClassNodeMapping(nodeTypes = ['transform','objectSet','clamp','setRange','pointOnCurveInfo','decomposeMatrix','remapValue',
                                                     'ikSplineSolver','blendColors','blendTwoAttr','addDoubleLinear','condition','multiplyDivide','plusMinusAverage'])

    print('CGM Core Reloaded and META REGISTRY updated') 
    print '=============================================================================='  
    Red9_Meta.printSubClassRegistry()  
    print '=============================================================================='    
Exemplo n.º 2
0
 def test_getMetaNodes_mTypesAsClass(self):
     #mTypes test passing in Class rather than string
     nodes=sorted(r9Meta.getMetaNodes(mTypes=[r9Meta.MetaRig,r9Meta.MetaFacialRig]),key=lambda x: x.mClass.upper())
     assert [n.mClass for n in nodes]==['MetaFacialRig','MetaRig']
     
     nodes=r9Meta.getMetaNodes(dataType=None, mTypes=[r9Meta.MetaRig])
     assert nodes==['MetaRig_Test']
Exemplo n.º 3
0
 def test_getMetaNodes_mTypes(self):    
     #mTypes test
     nodes=sorted(r9Meta.getMetaNodes(mTypes=['MetaRig','MetaFacialRig']),key=lambda x: x.mClass.upper())
     assert [n.mClass for n in nodes]==['MetaFacialRig','MetaRig']
     
     nodes=r9Meta.getMetaNodes(dataType=None, mTypes=['MetaRig'])
     assert nodes==['MetaRig_Test']
Exemplo n.º 4
0
 def test_basicRigStructure(self):
     
     mRig=r9Meta.getConnectedMetaSystemRoot('L_Wrist_Ctrl')
     
     assert type(mRig)==r9Meta.MetaRig
     assert mRig.mNode=='RED_Rig'
     assert mRig.CTRL_Main[0]=='|World_Ctrl'
     
     #test the Left Arm wires
     assert type(mRig.L_ArmSystem)==r9Meta.MetaRigSubSystem
     assert mRig.L_ArmSystem.mNode=='L_ArmSystem'
     assert mRig.L_ArmSystem.systemType=='Arm'
     assert mRig.L_ArmSystem.mirrorSide==1
     assert mRig.L_ArmSystem.CTRL_L_Wrist[0]=='|World_Ctrl|L_Wrist_Ctrl'
     assert mRig.L_ArmSystem.CTRL_L_Elbow[0]=='|World_Ctrl|COG__Ctrl|L_Elbow_Ctrl'
     ctrl=r9Meta.MetaClass(mRig.L_ArmSystem.CTRL_L_Wrist[0])
     assert ctrl.mirrorSide==1 #?????? consistency of attrs on node and metaSubsystems!!!!!!!
     assert ctrl.mirrorIndex==1
     
     #test the Right Leg wires
     assert type(mRig.R_LegSystem)==r9Meta.MetaRigSubSystem
     assert r9Meta.isMetaNode('R_LegSystem')
     assert mRig.R_LegSystem.mNode=='R_LegSystem'
     assert mRig.R_LegSystem.systemType=='Leg'
     assert mRig.R_LegSystem.mirrorSide==2
     assert mRig.R_LegSystem.CTRL_R_Foot[0]=='|World_Ctrl|R_Foot_grp|R_Foot_Ctrl'
     assert mRig.R_LegSystem.CTRL_R_Knee[0]=='|World_Ctrl|R_Knee_Ctrl'
     ctrl=r9Meta.MetaClass(mRig.R_LegSystem.CTRL_R_Foot[0])
     assert ctrl.mirrorSide==2 #?????? consistency of attrs on node and metaSubsystems!!!!!!!
     assert ctrl.mirrorIndex==4
     
     #test the Left Leg wires 
     #:NOTE slight difference in the naming as we didn't pass in the attr when making the subSystem
     assert type(mRig.L_Leg_System)==r9Meta.MetaRigSubSystem
     assert r9Meta.isMetaNode('L_LegSystem')
     assert mRig.L_Leg_System.mNode=='L_LegSystem'
     assert mRig.L_Leg_System.systemType=='Leg'
     assert mRig.L_Leg_System.mirrorSide==1      
     
     #test the Spine wires
     assert type(mRig.SpineSystem)==r9Meta.MetaRigSubSystem
     assert mRig.SpineSystem.mNode=='SpineSystem'
     assert mRig.SpineSystem.systemType=='Spine'
     assert mRig.SpineSystem.mirrorSide==0
     assert mRig.SpineSystem.CTRL_Hips[0]=='|World_Ctrl|COG__Ctrl|Hips_Ctrl'
     assert mRig.SpineSystem.CTRL_Chest[0]=='|World_Ctrl|COG__Ctrl|Chest_Ctrl'
     ctrl=r9Meta.MetaClass(mRig.SpineSystem.CTRL_Chest[0])
     assert ctrl.mirrorSide==0 #?????? consistency of attrs on node and metaSubsystems!!!!!!!
     assert ctrl.mirrorIndex==4
     
     #test the MetaRigSupport nodes
     assert type(mRig.L_ArmSystem.L_ArmSupport)==r9Meta.MetaRigSupport
     assert mRig.L_ArmSystem.L_ArmSupport.mNode=='L_ArmSupport'
     assert mRig.L_ArmSystem.L_ArmSupport.SUP_IKHandle[0]=='|World_Ctrl|L_Wrist_Ctrl|ikHandle1'
     assert mRig.SpineSystem.SpineSupport.SUP_NeckIK[0]=='|World_Ctrl|COG__Ctrl|Chest_Ctrl|Head_grp|Head_Ctrl|ikHandle3'
     assert mRig.SpineSystem.SpineSupport.SUP_SpineIK[0]=='|World_Ctrl|COG__Ctrl|Chest_Ctrl|ikHandle4'
Exemplo n.º 5
0
def _reload():
    '''
    reload carefully and re-register the RED9_META_REGISTRY
    '''
    Red9.core._reload()
    reload(cgm_Meta)
    reload(cgm_PuppetMeta)
    
    print('CGM Core Reloaded and META REGISTRY updated') 
    print '============================================='  
    Red9_Meta.printSubClassRegistry()  
    print '============================================='    
Exemplo n.º 6
0
 def test_getMetaNodes_mInstancesAsClass(self):
     #mInstances tests passing in Class rather than string
     nodes=r9Meta.getMetaNodes(dataType=None, mInstances=[r9Meta.MetaRig])
     assert nodes==['MetaFacialRig_Test', 'MetaRig_Test']
     nodes=r9Meta.getMetaNodes(mInstances=[r9Meta.MetaRig])
     assert [n.mNodeID for n in nodes]==['MetaFacialRig_Test', 'MetaRig_Test']
     nodes=r9Meta.getMetaNodes(mInstances=[r9Meta.MetaClass])
     assert sorted([n.mNode for n in nodes])==['MetaClass_Test',
                                               'MetaFacialRigSupport_Test',
                                               'MetaFacialRig_Test',
                                               'MetaRigSupport_Test',
                                               'MetaRig_Test']  
Exemplo n.º 7
0
 def test_getMetaNodes_mInstances(self):
     #mInstances tests
     nodes=r9Meta.getMetaNodes(dataType=None, mInstances=['MetaRig'])
     assert nodes==['MetaFacialRig_Test', 'MetaRig_Test']
     nodes=r9Meta.getMetaNodes(mInstances=['MetaRig'])
     assert [n.mNodeID for n in nodes]==['MetaFacialRig_Test', 'MetaRig_Test']
     nodes=r9Meta.getMetaNodes(mInstances=['MetaClass'])
     assert sorted([n.mNode for n in nodes])==['MetaClass_Test',
                                               'MetaFacialRigSupport_Test',
                                               'MetaFacialRig_Test',
                                               'MetaRigSupport_Test',
                                               'MetaRig_Test']  
Exemplo n.º 8
0
 def test_getMetaNodes_mAttrs(self):
     mNodes=r9Meta.getMetaNodes(mAttrs='mirrorSide=1')
     assert sorted([node.mNodeID for node in mNodes])==['L_Arm_System',
                                              'L_Fingers_System',
                                              'L_Leg_System',
                                              'L_Toes_System',
                                              'L_other_System'] 
     mNodes=r9Meta.getMetaNodes(mAttrs=['mirrorSide=1','systemType=Arm'])
     assert sorted([node.mNodeID for node in mNodes])==['L_Arm_System']
     
     mNodes=r9Meta.getMetaNodes(mAttrs=['systemType=Leg'])
     assert sorted([node.mNodeID for node in mNodes])== ['L_Leg_System', 'R_Leg_System']
def pushPoseFromLib(poseUIObj):
    mFacial = r9Meta.getMetaNodes(mTypes='Red9_MetaFacialCore')[0]
    posepath = poseUIObj.getPoseDir()
    poseName = os.path.basename(poseUIObj.getPoseSelected())
    print 'posepath', posepath
    print 'poseName', poseName
    mFacial.poses_pull_from_library(posepath, poseName)
def getNodesOverload(poseObj, nodes, *args):

    # NOTE: poseObj already has an attr 'metaRig' which is filled
    # automatically in the main buildInternalPoseData() call
    metaNode = poseObj.metaRig
    currentSelection = cmds.ls(sl=True, l=True)
    filteredNodes = []
    
    if not issubclass(type(metaNode), r9Meta.MetaHIKControlSetNode):
        # see if we have a controller selected thats connected to an
        # appropriate subMetaSystem
        if not currentSelection:
            result = cmds.confirmDialog(
                                title='selection hint missing',
                                button=['L_Fingers', 'R_Fingers', 'L_Toes', 'R_Toes', 'Cancel'],
                                message='We need a hint to ID which finger system to load/save the data too,\nIdeally you should select something in the correct limb system that we can use',
                                defaultButton='Cancel',
                                cancelButton='Cancel',
                                icon='information',
                                dismissString='Cancel')
            if result == 'L_Fingers':
                msystem = metaNode.L_ArmSystem
            elif result == 'R_Fingers':
                msystem = metaNode.R_ArmSystem
            elif result == 'L_Toes':
                msystem = metaNode.L_LegSystem
            elif result == 'R_Toes':
                msystem = metaNode.R_LegSystem
        else:   
            msystem = r9Meta.getConnectedMetaNodes(cmds.ls(sl=True))[0]

        # from selected node, or selected system find our finger / toe subSystem
        if not msystem.systemType.lower() in ['fingers', 'toes']:   
            fingersystem = msystem.getChildMetaNodes(mAttrs=['systemType'])
            if fingersystem:
                fingersystem=fingersystem[0]
        else:
            fingersystem = msystem
        if not fingersystem or not fingersystem.systemType.lower() in ['fingers', 'toes']:
            raise IOError('no finger / toe metaSubSystems found from the selected node')

        print '\nFinger : PoseOverload Handler : %s >> subSystem: %s' % (metaNode, fingersystem)
        
        filteredNodes = fingersystem.getChildren()
            
#         if cmds.getAttr('%s.mirrorSide' % currentSelection[0]) == 1:
#             print '\nFinger : PoseOverload Handler : %s >> side: Left' % metaNode
#             filteredNodes = metaNode.L_ArmSystem.L_FingerSystem.getChildren()
#         elif cmds.getAttr('%s.mirrorSide' % currentSelection[0]) == 2:
#             print '\nFinger : PoseOverload Handler : %s >> side: Right' % metaNode
#             filteredNodes = metaNode.R_ArmSystem.R_FingerSystem.getChildren()
            
    # modify the actual PoseData object, changing the data to be matched on index
    # rather than using the standard name or metaMap matching
    poseObj.metaPose = False
    poseObj.matchMethod = 'mirrorIndex_ID'
    poseObj.mirrorInverse = True  # set the mirror inverse code to active to cope with mirror differences between Left and Right fingers
    
    return filteredNodes
Exemplo n.º 11
0
 def test_isMetaNode(self):
     assert r9Meta.isMetaNode('MetaRig_Test')
     assert r9Meta.isMetaNode('MetaRig_Test', mTypes=['MetaRig'])
     assert r9Meta.isMetaNode('MetaRig_Test', mTypes='MetaRig')
     assert not r9Meta.isMetaNode('MetaRig_Test', mTypes='MonkeyBollox')
     assert not r9Meta.isMetaNode('MetaRig_Test', mTypes='MetaFacialRigSupport_Test')
     assert r9Meta.isMetaNode('MetaRig_Test', mTypes=[r9Meta.MetaRig])
     assert r9Meta.isMetaNode('MetaRig_Test', mTypes=r9Meta.MetaRig)
     cube1=cmds.ls(cmds.polyCube()[0],l=True)[0]
     assert not r9Meta.isMetaNode(cube1)
Exemplo n.º 12
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','MetaRig_anim_jump.mb'),open=True,f=True)
     self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
     self.poseFolder = getPoseFolder()
     
     #make our PoseData object with the unitTest config loaded
     filterNode=r9Core.FilterNode_Settings()
     filterNode.read(red9MetaRigConfig)
     self.poseData=r9Pose.PoseData(filterNode)
Exemplo n.º 13
0
def addAttrToHUD(node, attr):
    """
    adds node.attr to the HUD using Red9_Meta.MetaHUDNode
    """
    currentHUDs = r9Meta.getMetaNodes(mTypes=r9Meta.MetaHUDNode,
                                      mAttrs='mNodeID=CBMonitorHUD')

    if not currentHUDs:
        metaHUD = r9Meta.MetaHUDNode(name='CBMonitorHUD')
    else:
        metaHUD = currentHUDs[0]

    monitoredAttr = '%s_%s' % (r9Core.nodeNameStrip(node), attr)
    metaHUD.addMonitoredAttr(monitoredAttr,
                             value=mc.getAttr('%s.%s' % (node, attr)),
                             refresh=False)
    mc.connectAttr('%s.%s' % (node, attr),
                   '%s.%s' % (metaHUD.mNode, monitoredAttr))
    metaHUD.refreshHud()
Exemplo n.º 14
0
 def test_metaRigHandlers(self):
     '''
     main metaRig handlers in the pose setups
     '''
     self.poseData.metaPose = False
     assert not self.poseData.metaRig
     self.poseData.setMetaRig('L_Wrist_Ctrl')
     assert r9Meta.isMetaNode(self.poseData.metaRig)
     assert self.poseData.metaPose == True  # this is now part of the metaPose property,
     self.poseData.metaPose = True
     assert self.poseData.settings.metaRig == True
Exemplo n.º 15
0
    def test_caching(self):
        self.assertEquals(
            self.r9Node1.cached,
            None,
        )

        self.r9Node1.addAttr('mClass', 'MetaClass')
        r9Node1Cached = r9Meta.MetaClass(self.r9Node1.mNode)

        self.assertEquals(self.r9Node1.cached, True)
        self.assertEquals(self.r9Node1, r9Node1Cached)
Exemplo n.º 16
0
        def _iterate_(self):	
	    self.call2_func = self.test2_func
		
            for i in range(self.int_targetCount):
                self.progressBar_set(status = ("Pass 1: Substantiating Call %i"%i), progress = i, maxValue = self.int_targetCount)		
		#string = mc.joint(n = "obj_{0}".format(i))
		string = mc.createNode('network',n = "obj_{0}".format(i))
		#string = mc.createNode('transform',n = "obj_{0}".format(i))
		t1 = time.clock()	
		n1 = self.test1_func(string)              
		t2 = time.clock()
		self.l_times_1.append(t2-t1)
		
		r9Meta.registerMClassNodeCache(n1)
		
		t1 = time.clock()	
		#self.l_roots_2.extend( [self.test2_func(self._toCall)] )  
		self.call2_func(n1.mNode)              
		t2 = time.clock()
		self.l_times_2.append(t2-t1)	
Exemplo n.º 17
0
 def release_post_insert(self):
     #ATTR.set_messagse(_catch, 'tmpMsg', self.l_created[-1])
     _loc = self.l_created[-1]
     _mLoc = r9Meta.MetaClass(_loc)
     _buffer = _mLoc.cgmLocDat
     _target = ATTR.get_message(_loc,'meshTarget')[0]
     _loc = mc.rename(_loc, "{0}_u{1}_v{2}_rayCast_loc".format(coreNames.get_base(_target),
                                                           "{0:.4f}".format(_buffer['uv'][0]),
                                                           "{0:.4f}".format(_buffer['uv'][1]),
                                                           ))
     self.dropTool()
Exemplo n.º 18
0
 def test_metaRigHandlers(self):
     '''
     main metaRig handlers in the pose setups
     '''
     self.poseData.metaPose=False
     assert not self.poseData.metaRig
     self.poseData.setMetaRig('L_Wrist_Ctrl')
     assert r9Meta.isMetaNode(self.poseData.metaRig)
     assert self.poseData.metaPose==False
     self.poseData.metaPose=True
     assert self.poseData.settings.metaRig==True
Exemplo n.º 19
0
    def setup(self):
        cmds.file(os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles',
                               'MetaRig_anim_jump.mb'),
                  open=True,
                  f=True)
        self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
        self.poseFolder = getPoseFolder()

        #make our PoseData object with the unitTest config loaded
        filterNode = r9Core.FilterNode_Settings()
        filterNode.read(red9MetaRigConfig)
        self.poseData = r9Pose.PoseData(filterNode)
Exemplo n.º 20
0
 def test_isMetaNodeInherited(self):
     assert r9Meta.isMetaNodeInherited('MetaFacialRig_Test','MetaRig')
     assert r9Meta.isMetaNodeInherited('MetaFacialRig_Test','MetaClass')
     assert not r9Meta.isMetaNodeInherited('MetaFacialRig_Test','MetaRigSubSystem')
     assert r9Meta.isMetaNodeInherited('MetaFacialRig_Test',r9Meta.MetaRig)
     assert r9Meta.isMetaNodeInherited('MetaFacialRig_Test',r9Meta.MetaClass)
     assert not r9Meta.isMetaNodeInherited('MetaFacialRig_Test',r9Meta.MetaRigSubSystem)
Exemplo n.º 21
0
 def test_registerMClassNodeMapping(self):
     '''
     test the registry functions for nodeTypes
     '''
     cmds.file(new=True,f=True)
     r9Meta.MetaClass(name='standardNetworkMetaNode')
     assert [cmds.nodeType(n.mNode) for n in r9Meta.getMetaNodes()]==['network']   
      
     #register transforms to the NodeTypes
     r9Meta.registerMClassNodeMapping(nodeTypes='transform')
     assert r9Meta.getMClassNodeTypes()==['network', 'transform']
     new=r9Meta.MetaClass(name='newTransformMetaNode', nodeType='transform')
     assert [cmds.nodeType(n.mNode) for n in r9Meta.getMetaNodes()]==['network','transform']  
     
     #reset the NodeTypes
     r9Meta.resetMClassNodeTypes()
     assert r9Meta.getMClassNodeTypes()==['network']
     assert [cmds.nodeType(n.mNode) for n in r9Meta.getMetaNodes()]==['network'] 
Exemplo n.º 22
0
 def getTimecode_from_node(node):
     '''
     wrapper method to get the timecode back from a given node
     :param node: node containing correctly formatted timecode data
     
     .. note:
             the node passed in has to have the correctly formatted timecode data to compute
     '''
     import Red9.core.Red9_Meta as r9Meta
     node = r9Meta.MetaClass(node)
     if node.hasAttr(Timecode.ref):
         ms = (getattr(node, Timecode.ref) + ((float(getattr(node, Timecode.count)) / getattr(node,Timecode.samplerate)) * 1000))
         return milliseconds_to_Timecode(ms)
Exemplo n.º 23
0
        def _buildStuff_(self):
            mi_rootJoint = r9Meta.MetaClass(mc.joint(name='root'))
            #mc.parent(mi_rootJoint.mNode,world = True)
            #mi_rootJoint.parent = False
            self.md_rootToChildren[mi_rootJoint] = []
            _last = mi_rootJoint
            for i in range(self.int_children):
                self.progressBar_set(status=("Creating obj %i" % i),
                                     progress=i,
                                     maxValue=self.int_children)
                mi_child = r9Meta.MetaClass(mc.joint(name=' "child"%i' % i))
                self.md_rootToChildren[mi_rootJoint].append(mi_child)
                #mi_child.parent = _last
                try:
                    mc.parent(mi_child.mNode, _last.mNode)
                except:
                    pass
                mi_child.ty = (i)
                _last = mi_child  #...change for the next

            self._toCall = self.md_rootToChildren[mi_rootJoint][4]
            self.mi_rootJoint = mi_rootJoint
Exemplo n.º 24
0
def override_clear(target=None, pushToShapes=True):
    """
    Clear override flags on target and shapes if you choose
    
    :parameters
        target(str): What to color - shape or transform with shapes
        pushToShapes(bool): Push the overrides to shapes of passed transforms

    :returns
        info(dict)
    """
    _str_func = "override_clear"
    if not target:
        raise ValueError, "|{0}|  >> Must have a target".format(_str_func)

    _shapes = []

    mTarget = r9Meta.MetaClass(target, autoFill=False)

    if mTarget.hasAttr('overrideEnabled'):
        log.debug("|{0}|  >> overrideEnabled  on target...".format(_str_func))
        _shapes.append(mTarget.mNode)

    if pushToShapes:
        _bfr = mc.listRelatives(target, s=True, fullPath=True)
        if _bfr:
            _shapes.extend(_bfr)

    if not _shapes:
        raise ValueError, "|{0}|  >> Not a shape and has no shapes: '{1}'".format(
            _str_func, target)

    for i, s in enumerate(_shapes):
        mShape = r9Meta.MetaClass(s)
        try:
            mShape.overrideEnabled = False
        except Exception, err:
            log.warning("|{0}|  >> target failed: {1} | err: {2}".format(
                _str_func, s, err))
Exemplo n.º 25
0
        def _iterate_(self):
            self.call2_func = self.test2_func

            for i in range(self.int_targetCount):
                self.progressBar_set(status=("Pass 1: Substantiating Call %i" %
                                             i),
                                     progress=i,
                                     maxValue=self.int_targetCount)
                #string = mc.joint(n = "obj_{0}".format(i))
                string = mc.createNode('network', n="obj_{0}".format(i))
                #string = mc.createNode('transform',n = "obj_{0}".format(i))
                t1 = time.clock()
                n1 = self.test1_func(string)
                t2 = time.clock()
                self.l_times_1.append(t2 - t1)

                r9Meta.registerMClassNodeCache(n1)

                t1 = time.clock()
                #self.l_roots_2.extend( [self.test2_func(self._toCall)] )
                self.call2_func(n1.mNode)
                t2 = time.clock()
                self.l_times_2.append(t2 - t1)
Exemplo n.º 26
0
def verify_sceneBlocks():
    """
    Gather all rig blocks data in scene

    :parameters:

    :returns
        metalist(list)
    """
    _str_func = 'verify_sceneBlocks'

    for mBlock in r9Meta.getMetaNodes(mTypes='cgmRigBlock',
                                      nTypes=['transform', 'network']):
        mBlock.atUtils('verify_blockAttrs', queryMode=False)
Exemplo n.º 27
0
    def test_createMetaNode(self):
        _r9ClassRegistry = r9Meta.getMClassMetaRegistry()
        _l_mask = [
            'cgmBlendShape',
            'cgmBufferNode',
            'cgmPuppet',
            'cgmDynParentGroup',
            'cgmDynamicMatch',  #RESOLVE ASAP
            'cgmMorpheusPuppet',
            'cgmInfoNode2',
            'cgmModuleBufferNode',
            'cgmTest',
            'cgmMasterControl',
            'cgmEyeballBlock',
            'cgmMouthNoseBlock',
            'cgmEyebrowBlock',
            #...these pass but don't need
            'cgmNodeOLD',
            'cgmEyelids',
            'cgmMouthNose',
            'cgmEyebrow',
            'cgmSimpleBSFace',
            'cgmEyeball',
            'cgmObjectOLD'
        ]
        #for mType in ['cgmNode','cgmObject','cgmControl','cgmObjectList']:
        #for mType in _r9ClassRegistry.keys():
        #if 'cgm' in mType and mType not in _l_mask:
        for mType in [
                'cgmNode', 'cgmObject', 'cgmControl', 'cgmObjectSet',
                'cgmPuppet', 'cgmModule', 'cgmDynParentGroup',
                'cgmDynamicMatch', 'cgmPuppet', 'cgmModule'
        ]:
            _t_start = time.clock()
            try:
                mObj = cgmMeta.createMetaNode(
                    mType, name='createTest_{0}'.format(mType))
            except Exception, err:
                log.error("{0} failure...".format(mType))
                for arg in err.args:
                    log.error(arg)
                #log.error(cgmGEN._str_subLine)
                raise Exception, err

            self.assertEqual(issubclass(type(mObj), _r9ClassRegistry[mType]),
                             True, mObj)
            mObj.delete()
            print("[{0}] completed in  {1} seconds".format(
                mType, "%0.3f" % (time.clock() - _t_start)))
Exemplo n.º 28
0
def get_from_scene():
    """
    Gather all rig blocks data in scene

    :parameters:

    :returns
        metalist(list)
    """
    _str_func = 'get_from_scene'

    _ml_rigBlocks = r9Meta.getMetaNodes(mTypes='cgmRigBlock',
                                        nTypes=['transform', 'network'])

    return _ml_rigBlocks
Exemplo n.º 29
0
    def test_mClassConversion_cgm(self):
        _str_grp = mc.group(em=True)

        n1 = cgmMeta.cgmNode(_str_grp)
        n1 = r9Meta.convertMClassType(n1, 'cgmControl')

        self.assertEqual(type(n1), cgmMeta.cgmControl)

        n1 = cgmMeta.validateObjArg(n1.mNode, 'cgmObject', setClass=True)
        self.assertEqual(type(n1), cgmMeta.cgmObject)

        n1 = cgmMeta.validateObjArg(n1.mNode, 'cgmControl', setClass=True)
        self.assertEqual(type(n1), cgmMeta.cgmControl)

        n1.delete()
    def _bake(cls, binder_file, namespace):
        rig_name = os.path.splitext(
            os.path.basename(binder_file))[0].split('_')[0]
        source_rig = None
        dest_rig = None
        meta_nodes = getMetaNodes(mTypes='MsvMetaRig')
        if meta_nodes:
            for obj in meta_nodes:
                # print 'obj rig: %s, rig: %s' % (obj.rigName, rig_name)
                # if obj.rigName == rig_name:
                if obj.nameSpaceFull().startswith(namespace):
                    dest_rig = obj
                else:
                    source_rig = obj

        source_root = source_rig.get_export_root()
        binder_rigs = r9Meta.getMetaNodes("MsvAnimationBinderRig")

        # source root (new rig) name is C_pelvis, Marker
        # but the dest root (old rig) name is root, marker, etc, so don't use name matching
        dest_root = [
            joint for joint in binder_rigs[0].get_root_joints()
            if mc.listRelatives(joint, c=True, type='joint')
        ][0]

        anim_binder.bind_skeletons(source_root, dest_root)

        dest_root_node = dest_rig.get_export_root()
        if mc.nodeType(dest_root_node) == 'reference':
            # We reference the skeleton into rig file
            # and the Meta rig node will store the reference node instead of the root joint
            # ps: the reference node is parent node of root joint
            joint_nodes = [
                node for node in mc.referenceQuery(
                    dest_root_node, nodes=True, dp=True)
                if mc.nodeType(node) == 'joint'
            ]
            joint_node = joint_nodes[0].split('|')[-1]
            dest_root_node = cls._get_root_parent(joint_node)
        else:
            # dest_root_node is u'|Thanator_Rig:main_Grp|Thanator_Rig:output_Grp|Thanator_Rig:C_pelvis'
            # always to select it's root parent node
            dest_root_node = dest_root_node.split('|')[1]

        ctrls = cls._get_bound_ctrls(dest_root_node)
        anim_binder.bake_binder_data(dest_root_node)

        return source_rig, dest_rig, ctrls
Exemplo n.º 31
0
def removeAttrFromHUD(node, attr):
    """
    remove attrs from the MetaHUD
    """
    currentHUDs = r9Meta.getMetaNodes(mTypes=r9Meta.MetaHUDNode,
                                      mAttrs='mNodeID=CBMonitorHUD')
    if currentHUDs:
        metaHUD=currentHUDs[0]
        if attr:
            metaHUD.killHud()
            monitoredAttr='%s_%s' % (r9Core.nodeNameStrip(node), attr)
            print 'removing attr :', attr, monitoredAttr
            try:
                metaHUD.removeMonitoredAttr(monitoredAttr)
            except:
                pass
        metaHUD.refreshHud()
Exemplo n.º 32
0
def removeAttrFromHUD(node, attr):
    """
    remove attrs from the MetaHUD
    """
    currentHUDs = r9Meta.getMetaNodes(mTypes=r9Meta.MetaHUDNode,
                                      mAttrs='mNodeID=CBMonitorHUD')
    if currentHUDs:
        metaHUD = currentHUDs[0]
        if attr:
            metaHUD.killHud()
            monitoredAttr = '%s_%s' % (r9Core.nodeNameStrip(node), attr)
            print 'removing attr :', attr, monitoredAttr
            try:
                metaHUD.removeMonitoredAttr(monitoredAttr)
            except:
                pass
        metaHUD.refreshHud()
Exemplo n.º 33
0
def speedTest_objectCount(iterations=100, ):
    """
    Test to see how meta reloading affects file new/open
    """
    l_times = []
    mc.file(new=True, f=True)
    t_start = time.clock()
    _jnt = mc.joint()
    for i in range(iterations):
        log.info("On...{0}".format(i))
        _jnt = mc.joint()
        #_jnt = mc.createNode('multiplyDivide')
        #_jnt = mc.createNode('transform')

        t1 = time.clock()
        #r9Meta.MetaClass(name = 'test_{0}'.format(i),nodeType='transform')
        #import maya.cmds as mc

        r9Meta.MetaClass(_jnt)
        #r9Meta.MetaClass(_jnt,autofill='messageOnly')
        t2 = time.clock()
        l_times.append(t2 - t1)

    t_end = time.clock()

    #for i,t in enumerate(l_times):
    #log.info("Step {0} |  {1}".format(i,"%0.3f"%t))

    _str_dif = l_times[-1] - l_times[0]
    _l_diffs = []
    for i in range(len(l_times) - 1):
        _l_diffs.append(l_times[i + 1] - l_times[i])
    _averageDiff = sum(_l_diffs) / len(_l_diffs)
    _totalTime = t_end - t_start
    _totalIterTime = (sum(l_times))
    log.info(
        " speedTest_reloadMeta -- {0} | Start -- {1} | End -- {2} | [Diff] -- {3} | AverageIncrease: {4}"
        .format("%0.3f" % (sum(l_times)), "%0.3f" % l_times[0],
                "%0.3f" % l_times[-1], "%0.3f" % _str_dif, _averageDiff))
    log.info("Time total: {0} | IterTime: {1} | Unaccounted: {2}".format(
        "%0.3f" % (_totalTime), "%0.3f" % (_totalIterTime),
        "%0.3f" % (_totalTime - _totalIterTime)))
    log.info(" Maya: {0} | OS: {1}".format(
        mel.eval('about -%s' % 'version'),
        mel.eval('about -%s' % 'operatingSystemVersion')))
Exemplo n.º 34
0
    def test_longJsonDumps(self):
        '''
        Test the handling of LONG serialized Json data - testing the 16bit string attrTemplate handling
        NOTE: if you set a string to over 32,767 chars and don't lock the attr once made, selecting
        the textField in the AttributeEditor will truncate the data, hence this test!
        '''
        data= "x" * 40000
        self.MClass.addAttr('json_test', data)
        assert len(self.MClass.json_test)==40000
        
        #save the file and reload to ensure the attr is consistent
        cmds.file(rename=os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','deleteMe.ma'))
        cmds.file(save=True,type='mayaAscii')
        cmds.file(new=True,f=True)
        cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','deleteMe.ma'),open=True,f=True)

        mClass=r9Meta.getMetaNodes()[0]
        assert len(mClass.json_test)
Exemplo n.º 35
0
def get_scene_block_heirarchy(asMeta=True):
    _str_func = 'get_scene_block_heirarchy'

    _md_heirachy = {}
    _ml_rigBlocks = r9Meta.getMetaNodes(mTypes='cgmRigBlock',
                                        nTypes=['transform', 'network'])

    for mBlock in _ml_rigBlocks:  #...find our roots
        if not mBlock.p_blockParent:
            log.debug("|{0}| >> Root: {1}".format(_str_func, mBlock.mNode))
            if asMeta:
                k = mBlock
            else:
                k = mBlock.mNode
            _md_heirachy[k] = mBlock.getBlockHeirarchyBelow(asMeta=asMeta)

    #cgmGEN.walk_dat(_md_heirachy, _str_func)
    return _md_heirachy
Exemplo n.º 36
0
def addAttrToHUD(node, attr):
    """
    adds node.attr to the HUD using Red9_Meta.MetaHUDNode
    """
    currentHUDs = r9Meta.getMetaNodes(mTypes=r9Meta.MetaHUDNode,
                                      mAttrs='mNodeID=CBMonitorHUD')
    
    if not currentHUDs:
        metaHUD = r9Meta.MetaHUDNode(name='CBMonitorHUD')
    else:
        metaHUD = currentHUDs[0]
    
    monitoredAttr='%s_%s' % (r9Core.nodeNameStrip(node), attr)
    metaHUD.addMonitoredAttr(monitoredAttr,
                             value=mc.getAttr('%s.%s' % (node, attr)),
                             refresh=False)
    mc.connectAttr('%s.%s' % (node, attr), '%s.%s' % (metaHUD.mNode, monitoredAttr))
    metaHUD.refreshHud()
Exemplo n.º 37
0
 def test_connectionsTo_MayaNodes_Basic(self):
     '''
     Test how the code handles connections to standard MayaNodes
     '''
     cube1=cmds.ls(cmds.polyCube()[0],l=True)[0]
     cube2=cmds.ls(cmds.polyCube()[0],l=True)[0]
     cube3=cmds.ls(cmds.polyCube()[0],l=True)[0]
     cube4=cmds.ls(cmds.polyCube()[0],l=True)[0]
     
     #add singular Child
     self.MClass.connectChild(cube1,'Singluar')
     assert self.MClass.Singluar==[cube1]
     #add multiple Children
     self.MClass.connectChildren([cube2,cube3],'Multiple')
     assert sorted(self.MClass.Multiple)==[cube2,cube3]
     
     #get the MetaNode back from the cube1 connection and retest
     found=r9Meta.getConnectedMetaNodes(cube1)[0]
     assert isinstance(found,r9Meta.MetaClass)
     assert found.mNode=='MetaClass_Test'
     assert found.mClass=='MetaClass'
     assert sorted(found.Multiple)==[cube2,cube3]
 
     #connect something else to Singluar - cleanCurrent=True by default so unhook cube1
     self.MClass.connectChild(cube2,'Singluar')
     assert self.MClass.Singluar==[cube2]
     assert not cmds.attributeQuery('MetaClassTest',node=cube1,exists=True) #cleaned up after ourselves?
     self.MClass.connectChildren([cube3,cube4],'Singluar')
     assert sorted(self.MClass.Singluar)==[cube2,cube3,cube4]
     
     #setAttr has cleanCurrent and force set to true so remove all current connections to this attr
     self.MClass.Singluar=cube1
     assert self.MClass.Singluar==[cube1]
     try:
         #still thinking about this....if the attr isn't a multi then
         #the __setattr__ will fail if you pass in a lots of nodes
         self.MClass.Singluar=[cube1,cube2,cube3]
     except:
         assert True
     
     self.MClass.Multiple=[cube1,cube4]
     assert sorted(self.MClass.Multiple)==[cube1,cube4]
Exemplo n.º 38
0
def jointStuff_meta():
    ml_joints = cgmMeta.validateObjListArg(
        mc.ls(sl=1), mayaType='joint'
    )  #...gets us a validated meta data list of our selection

    for i, mJnt in enumerate(ml_joints):
        mJnt.rename("ourChain_{0}_jnt".format(i))
        mi_crv = r9Meta.MetaClass(mc.circle(normal=[1, 0, 0], ch=0)[0])
        mc.parent(mi_crv.mNode, mJnt.mNode)
        mi_crv.rename('{0}_crv'.format(
            mJnt.p_nameBase))  #...p_nameBase property cgmMeta only
        mc.delete(
            mc.parentConstraint(mJnt.mNode, mi_crv.mNode,
                                maintainOffset=False))

        #...loc
        mJnt.doLoc()  #..doLoc cgmMeta only

        #...same data storage
        mJnt.connectChildNode(mi_crv, 'curveObject', 'targetJoint')
Exemplo n.º 39
0
        def _iterate_(self):
            self.call2_func = self.test2_func
            mObj = r9Meta.MetaClass(name="obj", nodeType='transform')
            for i in range(self.int_targetCount):
                self.progressBar_set(status=("Pass 1: Substantiating Call %i" %
                                             i),
                                     progress=i,
                                     maxValue=self.int_targetCount)
                mObj.addAttr('test_{0}'.format(i), attrType='string')

                t1 = time.clock()
                n1 = self.test1_func(mObj)
                t2 = time.clock()
                self.l_times_1.append(t2 - t1)

                t1 = time.clock()
                #self.l_roots_2.extend( [self.test2_func(self._toCall)] )
                self.call2_func(mObj)
                t2 = time.clock()
                self.l_times_2.append(t2 - t1)
Exemplo n.º 40
0
def get_scene_module_heirarchy(asMeta=True):
    _str_func = 'get_scene_module_heirarchy'

    _md_heirachy = {}
    _ml_puppets = r9Meta.getMetaNodes(mTypes=['cgmRigPuppet'],
                                      nTypes=['transform', 'network'])

    for mPuppet in _ml_puppets:  #...find our roots
        if asMeta:
            k = mPuppet
        else:
            k = mPuppet.mNode

        ml_initialModules = mPuppet.UTILS.modules_get(mPuppet)

        if not ml_initialModules:
            _md_heirachy[k] = {}
        else:
            _md_heirachy[k] = get_puppet_heirarchy_context(
                ml_initialModules[0], 'root', asList=False, report=False)

    #cgmGEN.walk_dat(_md_heirachy, _str_func)
    return _md_heirachy
Exemplo n.º 41
0
def getNodesOverload(poseObj, nodes, *args):

    # NOTE: poseObj already has an attr 'metaRig' which is filled
    # automatically in the main buildInternalPoseData() call
    metaNode = poseObj.metaRig
    currentSelection = cmds.ls(sl=True, l=True)
    filteredNodes = []

    if not issubclass(type(metaNode), r9Meta.MetaHIKControlSetNode):
        # see if we have a controller selected thats connected to an
        # appropriate subMetaSystem
        if not currentSelection:
            result = cmds.confirmDialog(
                title='selection hint missing',
                button=[
                    'L_Fingers', 'R_Fingers', 'L_Toes', 'R_Toes', 'Cancel'
                ],
                message=
                'We need a hint to ID which finger system to load/save the data too,\nIdeally you should select something in the correct limb system that we can use',
                defaultButton='Cancel',
                cancelButton='Cancel',
                icon='information',
                dismissString='Cancel')
            if result == 'L_Fingers':
                msystem = metaNode.L_ArmSystem
            elif result == 'R_Fingers':
                msystem = metaNode.R_ArmSystem
            elif result == 'L_Toes':
                msystem = metaNode.R_LegSystem
            elif result == 'R_Toes':
                msystem = metaNode.R_LegSystem
        else:
            msystem = r9Meta.getConnectedMetaNodes(cmds.ls(sl=True))[0]

        # from selected node, or selected system find our finger / toe subSystem
        if not msystem.systemType.lower() in ['fingers', 'toes']:
            fingersystem = msystem.getChildMetaNodes(mAttrs=['systemType'])
            if fingersystem:
                fingersystem = fingersystem[0]
        else:
            fingersystem = msystem
        if not fingersystem or not fingersystem.systemType.lower() in [
                'fingers', 'toes'
        ]:
            raise IOError(
                'no finger / toe metaSubSystems found from the selected node')

        print '\nFinger : PoseOverload Handler : %s >> subSystem: %s' % (
            metaNode, fingersystem)

        filteredNodes = fingersystem.getChildren()

#         if cmds.getAttr('%s.mirrorSide' % currentSelection[0]) == 1:
#             print '\nFinger : PoseOverload Handler : %s >> side: Left' % metaNode
#             filteredNodes = metaNode.L_ArmSystem.L_FingerSystem.getChildren()
#         elif cmds.getAttr('%s.mirrorSide' % currentSelection[0]) == 2:
#             print '\nFinger : PoseOverload Handler : %s >> side: Right' % metaNode
#             filteredNodes = metaNode.R_ArmSystem.R_FingerSystem.getChildren()

# modify the actual PoseData object, changing the data to be matched on index
# rather than using the standard name or metaMap matching
    poseObj.metaPose = False
    poseObj.matchMethod = 'mirrorIndex_ID'
    poseObj.mirrorInverse = True  # set the mirror inverse code to active to cope with mirror differences between Left and Right fingers

    return filteredNodes
Exemplo n.º 42
0
import Red9.core.Red9_Meta as r9Meta
import maya.cmds as cmds
#reload(r9Meta)
'''
####################################################################
#  METHOD 1:  ADDING CONTROLS : using the mRig Presets
####################################################################

Easy method, these basic types are defined for speed, but really the
method below is the one for more experienced people as it's completely
expandable and flexible. Saying that if you want these presets expanding
just let me know. They certainly stop you having to mess with the mirrorData!
'''

#make the base MRig
mRig = r9Meta.MetaRig(name='MORPHEUS')

#Left / Right Pairs
mRig.addFootCtrl('morpheusRig_v01_00:m_leg_IKleg_Cntrl_l_anim', 'Left')
mRig.addFootCtrl('morpheusRig_v01_00:m_leg_IKleg_Cntrl_r_anim', 'Right')
mRig.addKneeCtrl('morpheusRig_v01_00:m_leg_PV_Cntrl_l_anim', 'Left')
mRig.addKneeCtrl('morpheusRig_v01_00:m_leg_PV_Cntrl_r_anim', 'Right')
#note here we're supplying axis that determine which axis are managed in the mirror code
#without these the default axis set is used and inverted during mirror
mRig.addWristCtrl('morpheusRig_v01_00:m_arm_IK_Cntrl_l_anim',
                  'Left',
                  axis='translateX,translateY,translateZ')
mRig.addWristCtrl('morpheusRig_v01_00:m_arm_IK_Cntrl_r_anim',
                  'Right',
                  axis='translateX,translateY,translateZ')
mRig.addElbowCtrl('morpheusRig_v01_00:m_arm_PV_Cntrl_l_anim', 'Left')
Exemplo n.º 43
0
from cgm.core import cgm_PuppetMeta as cgmPM
import Red9.core.Red9_Meta as r9Meta

from cgm.core.classes import SnapFactory as Snap
reload(Snap)
from cgm.core.rigger import ModuleControlFactory as mControlFactory
reload(mControlFactory)
from cgm.lib import search
obj = mc.ls(sl=True)[0] or False
obj = ''
objList = []

#>>> Modules
#=======================================================
m1 = cgmPM.cgmModule(name='test')
m1 = r9Meta.MetaClass('spine_part')
m1.setState('skeleton')
m1.getPartNameBase()
m1.modulePuppet.getGeo()
mObj = cgmMeta.cgmObject(control)
i_loc = mObj.doLoc()
i_loc.rx = i_loc.rx + 90
mObj.doCopyTransform(i_loc.mNode)
mObj.mNode
mObj.getAttr('asdfasdf')

#>>> Testing control registering
control = 'cog_controlCurve'
mControlFactory.registerControl(mc.ls(sl=True)[0])
mControlFactory.registerControl(control)
for i in range(2):
Exemplo n.º 44
0
def refreshHUD():
    r9Meta.monitorHUDManagement('refreshHeadsUp')
Exemplo n.º 45
0
            log.debug("|{0}| >> trying shape | {1}".format(_str_func,attr))                            
            try:
                if ATTR.has_attr(self.mShape.mNode,attr):
                    log.debug("|{0}| >> trying shape | {1}".format(_str_func,attr))                            
                    return r9Meta.MetaClass.__getattribute__(self.mShape,attr, value, force=True, **kws)
            except Exception,err:
                log.debug("|{0}| >> shape attempt err: {1}".format(_str_func,err))
        return r9Meta.MetaClass.__setattr__(self,attr, value, force=True, **kws)
        
        
        try:
            _str_func = 'cgmLight.__setattr__'            
            log.debug("|{0}| >> trying dag | {1}".format(_str_func,attr))
            
            r9Meta.MetaClass.__setattr__(self,attr, value, force=True, **kws)
        except Exception,err:
            try:
                log.debug("|{0}| >> trying shape | {1}".format(_str_func,attr))                            
                r9Meta.MetaClass.__getattribute__(self.mShape,attr, value, force=True, **kws)
            except Exception,err:
                pass
        #finally:
        #    log.debug("|{0}| >> err: {1}".format(_str_func,err))
        #    return
        
        
#=========================================================================      
# R9 Stuff - We force the update on the Red9 internal registry  
#=========================================================================    
r9Meta.registerMClassInheritanceMapping()#Pushes our classes in
Exemplo n.º 46
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(), 'tests', 'testFiles', 'MetaRig_anim_jump.mb'), open=True, f=True)
     self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
     self.poseFolder = getPoseFolder()
Exemplo n.º 47
0
'''
#Find the Jaw controller from the mRig
mRig.Facial.FACE_Jaw

#Get all controllers wired to the MetaRigNode
#NOTE this currently has no walk function so will only return direct wired controllers
#so in this example from the mRig it will not return the Facial Controllers
mRig.getRigCtrls()

#or facial controllers
mRig.Facial.getRigCtrls()

#finally to get the mRig node back from any of the Controllers
#Note that this command has source,destination args to clamp 
#the direction of the search
r9Meta.getConnectedMetaNodes(cmds.ls(sl=True))[0]



'''
##############################################################################
#   CONCLUSION : why is this good???
##############################################################################

So you now have a basically setup MetaRig. If you open the AnimationUI
and go to the Hierarchy Tab switch the MetaRig checkbox on, this will switch all
the back-end code to filter for the MetaNode systems. The hierarchy filters for
most of the setups still require you to select a node to act on, in case you have 
multiple characters in the scene, but as long as its a member of the mRig then 
hierarchy functions will all work on the mRig as root.
Exemplo n.º 48
0
 def test_getMetaNodes_mAttrs(self):
     assert r9Meta.getMetaNodes(mAttrs='version=1')[0].mNodeID=='MetaRig_Test'
Exemplo n.º 49
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','MetaRig_anim_jump.mb'),open=True,f=True)
     self.mRig = r9Meta.getMetaNodes(mTypes=r9Meta.MetaRig)[0]
     self.poseFolder = getPoseFolder()
mLambert.diffuse     #>>0.5
mLambert.color       #>>(0.5, 0.5, 0.5)
mLambert.color=(1,0.2,0.2) #sets the compound float3 attr

mLambert.diffuse=0.7 #sets the diffuse directly
mLambert.diffuse     #>>0.7


'''
General
===============================================================
Generic call to find all mClass nodes in the scene. This also takes
a type argument so you can return only nodes of a given class type
NOTE: 'type' the given class type must exist as a key in the RED9_META_REGISTRY 
'''
mClass = r9Meta.getMetaNodes()
mClass = r9Meta.getMetaNodes(dataType='mClass',mTypes='MetaRig')
#Return only MetaRig class objects. If the dataType isn't 'mClass' then we
#return the standard MayaNodes, else we return the mClass initialized to the class object

#Connect the selected Maya Nodes to the mClass node under a Multi-Message attr 'mirrorLeft'
node.connectChildren(cmds.ls(sl=True),'mirrorLeft')
node.mirrorLeft    #will now return all connected nodes to the message attr

#Connect the selected Maya Node to the mClass node under a NON Multi-Message attr 'simpleChild'
#this is what most of the MRig calls use as a single connection describes a single MayaNode
node.connectChild(cmds.ls(sl=True)[0],'simpleChild')
node.simpleChild    #will now return all connected nodes to the message attr

r9Meta.getConnectedMetaNodes(nodes, source=True, destination=True, dataType='mClass')
Exemplo n.º 51
0
        
    def __bindData__(self):
        self.addAttr('myRigType','')
        self.addAttr('myFloat', attrType='float', min=0, max=5)
        self.addAttr('myEnum', enumName='A:B:D:E:F', attrType='enum')

    def getChildren(self, walk=False, mAttrs=None, cAttrs=None):
        '''
        overload call for getChildren
        '''
        pass
       
    def getSkeletonRoots(self):
        '''
        get the Skeleton Root, used in the poseSaver. By default this looks
        for a message link via the attr "exportSkeletonRoot" to the skeletons root jnt
        always returns a list!
        '''
        pass 
        
    def getNodeConnectionMetaDataMap(self, node, mTypes=[]):  
        pass
    
        
#========================================================================
# This HAS to be at the END of this module so that the RED9_META_REGISTRY
# picks up all inherited subclasses when Red9.core is imported
#========================================================================   
r9Meta.registerMClassInheritanceMapping()
#r9Meta.registerMClassNodeMapping(nodes='myNewNodeType')
Exemplo n.º 52
0
    def getAndMove(loc, targets=None, mode=None, forceBBCenter=False):

        log.debug("|{0}| >> mode: {1} | targets: {2}".format(
            _str_func, mode, targets))
        if not targets:
            raise ValueError, "Must have targets"

        _kws = {'target': loc, 'move': True, 'rotate': True}

        if mode == 'fromTarget':
            _d = POS.get_info(targets[0])
            _kws['infoDict'] = _d

        elif mode == 'midPoint':
            if len(targets) == 1:
                _d = POS.get_info(targets[0], boundingBox=True)
                _kws['infoDict'] = _d

            elif not len(targets) >= 2:
                raise ValueError, "midPoint mode must have at least two targets"
            else:
                _d = get_midPointDict(targets, forceBBCenter)
                _kws['infoDict'] = _d

        elif mode == 'closestPoint':
            if not len(targets) >= 2:
                raise ValueError, "midPoint mode must have at least two targets"

            _d = {
                'position':
                DIST.get_by_dist(targets[0],
                                 targets[1:],
                                 resMode='pointOnSurface')
            }
            _kws['infoDict'] = _d
            _kws['rotate'] = False

        elif mode == 'closestTarget':
            if not len(targets) >= 3:
                raise ValueError, "midPoint mode must have at least three targets"

            _d = POS.get_info(
                DIST.get_by_dist(targets[0], targets[1:], resMode='object'))
            _d['rotateOrder'] = False
            _d['rotateAxis'] = False

            _kws['infoDict'] = _d

        elif mode == 'rayCast':
            _dbuffer = r9Meta.MetaClass(_loc).cgmLocDat
            _d = {}
            _p = POS.get_uv_position(_target[0], _dbuffer['uv'])
            if _dbuffer.get('offsetDist'):
                _v = POS.get_uv_normal(_target[0], _dbuffer['uv'])
                _dist = _dbuffer.get('offsetDist')
                _p = DIST.get_pos_by_vec_dist(_p, _v, _dist)
            _d['position'] = _p
            _kws['infoDict'] = _d
            _kws['rotate'] = False
        else:
            log.error("|{0}| >> unknown mode: {1}".format(_str_func, _mode))
            return False

        try:
            return position(**_kws)
        except Exception, err:
            log.error("|{0}| >> loc: {1}".format(_str_func, loc))
            cgmGeneral.log_info_dict(_kws['infoDict'],
                                     "{0} >> {1}".format(_str_func, mode))
            log.error("|{0}| >> err: {1}".format(_str_func, _err))
            return False
Exemplo n.º 53
0
def create(target=None,
           position=None,
           tag=True,
           setMatchTarget=True,
           pivot='rp',
           mode='fromTarget',
           name=None):
    """
    Return the short name of an object

    :parameters
        :target(str): What to create a loc from
        :tag(bool): Whether to tag for updating or special naming
        :pivot: Whether to force it to be created at the rotatePivot, scalePivot or BoundingBox center
        :mode
            fromTarget -- can be component or transform
            midPoint -- mid point of specfied targets
            closestPointOnTarget -- closest point from source to targets
            closestTarget -- closest target from source
            rayCast -- create a rayCast locator. For more options, see LOCINATOR
            attachPoint -- Create a rayCast follicle, and parent your loc to that.
        :setMatchTarget
    :returns
        short name(str)
    """
    _str_func = "create"

    try:
        if mode == 'rayCast':
            #_catch = mc.group(em=True)
            class rayCastLoc(cgmDrag.clickMesh):
                def release_post_insert(self):
                    #ATTR.set_messagse(_catch, 'tmpMsg', self.l_created[-1])
                    _loc = self.l_created[-1]
                    _mLoc = r9Meta.MetaClass(_loc)
                    _buffer = _mLoc.cgmLocDat
                    _target = ATTR.get_message(_loc, 'meshTarget')[0]
                    _loc = mc.rename(
                        _loc, "{0}_u{1}_v{2}_rayCast_loc".format(
                            coreNames.get_base(_target),
                            "{0:.4f}".format(_buffer['uv'][0]),
                            "{0:.4f}".format(_buffer['uv'][1]),
                        ))
                    self.dropTool()

            rayCastLoc(create='locator')
            #_res = ATTR.get_message(_catch,'tmpMsg')[0]
            return True

        _loc = mc.spaceLocator()[0]

        if position:
            mc.move(position[0], position[1], position[2], _loc, ws=True)
            if name:
                return mc.rename(_loc, name)
            return mc.rename("pos_loc")
        if not target:
            if name:
                return mc.rename(_loc, name)
            return mc.rename(_loc, "world_center_loc")

        _targets = VALID.objStringList(target,
                                       noneValid=False,
                                       calledFrom=__name__ + _str_func +
                                       ">> validate target")
        #_targets = VALID.listArg(target)
        if tag or mode:
            _mi_loc = r9Meta.MetaClass(_loc)
            if not _mi_loc.hasAttr('cgmLocDat'):
                _mi_loc.addAttr('cgmLocDat', attrType='string')

        log.debug("|{0}| >> {1} mode...".format(_str_func, mode))

        if mode in ['fromTarget', 'attachPoint']:
            if len(_targets) != 1:
                log.warning("|{0}| >> mode: {1} | targets: {2} | ".format(
                    _str_func, mode, _targets))
                raise ValueError, "May only have one target for mode: {0} | targets: {1}".format(
                    mode, _targets)

            _target = _targets[0]

            if name:
                _loc = mc.rename(_loc, name)
            else:
                _loc = mc.rename(
                    _loc,
                    "{0}_fromTarget_loc".format(coreNames.get_base(_target)))

            if tag:  #store info
                ATTR.store_info(_loc,
                                'cgmName',
                                coreNames.get_base(_target),
                                attrType='string',
                                lock=True)
                ATTR.store_info(_loc, 'cgmLocMode', 'fromTarget', lock=True)
                ATTR.set_message(_loc, 'cgmLocSource', _target, 'cgmLocDat')
                if not VALID.is_component(_target) and setMatchTarget:
                    SNAP.matchTarget_set(_target, _loc)
                #_d = r9Meta.MetaClass(_loc).cgmLocDat

                _res = update(_loc)
            _res = update(_loc, _target, 'fromTarget')

            if mode == 'attachPoint':

                class follicleAttach(cgmDrag.clickMesh):
                    def release_post_insert(self):
                        _str_funcName = 'follicleAttach.release'
                        """if not self.b_dragStoreMode:#If not on drag, do it here. Otherwise do it on update
                            if self._posBuffer:
                                self.l_return.extend(self._posBuffer)
                                if self._posBufferRaw:
                                    self.l_returnRaw.extend(self._posBufferRaw)
                                else:
                                    self.l_returnRaw.extend(self._posBuffer)
                        
                            if self._createModeBuffer:
                                self.l_created.extend(self._createModeBuffer)"""

                        for pos in self.l_returnRaw:
                            log.debug("|{0}|...pos {1}".format(
                                _str_funcName, pos))
                            for i, m in enumerate(self.d_meshPos.keys()):
                                log.debug("|{0}|...mesh: {1}".format(
                                    _str_funcName, m))
                                for i2, h in enumerate(self.d_meshPos[m]):
                                    if h == pos:
                                        log.debug("Found follicle match!")
                                        try:
                                            _set = [
                                                m, self.d_meshUV[m][i2],
                                                "{0}_u{1}_v{2}".format(
                                                    coreNames.get_short(m),
                                                    "{0:.4f}".format(
                                                        self.d_meshUV[m][i2]
                                                        [0]), "{0:.4f}".format(
                                                            self.d_meshUV[m]
                                                            [i2][1]))
                                            ]
                                            self._l_folliclesToMake.append(
                                                _set)
                                            log.debug("|{0}|...uv {1}".format(
                                                _str_funcName, _set))
                                        except Exception, err:
                                            log.error(
                                                "|{0}| >> Failed to query uv for hit {2} on shape {2} | err:{1}"
                                                .format(
                                                    _str_funcName, err, pos,
                                                    m))
                            if self._l_folliclesToMake:
                                for f_dat in self._l_folliclesToMake:
                                    _follicle = NODES.add_follicle(
                                        f_dat[0], f_dat[2])
                                    log.debug(
                                        "|finalize| >> Follicle created: {0}".
                                        format(_follicle))
                                    ATTR.set(_follicle[0], 'parameterU',
                                             f_dat[1][0])
                                    ATTR.set(_follicle[0], 'parameterV',
                                             f_dat[1][1])
                                    mc.parent(_loc, _follicle[0])
                        mc.delete(self.l_created)
                        self.dropTool()

                follicleAttach()

            return _loc
        elif not _targets:
            raise ValueError, "Must have targets for mode: {0} | targets: {1}".format(
                mode, _targets)
Exemplo n.º 54
0
 def test_getMetaNodes(self):
     nodes=sorted(r9Meta.getMetaNodes(),key=lambda x: x.mClass.upper())
     assert [n.mClass for n in nodes]==['MetaClass','MetaFacialRig','MetaFacialRigSupport','MetaRig','MetaRigSupport']
Exemplo n.º 55
0
#===============================================================
# Basic MetaClass Use:
#===============================================================

import Red9.core.Red9_Meta as r9Meta
import maya.cmds as cmds
reload(r9Meta)

#make a new blank mClass MayaNode
node = r9Meta.MetaClass()
node.select()
'''
If a Maya node is passed in and it has the mClass attribute of a class
thats known then the following call with return the correct class object.

NOTE: there's a global RED9_META_REGISTERY which holds registered mClasses
found at start using itersubclasses, called in the r9Meta.registerMClassInheritanceMapping()
'''
new = r9Meta.MetaClass(cmds.ls(sl=True)[0])
type(new)
#// <class 'Red9_Meta.MetaClass'>
'''
Attribute Handling
===============================================================
Attribute management for the node. If no type flag is passed in
then the code automatically figures what attrType to add from the
given value. Note that the attribute is serialized to the Maya
Node AND the class object. All attributes are managed
'''
#standard attribute handling
node.addAttr('stringTest', "this_is_a_string")  #create a string attribute
Exemplo n.º 56
0
 def setup(self):
     cmds.file(os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','Meta_Network_WalkTest.ma'),open=True,f=True)
     self.mRig=r9Meta.getMetaNodes(mTypes='MetaRig')[0]
Exemplo n.º 57
0
def deleteHUD():
    r9Meta.monitorHUDManagement('delete')
Exemplo n.º 58
0
 def test_getParentSystems(self):
     assert r9Meta.getConnectedMetaSystemRoot('L_Fingers_System').mNode=='MetaRig'
     assert r9Meta.getConnectedMetaSystemRoot('L_Toes_System').mNode=='MetaRig'
     
     assert self.mRig.C_Spine_System.L_Arm_System.getParentMetaNode().mNodeID=='C_Spine_System'
     assert self.mRig.C_Spine_System.L_Arm_System.L_Arm_Support.getParentMetaNode().mNodeID=='L_Arm_System'
Exemplo n.º 59
0
import cgm.core
cgm.core._reload()
from cgm.core import cgm_Meta as cgmMeta
from cgm.core import cgm_PuppetMeta as cgmPM
import Red9.core.Red9_Meta as r9Meta
from cgm.core.rigger import RigFactory as Rig
#======================================================================
issubclass(type(i_rig._i_masterControl), cgmMeta.cgmObject)
cgmMeta.validateObjArg(i_rig._i_masterControl.mNode, cgmMeta.cgmObject)
cgmMeta.log.setLevel(cgmMeta.logging.INFO)
cgmMeta.log.setLevel(cgmMeta.logging.DEBUG)
jFactory.log.setLevel(jFactory.logging.DEBUG)
m1 = r9Meta.MetaClass('l_clav_part')
m1 = r9Meta.MetaClass('r_clav_part')
m1 = r9Meta.MetaClass('l_arm_part')
m1 = r9Meta.MetaClass('r_arm_part')
m1.rigDelete()
m1.doRig()
m1 = r9Meta.MetaClass('l_arm_part')
Rig.get_report(m1)
m1.rigNull.blendJoints
m1.rigConnect()
m1.isRigged()
m1.rigDelete()
m1.rigNull.moduleJoints
i_rig = Rig.go(m1, forceNew=False, autoBuild=False)  #call to do general rig
m1.setState('skeleton', forceNew=True)
m1.getState()
m1.modulePuppet.getModuleFromDict({'moduleType': 'thumb'})
m1.modulePuppet.getModuleFromDict(moduleType=['torso', 'spine'])
m1.modulePuppet.getModuleFromDict(checkDict={'moduleType': 'head'})
Exemplo n.º 60
0
def process_blocks_rig(f=None, blocks=None, postProcesses=1, **kws):
    _str_func = 'process_blocks_rig'
    #cgmGEN.log_start(_str_func)

    mFile = PATHS.Path(f)

    if not mFile.exists():
        raise ValueError, "Invalid file: {0}".format(f)

    _path = mFile.asFriendly()

    log.info("Good Path: {0}".format(_path))
    """
    if 'template' in _path:
        _newPath = _path.replace('template','build')
    else:"""
    _name = mFile.name()
    _d = mFile.up().asFriendly()
    log.debug(cgmGEN.logString_msg(_str_func, _name))
    _newPath = os.path.join(_d,
                            _name + '_BUILD.{0}'.format(mFile.getExtension()))

    log.info("New Path: {0}".format(_newPath))

    #cgmGEN.logString_msg(_str_func,'File Open...')
    mc.file(_path, open=1, f=1)

    #cgmGEN.logString_msg(_str_func,'Process...')
    T1 = time.time()

    get_time = cgmGEN.get_timeString

    try:
        if not blocks:
            #cgmGEN.logString_sub(_str_func,'No blocks arg')

            ml_masters = r9Meta.getMetaNodes(mTypes='cgmRigBlock',
                                             nTypes=['transform', 'network'],
                                             mAttrs='blockType=master')

            for mMaster in ml_masters:
                #cgmGEN.logString_sub(_str_func,mMaster)

                RIGBLOCKS.contextual_rigBlock_method_call(mMaster,
                                                          'below',
                                                          'atUtils',
                                                          'changeState',
                                                          'rig',
                                                          forceNew=False)

                ml_context = BLOCKGEN.get_rigBlock_heirarchy_context(
                    mMaster, 'below', True, False)
                l_fails = []

                for mSubBlock in ml_context:
                    _state = mSubBlock.getState(False)
                    if _state != 4:
                        l_fails.append(mSubBlock)

                if l_fails:
                    log.info('The following failed...')
                    pprint.pprint(l_fails)
                    raise ValueError, "Modules failed to rig: {0}".format(
                        l_fails)

                log.info("Begin Rig Prep cleanup...")
                '''
        
                Begin Rig Prep process
        
                '''
                mPuppet = mMaster.moduleTarget  #...when mBlock is your masterBlock

                #str(datetime.timedelta(seconds=v))

                if postProcesses:
                    l_timeReports = []

                    if kws.get('mirrorVerify', 1):
                        print(cgmGEN._str_hardBreak)

                        log.info('mirror_verify...')
                        t1 = time.clock()
                        mPuppet.atUtils('mirror_verify', 1)
                        t2 = time.clock()
                        l_timeReports.append(
                            ['mirrorVerify', get_time(t2 - t1)])

                    if kws.get('gatherSpaceDrivers', 1):
                        log.info('collect worldSpace...')
                        t1 = time.clock()
                        mPuppet.atUtils('collect_worldSpaceObjects')
                        t2 = time.clock()
                        l_timeReports.append(
                            ['gatherSpaceDrivers',
                             get_time(t2 - t1)])

                    if kws.get('qss', 1):
                        print(cgmGEN._str_hardBreak)

                        log.info('qss...')
                        t1 = time.clock()
                        mPuppet.atUtils('qss_verify',
                                        puppetSet=1,
                                        bakeSet=1,
                                        deleteSet=1,
                                        exportSet=1)
                        t2 = time.clock()
                        l_timeReports.append(['qss', get_time(t2 - t1)])

                    if kws.get('deleteUnusedShaders'):
                        print(cgmGEN._str_hardBreak)

                        log.info('Delete unused shaders...')
                        t1 = time.clock()
                        MRSPOST.shaders_getUnused(delete=True)
                        t2 = time.clock()
                        l_timeReports.append(
                            ['deleteUnusedShaders',
                             get_time(t2 - t1)])

                    if kws.get('deleteCGMLightGroup'):
                        print(cgmGEN._str_hardBreak)

                        log.info('Delete cgm shaders...')
                        t1 = time.clock()
                        try:
                            mc.delete('cgmLightGroup')
                        except:
                            pass

                        t2 = time.clock()
                        l_timeReports.append(
                            ['deleteUnusedShaders',
                             get_time(t2 - t1)])

                    if kws.get('proxyMesh', 1):
                        print(cgmGEN._str_hardBreak)

                        log.info('proxyMesh...')
                        t1 = time.clock()
                        mPuppet.atUtils('proxyMesh_verify', 1)
                        t2 = time.clock()
                        l_timeReports.append(['proxyMesh', get_time(t2 - t1)])

                    if kws.get('puppetMesh', 1):
                        print(cgmGEN._str_hardBreak)

                        log.info('puppetMesh...')
                        t1 = time.clock()
                        mPuppet.atUtils('puppetMesh_create', **{
                            'unified': True,
                            'skin': True
                        })
                        t2 = time.clock()
                        l_timeReports.append(['puppetMesh', get_time(t2 - t1)])

                    if kws.get('hideVisSub', 1):
                        print(cgmGEN._str_hardBreak)

                        log.info('hideVisSub...')
                        t1 = time.clock()

                        for i, mSubBlock in enumerate(ml_context):
                            if not i:
                                continue
                            try:
                                mSubBlock.moduleTarget.rigNull.settings.visSub = 0
                            except Exception, err:
                                log.error(mSubBlock)
                                log.error(err)

                        t2 = time.clock()
                        l_timeReports.append(['hideVisSub', get_time(t2 - t1)])

                    if kws.get('hideJointAxis'):
                        print(cgmGEN._str_hardBreak)

                        log.info('Hide axis on all joints...')
                        t1 = time.clock()

                        for mObj in cgmMeta.asMeta(mc.ls(type='joint')):
                            mObj.displayLocalAxis = 0
                        t2 = time.clock()
                        l_timeReports.append(
                            ['hideJointAxis',
                             get_time(t2 - t1)])

                    if kws.get('removeRefs'):
                        print(cgmGEN._str_hardBreak)

                        log.info('Remove Refs...')
                        t1 = time.clock()

                        MRSPOST.refs_remove()

                        t2 = time.clock()
                        l_timeReports.append(['removeRefs', get_time(t2 - t1)])
                    if kws.get('ihi', 1):
                        print(cgmGEN._str_hardBreak)

                        log.info('ihi...')
                        t1 = time.clock()

                        mPuppet.atUtils('rigNodes_setAttr', 'ihi', 0)

                        t2 = time.clock()
                        l_timeReports.append(['ihi', get_time(t2 - t1)])
                    if kws.get('connectRig', 1):
                        print(cgmGEN._str_hardBreak)

                        log.info('rig connect...')
                        t1 = time.clock()

                        mPuppet.atUtils('rig_connectAll')

                        t2 = time.clock()
                        l_timeReports.append(['connectRig', get_time(t2 - t1)])
                    log.info('...')

                    if kws.get('controllerVerify', 1):
                        print(cgmGEN._str_hardBreak)

                        if cgmGEN.__mayaVersion__ >= 2018:
                            log.info('controller_verify...')
                            t1 = time.clock()

                            mPuppet.atUtils('controller_verify')
                            log.info('...')

                            t2 = time.clock()
                            l_timeReports.append(
                                ['controllerVerify',
                                 get_time(t2 - t1)])

                    if kws.get('blocksGather', 1):
                        print(cgmGEN._str_hardBreak)

                        t1 = time.clock()
                        mGrp = BUILDERUTILS.gather_rigBlocks()

                        if kws.get('blocksParent', 1):
                            mGrp.p_parent = mPuppet
                            mGrp.v = False
                        t2 = time.clock()
                        l_timeReports.append(
                            ['blocksGather', get_time(t2 - t1)])

                    if kws.get('worldGather'):
                        print(cgmGEN._str_hardBreak)

                        log.info('Gathering world dags...')
                        t1 = time.clock()

                        MRSPOST.gather_worldStuff()
                        t2 = time.clock()
                        l_timeReports.append(
                            ['worldGather', get_time(t2 - t1)])

                    if kws.get('deleteUnusedLayers'):
                        print(cgmGEN._str_hardBreak)
                        log.info('Deleting Unused Layers...')
                        t1 = time.clock()

                        MRSPOST.layers_getUnused(delete=True)
                        t2 = time.clock()
                        l_timeReports.append(
                            ['deleteUnusedLayers',
                             get_time(t2 - t1)])
                    print(cgmGEN._str_hardBreak)
                    print(cgmGEN.logString_sub("Batch", 'Times'))
                    for i, pair_time in enumerate(l_timeReports):
                        print(" {0} | ['{1}'] | {2} ".format(
                            i, pair_time[0], pair_time[1]))

    except Exception, err:
        log.error(err)