コード例 #1
0
ファイル: __init__.py プロジェクト: GuidoPollini/MuTools
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 '=============================================================================='    
コード例 #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']
コード例 #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']
コード例 #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'
コード例 #5
0
ファイル: __init__.py プロジェクト: GuidoPollini/MuTools
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 '============================================='    
コード例 #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']  
コード例 #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']  
コード例 #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']
コード例 #9
0
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)
コード例 #10
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.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
コード例 #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)
コード例 #12
0
ファイル: Red9_PoseTests.py プロジェクト: Bumpybox/Tapp
 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)
コード例 #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()
コード例 #14
0
ファイル: Red9_PoseTests.py プロジェクト: sgodanas/cgm_tools
 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
コード例 #15
0
ファイル: test_base.py プロジェクト: sgodanas/cgm_tools
    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)
コード例 #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)	
コード例 #17
0
ファイル: locator_utils.py プロジェクト: sgodanas/cgm_tools
 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()
コード例 #18
0
ファイル: Red9_PoseTests.py プロジェクト: Bumpybox/Tapp
 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
コード例 #19
0
ファイル: Red9_PoseTests.py プロジェクト: xtoof/Tapp
    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)
コード例 #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)
コード例 #21
0
ファイル: Red9_MetaTests.py プロジェクト: miketon/SymLink
 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'] 
コード例 #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)
コード例 #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
コード例 #24
0
ファイル: rigging_utils.py プロジェクト: sgodanas/cgm_tools
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))
コード例 #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)
コード例 #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)
コード例 #27
0
ファイル: test_base.py プロジェクト: sgodanas/cgm_tools
    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)))
コード例 #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
コード例 #29
0
ファイル: test_base.py プロジェクト: sgodanas/cgm_tools
    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()
コード例 #30
0
    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
コード例 #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()
コード例 #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()
コード例 #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')))
コード例 #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)
コード例 #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
コード例 #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()
コード例 #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]
コード例 #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')
コード例 #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)
コード例 #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
コード例 #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
コード例 #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')
コード例 #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):
コード例 #44
0
def refreshHUD():
    r9Meta.monitorHUDManagement('refreshHeadsUp')
コード例 #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
コード例 #46
0
ファイル: Red9_PoseTests.py プロジェクト: sgodanas/cgm_tools
 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()
コード例 #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.
コード例 #48
0
 def test_getMetaNodes_mAttrs(self):
     assert r9Meta.getMetaNodes(mAttrs='version=1')[0].mNodeID=='MetaRig_Test'
コード例 #49
0
ファイル: Red9_PoseTests.py プロジェクト: Bumpybox/Tapp
 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()
コード例 #50
0
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')
コード例 #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')
コード例 #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
コード例 #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)
コード例 #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']
コード例 #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
コード例 #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]
コード例 #57
0
def deleteHUD():
    r9Meta.monitorHUDManagement('delete')
コード例 #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'
コード例 #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'})
コード例 #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)