Exemple #1
0
        def build_fk(self):
            #>>>> FK Segments
            ml_fkJoints = self.ml_fkJoints
            ml_controlsFK = self.ml_controlsFK

            ml_fkJoints[0].parent = self._go._i_constrainNull.controlsFK.mNode

            i_obj = ml_controlsFK[0]
            log.info(" %s controlFK : %s"%(self._str_reportStart,i_obj.p_nameShort))
            log.info(" %s controlFK : %s"%(self._str_reportStart,ml_fkJoints[0].p_nameShort))	    
            try:
                d_buffer = mControlFactory.registerControl(i_obj.mNode,shapeParentTo=ml_fkJoints[0].mNode,
                                                           mirrorSide=self._go._str_mirrorDirection, mirrorAxis="translateX",		                                           
                                                           makeAimable=True,typeModifier='fk') 
            except Exception,error: raise Exception,"Register control | %s"%error

            try:
                i_obj = d_buffer['instance']
                i_obj.axisAim = "%s+"%self._go._jointOrientation[0]
                i_obj.axisUp= "%s+"%self._go._jointOrientation[1]	
                i_obj.axisOut= "%s+"%self._go._jointOrientation[2]
                try:i_obj.drawStyle = 2#Stick joint draw style	    
                except:self.log_error("{0} Failed to set drawStyle".format(i_obj.p_nameShort))
                cgmMeta.cgmAttr(i_obj,'radius',hidden=True)
            except Exception,error: raise Exception,"Failed to set attrs | %s"%error

            try:
                for i_obj in ml_controlsFK:
                    i_obj.delete()
            except Exception,error: raise Exception,"Failed to delete | %s"%error

            self.ml_controlsAll.extend([ml_fkJoints[0]])	
Exemple #2
0
def duplicateJointInPlace(joint, asMeta = True):
    """
    :parameters:
        joint | str/instance
            Joint to duplicate
        asMeta | bool
            What to return as

    :returns:
        str or instance of new joint

    :raises:
        TypeError | if 'arg' is not a joint
    """ 
    _str_func_ = 'duplicateJointInPlace'
    try:
	mJoint = cgmMeta.validateObjArg(joint, mayaType = 'joint', mType = 'cgmObject')    
	
	#dup = mc.joint()
	mDup = mJoint.doDuplicate(parentOnly=True)
	
	#mDup.parent = mJoint.parent 
	#mc.delete(mc.parentConstraint(mJoint.mNode,mDup.mNode))
	'''
	('rotateOrder','rotateAxisX','rotateAxisY','rotateAxisZ',
	'inheritsTransform','drawStyle','radius',
	'jointTypeX','jointTypeY','jointTypeZ',
	'stiffnessX','stiffnessY','stiffnessZ',
	'preferredAngleX','preferredAngleY','preferredAngleZ',
	'jointOrientX','jointOrientY','jointOrientZ','segmentScaleCompensate','showManipDefault',
	'displayHandle','displayLocalAxis','selectHandleX','selectHandleY','selectHandleZ'),
	'''
	mDup.rotateOrder = mJoint.rotateOrder
	mDup.jointOrient = mJoint.jointOrient
	mDup.rotateAxis = mJoint.rotateAxis
	mDup.inheritsTransform = mJoint.inheritsTransform
	mDup.radius = mJoint.radius
	mDup.stiffness = mJoint.stiffness
	mDup.preferredAngle = mJoint.preferredAngle
	mDup.segmentScaleCompensate = mJoint.segmentScaleCompensate
	#mDup.displayHandle = mJoint.displayHandle
	#mDup.selectHandle = mJoint.selectHandle
	

	#Inverse scale...
	mAttr_inverseScale = cgmMeta.cgmAttr(mJoint,'inverseScale')
	_driver = mAttr_inverseScale.getDriver()
	if mAttr_inverseScale.getDriver():
	    cgmMeta.cgmAttr(mDup,"inverseScale").doConnectIn(_driver)
	
	mAttr_inverseScale.getDriver(mJoint)
	
	for attr in mJoint.getUserAttrs():
	    cgmMeta.cgmAttr(mJoint,attr).doCopyTo(mDup.mNode)
	
	if asMeta:
	    return mDup
	return mDup.mNode
    except Exception,error:
	raise Exception,"{0} | {1}".format(_str_func_,error)
Exemple #3
0
        def build_lockNHide(self):
            ml_controlsFK = self.ml_controlsFK

            #Lock set groups
            for mCtrl in ml_controlsFK:
                mCtrl._setControlGroupLocks()	
                cgmMeta.cgmAttr(mCtrl,"translate",lock=True,hidden=True,keyable=False)  	
                cgmMeta.cgmAttr(mCtrl,"v",lock=True,hidden=True,keyable=False) 
Exemple #4
0
        def build_connections(self):    
            ml_jointsToConnect = []
            ml_jointsToConnect.extend(self.ml_rigJoints)    

            for i_jnt in ml_jointsToConnect:
                i_jnt.overrideEnabled = 1		
                cgmMeta.cgmAttr(self._go._i_rigNull.mNode,'gutsVis',lock=False).doConnectOut("%s.%s"%(i_jnt.mNode,'overrideVisibility'))
                cgmMeta.cgmAttr(self._go._i_rigNull.mNode,'gutsLock',lock=False).doConnectOut("%s.%s"%(i_jnt.mNode,'overrideDisplayType'))    
 def _lockNHide(self):	
     autoLockNHide = self.d_kws['autoLockNHide']	    
     if autoLockNHide:
         if self.mi_control.hasAttr('cgmTypeModifier'):
             if self.mi_control.cgmTypeModifier.lower() == 'fk':
                 attributes.doSetLockHideKeyableAttr(self.mi_control.mNode,channels=['tx','ty','tz','sx','sy','sz'])
         if self.mi_control.cgmName.lower() == 'cog':
             attributes.doSetLockHideKeyableAttr(self.mi_control.mNode,channels=['sx','sy','sz'])
         cgmMeta.cgmAttr(self.mi_control,'visibility',lock=True,hidden=True)   
Exemple #6
0
 def _lockNHide(self):	
     autoLockNHide = self.d_kws['autoLockNHide']	    
     if autoLockNHide:
         if self.mi_control.hasAttr('cgmTypeModifier'):
             if self.mi_control.cgmTypeModifier.lower() == 'fk':
                 attributes.doSetLockHideKeyableAttr(self.mi_control.mNode,channels=['tx','ty','tz','sx','sy','sz'])
         if self.mi_control.cgmName.lower() == 'cog':
             attributes.doSetLockHideKeyableAttr(self.mi_control.mNode,channels=['sx','sy','sz'])
         cgmMeta.cgmAttr(self.mi_control,'visibility',lock=True,hidden=True)   
Exemple #7
0
        def build_lockNHide(self):
            ml_controlsFK = self.ml_controlsFK

            #Lock set groups
            for mCtrl in ml_controlsFK:
                mCtrl._setControlGroupLocks()
                cgmMeta.cgmAttr(mCtrl,
                                "translate",
                                lock=True,
                                hidden=True,
                                keyable=False)
                cgmMeta.cgmAttr(mCtrl,
                                "v",
                                lock=True,
                                hidden=True,
                                keyable=False)
        def _mirrorAttributeBridges_(self):
            addForwardBack = self.d_kws['addForwardBack']

            if addForwardBack:
                mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,
                                                          "forwardBack",
                                                          attrType='float',
                                                          keyable=True)
                try:
                    mPlug_forwardBackDriven = cgmMeta.validateAttrArg(
                        [self.mi_control, addForwardBack])['mi_plug']
                except Exception, error:
                    raise StandardError, "push pull driver | %s" % (error)

                if self.str_mirrorSide.lower() == 'right':
                    arg_forwardBack = "%s = -%s" % (
                        mPlug_forwardBackDriven.p_combinedShortName,
                        mPlug_forwardBackDriver.p_combinedShortName)
                else:
                    arg_forwardBack = "%s = %s" % (
                        mPlug_forwardBackDriven.p_combinedShortName,
                        mPlug_forwardBackDriver.p_combinedShortName)

                mPlug_forwardBackDriven.p_locked = True
                mPlug_forwardBackDriven.p_hidden = True
                mPlug_forwardBackDriven.p_keyable = False
                NodeF.argsToNodes(arg_forwardBack).doBuild()
Exemple #9
0
        def build_connections(self):
            ml_jointsToConnect = []
            ml_jointsToConnect.extend(self.ml_rigJoints)

            for i_jnt in ml_jointsToConnect:
                i_jnt.overrideEnabled = 1
                cgmMeta.cgmAttr(self._go._i_rigNull.mNode,
                                'gutsVis',
                                lock=False).doConnectOut(
                                    "%s.%s" %
                                    (i_jnt.mNode, 'overrideVisibility'))
                cgmMeta.cgmAttr(self._go._i_rigNull.mNode,
                                'gutsLock',
                                lock=False).doConnectOut(
                                    "%s.%s" %
                                    (i_jnt.mNode, 'overrideDisplayType'))
Exemple #10
0
        def _mirrorSetup(self):	
            str_mirrorSide = self.str_mirrorSide
            str_mirrorAxis = self.str_mirrorAxis
            b_makeMirrorable = self.b_makeMirrorable
            if str_mirrorSide is not None or b_makeMirrorable:
                for mObj in [self.mi_control] + self.ml_spacePivots:
                    #log.info("mirrorsetup: {0}".format(mObj.p_nameShort))
                    try:self.mi_control._verifyMirrorable()
                    except Exception,error:raise StandardError,"_mirrorSetup | %s"%(error)
                    l_enum = cgmMeta.cgmAttr(self.mi_control,'mirrorSide').p_enum
                    if str_mirrorSide in l_enum:
                        log.debug("%s >> %s >> found in : %s"%(self._str_funcCombined, "mirrorSetup", l_enum))		
                        try:
                            self.mi_control.mirrorSide = l_enum.index(str_mirrorSide)
                            log.debug("%s >> %s >> mirrorSide set to: %s"%(self._str_funcCombined,"mirrorSetup",self.mi_control.mirrorSide ))						    
                        except Exception,error:raise StandardError,"str_mirrorSide : %s | %s"%(str_mirrorSide,error)
                    if str_mirrorAxis:
                        try:
                            self.mi_control.mirrorAxis = str_mirrorAxis
                            log.debug("%s >> %s >> str_mirrorAxis set: %s"%(self._str_funcCombined,"mirrorSetup",str_mirrorAxis))				    
                        except Exception,error:raise StandardError,"str_mirrorAxis : %s | %s"%(str_mirrorAxis,error)
                for mObj in self.mi_control.msgList_get('spacePivots'):
                    try:
                        try:mObj._verifyMirrorable()
                        except Exception,error:raise StandardError,"_mirrorSetup | %s"%(error)
                        #cgmMeta.cgmAttr(mObj,'mirrorSide').doConnectIn(self.mi_control,'mirrorSide')
                        #cgmMeta.cgmAttr(self.mi_control,'mirrorAxis').doCopyTo(mObj,connectTargetToSource = 1)
                        attributes.storeInfo(mObj.mNode,'mirrorAxis',"{0}.mirrorAxis".format(self.mi_control.mNode))
                        attributes.storeInfo(mObj.mNode,'mirrorSide',"{0}.mirrorSide".format(self.mi_control.mNode))

                    except Exception,error:raise StandardError,"spacePivot failed failed! {0}| error: {1}".format(mObj,error)
Exemple #11
0
def get_spinGroup(self, mStart, mRoot, mControl):
    #=========================================================================================
    log.debug("|{0}| >> spin setup...".format(_str_func))

    #Make a spin group
    mSpinGroup = mStart.doGroup(False, False, asMeta=True)
    mSpinGroup.doCopyNameTagsFromObject(self.mModule.mNode,
                                        ignore=['cgmName', 'cgmType'])
    mSpinGroup.addAttr('cgmName',
                       '{0}NoFlipSpin'.format(self.d_module['partName']))
    mSpinGroup.doName()

    mSpinGroup.parent = mRoot

    mSpinGroup.doGroup(True, True, typeModifier='zero')

    #Setup arg
    mPlug_spin = cgmMeta.cgmAttr(mControl,
                                 'spin',
                                 attrType='float',
                                 keyable=True,
                                 defaultValue=0,
                                 hidden=False)
    mPlug_spin.doConnectOut("%s.r%s" %
                            (mSpinGroup.mNode, self.d_orientation['str'][0]))
    return mSpinGroup
 def _mirrorSetup(self):
     str_mirrorSide = self.str_mirrorSide
     str_mirrorAxis = self.str_mirrorAxis
     b_makeMirrorable = self.b_makeMirrorable
     if str_mirrorSide is not None or b_makeMirrorable:
         for mObj in [self.mi_control] + self.ml_spacePivots:
             #log.info("mirrorsetup: {0}".format(mObj.p_nameShort))
             try:
                 self.mi_control._verifyMirrorable()
             except Exception, error:
                 raise StandardError, "_mirrorSetup | %s" % (error)
             l_enum = cgmMeta.cgmAttr(self.mi_control,
                                      'mirrorSide').p_enum
             if str_mirrorSide in l_enum:
                 log.debug(
                     "%s >> %s >> found in : %s" %
                     (self._str_funcCombined, "mirrorSetup", l_enum))
                 try:
                     self.mi_control.mirrorSide = l_enum.index(
                         str_mirrorSide)
                     log.debug("%s >> %s >> mirrorSide set to: %s" %
                               (self._str_funcCombined, "mirrorSetup",
                                self.mi_control.mirrorSide))
                 except Exception, error:
                     raise StandardError, "str_mirrorSide : %s | %s" % (
                         str_mirrorSide, error)
             if str_mirrorAxis:
                 try:
                     self.mi_control.mirrorAxis = str_mirrorAxis
                     log.debug("%s >> %s >> str_mirrorAxis set: %s" %
                               (self._str_funcCombined, "mirrorSetup",
                                str_mirrorAxis))
                 except Exception, error:
                     raise StandardError, "str_mirrorAxis : %s | %s" % (
                         str_mirrorAxis, error)
        def _mirrorSetup(self):	
            str_mirrorSide = self.str_mirrorSide
            str_mirrorAxis = self.str_mirrorAxis
            b_makeMirrorable = self.b_makeMirrorable
            if str_mirrorSide is not None or b_makeMirrorable:
                for mObj in [self.mi_control] + self.ml_spacePivots:
                    #log.info("mirrorsetup: {0}".format(mObj.p_nameShort))
                    try:self.mi_control._verifyMirrorable()
                    except Exception,error:raise StandardError,"_mirrorSetup | %s"%(error)
                    l_enum = cgmMeta.cgmAttr(self.mi_control,'mirrorSide').p_enum
                    if str_mirrorSide in l_enum:
                        log.debug("%s >> %s >> found in : %s"%(self._str_funcCombined, "mirrorSetup", l_enum))		
                        try:
                            self.mi_control.mirrorSide = l_enum.index(str_mirrorSide)
                            log.debug("%s >> %s >> mirrorSide set to: %s"%(self._str_funcCombined,"mirrorSetup",self.mi_control.mirrorSide ))						    
                        except Exception,error:raise StandardError,"str_mirrorSide : %s | %s"%(str_mirrorSide,error)
                    if str_mirrorAxis:
                        try:
                            self.mi_control.mirrorAxis = str_mirrorAxis
                            log.debug("%s >> %s >> str_mirrorAxis set: %s"%(self._str_funcCombined,"mirrorSetup",str_mirrorAxis))				    
                        except Exception,error:raise StandardError,"str_mirrorAxis : %s | %s"%(str_mirrorAxis,error)
                for mObj in self.mi_control.msgList_get('spacePivots'):
                    try:
                        try:mObj._verifyMirrorable()
                        except Exception,error:raise StandardError,"_mirrorSetup | %s"%(error)
                        #cgmMeta.cgmAttr(mObj,'mirrorSide').doConnectIn(self.mi_control,'mirrorSide')
                        #cgmMeta.cgmAttr(self.mi_control,'mirrorAxis').doCopyTo(mObj,connectTargetToSource = 1)
                        attributes.storeInfo(mObj.mNode,'mirrorAxis',"{0}.mirrorAxis".format(self.mi_control.mNode))
                        attributes.storeInfo(mObj.mNode,'mirrorSide',"{0}.mirrorSide".format(self.mi_control.mNode))

                    except Exception,error:raise StandardError,"spacePivot failed failed! {0}| error: {1}".format(mObj,error)
Exemple #14
0
def get_spinGroup(self):
    try:
        _str_func = 'get_spinGroup'
        log_start(_str_func)

        #Make a spin group
        mSpinGroup = mStart.doGroup(False, False, asMeta=True)
        mSpinGroup.doCopyNameTagsFromObject(self.mModule.mNode,
                                            ignore=['cgmName', 'cgmType'])
        mSpinGroup.addAttr('cgmName',
                           '{0}NoFlipSpin'.format(self.d_module['partName']))
        mSpinGroup.doName()

        mSpinGroup.parent = mRoot

        mSpinGroup.doGroup(True, True, typeModifier='zero')

        #Setup arg
        mPlug_spin = cgmMeta.cgmAttr(mIKControl,
                                     'spin',
                                     attrType='float',
                                     keyable=True,
                                     defaultValue=0,
                                     hidden=False)
        mPlug_spin.doConnectOut("%s.r%s" %
                                (mSpinGroup.mNode, _jointOrientation[0]))
        return mSpinGroup
    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err, localDat=vars())
Exemple #15
0
        def _mirrorAttributeBridges_(self):	    		
            addForwardBack = self.d_kws['addForwardBack']

            if addForwardBack:
                mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,"forwardBack",attrType = 'float',keyable=True)
                try:
                    mPlug_forwardBackDriven = cgmMeta.validateAttrArg([self.mi_control,addForwardBack])['mi_plug']
                except Exception,error:raise StandardError,"push pull driver | %s"%(error)

                if self.str_mirrorSide.lower() == 'right':
                    arg_forwardBack = "%s = -%s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                  mPlug_forwardBackDriver.p_combinedShortName)		    
                else:
                    arg_forwardBack = "%s = %s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                 mPlug_forwardBackDriver.p_combinedShortName)

                mPlug_forwardBackDriven.p_locked = True
                mPlug_forwardBackDriven.p_hidden = True
                mPlug_forwardBackDriven.p_keyable = False		
                NodeF.argsToNodes(arg_forwardBack).doBuild()

            if self._addMirrorAttributeBridges:
                for l_bridge in self._addMirrorAttributeBridges:
                    _attrName = VALID.stringArg(l_bridge[0])
                    _attrToBridge = VALID.stringArg(l_bridge[1])
                    if not self.mi_control.hasAttr(_attrToBridge):
                        raise StandardError,"['%s' lacks the bridge attr '%s']"%(self.mi_control.p_nameShort,_attrToBridge)

                    mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control,_attrName,attrType = 'float',keyable=True)
                    try:
                        mPlug_attrBridgeDriven = cgmMeta.validateAttrArg([self.mi_control,_attrToBridge])['mi_plug']
                    except Exception,error:raise StandardError,"[validate control attribute bridge attr]{%s}"%(error)

                    if self.str_mirrorSide.lower() == 'right':
                        arg_attributeBridge = "%s = -%s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                          mPlug_attrBridgeDriver.p_combinedShortName)		    
                    else:
                        arg_attributeBridge = "%s = %s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                         mPlug_attrBridgeDriver.p_combinedShortName)

                    mPlug_attrBridgeDriven.p_locked = True
                    mPlug_attrBridgeDriven.p_hidden = True
                    mPlug_attrBridgeDriven.p_keyable = False		
                    NodeF.argsToNodes(arg_attributeBridge).doBuild()
        def _mirrorAttributeBridges_(self):	    		
            addForwardBack = self.d_kws['addForwardBack']

            if addForwardBack:
                mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,"forwardBack",attrType = 'float',keyable=True)
                try:
                    mPlug_forwardBackDriven = cgmMeta.validateAttrArg([self.mi_control,addForwardBack])['mi_plug']
                except Exception,error:raise StandardError,"push pull driver | %s"%(error)

                if self.str_mirrorSide.lower() == 'right':
                    arg_forwardBack = "%s = -%s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                  mPlug_forwardBackDriver.p_combinedShortName)		    
                else:
                    arg_forwardBack = "%s = %s"%(mPlug_forwardBackDriven.p_combinedShortName,
                                                 mPlug_forwardBackDriver.p_combinedShortName)

                mPlug_forwardBackDriven.p_locked = True
                mPlug_forwardBackDriven.p_hidden = True
                mPlug_forwardBackDriven.p_keyable = False		
                NodeF.argsToNodes(arg_forwardBack).doBuild()

            if self._addMirrorAttributeBridges:
                for l_bridge in self._addMirrorAttributeBridges:
                    _attrName = cgmValid.stringArg(l_bridge[0])
                    _attrToBridge = cgmValid.stringArg(l_bridge[1])
                    if not self.mi_control.hasAttr(_attrToBridge):
                        raise StandardError,"['%s' lacks the bridge attr '%s']"%(self.mi_control.p_nameShort,_attrToBridge)

                    mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control,_attrName,attrType = 'float',keyable=True)
                    try:
                        mPlug_attrBridgeDriven = cgmMeta.validateAttrArg([self.mi_control,_attrToBridge])['mi_plug']
                    except Exception,error:raise StandardError,"[validate control attribute bridge attr]{%s}"%(error)

                    if self.str_mirrorSide.lower() == 'right':
                        arg_attributeBridge = "%s = -%s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                          mPlug_attrBridgeDriver.p_combinedShortName)		    
                    else:
                        arg_attributeBridge = "%s = %s"%(mPlug_attrBridgeDriven.p_combinedShortName,
                                                         mPlug_attrBridgeDriver.p_combinedShortName)

                    mPlug_attrBridgeDriven.p_locked = True
                    mPlug_attrBridgeDriven.p_hidden = True
                    mPlug_attrBridgeDriven.p_keyable = False		
                    NodeF.argsToNodes(arg_attributeBridge).doBuild()
def setupWheelRoll(dat = _d_wheels):
    for m,d in dat.iteritems():
        mModule = cgmMeta.asMeta(m)
    
        mRigNull = mModule.rigNull
        mPivot = mRigNull.getMessageAsMeta('pivotResultDriver')
        mSettings = mRigNull.getMessageAsMeta('settings')
        
        mAttr = cgmMeta.cgmAttr(mSettings, 'wheelSpin','float',hidden=False,keyable=True)
        
        mAttr.doConnectOut("{0}.rx".format(mPivot.mNode))
Exemple #18
0
        def _buildPupilIris_(self):
            mi_go = self._go#Rig Go instance link
            str_mirrorSide = self.str_mirrorSide

            try:#>>>> Iris pupil #==================================================================	
                try:
                    _l_build = [{'tag':'iris','buildCheck':self.mi_helper.buildIris,'shape':self.md_rigList['iris_shape'],'joint':self.md_rigList['iris'],'parent':self.md_rigList['eye']},
                                {'tag':'pupil','buildCheck':self.mi_helper.buildPupil,'shape':self.md_rigList['pupil_shape'],'joint':self.md_rigList['pupil'],'parent':self.md_rigList['iris']}]
                except Exception,error:raise Exception,"[build dict]{%s}"%(error)

                for _d in _l_build:
                    try:
                        self._d_buffer = _d
                        self.log_infoNestedDict('_d_buffer')
                        _tag = _d['tag']
                        _shape = _d['shape']
                        _joint = _d['joint']
                        _b_buildCheck = _d['buildCheck']

                        if not _b_buildCheck:
                            self.log_info("Build %s toggle: off"%(_tag))
                            _shape.delete()

                        else:
                            _joint.parent =  mi_go._i_constrainNull.eyeTrackNull.mNode
                            d_buffer = mControlFactory.registerControl(_joint,useShape = _shape,
                                                                       mirrorSide = str_mirrorSide, mirrorAxis="",
                                                                       makeAimable=True,setRotateOrder ='zxy') 	    

                            mi_control = d_buffer['instance']
                            _shape.delete()

                            attributes.doSetAttr(mi_control.mNode,'overrideEnabled',0)
                            attributes.doSetAttr(mi_control.mNode,'overrideDisplayType',0)
                            cgmMeta.cgmAttr(mi_control,'radius',.0001,hidden=True)
                            mi_go._i_rigNull.connectChildNode(mi_control,'control%s'%_tag.capitalize(),"rigNull")
                            self.ml_controlsAll.append(mi_control)	
                            attributes.doSetLockHideKeyableAttr(mi_control.mNode,channels=['tx','ty','tz','rx','ry','rz','v','s%s'%mi_go._jointOrientation[0]])				
                    except Exception,error:raise Exception,"[%s]{%s}"%(_tag,error)
            except Exception,error:raise Exception,"[Build iris/pupil fail]{%s}"%(error)
Exemple #19
0
        def _gatherInfo_(self):
            mi_go = self._go#Rig Go instance link
            self.md_rigList = {}

            self.mi_helper = cgmMeta.validateObjArg(mi_go._mi_module.getMessage('helper'),noneValid=True)
            if not self.mi_helper:raise StandardError,"No suitable helper found"

            try:#verify eye look
                mi_go._verify_eyeLook()
            except Exception,error: raise StandardError,"[Faied to verify eye look]{%s}"%error


            #>> Find our joint lists ===================================================================
            self.md_jointLists = {}	    
            self.ml_rigJoints = mi_go._mi_module.rigNull.msgList_get('rigJoints')

            self.md_rigList['eyeOrbJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints,
                                                                                   cgmName = 'eyeOrb')[0]    

            self.md_rigList['eyeJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints,
                                                                                cgmName = 'eye')[0]	  

            if self.mi_helper.buildIris:
	 
                self.md_rigList['irisJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints,
                                                                                     cgmName = 'iris')[0] 
                try:self.md_rigList['controlIris'] = mi_go._i_rigNull.controlIris
                except Exception,error:raise StandardError,"iris fail]{%s}"%(error)  
                
            if self.mi_helper.buildPupil:
                self.md_rigList['pupilJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints,
                                                                                      cgmName = 'pupil')[0] 
                try:self.md_rigList['controlPupil'] = mi_go._i_rigNull.controlPupil
                except Exception,error:raise StandardError,"pupil fail]{%s}"%(error)  
                
            #>> Running lists ===========================================================================	    
            try:self.md_rigList['eyeLook'] = mi_go._get_eyeLook()
            except Exception,error:raise StandardError,"[eyeLook fail]{%s}"%(error)	    
            try:self.md_rigList['controlIK'] = mi_go._i_rigNull.controlIK
            except Exception,error:raise StandardError,"controlIK fail]{%s}"%(error)
            try:self.md_rigList['controlFK'] = mi_go._i_rigNull.controlFK
            except Exception,error:raise StandardError,"controlFK fail]{%s}"%(error)
            try:self.md_rigList['settings'] = mi_go._i_rigNull.settings
            except Exception,error:raise StandardError,"controlIK fail]{%s}"%(error)	
            try:self.md_rigList['eyeMove'] = mi_go._i_rigNull.eyeMove
            except Exception,error:raise StandardError,"eyeMove fail]{%s}"%(error)

            #Settings
            self.mPlug_FKIK = cgmMeta.cgmAttr(self.md_rigList['settings'].mNode,'blend_FKIK')
Exemple #20
0
    def __init__(self,
                 group,
                 chooseAttr='switcher',
                 controlObject=None,
                 connectTo='visibility',
                 *args,
                 **kws):
        """Constructor"""
        self.d_iAttrs = {}  #attr instances stores as {index:instance}
        self.l_iAttrs = []  #Indices for iAttrs
        self.d_resultNetworksToBuild = {
        }  #Index desctiptions of networks to build {target:[[1,2],3]}
        self.i_group = False
        self.i_control = False
        self.connectToAttr = connectTo
        self.i_attr = False

        #>>>Keyword args
        log.debug(">>> build_conditionNetworkFromGroup.__init__")
        if kws: log.debug("kws: %s" % str(kws))
        if args: log.debug("args: %s" % str(args))

        #Check our group
        if not mc.objExists(group):
            log.error("Group doesn't exist: '%s'" % group)
            return
        elif not search.returnObjectType(group) == 'group':
            log.error("Object is not a group: '%s'" %
                      search.returnObjectType(group))
            return
        self.i_group = cgmMeta.cgmObject(group)
        if not self.i_group.getChildren():
            log.error("No children detected: '%s'" % group)
            return

        #Check our control
        if controlObject is None or not mc.objExists(controlObject):
            log.error("No suitable control object found: '%s'" % controlObject)
            return
        else:
            i_controlObject = cgmMeta.cgmNode(controlObject)
            self.i_attr = cgmMeta.cgmAttr(i_controlObject,
                                          chooseAttr,
                                          attrType='enum',
                                          initialValue=1)
        if self.buildNetwork(*args, **kws):
            log.debug("Chooser Network good to go")
Exemple #21
0
	    for i,i_o in enumerate(self.ml_objList):
		if i >= int_maxObjects:
		    log.warning("More than %s objects select, only loading first %s for speed"%(int_maxObjects,int_maxObjects))
		    break
		d_buffer = {}
		
		#>>> Space switching ------------------------------------------------------------------							
		if i_o.getMessage('dynParentGroup'):
		    i_dynParent = cgmMeta.validateObjArg(i_o.getMessage('dynParentGroup')[0],cgmRigMeta.cgmDynParentGroup,True)
		    d_buffer['dynParent'] = {'mi_dynParent':i_dynParent,'attrs':[],'attrOptions':{}}#Build our data gatherer					    
		    if i_dynParent:
			for a in cgmRigMeta.d_DynParentGroupModeAttrs[i_dynParent.dynMode]:
			    if i_o.hasAttr(a):
				d_buffer['dynParent']['attrs'].append(a)
				lBuffer_attrOptions = []
				for i,o in enumerate(cgmMeta.cgmAttr(i_o.mNode,a).p_enum):
				    lBuffer_attrOptions.append(o)
				d_buffer['dynParent']['attrOptions'][a] = lBuffer_attrOptions
		self.d_objectsInfo[i_o] = d_buffer
		
		#>>> Module --------------------------------------------------------------------------
		if self.BuildModuleOptionVar.value or self.BuildPuppetOptionVar.value:
		    if i_o.getMessage('rigNull'):
			_mi_rigNull = i_o.rigNull			
			try:_mi_module = _mi_rigNull.module
			except Exception:_mi_module = False
			
			if self.BuildModuleOptionVar.value:
			    try:
				self.ml_modules.append(_mi_module)
			    except Exception,error:
Exemple #22
0
def metaFreezeJointOrientation(targetJoints):
    """
    Copies joint orietnations from one joint to others
    """
    try:
	if type(targetJoints) not in [list,tuple]:targetJoints=[targetJoints]
    
	ml_targetJoints = cgmMeta.validateObjListArg(targetJoints,cgmMeta.cgmObject,mayaType='joint')
	'''
	for i_jnt in ml_targetJoints:
	    if i_jnt.getConstraintsTo():
		log.warning("freezeJointOrientation>> target joint has constraints. Can't change orientation. Culling from targets: '%s'"%i_jnt.getShortName())
		return False
	    '''
	#buffer parents and children of 
	d_children = {}
	d_parent = {}
	mi_parent = cgmMeta.validateObjArg(ml_targetJoints[0].parent,noneValid=True)
	
	for i_jnt in ml_targetJoints:
	    d_children[i_jnt] = cgmMeta.validateObjListArg( mc.listRelatives(i_jnt.mNode, path=True, c=True),cgmMeta.cgmObject,True) or []
	    d_parent[i_jnt] = cgmMeta.validateObjArg(i_jnt.parent,noneValid=True)
	for i_jnt in ml_targetJoints:
	    for i,i_c in enumerate(d_children[i_jnt]):
		#log.debug(i_c.getShortName())
		#log.debug("freezeJointOrientation>> parented '%s' to world to orient parent"%i_c.mNode)
		i_c.parent = False
		
	if mi_parent:
	    ml_targetJoints[0].parent = False
	    
	#Orient
	for i,i_jnt in enumerate(ml_targetJoints):
	    """
	    So....jointOrient is always in xyz rotate order
	    dup,rotate order
	    Unparent, add rotate & joint rotate, push value, zero rotate, parent back, done
	    """    
	    log.debug("parent...")
	    if i != 0 and d_parent.get(i_jnt):
		i_jnt.parent = d_parent.get(i_jnt)#parent back first before duping
		
	    log.debug("dup...")
	    i_dup= duplicateJointInPlace(i_jnt)
	    i_dup.rotateOrder = 0
	    
	    #New method  ----
	    log.debug("loc...")
	    
	    mi_zLoc = i_jnt.doLoc()#Make some locs
	    mi_yLoc = i_jnt.doLoc()
	    
	    log.debug("group...")
	    str_group = mi_zLoc.doGroup() #group for easy move
	    mi_yLoc.parent = str_group
	    
	    mi_zLoc.tz = 1#Move
	    mi_yLoc.ty = 1
	    
	    mc.makeIdentity(i_dup.mNode, apply = 1, jo = 1)#Freeze
	    
	    #Aim
	    log.debug("constrain...")
	    
	    str_const = mc.aimConstraint(mi_zLoc.mNode,i_dup.mNode,maintainOffset = False, weight = 1, aimVector = [0,0,1], upVector = [0,1,0], worldUpVector = [0,1,0], worldUpObject = mi_yLoc.mNode, worldUpType = 'object' )[0]
	    
	    i_jnt.rotate = [0,0,0] #Move to joint
	    i_jnt.jointOrient = i_dup.rotate
	    
	    log.debug("delete...")	    
	    mc.delete([str_const,str_group])#Delete extra stuff
	    i_dup.delete()
	    
	#reparent
	if mi_parent:
	    try:ml_targetJoints[0].parent = mi_parent
	    except Exception,error: raise StandardError,"Failed to parent back %s"%error
	for i_jnt in ml_targetJoints:
	    for i_c in d_children[i_jnt]:
		log.debug("freezeJointOrientation>> parented '%s' back"%i_c.getShortName())
		i_c.parent = i_jnt.mNode 
		cgmMeta.cgmAttr(i_c,"inverseScale").doConnectIn("%s.scale"%i_jnt.mNode )
    
	    
	return True
    except Exception,error:raise Exception,"bring data local fail | {0} ".format(error)
Exemple #23
0
def create_uvPickerNetwork(target=None,
                           name='iris',
                           mode=1,
                           enums=None,
                           count=9,
                           split=3):
    _str_func = 'create_uvPickerNetwork'
    log.debug("|{0}| >> ".format(_str_func) + '-' * 80)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            mNode.colorIfFalseR = 0
            mNode.colorIfFalseG = 0

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

        mPMA.doConnectOut('output3Dx', '{0}.res_{1}U'.format(target, name))
        mPMA.doConnectOut('output3Dy', '{0}.res_{1}V'.format(target, name))
Exemple #24
0
        def _buildControls_(self):
            mi_go = self._go#Rig Go instance link

            try:#Query ====================================================================================
                ml_rigJoints = self.ml_rigJoints

                mi_fkShape = self.md_rigList['fk_shape']
                mi_ikShape = self.md_rigList['ik_shape']
                mi_settingsShape = self.md_rigList['settings_shape']
                mi_eyeMoveShape = self.md_rigList['eyeMove_shape']
                str_mirrorSide = self.str_mirrorSide
            except Exception,error:raise Exception,"[Query]{%s}"%error	


            try:#>>>> FK #==================================================================	
                mi_fkShape.parent = mi_go._i_constrainNull.controlsFKNull.mNode
                i_obj = mi_fkShape
                d_buffer = mControlFactory.registerControl(i_obj,copyTransform = ml_rigJoints[0],
                                                           mirrorSide = str_mirrorSide, mirrorAxis="rotateY,rotateZ",
                                                           makeAimable=True,setRotateOrder ='zxy',typeModifier='fk') 	    
                mi_controlFK = d_buffer['instance']
                mi_controlFK.axisAim = "%s+"%mi_go._jointOrientation[0]
                mi_controlFK.axisUp= "%s+"%mi_go._jointOrientation[1]	
                mi_controlFK.axisOut= "%s+"%mi_go._jointOrientation[2]

                #We're gonna lock the aim rot
                cgmMeta.cgmAttr(mi_controlFK,'r%s'%mi_go._jointOrientation[0], keyable = False, lock=True,hidden=True)
                mi_go._i_rigNull.connectChildNode(mi_controlFK,'controlFK',"rigNull")
                self.ml_controlsAll.append(mi_controlFK)	

                attributes.doSetLockHideKeyableAttr(mi_controlFK.mNode,channels=['tx','ty','tz','sx','sy','sz','v'])				

            except Exception,error:raise Exception,"[Build fk fail]{%s}"%(error)

            try:#>>>> IK 
                #==================================================================	
                mi_ikShape.parent = mi_go._i_constrainNull.controlsIKNull.mNode	
                d_buffer = mControlFactory.registerControl(mi_ikShape,
                                                           mirrorSide = str_mirrorSide, mirrorAxis="",		                                           
                                                           typeModifier='ik',addDynParentGroup=True) 	    
                mi_ikControl = d_buffer['instance']	

                mi_go._i_rigNull.connectChildNode(mi_ikControl,'controlIK',"rigNull")
                self.ml_controlsAll.append(mi_ikControl)
                attributes.doSetLockHideKeyableAttr(mi_ikControl.mNode,channels=['sx','sy','sz','v'])				

            except Exception,error:raise Exception,"[Build ik fail]{%s}"%(error)


            try:#>>>> Settings
                #==================================================================	
                mi_settingsShape.parent = mi_go._i_constrainNull.mNode

                try:#Register the control
                    d_buffer = mControlFactory.registerControl(mi_settingsShape,
                                                               mirrorSide = str_mirrorSide, mirrorAxis="",		                                           		                                               
                                                               makeAimable=False,typeModifier='settings') 
                    mi_settings = d_buffer['instance']
                    mi_go._i_rigNull.connectChildNode(mi_settings,'settings','rigNull')
                    self.ml_controlsAll.append(mi_settings)

                    #>>> Verify out vis controls	    
                    self.mPlug_result_moduleFaceSubDriver = mi_go.build_visSubFace()		    

                except Exception,error:raise StandardError,"registration | %s"%error	

                try:#Set up some attributes
                    attributes.doSetLockHideKeyableAttr(mi_settings.mNode)
                    mPlug_FKIK = cgmMeta.cgmAttr(mi_settings.mNode,'blend_FKIK',attrType='float',lock=False,keyable=True,
                                                 minValue=0,maxValue=1.0)
                except Exception,error:raise StandardError,"attribute setup | %s"%error	

            except Exception,error:raise Exception,"[Build Settings fail]{%s}"%(error)

            try:#>>>> eyeMove #==================================================================	
                mi_eyeMoveShape.parent = mi_go._i_constrainNull.mNode

                try:#Register the control
                    d_buffer = mControlFactory.registerControl(mi_eyeMoveShape,
                                                               addMirrorAttributeBridges = [["mirrorIn","t%s"%mi_go._jointOrientation[2]],
                                                                                            ["mirrorBank","r%s"%mi_go._jointOrientation[0]]],
                                                               mirrorSide = str_mirrorSide, mirrorAxis="",		                                               
                                                               makeAimable=False,typeModifier='eyeMove') 
                    mObj = d_buffer['instance']
                    mi_go._i_rigNull.connectChildNode(mObj,'eyeMove','rigNull')
                    self.ml_controlsAll.append(mObj)
                except Exception,error:raise Exception,"[registration]{%s}"%(error)

                try:#Set up some attributes
                    attributes.doSetLockHideKeyableAttr(mObj.mNode,channels = ["r%s"%mi_go._jointOrientation[1],"r%s"%mi_go._jointOrientation[2],'v'])
                except Exception,error:raise Exception,"[Attribute setup]{%s}"%(error)

                try:#Vis Connect
                    for shp in mObj.getShapes():
                        mShp = cgmMeta.cgmNode(shp)
                        mShp.overrideEnabled = 1    
                        self.mPlug_result_moduleFaceSubDriver.doConnectOut("%s.overrideVisibility"%mShp.mNode)
                except Exception,error:raise Exception,"[subVisConnect]{%s}"%(error)


            except Exception,error:raise Exception,"[Build Settings fail]{%s}"%(error)
Exemple #25
0
def ik_rp(self,
          mStart,
          mEnd,
          ml_ikFrame=None,
          mIKControl=None,
          mIKBaseControl=None,
          mIKHandleDriver=None,
          mRoot=None,
          mIKGroup=None,
          mIKControlEnd=None,
          ml_ikFullChain=None):
    try:
        _str_func = "ik_rp"
        log.debug("|{0}| >> {1}...".format(_str_func, _str_func) + '-' * 60)

        mRigNull = self.mRigNull
        mBlock = self.mBlock

        if not ml_ikFrame:
            ml_ikFrame = self.ml_handleTargetsCulled
        if not mIKControl:
            raise ValueError, "Must have mIKControl"

        if not mIKHandleDriver:
            raise ValueError, "Must have mIKHandleDriver"
        if not mRoot:
            raise ValueError, "Must have mRoot"

        log.debug("|{0}| >> rp setup...".format(_str_func))
        mIKMid = mRigNull.controlIKMid
        str_ikEnd = mBlock.getEnumValueString('ikEnd')
        #Measture ======================================================
        log.debug("|{0}| >> measure... ".format(_str_func) + '-' * 30)

        res_ikScale = self.UTILS.get_blockScale(
            self, '{0}_ikMeasure'.format(self.d_module['partName'], ),
            ml_ikFrame)

        mPlug_masterScale = res_ikScale[0]
        mMasterCurve = res_ikScale[1]
        mMasterCurve.p_parent = mRoot
        self.fnc_connect_toRigGutsVis(mMasterCurve)
        mMasterCurve.dagLock(True)

        #Unparent the children from the end while we set stuff up...
        log.debug("|{0}| >> end unparent ...".format(_str_func) + '-' * 30)

        ml_end_children = mEnd.getChildren(asMeta=True)
        if ml_end_children:
            for mChild in ml_end_children:
                mChild.parent = False

        #Build the IK ---------------------------------------------------------------------
        reload(IK)
        """
        if mIKControlEnd and str_ikEnd in ['tipCombo']:
            mMainIKControl = mIKControlEnd
        else:
            mMainIKControl = mIKControl
        """
        _d_ik = {
            'globalScaleAttr': mPlug_masterScale.
            p_combinedName,  #mPlug_globalScale.p_combinedName,
            'stretch': 'translate',
            'lockMid': True,
            'rpHandle': mIKMid.mNode,
            'nameSuffix': 'ik',
            'baseName': '{0}_ikRP'.format(self.d_module['partName']),
            'controlObject': mIKControl.mNode,
            'moduleInstance': self.mModule.mNode
        }

        d_ikReturn = IK.handle(mStart.mNode, mEnd.mNode, **_d_ik)
        mIKHandle = d_ikReturn['mHandle']
        ml_distHandlesNF = d_ikReturn['ml_distHandles']
        mRPHandleNF = d_ikReturn['mRPHandle']

        #>>>Parent IK handles -----------------------------------------------------------------
        log.debug("|{0}| >> parent IK stuff ...".format(_str_func) + '-' * 30)

        mIKHandle.parent = mIKHandleDriver.mNode  #handle to control
        for mObj in ml_distHandlesNF[:-1]:
            mObj.parent = mRoot
        ml_distHandlesNF[-1].parent = mIKHandleDriver.mNode  #handle to control
        ml_distHandlesNF[1].parent = mIKMid
        ml_distHandlesNF[1].t = 0, 0, 0
        ml_distHandlesNF[1].r = 0, 0, 0

        if mIKBaseControl:
            ml_distHandlesNF[0].parent = mIKBaseControl

        #>>> Fix our ik_handle twist at the end of all of the parenting
        IK.handle_fixTwist(mIKHandle,
                           self.d_orientation['str'][0])  #Fix the twist

        if mIKControlEnd:
            mIKEndDriver = mIKControlEnd
        else:
            mIKEndDriver = mIKControl

        if ml_end_children:
            for mChild in ml_end_children:
                mChild.parent = mEnd

        #mc.scaleConstraint([mIKControl.mNode],
        #                    ml_ikFrame[self.int_handleEndIdx].mNode,
        #                    maintainOffset = True)
        #if mIKBaseControl:
        #ml_ikFrame[0].parent = mRigNull.controlIKBase

        #if mIKBaseControl:
        #mc.pointConstraint(mIKBaseControl.mNode, ml_ikFrame[0].mNode,maintainOffset=True)

        #Make a spin group ===========================================================
        log.debug("|{0}| >> spin group ...".format(_str_func) + '-' * 30)

        mSpinGroup = mStart.doGroup(False, False, asMeta=True)
        mSpinGroup.doCopyNameTagsFromObject(self.mModule.mNode,
                                            ignore=['cgmName', 'cgmType'])
        mSpinGroup.addAttr('cgmName',
                           '{0}NoFlipSpin'.format(self.d_module['partName']))
        mSpinGroup.doName()
        ATTR.set(mSpinGroup.mNode, 'rotateOrder', self.d_orientation['str'])

        mSpinGroup.parent = mIKGroup
        mSpinGroup.doGroup(True, True, typeModifier='zero')
        mSpinGroupAdd = mSpinGroup.doDuplicate()

        mSpinGroupAdd.doStore('cgmTypeModifier', 'addSpin')
        mSpinGroupAdd.doName()
        mSpinGroupAdd.p_parent = mSpinGroup

        if mIKBaseControl:
            mc.pointConstraint(mIKBaseControl.mNode,
                               mSpinGroup.mNode,
                               maintainOffset=True)

        #Setup arg
        #mPlug_spin = cgmMeta.cgmAttr(mIKControl,'spin',attrType='float',keyable=True, defaultValue = 0, hidden = False)
        #mPlug_spin.doConnectOut("%s.r%s"%(mSpinGroup.mNode,_jointOrientation[0]))

        mSpinTarget = mIKControl

        if mBlock.getMayaAttr('ikRPAim'):
            mc.aimConstraint(mSpinTarget.mNode,
                             mSpinGroup.mNode,
                             maintainOffset=False,
                             aimVector=[0, 0, 1],
                             upVector=[0, 1, 0],
                             worldUpType='none')
        else:
            mc.aimConstraint(mSpinTarget.mNode,
                             mSpinGroup.mNode,
                             maintainOffset=False,
                             aimVector=[0, 0, 1],
                             upVector=[0, 1, 0],
                             worldUpObject=mSpinTarget.mNode,
                             worldUpType='objectrotation',
                             worldUpVector=self.v_twistUp)

        mPlug_spinMid = cgmMeta.cgmAttr(mSpinTarget,
                                        'spinMid',
                                        attrType='float',
                                        defaultValue=0,
                                        keyable=True,
                                        lock=False,
                                        hidden=False)

        _direction = self.d_module.get('direction') or 'center'

        if _direction.lower() == 'right':
            str_arg = "{0}.r{1} = -{2}".format(
                mSpinGroupAdd.mNode, self.d_orientation['str'][0].lower(),
                mPlug_spinMid.p_combinedShortName)
            log.debug("|{0}| >> Right knee spin: {1}".format(
                _str_func, str_arg))
            NODEFACTORY.argsToNodes(str_arg).doBuild()
        else:
            mPlug_spinMid.doConnectOut("{0}.r{1}".format(
                mSpinGroupAdd.mNode, self.d_orientation['str'][0]))

        mSpinGroup.dagLock(True)
        mSpinGroupAdd.dagLock(True)

        #>>> mBallRotationControl ==========================================================
        mIKBallRotationControl = mRigNull.getMessageAsMeta(
            'controlBallRotation')
        if mIKBallRotationControl:  # and str_ikEnd not in ['tipCombo']:
            log.debug("|{0}| >> mIKBallRotationControl...".format(_str_func) +
                      '-' * 30)

            mBallOrientGroup = cgmMeta.validateObjArg(
                mIKBallRotationControl.doGroup(True,
                                               False,
                                               asMeta=True,
                                               typeModifier='orient'),
                'cgmObject',
                setClass=True)
            ATTR.set(mBallOrientGroup.mNode, 'rotateOrder',
                     self.d_orientation['str'])

            mLocBase = mIKBallRotationControl.doCreateAt()
            mLocAim = mIKBallRotationControl.doCreateAt()

            mLocAim.doStore('cgmTypeModifier', 'extendedIK')
            mLocBase = mIKBallRotationControl.doCreateAt()

            mLocBase.doName()
            mLocAim.doName()

            mLocAim.p_parent = ml_ikFullChain[-1]
            mLocBase.p_parent = mIKBallRotationControl.masterGroup

            const = mc.orientConstraint([mLocAim.mNode, mLocBase.mNode],
                                        mBallOrientGroup.mNode,
                                        maintainOffset=True)[0]

            d_blendReturn = NODEFACTORY.createSingleBlendNetwork(
                [mIKControl.mNode, 'extendIK'],
                [mIKControl.mNode, 'resRootFollow'],
                [mIKControl.mNode, 'resFullFollow'],
                keyable=True)

            targetWeights = mc.orientConstraint(const,
                                                q=True,
                                                weightAliasList=True,
                                                maintainOffset=True)

            #Connect
            d_blendReturn['d_result1']['mi_plug'].doConnectOut(
                '%s.%s' % (const, targetWeights[0]))
            d_blendReturn['d_result2']['mi_plug'].doConnectOut(
                '%s.%s' % (const, targetWeights[1]))
            d_blendReturn['d_result1']['mi_plug'].p_hidden = True
            d_blendReturn['d_result2']['mi_plug'].p_hidden = True

            mBallOrientGroup.dagLock(True)
            mLocAim.dagLock(True)
            mLocBase.dagLock(True)

            mIKBallRotationControl.p_parent = mBallOrientGroup

            #Joint constraint -------------------------
            mIKBallRotationControl.masterGroup.p_parent = mPivotResultDriver
            mc.orientConstraint([mIKBallRotationControl.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)
            mc.parentConstraint([mPivotResultDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx + 1].mNode,
                                maintainOffset=True)

            ATTR.set_default(mIKControl.mNode, 'extendIK', 1.0)
            mIKControl.extendIK = 0.0

        elif str_ikEnd == 'bank':
            mc.orientConstraint([mPivotResultDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)
        elif str_ikEnd == 'pad':
            mc.orientConstraint([mPivotResultDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)
        else:
            mc.orientConstraint([mIKEndDriver.mNode],
                                ml_ikFrame[self.int_handleEndIdx].mNode,
                                maintainOffset=True)

        #Mid IK driver -----------------------------------------------------------------------
        log.debug("|{0}| >> mid Ik driver...".format(_str_func) + '-' * 30)

        log.debug("|{0}| >> mid IK driver.".format(_str_func))
        mMidControlDriver = mIKMid.doCreateAt()
        mMidControlDriver.addAttr(
            'cgmName', '{0}_midIK'.format(self.d_module['partName']))
        mMidControlDriver.addAttr('cgmType', 'driver')
        mMidControlDriver.doName()
        mMidControlDriver.addAttr('cgmAlias', 'midDriver')

        if mIKBaseControl:
            l_midDrivers = [mIKBaseControl.mNode]
        else:
            l_midDrivers = [mRoot.mNode]

        if str_ikEnd in ['tipCombo'] and mIKControlEnd:
            log.debug("|{0}| >> mIKControlEnd + tipCombo...".format(_str_func))
            l_midDrivers.append(mIKControl.mNode)
        else:
            l_midDrivers.append(mIKHandleDriver.mNode)

        mc.pointConstraint(l_midDrivers, mMidControlDriver.mNode)
        mMidControlDriver.parent = mSpinGroupAdd  #mIKGroup
        mIKMid.masterGroup.parent = mMidControlDriver
        mMidControlDriver.dagLock(True)

        #Mid IK trace
        log.debug("|{0}| >> midIK track Crv".format(_str_func, mIKMid))
        trackcrv, clusters = CORERIG.create_at(
            [
                mIKMid.mNode, ml_ikFrame[MATH.get_midIndex(
                    len(ml_ikFrame))].mNode
            ],  #ml_handleJoints[1]],
            'linearTrack',
            baseName='{0}_midTrack'.format(self.d_module['partName']))

        mTrackCrv = cgmMeta.asMeta(trackcrv)
        mTrackCrv.p_parent = self.mModule
        mHandleFactory = mBlock.asHandleFactory()
        mHandleFactory.color(mTrackCrv.mNode, controlType='sub')

        for s in mTrackCrv.getShapes(asMeta=True):
            s.overrideEnabled = 1
            s.overrideDisplayType = 2
        mTrackCrv.doConnectIn('visibility', "{0}.v".format(mIKGroup.mNode))

        #Full IK chain -----------------------------------------------------------------------
        if ml_ikFullChain:
            log.debug("|{0}| >> Full IK Chain...".format(_str_func))
            _d_ik = {
                'globalScaleAttr': mPlug_masterScale.
                p_combinedName,  #mPlug_globalScale.p_combinedName,
                'stretch': 'translate',
                'lockMid': False,
                'rpHandle': mIKMid.mNode,
                'baseName':
                '{0}_ikFullChain'.format(self.d_module['partName']),
                'nameSuffix': 'ikFull',
                'controlObject': mIKControl.mNode,
                'moduleInstance': self.mModule.mNode
            }

            d_ikReturn = IK.handle(ml_ikFullChain[0], ml_ikFullChain[-1],
                                   **_d_ik)
            mIKHandle = d_ikReturn['mHandle']
            ml_distHandlesNF = d_ikReturn['ml_distHandles']
            mRPHandleNF = d_ikReturn['mRPHandle']

            mIKHandle.parent = mIKControl.mNode  #handle to control
            for mObj in ml_distHandlesNF[:-1]:
                mObj.parent = mRoot
            ml_distHandlesNF[-1].parent = mIKControl.mNode  #handle to control
            #ml_distHandlesNF[1].parent = mIKMid
            #ml_distHandlesNF[1].t = 0,0,0
            #ml_distHandlesNF[1].r = 0,0,0

            #>>> Fix our ik_handle twist at the end of all of the parenting
            IK.handle_fixTwist(mIKHandle,
                               self.d_orientation['str'][0])  #Fix the twist

            #mIKControl.masterGroup.p_parent = ml_ikFullChain[-2]

        ######mc.parentConstraint([mIKControl.mNode], ml_ikFrame[-1].mNode, maintainOffset = True)

        if mIKBaseControl:
            ml_ikFrame[0].parent = mIKBaseControl
        #if mIKBaseControl:
        #mc.pointConstraint(mIKBaseControl.mNode, ml_ikFrame[0].mNode,maintainOffset=True)

    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err, localDat=vars())
Exemple #26
0
def duplicateJointInPlace(joint, asMeta=True):
    """
    :parameters:
        joint | str/instance
            Joint to duplicate
        asMeta | bool
            What to return as

    :returns:
        str or instance of new joint

    :raises:
        TypeError | if 'arg' is not a joint
    """
    _str_func_ = 'duplicateJointInPlace'
    try:
        mJoint = cgmMeta.validateObjArg(joint,
                                        mayaType='joint',
                                        mType='cgmObject')

        #dup = mc.joint()
        mDup = mJoint.doDuplicate(parentOnly=True)

        #mDup.parent = mJoint.parent
        #mc.delete(mc.parentConstraint(mJoint.mNode,mDup.mNode))
        '''
	('rotateOrder','rotateAxisX','rotateAxisY','rotateAxisZ',
	'inheritsTransform','drawStyle','radius',
	'jointTypeX','jointTypeY','jointTypeZ',
	'stiffnessX','stiffnessY','stiffnessZ',
	'preferredAngleX','preferredAngleY','preferredAngleZ',
	'jointOrientX','jointOrientY','jointOrientZ','segmentScaleCompensate','showManipDefault',
	'displayHandle','displayLocalAxis','selectHandleX','selectHandleY','selectHandleZ'),
	'''
        mDup.rotateOrder = mJoint.rotateOrder
        mDup.jointOrient = mJoint.jointOrient
        mDup.rotateAxis = mJoint.rotateAxis
        mDup.inheritsTransform = mJoint.inheritsTransform
        mDup.radius = mJoint.radius
        mDup.stiffness = mJoint.stiffness
        mDup.preferredAngle = mJoint.preferredAngle
        mDup.segmentScaleCompensate = mJoint.segmentScaleCompensate
        #mDup.displayHandle = mJoint.displayHandle
        #mDup.selectHandle = mJoint.selectHandle

        #Inverse scale...
        mAttr_inverseScale = cgmMeta.cgmAttr(mJoint, 'inverseScale')
        _driver = mAttr_inverseScale.getDriver()
        if mAttr_inverseScale.getDriver():
            cgmMeta.cgmAttr(mDup, "inverseScale").doConnectIn(_driver)

        mAttr_inverseScale.getDriver(mJoint)

        for attr in mJoint.getUserAttrs():
            try:
                cgmMeta.cgmAttr(mJoint, attr).doCopyTo(mDup.mNode)
            except Exception, err:
                log.error(
                    "duplicateJointInPlace({0}) .{1} failed << {2} >>".format(
                        mJoint.p_nameShort, attr, err))
        if asMeta:
            return mDup
        return mDup.mNode
Exemple #27
0
            for i,i_o in enumerate(self.ml_objList):
                if i >= int_maxObjects:
                    log.warning("More than %s objects select, only loading first %s for speed"%(int_maxObjects,int_maxObjects))
                    break
                d_buffer = {}

                #>>> Space switching ------------------------------------------------------------------							
                if i_o.getMessage('dynParentGroup'):
                    i_dynParent = cgmMeta.validateObjArg(i_o.getMessage('dynParentGroup')[0],cgmRigMeta.cgmDynParentGroup,True)
                    d_buffer['dynParent'] = {'mi_dynParent':i_dynParent,'attrs':[],'attrOptions':{}}#Build our data gatherer					    
                    if i_dynParent:
                        for a in cgmRigMeta.d_DynParentGroupModeAttrs[i_dynParent.dynMode]:
                            if i_o.hasAttr(a):
                                d_buffer['dynParent']['attrs'].append(a)
                                lBuffer_attrOptions = []
                                for i,o in enumerate(cgmMeta.cgmAttr(i_o.mNode,a).p_enum):
                                    lBuffer_attrOptions.append(o)
                                d_buffer['dynParent']['attrOptions'][a] = lBuffer_attrOptions
                self.d_objectsInfo[i_o] = d_buffer

                #>>> Module --------------------------------------------------------------------------
                if self.BuildModuleOptionVar.value or self.BuildPuppetOptionVar.value:
                    if i_o.getMessage('rigNull'):
                        _mi_rigNull = i_o.rigNull			
                        try:_mi_module = _mi_rigNull.module
                        except Exception:_mi_module = False

                        if self.BuildModuleOptionVar.value:
                            try:
                                self.ml_modules.append(_mi_module)
                            except Exception,error:
objList = []
orientation = ['xyz']
orientation[1]
#>>> Modules
#=======================================================
m1 = r9Meta.MetaClass('spine_part')
m1.__dict__.keys()
m1.rigNull.skinJoints
i_rig = Rig.go(m1)
m1.getState()
i_rig.d_controlShapes
rig_segmentFK(i_rig.d_controlShapes)
Rig.registerControl('pelvis_anim')
l_joints = mc.ls(sl=True)

s = cgmMeta.cgmAttr('pelvis_surfaceJoint','scaleX')
s.p_hidden = False
curves.createControlCurve('semiSphere',10,'z-')
attributes.doSetAttr('closestPointOnSurface1','inPostionX',5)
mc.setAttr('closestPointOnSurface1.inPostionX',5)
m1 = cgmPM.cgmModule(name = 'test')
m1 = cgmMeta.cgmNode('spine_part')
m1.setState('skeleton',forceNew = True)
m1.rigNull.skinJoints
m1.getModuleColors()
m1.getPartNameBase()
m1.modulePuppet.getGeo()
targetObj = mc.ls(sl=True)[0]
distance.returnClosestPointOnSurfaceInfo(targetObj,'test_controlSurface')
distance.returnClosestUV(targetObj,'test_controlSurface')
log.info(a)
                mPlug_forwardBackDriven.p_locked = True
                mPlug_forwardBackDriven.p_hidden = True
                mPlug_forwardBackDriven.p_keyable = False
                NodeF.argsToNodes(arg_forwardBack).doBuild()

            if self._addMirrorAttributeBridges:
                for l_bridge in self._addMirrorAttributeBridges:
                    _attrName = VALID.stringArg(l_bridge[0])
                    _attrToBridge = VALID.stringArg(l_bridge[1])
                    if not self.mi_control.hasAttr(_attrToBridge):
                        raise StandardError, "['%s' lacks the bridge attr '%s']" % (
                            self.mi_control.p_nameShort, _attrToBridge)

                    mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control,
                                                             _attrName,
                                                             attrType='float',
                                                             keyable=True)
                    try:
                        mPlug_attrBridgeDriven = cgmMeta.validateAttrArg(
                            [self.mi_control, _attrToBridge])['mi_plug']
                    except Exception, error:
                        raise StandardError, "[validate control attribute bridge attr]{%s}" % (
                            error)

                    if self.str_mirrorSide.lower() == 'right':
                        arg_attributeBridge = "%s = -%s" % (
                            mPlug_attrBridgeDriven.p_combinedShortName,
                            mPlug_attrBridgeDriver.p_combinedShortName)
                    else:
                        arg_attributeBridge = "%s = %s" % (
                            mPlug_attrBridgeDriven.p_combinedShortName,
rUtils.createCGMSegment(jointList)


start = 'l_left_index_2_ik_jnt'
end = 'l_left_index_4_ik_jnt'
mc.ikHandle( sj=start, ee=end,solver = 'ikSpringSolver', forceSolver = True,snapHandleFlagToggle=True )  

rUtils.IKHandle_addSplineIKTwist(handle,True)
rUtils.IKHandle_addSplineIKTwist(handle,False)

#>>> Playing with spline Ik twist setup
#=======================================================
#root twist mode off
#Playing with a better spline IK twist setup, ramp multiplier works
handle = 'ikHandle1'
mPlug_start = cgmMeta.cgmAttr(handle,'twistStart',attrType='float',keyable=True, hidden=False)
mPlug_end = cgmMeta.cgmAttr(handle,'twistEnd',attrType='float',keyable=True, hidden=False)
mPlug_equalizedRoll = cgmMeta.cgmAttr(handle,'twistEqualized',attrType='float',keyable=True, hidden=False)
mPlug_twist = cgmMeta.cgmAttr(handle,'twist',attrType='float',keyable=True, hidden=False)
mPlug_start.doConnectOut("%s.roll"%handle)

arg1 = "%s = %s - %s"%(mPlug_equalizedRoll.p_combinedShortName,mPlug_start.p_combinedShortName,mPlug_end.p_combinedShortName)
log.info("arg1: %s"%arg1)
NodeF.argsToNodes(arg1).doBuild()

arg2 = "%s =  %s - %s"%(mPlug_twist.p_combinedShortName,mPlug_end.p_combinedShortName,mPlug_equalizedRoll.p_combinedShortName)
log.info("arg2: %s"%arg2)
NodeF.argsToNodes(arg2).doBuild()

mPlug_twistRampMultiplier = cgmMeta.cgmAttr(handle,'twistRampMultiplier',attrType='float',keyable=True, hidden=False)
mPlug_twistRampMultiplier.doConnectOut("%s.dTwistRampMult"%handle)
Exemple #31
0
def ribbon_seal(
        driven1=None,
        driven2=None,
        influences1=None,
        influences2=None,
        msgDriver=None,  #...msgLink on joint to a driver group for constaint purposes
        extendEnds=False,
        loftAxis='z',
        orientation='zyx',
        secondaryAxis='y+',
        baseName=None,
        baseName1=None,
        baseName2=None,
        connectBy='constraint',
        sectionSpans=1,
        settingsControl=None,
        specialMode=None,
        sealSplit=False,
        sealDriver1=None,
        sealDriver2=None,
        sealDriverMid=None,
        sealName1='left',
        sealName2='right',
        sealNameMid='center',
        maxValue=10.0,
        moduleInstance=None,
        parentGutsTo=None):

    try:
        _str_func = 'ribbon_seal'

        ml_rigObjectsToConnect = []
        md_drivers = {}
        md_base = {}
        md_seal = {}
        md_blend = {}
        md_follicles = {}
        md_follicleShapes = {}

        d_dat = {1: {}, 2: {}}

        if msgDriver:
            ml_missingDrivers = []

        def check_msgDriver(mObj):
            mDriver = mObj.getMessageAsMeta(msgDriver)
            if mDriver:
                md_drivers[mObj] = mDriver
            else:
                log.error("|{0}| >> Missing driver: {1}".format(
                    _str_func, mObj))
                ml_missingDrivers.append(mObj)
                return False

        #>>> Verify ===================================================================================
        log.debug("|{0}| >> driven1 [Check]...".format(_str_func))
        d_dat[1]['driven'] = cgmMeta.validateObjListArg(driven1,
                                                        mType='cgmObject',
                                                        mayaType=['joint'],
                                                        noneValid=False)
        log.debug("|{0}| >> driven2 [Check]...".format(_str_func))
        d_dat[2]['driven'] = cgmMeta.validateObjListArg(driven2,
                                                        mType='cgmObject',
                                                        mayaType=['joint'],
                                                        noneValid=False)

        #Check our msgDrivers -----------------------------------------------------------
        if msgDriver:
            log.debug("|{0}| >> msgDriver [Check]...".format(_str_func))
            for mObj in d_dat[1]['driven'] + d_dat[2]['driven']:
                if mObj not in ml_missingDrivers:
                    check_msgDriver(mObj)
            if ml_missingDrivers:
                raise ValueError, "Missing drivers. See errors."
            log.debug("|{0}| >> msgDriver [Pass]...".format(_str_func))

        d_dat[1]['int_driven'] = len(d_dat[1]['driven'])
        d_dat[2]['int_driven'] = len(d_dat[2]['driven'])

        log.debug("|{0}| >> Driven lengths   {1} | {2}".format(
            _str_func, d_dat[1]['int_driven'], d_dat[2]['int_driven']))

        log.debug("|{0}| >> influences1 [Check]...".format(_str_func))
        d_dat[1]['mInfluences'] = cgmMeta.validateObjListArg(
            influences1,
            mType='cgmObject',
            mayaType=['joint'],
            noneValid=False)

        log.debug("|{0}| >> influences2 [Check]...".format(_str_func))
        d_dat[2]['mInfluences'] = cgmMeta.validateObjListArg(
            influences2,
            mType='cgmObject',
            mayaType=['joint'],
            noneValid=False)

        d_dat[1]['int_influences'] = len(d_dat[1]['mInfluences'])
        d_dat[2]['int_influences'] = len(d_dat[2]['mInfluences'])

        log.debug("|{0}| >> Influence lengths   {1} | {2}".format(
            _str_func, d_dat[1]['int_influences'], d_dat[2]['mInfluences']))

        mi_mayaOrientation = VALID.simpleOrientation(orientation)
        str_orientation = mi_mayaOrientation.p_string
        str_secondaryAxis = VALID.stringArg(secondaryAxis, noneValid=True)

        if specialMode and specialMode not in [
                'noStartEnd', 'endsToInfluences'
        ]:
            raise ValueError, "Unknown special mode: {0}".format(specialMode)

        #module -----------------------------------------------------------------------------------------------
        mModule = cgmMeta.validateObjArg(moduleInstance, noneValid=True)
        #try:mModule.isModule()
        #except:mModule = False

        mi_rigNull = False
        if mModule:
            log.debug("|{0}| >> mModule [Check]...".format(_str_func))
            mi_rigNull = mModule.rigNull
            if str_baseName is None:
                str_baseName = mModule.getPartNameBase()  #Get part base name
        if not baseName: baseName = 'testRibbonSeal'
        if not baseName1: baseName1 = 'ribbon1'
        if not baseName2: baseName2 = 'ribbon2'

        d_check = {
            'driven1': d_dat[1]['int_driven'],
            'driven2': d_dat[2]['int_driven']
        }

        for k, i in d_check.iteritems():
            if i < 3:
                raise ValueError, "needs at least three driven. Found : {0} | {1}".format(
                    k, i)

        log.debug("|{0}| >> Group [Check]...".format(_str_func))
        if parentGutsTo is None:
            mGroup = cgmMeta.cgmObject(name='newgroup')
            mGroup.addAttr('cgmName', str(baseName), lock=True)
            mGroup.addAttr('cgmTypeModifier', 'segmentStuff', lock=True)
            mGroup.doName()
        else:
            mGroup = cgmMeta.validateObjArg(parentGutsTo, 'cgmObject', False)

        if mModule:
            mGroup.parent = mModule.rigNull

        #Good way to verify an instance list? #validate orientation
        #> axis -------------------------------------------------------------
        """
        axis_aim = VALID.simpleAxis("{0}+".format(str_orientation[0]))
        axis_aimNeg = axis_aim.inverse
        axis_up = VALID.simpleAxis("{0}+".format(str_orientation [1]))
        axis_out = VALID.simpleAxis("{0}+".format(str_orientation [2]))
    
        v_aim = axis_aim.p_vector#aimVector
        v_aimNeg = axis_aimNeg.p_vector#aimVectorNegative
        v_up = axis_up.p_vector   #upVector
        v_out = axis_out.p_vector
        
        str_up = axis_up.p_string
        
        loftAxis2 = False
        #Figure out our loft axis stuff
        if loftAxis not in  orientation:
            _lower_loftAxis = loftAxis.lower()
            if _lower_loftAxis in ['out','up']:
                if _lower_loftAxis == 'out':
                    loftAxis = str_orientation[2]
                else:
                    loftAxis = str_orientation[1]
            else:
                raise ValueError,"Not sure what to do with loftAxis: {0}".format(loftAxis)
        """

        outChannel = str_orientation[2]  #outChannel
        upChannel = str_orientation[1]
        #upChannel = '{0}up'.format(str_orientation[1])#upChannel

        #>>> Ribbon Surface ============================================================================
        log.debug("|{0}| >> Ribbons generating...".format(_str_func))

        l_surfaceReturn1 = IK.ribbon_createSurface(d_dat[1]['driven'],
                                                   loftAxis, sectionSpans,
                                                   extendEnds)

        d_dat[1]['mSurf'] = cgmMeta.validateObjArg(l_surfaceReturn1[0],
                                                   'cgmObject',
                                                   setClass=True)
        d_dat[1]['mSurf'].addAttr('cgmName',
                                  str(baseName1),
                                  attrType='string',
                                  lock=True)
        d_dat[1]['mSurf'].addAttr('cgmType',
                                  'controlSurface',
                                  attrType='string',
                                  lock=True)
        d_dat[1]['mSurf'].doName()

        l_surfaceReturn2 = IK.ribbon_createSurface(d_dat[2]['driven'],
                                                   loftAxis, sectionSpans,
                                                   extendEnds)
        d_dat[2]['mSurf'] = cgmMeta.validateObjArg(l_surfaceReturn1[0],
                                                   'cgmObject',
                                                   setClass=True)
        d_dat[2]['mSurf'].addAttr('cgmName',
                                  str(baseName2),
                                  attrType='string',
                                  lock=True)
        d_dat[2]['mSurf'].addAttr('cgmType',
                                  'controlSurface',
                                  attrType='string',
                                  lock=True)
        d_dat[2]['mSurf'].doName()

        log.debug("d_dat[1]['mSurf']: {0}".format(d_dat[1]['mSurf']))
        log.debug("d_dat[2]['mSurf']: {0}".format(d_dat[2]['mSurf']))

        ml_toConnect = []
        ml_toConnect.extend([d_dat[1]['mSurf'], d_dat[2]['mSurf']])

        #Special Mode =================================================================================
        if specialMode in ['noStartEnd', 'endsToInfluences']:
            log.debug(
                "|{0}| >> Special Mode: {1}".format(_str_func, specialMode) +
                cgmGEN._str_subLine)

            if specialMode == 'endsToInfluences':
                d_special = {
                    '1start': {
                        'mObj': d_dat[1]['driven'][0],
                        'mDriver': d_dat[1]['mInfluences'][0]
                    },
                    '1end': {
                        'mObj': d_dat[1]['driven'][-1],
                        'mDriver': d_dat[1]['mInfluences'][-1]
                    },
                    '2start': {
                        'mObj': d_dat[2]['driven'][0],
                        'mDriver': d_dat[2]['mInfluences'][0]
                    },
                    '2end': {
                        'mObj': d_dat[2]['driven'][-1],
                        'mDriver': d_dat[2]['mInfluences'][-1]
                    }
                }

                for n, dat in d_special.iteritems():
                    mObj = dat['mObj']
                    mDriven = md_drivers[mObj]
                    mDriver = dat['mDriver']
                    log.debug("|{0}| >> {1} | Driver: {2}".format(
                        _str_func, i, mDriven))

                    _const = mc.parentConstraint([mDriver.mNode],
                                                 mDriven.mNode,
                                                 maintainOffset=True)[0]
                    ATTR.set(_const, 'interpType', 2)

            d_dat[1]['driven'] = d_dat[1]['driven'][1:-1]
            d_dat[2]['driven'] = d_dat[2]['driven'][1:-1]
            driven1 = driven1[1:-1]
            driven2 = driven2[1:-1]

        #>>> Setup our Attributes ================================================================
        log.debug("|{0}| >> Settings...".format(_str_func))
        if settingsControl:
            mSettings = cgmMeta.validateObjArg(settingsControl, 'cgmObject')
        else:
            mSettings = d_dat[1]['mSurf']

        mPlug_sealHeight = cgmMeta.cgmAttr(mSettings.mNode,
                                           'sealHeight',
                                           attrType='float',
                                           lock=False,
                                           keyable=True)
        mPlug_sealHeight.doDefault(.5)
        mPlug_sealHeight.value = .5

        #>>> Setup blend results --------------------------------------------------------------------
        if sealSplit:
            d_split = split_blends(
                driven1,  #d_dat[1]['driven'],
                driven2,  #d_dat[2]['driven'],
                sealDriver1,
                sealDriver2,
                sealDriverMid,
                nameSeal1=sealName1,
                nameSeal2=sealName2,
                nameSealMid=sealNameMid,
                settingsControl=mSettings,
                maxValue=maxValue)
            for k, d in d_split.iteritems():
                d_dat[k]['mPlugs'] = d['mPlugs']

        else:
            mPlug_seal = cgmMeta.cgmAttr(mSettings.mNode,
                                         'seal',
                                         attrType='float',
                                         lock=False,
                                         keyable=True)

            mPlug_sealOn = cgmMeta.cgmAttr(mSettings,
                                           'result_sealOn',
                                           attrType='float',
                                           defaultValue=0,
                                           keyable=False,
                                           lock=True,
                                           hidden=False)

            mPlug_sealOff = cgmMeta.cgmAttr(mSettings,
                                            'result_sealOff',
                                            attrType='float',
                                            defaultValue=0,
                                            keyable=False,
                                            lock=True,
                                            hidden=False)

            NODEFACTORY.createSingleBlendNetwork(mPlug_seal.p_combinedName,
                                                 mPlug_sealOn.p_combinedName,
                                                 mPlug_sealOff.p_combinedName)

            d_dat[1]['mPlug_sealOn'] = mPlug_sealOn
            d_dat[1]['mPlug_sealOff'] = mPlug_sealOff
            d_dat[2]['mPlug_sealOn'] = mPlug_sealOn
            d_dat[2]['mPlug_sealOff'] = mPlug_sealOff

        mPlug_FavorOneMe = cgmMeta.cgmAttr(mSettings,
                                           'result_sealOneMe',
                                           attrType='float',
                                           defaultValue=0,
                                           keyable=False,
                                           lock=True,
                                           hidden=False)
        mPlug_FavorOneThee = cgmMeta.cgmAttr(mSettings,
                                             'result_sealOneThee',
                                             attrType='float',
                                             defaultValue=0,
                                             keyable=False,
                                             lock=True,
                                             hidden=False)
        mPlug_FavorTwoMe = cgmMeta.cgmAttr(mSettings,
                                           'result_sealTwoMe',
                                           attrType='float',
                                           defaultValue=0,
                                           keyable=False,
                                           lock=True,
                                           hidden=False)
        mPlug_FavorTwoThee = cgmMeta.cgmAttr(mSettings,
                                             'result_sealTwoThee',
                                             attrType='float',
                                             defaultValue=0,
                                             keyable=False,
                                             lock=True,
                                             hidden=False)

        NODEFACTORY.createSingleBlendNetwork(mPlug_sealHeight.p_combinedName,
                                             mPlug_FavorOneThee.p_combinedName,
                                             mPlug_FavorOneMe.p_combinedName)
        NODEFACTORY.createSingleBlendNetwork(mPlug_sealHeight.p_combinedName,
                                             mPlug_FavorTwoThee.p_combinedName,
                                             mPlug_FavorTwoMe.p_combinedName)

        d_dat[1]['mPlug_me'] = mPlug_FavorOneMe
        d_dat[1]['mPlug_thee'] = mPlug_FavorOneThee
        d_dat[2]['mPlug_me'] = mPlug_FavorTwoMe
        d_dat[2]['mPlug_thee'] = mPlug_FavorTwoThee
        """
        b_attachToInfluences = False
        if attachEndsToInfluences:
            log.debug("|{0}| >> attachEndsToInfluences flag. Checking...".format(_str_func))
            if influences and len(influences) > 1:
                b_attachToInfluences = True
            log.debug("|{0}| >> b_attachToInfluences: {1}".format(_str_func,b_attachToInfluences))
            """

        #>>> Skinning ============================================================================
        log.debug("|{0}| >> Skinning Ribbons...".format(_str_func))

        for idx, dat in d_dat.iteritems():
            max_influences = 2
            mode_tighten = 'twoBlend'
            blendLength = int(dat['int_driven'] / 2)
            blendMin = 2
            _hardLength = 2

            if extendEnds:
                blendMin = 4
                _hardLength = 4
                mode_tighten = None

            if dat['int_influences'] > 2:
                mode_tighten = None
                #blendLength = int(int_lenInfluences/2)
                max_influences = MATH.Clamp(blendLength, 2, 4)
                blendLength = MATH.Clamp(int(dat['int_influences'] / 2), 2, 6)

            if dat['int_influences'] == dat['int_driven']:
                _hardLength = 3
            #Tighten the weights...

            mSkinCluster = cgmMeta.validateObjArg(mc.skinCluster(
                [mObj.mNode for mObj in dat['mInfluences']],
                dat['mSurf'].mNode,
                tsb=True,
                maximumInfluences=max_influences,
                normalizeWeights=1,
                dropoffRate=5.0),
                                                  'cgmNode',
                                                  setClass=True)

            mSkinCluster.doStore('cgmName', dat['mSurf'])
            mSkinCluster.doName()

            #Tighten the weights...
            RIGSKIN.surface_tightenEnds(dat['mSurf'].mNode,
                                        hardLength=_hardLength,
                                        blendLength=blendLength,
                                        mode=mode_tighten)

        #>>> Meat ============================================================================
        ml_processed = []
        for idx, dat in d_dat.iteritems():
            idx_seal = 1
            if idx == 1:
                idx_seal = 2
            dat_seal = d_dat[idx_seal]
            log.debug("|{0}| >> Building [{1}] | seal idx: {2} |".format(
                _str_func, idx, idx_seal) + cgmGEN._str_subLine)

            mSurfBase = dat['mSurf']
            mSurfSeal = dat_seal['mSurf']

            for i, mObj in enumerate(dat['driven']):
                if mObj in ml_processed:
                    log.debug("|{0}| >> Already completed: {1}".format(
                        _str_func, mObj))
                    continue
                ml_processed.append(mObj)
                log.debug("|{0}| >> {1} | Driven: {2}".format(
                    _str_func, i, mObj))
                mDriven = md_drivers[mObj]
                log.debug("|{0}| >> {1} | Driver: {2}".format(
                    _str_func, i, mDriven))

                log.debug("|{0}| >> Create track drivers...".format(_str_func))
                mTrackBase = mDriven.doCreateAt(setClass=True)
                mTrackBase.doStore('cgmName', mObj)
                mTrackSeal = mTrackBase.doDuplicate()
                mTrackBlend = mTrackBase.doDuplicate()

                mTrackSeal.doStore('cgmType', 'trackSeal')
                mTrackBase.doStore('cgmType', 'trackBase')
                mTrackBlend.doStore('cgmType', 'trackBlend')

                for mTrack in mTrackBase, mTrackSeal, mTrackBlend:
                    mTrack.doName()

                log.debug("|{0}| >> Attach drivers...".format(_str_func))

                d_tmp = {
                    'base': {
                        'mSurf': mSurfBase,
                        'mTrack': mTrackBase
                    },
                    'seal': {
                        'mSurf': mSurfSeal,
                        'mTrack': mTrackSeal
                    },
                }

                for n, d in d_tmp.iteritems():
                    mTrack = d['mTrack']
                    mSurf = d['mSurf']

                    _res = RIGCONSTRAINTS.attach_toShape(
                        mTrack.mNode, mSurf.mNode, 'parent')
                    mFollicle = _res[-1][
                        'mFollicle']  #cgmMeta.asMeta(follicle)
                    mFollShape = _res[-1][
                        'mFollicleShape']  #cgmMeta.asMeta(shape)

                    md_follicleShapes[mObj] = mFollShape
                    md_follicles[mObj] = mFollicle

                    mFollicle.parent = mGroup.mNode

                    if mModule:  #if we have a module, connect vis
                        mFollicle.overrideEnabled = 1
                        cgmMeta.cgmAttr(
                            mModule.rigNull.mNode, 'gutsVis',
                            lock=False).doConnectOut(
                                "%s.%s" %
                                (mFollicle.mNode, 'overrideVisibility'))
                        cgmMeta.cgmAttr(
                            mModule.rigNull.mNode, 'gutsLock',
                            lock=False).doConnectOut(
                                "%s.%s" %
                                (mFollicle.mNode, 'overrideDisplayType'))

                #Blend point --------------------------------------------------------------------
                _const = mc.parentConstraint(
                    [mTrackBase.mNode, mTrackSeal.mNode], mTrackBlend.mNode)[0]
                ATTR.set(_const, 'interpType', 2)

                targetWeights = mc.parentConstraint(_const,
                                                    q=True,
                                                    weightAliasList=True)

                #Connect
                if idx == 1:
                    dat['mPlug_thee'].doConnectOut('%s.%s' %
                                                   (_const, targetWeights[0]))
                    dat['mPlug_me'].doConnectOut('%s.%s' %
                                                 (_const, targetWeights[1]))
                else:
                    dat['mPlug_me'].doConnectOut('%s.%s' %
                                                 (_const, targetWeights[0]))
                    dat['mPlug_thee'].doConnectOut('%s.%s' %
                                                   (_const, targetWeights[1]))

                #seal --------------------------------------------------------------------
                _const = mc.parentConstraint(
                    [mTrackBase.mNode, mTrackBlend.mNode], mDriven.mNode)[0]
                ATTR.set(_const, 'interpType', 2)

                targetWeights = mc.parentConstraint(_const,
                                                    q=True,
                                                    weightAliasList=True)

                if sealSplit:
                    dat['mPlugs']['off'][i].doConnectOut(
                        '%s.%s' % (_const, targetWeights[0]))
                    dat['mPlugs']['on'][i].doConnectOut(
                        '%s.%s' % (_const, targetWeights[1]))
                else:
                    dat['mPlug_sealOff'].doConnectOut(
                        '%s.%s' % (_const, targetWeights[0]))
                    dat['mPlug_sealOn'].doConnectOut(
                        '%s.%s' % (_const, targetWeights[1]))

            log.debug("|{0}| >> Blend drivers...".format(_str_func))
        """
        #Simple contrain
        if b_attachToInfluences and mJnt in [ml_joints[0],ml_joints[-1]]:
            if mJnt == ml_joints[0]:
                mUse = ml_influences[0]
            else:
                mUse = ml_influences[-1]
            mc.parentConstraint([mUse.mNode], mDriven.mNode, maintainOffset=True)
        else:
            mc.parentConstraint([mDriver.mNode], mDriven.mNode, maintainOffset=True)
        """

        #pprint.pprint(d_dat)
        return

    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err, msg=vars())
Exemple #32
0
def metaFreezeJointOrientation(targetJoints):
    """
    Freeze joint orientations in place. 
    """
    try:
		_str_funcName = "metaFreezeJointOrientation"		
		#t1 = time.time()
				
		if type(targetJoints) not in [list,tuple]:targetJoints=[targetJoints]
		
		ml_targetJoints = cgmMeta.validateObjListArg(targetJoints,'cgmObject',mayaType='joint')
				
		#log.info("{0}>> meta'd: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1)))
		#t1 = time.time()				
		'''
		for i_jnt in ml_targetJoints:
			if i_jnt.getConstraintsTo():
			log.warning("freezeJointOrientation>> target joint has constraints. Can't change orientation. Culling from targets: '%s'"%i_jnt.getShortName())
			return False
			'''
		#buffer parents and children of 
		d_children = {}
		d_parent = {}
		mi_parent = cgmMeta.validateObjArg(ml_targetJoints[0].parent,noneValid=True)
		#log.info('validate')
		for i,i_jnt in enumerate(ml_targetJoints):
			_relatives = mc.listRelatives(i_jnt.mNode, path=True, c=True)
			log.debug("{0} relatives: {1}".format(i,_relatives))
			d_children[i_jnt] = cgmMeta.validateObjListArg( _relatives ,'cgmObject',True) or []
			d_parent[i_jnt] = cgmMeta.validateObjArg(i_jnt.parent,noneValid=True)
		for i_jnt in ml_targetJoints:
			for i,i_c in enumerate(d_children[i_jnt]):
			#log.debug(i_c.getShortName())
			#log.debug("freezeJointOrientation>> parented '%s' to world to orient parent"%i_c.mNode)
				i_c.parent = False
		if mi_parent:
			ml_targetJoints[0].parent = False
		#log.info('gather data')
		#log.info("{0}>> parent data: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1)))
		#t1 = time.time()	
				
		#Orient
		t_loop = time.time()
		for i,i_jnt in enumerate(ml_targetJoints):
			"""
			So....jointOrient is always in xyz rotate order
			dup,rotate order
			Unparent, add rotate & joint rotate, push value, zero rotate, parent back, done
			"""    
			log.debug("parent...")
			if i != 0 and d_parent.get(i_jnt):
				i_jnt.parent = d_parent.get(i_jnt)#parent back first before duping
			#log.info('{0} parent'.format(i))
			#log.info("{0}>> {2} parent: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1), i_jnt.p_nameShort))
			#t1 = time.time()	
						
			log.debug("dup...")
			#i_dup = duplicateJointInPlace(i_jnt)
			i_dup = i_jnt.doDuplicate(parentOnly = True)
			#log.debug("{0} | UUID: {1}".format(i_jnt.mNode,i_jnt.getMayaAttr('UUID')))
			#log.debug("{0} | UUID: {1}".format(i_dup.mNode,i_dup.getMayaAttr('UUID')))
			i_dup.parent = i_jnt.parent
			i_dup.rotateOrder = 0
						
			#log.info("{0}>> {2} dup: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1), i_jnt.p_nameShort))
			#t1 = time.time()	
						
			#New method  ----
			log.debug("loc...")
			
			mi_zLoc = i_jnt.doLoc(fastMode = True)#Make some locs
			#mi_yLoc = mi_zLoc.doDuplicate()
						
			"""mi_zLoc = cgmMeta.cgmObject(mc.spaceLocator()[0])
			objTrans = mc.xform(i_jnt.mNode, q=True, ws=True, sp=True)
			objRot = mc.xform(i_jnt.mNode, q=True, ws=True, ro=True)
						
			mc.move (objTrans[0],objTrans[1],objTrans[2], mi_zLoc.mNode)			
			mc.rotate (objRot[0], objRot[1], objRot[2], mi_zLoc.mNode, ws=True)
			mi_zLoc.rotateOrder = i_jnt.rotateOrder"""
			mi_yLoc = mi_zLoc.doDuplicate()
						
			#log.info('{0} loc'.format(i))
						
			#log.info("{0}>> {2} loc: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1), i_jnt.p_nameShort))
			#t1 = time.time()			
						
			log.debug("group...")
			str_group = mi_zLoc.doGroup() #group for easy move
			mi_yLoc.parent = str_group
			#log.info('{0} group'.format(i))
						
			#log.info("{0}>> {2} group: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1), i_jnt.p_nameShort))
			#t1 = time.time()	
						
			mi_zLoc.tz = 1#Move
			mi_yLoc.ty = 1
			
			mc.makeIdentity(i_dup.mNode, apply = 1, jo = 1)#Freeze
			
			#Aim
			log.debug("constrain...")
			
			str_const = mc.aimConstraint(mi_zLoc.mNode,i_dup.mNode,maintainOffset = False, weight = 1, aimVector = [0,0,1], upVector = [0,1,0], worldUpVector = [0,1,0], worldUpObject = mi_yLoc.mNode, worldUpType = 'object' )[0]
			#log.info('{0} constrain'.format(i))
			#log.info("{0}>> {2} constraint: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1), i_jnt.p_nameShort))
			#t1 = time.time()				
			i_jnt.rotate = [0,0,0] #Move to joint
			i_jnt.jointOrient = i_dup.rotate
			#log.info('{0} delete'.format(i))
			
			log.debug("delete...")	    
			mc.delete([str_const,str_group])#Delete extra stuff str_group
			i_dup.delete()
			#log.info("{0}>> {2} clean: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1), i_jnt.p_nameShort))
			#t1 = time.time()							
		#log.info("{0}>> orienting: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t_loop)))
		#t1 = time.time()				
		#reparent
		if mi_parent:
			try:ml_targetJoints[0].parent = mi_parent
			except Exception,error: raise StandardError,"Failed to parent back %s"%error
		for i,i_jnt in enumerate(ml_targetJoints):
			for ii,i_c in enumerate(d_children[i_jnt]):
				#log.info("{0} | {1}".format(i,ii))
				#log.info(i_c)
				log.debug("freezeJointOrientation>> parented '%s' back"%i_c.getShortName())
				i_c.parent = i_jnt.mNode 
				cgmMeta.cgmAttr(i_c,"inverseScale").doConnectIn("%s.scale"%i_jnt.mNode )
		#log.info('reparent')
		#log.info("{0}>> reparent: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1)))
		#t1 = time.time()				
		return True
    except Exception,error:raise Exception,"metaFreezeJointOrientation | {0} ".format(error)
Exemple #33
0
        def _buildPupilIris_(self):
            mi_go = self._go  #Rig Go instance link
            str_mirrorSide = self.str_mirrorSide

            try:  #>>>> Iris pupil #==================================================================
                try:
                    _l_build = [{
                        'tag': 'iris',
                        'buildCheck': self.mi_helper.buildIris,
                        'shape': self.md_rigList['iris_shape'],
                        'joint': self.md_rigList['iris'],
                        'parent': self.md_rigList['eye']
                    }, {
                        'tag': 'pupil',
                        'buildCheck': self.mi_helper.buildPupil,
                        'shape': self.md_rigList['pupil_shape'],
                        'joint': self.md_rigList['pupil'],
                        'parent': self.md_rigList['iris']
                    }]
                except Exception, error:
                    raise Exception, "[build dict]{%s}" % (error)

                for _d in _l_build:
                    try:
                        self._d_buffer = _d
                        self.log_infoNestedDict('_d_buffer')
                        _tag = _d['tag']
                        _shape = _d['shape']
                        _joint = _d['joint']
                        _b_buildCheck = _d['buildCheck']

                        if not _b_buildCheck:
                            self.log_info("Build %s toggle: off" % (_tag))
                            _shape.delete()

                        else:
                            _joint.parent = mi_go._i_constrainNull.eyeTrackNull.mNode
                            d_buffer = mControlFactory.registerControl(
                                _joint,
                                useShape=_shape,
                                mirrorSide=str_mirrorSide,
                                mirrorAxis="",
                                makeAimable=True,
                                setRotateOrder='zxy')

                            mi_control = d_buffer['instance']
                            _shape.delete()

                            attributes.doSetAttr(mi_control.mNode,
                                                 'overrideEnabled', 0)
                            attributes.doSetAttr(mi_control.mNode,
                                                 'overrideDisplayType', 0)
                            cgmMeta.cgmAttr(mi_control,
                                            'radius',
                                            .0001,
                                            hidden=True)
                            mi_go._i_rigNull.connectChildNode(
                                mi_control, 'control%s' % _tag.capitalize(),
                                "rigNull")
                            self.ml_controlsAll.append(mi_control)
                            attributes.doSetLockHideKeyableAttr(
                                mi_control.mNode,
                                channels=[
                                    'tx', 'ty', 'tz', 'rx', 'ry', 'rz', 'v',
                                    's%s' % mi_go._jointOrientation[0]
                                ])
                    except Exception, error:
                        raise Exception, "[%s]{%s}" % (_tag, error)
Exemple #34
0
	def build(self):#================================================================================   	
	    
	    #>>>Get data
	    ml_controlsFK =  self._go._i_rigNull.msgList_get('controlsFK')   
	    ml_rigJoints = self._go._i_rigNull.msgList_get('rigJoints')
	    ml_blendJoints = self._go._i_rigNull.msgList_get('blendJoints')
	    ml_fkJoints = self._go._i_rigNull.msgList_get('fkJoints')
	    ml_ikJoints = self._go._i_rigNull.msgList_get('ikJoints')
		    
	    mi_settings = self._go._i_rigNull.settings
		
	    aimVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[0])
	    upVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[1])
	    outVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[2])
	    
	    mi_controlIK = self._go._i_rigNull.controlIK
	
	    for chain in [ml_ikJoints,ml_blendJoints]:
		chain[0].parent = self._go._i_constrainNull.mNode
		
	    self.ml_fkAttachJoints = []
	    if self._go._str_mirrorDirection == 'Right':#mirror control setup
		self.ml_fkAttachJoints = self._go._i_rigNull.msgList_get('fkAttachJoints')
		
	    #for more stable ik, we're gonna lock off the lower channels degrees of freedom
	    for chain in [ml_ikJoints]:
		for axis in self._go._jointOrientation[:2]:
		    log.info(axis)
		    for i_j in chain[1:]:
			attributes.doSetAttr(i_j.mNode,"jointType%s"%axis.upper(),1)
	    
	    #=============================================================    
	    try:#>>>Finger Root Control and root follow
		for attr in ['tx','ty','tz']:#Unlock a few things
		    i_attr = cgmMeta.cgmAttr(ml_fkJoints[0],attr)
		    i_attr.p_keyable = True
		    i_attr.p_locked = False	   	
	
		#we have to rebuild a little so that we can use our fk base control both for fk and ik
		#Create a orient group that tracks the  module constrain null
		if self._go._partType == 'finger':
		    buffer_fkGroup = ml_fkJoints[0].parent
		    i_orientGroup = cgmMeta.asMeta( ml_fkJoints[1].doGroup(True),'cgmObject',setClass=True )
		    i_orientGroup.addAttr('cgmTypeModifier','toOrient')
		    i_orientGroup.doName()
		    
		    #constrain it 
		    str_orConst = mc.orientConstraint(self._go._i_constrainNull.mNode,i_orientGroup.mNode,maintainOffset = True)[0]
		    self._go._i_constrainNull.connectChildNode(i_orientGroup,'fingerRoot','owner')#Connect
		    i_orientGroup.parent = self._go._i_constrainNull.mNode
		    
		    attributes.doSetLockHideKeyableAttr(i_orientGroup.mNode)#lockNHide
		    
		    i_parentGroup = cgmMeta.asMeta( i_orientGroup.doGroup(True),'cgmObject',setClass=True )
		    i_parentGroup.addAttr('cgmTypeModifier','toParent')
		    i_parentGroup.doName()	
		    str_prntConst = mc.parentConstraint( ml_fkJoints[0].mNode,i_parentGroup.mNode,maintainOffset = True)[0]
		    i_parentGroup.parent = buffer_fkGroup
		    
		    #attributes.doSetLockHideKeyableAttr(ml_fkJoints[0].mNode,lock = False, visible=True, keyable=True, channels=['tx','ty','tz'])
		    
		    #Constrain ik base to fk base
		    mc.orientConstraint(ml_fkJoints[0].mNode,ml_ikJoints[0].mNode,maintainOffset = True)
		    ml_fkJoints[0].parent = self._go._i_constrainNull.mNode
	
	    except Exception,error:
		raise Exception,"%s.build_FKIK>>> Finger Root Control error: %s"%(self._go._strShortName,error)
Exemple #35
0
                    i_obj,
                    copyTransform=ml_rigJoints[0],
                    mirrorSide=str_mirrorSide,
                    mirrorAxis="rotateY,rotateZ",
                    makeAimable=True,
                    setRotateOrder='zxy',
                    typeModifier='fk')
                mi_controlFK = d_buffer['instance']
                mi_controlFK.axisAim = "%s+" % mi_go._jointOrientation[0]
                mi_controlFK.axisUp = "%s+" % mi_go._jointOrientation[1]
                mi_controlFK.axisOut = "%s+" % mi_go._jointOrientation[2]

                #We're gonna lock the aim rot
                cgmMeta.cgmAttr(mi_controlFK,
                                'r%s' % mi_go._jointOrientation[0],
                                keyable=False,
                                lock=True,
                                hidden=True)
                mi_go._i_rigNull.connectChildNode(mi_controlFK, 'controlFK',
                                                  "rigNull")
                self.ml_controlsAll.append(mi_controlFK)

                attributes.doSetLockHideKeyableAttr(
                    mi_controlFK.mNode,
                    channels=['tx', 'ty', 'tz', 'sx', 'sy', 'sz', 'v'])

            except Exception, error:
                raise Exception, "[Build fk fail]{%s}" % (error)

            try:  #>>>> IK
                #==================================================================
Exemple #36
0
def build_rig(goInstance = None):
    class fncWrap(modUtils.rigStep):
	def __init__(self,goInstance = None):
	    super(fncWrap, self).__init__(goInstance)
	    self._str_funcName = 'build_rig(%s)'%self.d_kws['goInstance']._strShortName	
	    self.__dataBind__()
	    self.l_funcSteps = [{'step':'Build NOT BROKEN UP YET','call':self.build}]	
	    #=================================================================
	    
	def build(self):#================================================================================   	
		    
	    try:#>>>Get data
		orientation = self._go._jointOrientation or modules.returnSettingsData('jointOrientation')
		mi_moduleParent = False
		if self._go._mi_module.getMessage('moduleParent'):
		    mi_moduleParent = self._go._mi_module.moduleParent
		    
		mi_controlIK = self._go._i_rigNull.controlIK
		ml_controlsFK =  self._go._i_rigNull.msgList_get('controlsFK')    
		ml_rigJoints = self._go._i_rigNull.msgList_get('rigJoints')
		ml_blendJoints = self._go._i_rigNull.msgList_get('blendJoints')
		mi_settings = self._go._i_rigNull.settings
		
		log.info("mi_controlIK: %s"%mi_controlIK.getShortName())
		log.info("ml_controlsFK: %s"%[o.getShortName() for o in ml_controlsFK])
		log.info("mi_settings: %s"%mi_settings.getShortName())
		
		log.info("ml_rigJoints: %s"%[o.getShortName() for o in ml_rigJoints])
		log.info("ml_blendJoints: %s"%[o.getShortName() for o in ml_blendJoints])
		
		ml_segmentHandleChains = self._go._get_segmentHandleChains()
		ml_segmentChains = self._go._get_segmentChains()
		ml_influenceChains = self._go._get_influenceChains()	
		
		aimVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[0])
		upVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[1]) 
		
		#Build our contrain to pool
		l_constrainTargetJoints = []
		"""
		for ml_chain in ml_segmentChains:
		    l_constrainTargetJoints.extend([i_jnt.mNode for i_jnt in ml_chain[:-1]])
		l_constrainTargetJoints.extend([i_jnt.mNode for i_jnt in ml_blendJoints[-2:]])
		"""
		if not l_constrainTargetJoints:
		    l_constrainTargetJoints = [i_jnt.mNode for i_jnt in ml_blendJoints]
		    
		for i_jnt in ml_blendJoints:
		    attributes.doSetLockHideKeyableAttr(i_jnt.mNode,lock=True, visible=True, keyable=False)
		    i_jnt.radius = 0#This is how we can hide joints without hiding them since we have children we want to ride along
		    i_jnt.drawStyle = 2
		    
		for i_jnt in ml_controlsFK:
		    i_jnt.radius = 0#This is how we can hide joints without hiding them since we have children we want to ride along
		    i_jnt.drawStyle = 2		    
		    
		#Set group lockks
		for mCtrl in self._go._i_rigNull.msgList_get('controlsAll'):
		    try:mCtrl._setControlGroupLocks()	
		    except Exception,error:log.error("%s _setControlGroupLocks failed on object: %s"%(self._str_reportStart,mCtrl.p_nameShort))
	    	    
	    except Exception,error:
		log.error("finger.build_rig>> Gather data fail!")
		raise Exception,error
	    

	    #Dynamic parent groups
	    #====================================================================================
	    try:#>>>> IK
		ml_fingerDynParents = []
		#Build our dynamic groups
		"""
		1)wrist
		2)fk root
		3)...
		4)world
		"""
		if mi_moduleParent:
		    mi_blendEndJoint = mi_moduleParent.rigNull.msgList_get('blendJoints')[-1]	    
		    mi_parentRigNull = mi_moduleParent.rigNull
		    if mi_moduleParent:
			mi_parentRigNull = mi_moduleParent.rigNull
			buffer = mi_parentRigNull.msgList_get('moduleJoints')
			if buffer:
			    ml_fingerDynParents.append( buffer[-1])	
			
		ml_fingerDynParents.append( ml_controlsFK[0])	
			
		mi_spine = self._go._mi_module.modulePuppet.getModuleFromDict(moduleType= ['torso','spine'])
		if mi_spine:
		    log.info("spine found: %s"%mi_spine)	    
		    mi_spineRigNull = mi_spine.rigNull
		    ml_fingerDynParents.append( mi_spineRigNull.handleIK )	    
		    ml_fingerDynParents.append( mi_spineRigNull.cog )
		    ml_fingerDynParents.append( mi_spineRigNull.hips )	    
		    
		ml_fingerDynParents.append(self._go._i_masterControl)
		if mi_controlIK.getMessage('spacePivots'):
		    ml_fingerDynParents.extend(mi_controlIK.msgList_get('spacePivots',asMeta = True))	
		log.info("%s.build_rig>>> Dynamic parents to add: %s"%(self._go._strShortName,[i_obj.getShortName() for i_obj in ml_fingerDynParents]))
		
	    
		#Add our parents
		i_dynGroup = mi_controlIK.dynParentGroup
		log.info("Dyn group at setup: %s"%i_dynGroup)
		i_dynGroup.dynMode = 0
		
		for o in ml_fingerDynParents:
		    i_dynGroup.addDynParent(o)
		i_dynGroup.rebuild()
		
	    except Exception,error:
		log.error("finger.build_rig>> finger ik dynamic parent setup fail!")
		raise Exception,error
	    
            self._go.collect_worldDynDrivers()#...collect world dyn drivers
	
	    #Make some connections
	    #====================================================================================
	    
	    #Parent and constrain joints
	    #====================================================================================
	    ml_rigJoints[0].parent = self._go._i_deformNull.mNode#shoulder
	    #ml_rigJoints[-1].parent = self._go._i_deformNull.mNode#wrist
	
	    #For each of our rig joints, find the closest constraint target joint
	    log.info("targetJoints: %s"%l_constrainTargetJoints)
	    l_rigJoints = [i_jnt.mNode for i_jnt in ml_rigJoints]
	    for i,i_jnt in enumerate(ml_rigJoints):
		#Don't try scale constraints in here, they're not viable
		log.info("Checking: '%s'"%i_jnt.getShortName())
		attachJoint = distance.returnClosestObject(i_jnt.mNode,l_constrainTargetJoints)
		log.info("'%s'<< drives <<'%s'"%(i_jnt.getShortName(),cgmMeta.cgmNode(attachJoint).getShortName()))
		pntConstBuffer = mc.pointConstraint(attachJoint,i_jnt.mNode,maintainOffset=False,weight=1)
		orConstBuffer = mc.orientConstraint(attachJoint,i_jnt.mNode,maintainOffset=False,weight=1)
		mc.connectAttr((attachJoint+'.s'),(i_jnt.mNode+'.s'))
	     
	    #Setup finger scaling
	    #==================================================================================== 
	    #Parent deform Null to last blend parent
	    if mi_moduleParent:
		mi_blendEndJoint = mi_moduleParent.rigNull.msgList_get('blendJoints')[-1]
		mi_parentBlendPlug = cgmMeta.cgmAttr(mi_blendEndJoint,'scale')
		self._go._i_deformNull.parent = mi_blendEndJoint.mNode
	    
		#connect blend joint scale to the finger blend joints
		for i_jnt in ml_blendJoints:
		    mi_parentBlendPlug.doConnectOut("%s.scale"%i_jnt.mNode)
		    
		#intercept world scale on finger IK and add in the blend wrist scale
		mPlug_moduleMasterScale = cgmMeta.cgmAttr(self._go._i_rigNull,'masterScale',value = 1.0,defaultValue=1.0)
		mPlug_globalScale = cgmMeta.cgmAttr(self._go._i_masterControl.mNode,'scaleY')
		mPlug_globalScale.doConnectOut(mPlug_moduleMasterScale)
		NodeF.argsToNodes("%s = %s * %s.sy"%(mPlug_moduleMasterScale.p_combinedShortName,
			                             mPlug_globalScale.p_combinedShortName,
			                             mi_blendEndJoint.p_nameShort)).doBuild()
	    
	    try:#Vis Network, lock and hide
		#====================================================================================
		#Segment handles need to lock
		for ml_chain in ml_segmentHandleChains:
		    for i_obj in ml_chain:
			attributes.doSetLockHideKeyableAttr(i_obj.mNode,lock=True,
			                                    visible=False, keyable=False,
			                                    channels=['s%s'%orientation[1],
			                                              's%s'%orientation[2]])
			
		attributes.doSetLockHideKeyableAttr(mi_settings.mNode,lock=True,
		                                    visible=False, keyable=False)
		attributes.doSetLockHideKeyableAttr(ml_blendJoints[0].mNode,lock=True,
		                                    visible=True, keyable=False)
		
		for i,mCtrl in enumerate(ml_controlsFK):
		    l_attrs = ['sx','sy','sz','v']
		    if i != 0:
			l_attrs.extend(['tx','ty','tz'])
			
		    attributes.doSetLockHideKeyableAttr(mCtrl.mNode,channels=l_attrs,
		                                        lock=True, visible=False, keyable=False)
		    

		
		attributes.doSetLockHideKeyableAttr(mi_controlIK.mNode,channels=['sx','sy','sz','v'],
	                                            lock=True, visible=False, keyable=False)	    
	    except Exception,error:
		raise Exception,"Lock and hide fail! | {0}".format(error)	 
Exemple #37
0
	def build_old(self):#================================================================================   	
	    
	    if not self._go.isShaped():
		raise Exception,"%s.build_controls>>> needs shapes to build controls"%self._go._strShortName
	    if not self._go.isRigSkeletonized():
		raise Exception,"%s.build_controls>>> needs shapes to build controls"%self._go._strShortName
	    """
	    __d_controlShapes__ = {'shape':['controlsFK','midIK','settings','hand'],
			     'pivot':['toe','heel','ball','inner','outer
	    for shape in __d_controlShapes__['shape']:
		self._go.__dict__['mi_%s'%shape] = cgmMeta.validateObjArg(self._go._i_rigNull.msgList_getMessage('shape_%s'%shape),noneValid=False)
		log.info(self._go.__dict__['mi_%s'%shape] )"""
	    ml_controlsFK = cgmMeta.validateObjListArg(self._go._i_rigNull.msgList_getMessage('shape_controlsFK'),cgmMeta.cgmObject)
	    ml_segmentIK = cgmMeta.validateObjListArg(self._go._i_rigNull.msgList_getMessage('shape_segmentIK'),cgmMeta.cgmObject)
	    #self._go._i_rigNull.msgList_connect(self._go._md_controlShapes['segmentIK'],'shape_segmentIK_%s'%i,"rigNull")		
	    l_segmentIKChains = []
	    ml_segmentIKChains = []
	    for i in range(50):
		buffer = self._go._i_rigNull.msgList_getMessage('shape_segmentIK_%s'%i)
		if buffer:
		    l_segmentIKChains.append(buffer)
		    ml_segmentIKChains.append(cgmMeta.validateObjListArg(buffer,cgmMeta.cgmObject))
		else:
		    break  
		 
	    #mi_midIK = cgmMeta.validateObjArg(self._go._i_rigNull.getMessage('shape_midIK'),cgmMeta.cgmObject)
	    mi_settings= cgmMeta.validateObjArg(self._go._i_rigNull.getMessage('shape_settings'),cgmMeta.cgmObject)
	    ml_fkJoints = cgmMeta.validateObjListArg(self._go._i_rigNull.msgList_getMessage('fkJoints'),cgmMeta.cgmObject)
	    mi_cap = cgmMeta.validateObjArg(self._go._i_rigNull.getMessage('shape_moduleCap'),cgmMeta.cgmObject)
	    
	    log.info("mi_settings: '%s'"%mi_settings.getShortName())
	    log.info("mi_cap: '%s'"%mi_cap.getShortName())    
	    log.info("ml_fkJoints: %s"%[i_o.getShortName() for i_o in ml_fkJoints])
	    
	    #>>>Make a few extra groups for storing controls and what not to in the deform group
	    for grp in ['controlsFK','controlsIK']:
		i_dup = self._go._i_constrainNull.doDuplicateTransform(True)
		i_dup.parent = self._go._i_constrainNull.mNode
		i_dup.addAttr('cgmTypeModifier',grp,lock=True)
		i_dup.doName()
		
		self._go._i_constrainNull.connectChildNode(i_dup,grp,'owner')
		
	    l_controlsAll = []
	    #==================================================================
	    try:#>>>> FK Segments
		if len( ml_controlsFK )<3:
		    raise Exception,"%s.build_controls>>> Must have at least three fk controls"%self._go._strShortName	    
		
		#for i,i_obj in enumerate(ml_controlsFK[1:]):#parent
		    #i_obj.parent = ml_controlsFK[i].mNode
		ml_fkJoints[0].parent = self._go._i_constrainNull.controlsFK.mNode
			
		for i,i_obj in enumerate(ml_controlsFK):
		    d_buffer = mControlFactory.registerControl(i_obj,shapeParentTo=ml_fkJoints[i],setRotateOrder=3,
		                                               mirrorSide=self._go._str_mirrorDirection, mirrorAxis="translateX",		                                           		                                               
			                                       makeAimable=True,typeModifier='fk',) 	    
		    
		    i_obj = d_buffer['instance']
		    i_obj.axisAim = "%s+"%self._go._jointOrientation[0]
		    i_obj.axisUp= "%s+"%self._go._jointOrientation[1]	
		    i_obj.axisOut= "%s+"%self._go._jointOrientation[2]
		    i_obj.drawStyle = 6#Stick joint draw style
		    
		    cgmMeta.cgmAttr(i_obj,'radius',hidden=True)
		    
		for i_obj in ml_controlsFK:
		    i_obj.delete()
		    
		#ml_controlsFK[0].masterGroup.parent = self._go._i_constrainNull.mNode
		self._go._i_rigNull.msgList_connect(ml_fkJoints,'controlsFK',"rigNull")
		l_controlsAll.extend(ml_fkJoints[:-1])	
	    
	    except Exception,error:	
		log.error("%s.build_controls>>> Build fk fail!"%self._go._strShortName)
		raise Exception,error
def register(
    controlObject=None,  #(mObject - None) -- The object to use as a control
    typeModifier=None,  #(string - None) -- Tag for cgmTypeModifier for naming
    copyTransform=None,  #(mObject - None) -- Object to copy the transform of for our control object
    copyPivot=None,  #(mObject - None) -- Object to copy the pivot of for our control object
    shapeParentTo=None,  #'(mObject - None) -- Object to shape parent our control curve to to use that transform
    useShape=None,  #'(mObject - None) -- Object to use the curve shape of for our control
    setRotateOrder=None,  #'(rotateOrder - None) -- Argument for a rotate order to set
    autoLockNHide=None,  #'(bool - None) -- Try to set lock and hide
    mirrorAxis=None,  #'(string - None) -- Mirror axis to set - using red9's setup terms
    mirrorSide=None,  #'(string/int - None) -- Mirror side - using red9's setup terms
    makeMirrorable=True,  #'(bool - True) -- Setup for mirrorability (using red9) -- implied by other mirror args
    addDynParentGroup=False,  #'(False) -- Add a dynParent group setup
    addExtraGroups=False,  #'(int - False) -- Number of nested extra groups desired
    addConstraintGroup=False,  #'(bool - False) -- If a group just above the control is desired for consraining
    freezeAll=False,  #'(bool - False) -- Freeze all transforms on the control object
    noFreeze=False,
    addSpacePivots=False,  #'(int - False) -- Number of space pivots to generate and connect
    controlType=None,  #'(string - None) -- Tag for cgmType
    aim=None,  #'(string/int - None) -- aim axis to use
    up=None,  #'(string/int - None) -- up axis to use
    out=None,  #'(string/int - None) -- out axis to use
    makeAimable=None,  #'(mObject - False) -- Make object aimable -- implied by aim/up/out):
    **kws):

    _str_func = 'register'
    """
    [{'step':'validate','call':self._validate},
    {'step':'Copy Transform','call':self._copyTransform},
    {'step':'Shape Parent','call':self._shapeParent},
    {'step':'Copy Pivot','call':self._copyPivot},
    {'step':'Naming','call':self._naming},
    {'step':'Aim Setup','call':self._aimSetup},
    {'step':'Rotate Order','call':self._rotateOrder},
    {'step':'Initial Freeze','call':self._initialFreeze},
    {'step':'Groups Setup','call':self._groupsSetup},
    {'step':'Space Pivot','call':self._spacePivots},
    {'step':'Mirror Setup','call':self._mirrorSetup},	                        
    {'step':'Freeze','call':self._freeze},
    {'step':'Mirror Attribute Bridges','call':self._mirrorAttributeBridges_},	                        
    {'step':'lock N Hide','call':self._lockNHide},
    {'step':'Return build','call':self._returnBuild}]
    """
    try:
        #Validate ================================================================================================
        mi_control = cgmMeta.validateObjArg(controlObject,
                                            'cgmControl',
                                            setClass=True)

        str_mirrorAxis = VALID.stringArg(mirrorAxis, calledFrom=_str_func)
        str_mirrorSide = cgmGeneral.verify_mirrorSideArg(
            mirrorSide)  #VALID.stringArg(mirrorSide,calledFrom = _str_func)
        b_makeMirrorable = VALID.boolArg(makeMirrorable, calledFrom=_str_func)

        _addMirrorAttributeBridges = kws.get('addMirrorAttributeBridges',
                                             False)
        addForwardBack = kws.get('addForwardBack', False)

        if _addMirrorAttributeBridges:
            if type(_addMirrorAttributeBridges) not in [list, tuple]:
                raise ValueError, "[Bad addMirrorAttributeBridge arg]{arg: %s}" % _addMirrorAttributeBridge
            for i, l in enumerate(_addMirrorAttributeBridges):
                if type(l) not in [list, tuple]:
                    raise ValueError, "[Bad addMirrorAttributeBridge arg: %s]{arg: %s}" % (
                        i, l)

        # Running lists ------------------------------------------------------------------------------------------
        ml_groups = []  #Holder for groups
        ml_constraintGroups = []
        ml_spacePivots = []

        #Copy Transform ================================================================================================
        if copyTransform is not None:
            mTarget = cgmMeta.validateObjArg(copyTransform,
                                             'cgmObject',
                                             noneValid=True)
            if not mTarget:
                raise StandardError, "Failed to find suitable copyTransform object: '%s" % copyTransform

            #Need to move this to default cgmNode stuff
            mBuffer = mi_control
            i_newTransform = cgmMeta.cgmObject(
                rigging.groupMeObject(mTarget.mNode, False))
            for a in mc.listAttr(mi_control.mNode, userDefined=True):
                ATTR.copy_to(mi_control.mNode, a, i_newTransform.mNode)
            curves.parentShapeInPlace(i_newTransform.mNode,
                                      mi_control.mNode)  #Parent shape
            i_newTransform.parent = mi_control.parent  #Copy parent
            mi_control = cgmMeta.asMeta(i_newTransform,
                                        'cgmControl',
                                        setClass=True)
            mc.delete(mBuffer.mNode)

        #ShapeParent ================================================================================================
        if shapeParentTo:
            i_target = cgmMeta.validateObjArg(shapeParentTo, 'cgmObject')
            CORERIG.shapeParent_in_place(i_target.mNode, mi_control.mNode)
            i_target = cgmMeta.asMeta(i_target, 'cgmControl', setClass=True)
            #mi_control.delete()
            mi_control = i_target  #replace the control with the joint

        if useShape is not None:
            i_shape = cgmMeta.validateObjArg(useShape,
                                             cgmMeta.cgmObject,
                                             mayaType='nurbsCurve')
            curves.parentShapeInPlace(mi_control.mNode, i_shape.mNode)

        #Copy Pivot ============================================================================================
        if copyPivot is not None:
            if issubclass(type(copyPivot), cgmMeta.cgmNode):
                i_target = copyPivot
            elif mc.objExists(copyPivot):
                i_target = cgmMeta.cgmObject(copyPivot)
            else:
                raise StandardError, "Failed to find suitable copyTransform object: '%s" % copyPivot

            #Need to move this to default cgmNode stuff
            mi_control.doCopyPivot(i_target.mNode)

        #Naming ============================================================================================
        mi_control.addAttr('cgmType', 'controlAnim', lock=True)
        if typeModifier is not None:
            mi_control.addAttr('cgmTypeModifier', str(typeModifier), lock=True)
        mi_control.doName()  #mi_control.doName(nameShapes=True)

        #Rotate Order ============================================================================================
        _rotateOrder = False
        if setRotateOrder is not None:
            _rotateOrder = setRotateOrder
        elif controlType in __d_rotateOrderDefaults__.keys():
            _rotateOrder = __d_rotateOrderDefaults__[controlType]
        elif mi_control.getAttr('cgmName') in __d_rotateOrderDefaults__.keys():
            _rotateOrder = __d_rotateOrderDefaults__[mi_control.getAttr(
                'cgmName')]
        else:
            log.debug("|{0}| >> Rotate order not set on: {1}".format(
                _str_func, mi_control.p_nameShort))

        #Set it ---------------------------------------------------------------
        if _rotateOrder:
            mRotateOrder = VALID.simpleOrientation(_rotateOrder)
            #dictionary.validateRotateOrderString(_rotateOrder)

            mc.xform(mi_control.mNode, rotateOrder=mRotateOrder.p_string)

        #Initial Freeze ============================================================================================
        if freezeAll:
            mc.makeIdentity(mi_control.mNode, apply=True, t=1, r=1, s=1, n=0)

        #Groups ============================================================================================
        if addDynParentGroup or addSpacePivots or mi_control.getAttr(
                'cgmName') == 'cog' or _addMirrorAttributeBridges:
            mi_control.addAttr('________________',
                               attrType='int',
                               keyable=False,
                               hidden=False,
                               lock=True)
            ATTR.reorder(mi_control.mNode, '________________', top=True)
        #Aim Setup ============================================================================================
        if aim is not None or up is not None or makeAimable:
            mi_control._verifyAimable()

        #First our master group:
        i_masterGroup = (cgmMeta.asMeta(mi_control.doGroup(True),
                                        'cgmObject',
                                        setClass=True))
        i_masterGroup.doStore('cgmName', mi_control)
        i_masterGroup.addAttr('cgmTypeModifier', 'master', lock=True)
        i_masterGroup.doName()
        mi_control.connectChildNode(i_masterGroup, 'masterGroup', 'groupChild')

        if addDynParentGroup:
            i_dynGroup = (cgmMeta.cgmObject(mi_control.doGroup(True)))
            i_dynGroup = cgmRigMeta.cgmDynParentGroup(dynChild=mi_control,
                                                      dynGroup=i_dynGroup)
            i_dynGroup.doName()
            """
            i_zeroGroup = (cgmMeta.cgmObject(mi_control.doGroup(True)))
            i_zeroGroup.addAttr('cgmTypeModifier','zero',lock=True)
            i_zeroGroup.doName()
            mi_control.connectChildNode(i_zeroGroup,'zeroGroup','groupChild')"""

        if addExtraGroups:
            for i in range(addExtraGroups):
                i_group = (cgmMeta.asMeta(mi_control.doGroup(True),
                                          'cgmObject',
                                          setClass=True))
                if type(
                        addExtraGroups
                ) == int and addExtraGroups > 1:  #Add iterator if necessary
                    i_group.addAttr('cgmIterator', str(i + 1), lock=True)
                    i_group.doName()
                ml_groups.append(i_group)
            mi_control.msgList_connect("extraGroups", ml_groups, 'groupChild')

        if addConstraintGroup:  #ConstraintGroups
            i_constraintGroup = (cgmMeta.asMeta(mi_control.doGroup(True),
                                                'cgmObject',
                                                setClass=True))
            i_constraintGroup.addAttr('cgmTypeModifier',
                                      'constraint',
                                      lock=True)
            i_constraintGroup.doName()
            ml_constraintGroups.append(i_constraintGroup)
            mi_control.connectChildNode(i_constraintGroup, 'constraintGroup',
                                        'groupChild')

        #Space Pivot ============================================================================================
        if addSpacePivots:
            parent = mi_control.getMessage('masterGroup')[0]
            for i in range(int(addSpacePivots)):
                #i_pivot = rUtils.create_spaceLocatorForObject(mi_control.mNode,parent)
                i_pivot = SPACEPIVOTS.create(mi_control.mNode, parent)
                ml_spacePivots.append(i_pivot)
                #log.info("spacePivot created: {0}".format(i_pivot.p_nameShort))

        #Mirror Setup ============================================================================================
        if str_mirrorSide is not None or b_makeMirrorable:
            for mObj in [mi_control] + ml_spacePivots:
                mi_control._verifyMirrorable()
                l_enum = cgmMeta.cgmAttr(mi_control, 'mirrorSide').p_enum
                if str_mirrorSide in l_enum:
                    #log.debug("|{0}| >> Rotate order not set on: {1}".format(_str_func,mi_control.p_nameShort))
                    #log.debug("%s >> %s >> found in : %s"%(_str_funcCombined, "mirrorSetup", l_enum))
                    mi_control.mirrorSide = l_enum.index(str_mirrorSide)
                if str_mirrorAxis:
                    mi_control.mirrorAxis = str_mirrorAxis
            for mObj in mi_control.msgList_get('spacePivots'):
                mObj._verifyMirrorable()
                mi_control.doConnectOut('mirrorAxis',
                                        mObj.mNode + '.mirrorAxis')
                mi_control.doConnectOut('mirrorSide',
                                        mObj.mNode + '.mirrorSide')

                #cgmMeta.cgmAttr(mObj,'mirrorSide').doConnectIn(mi_control,'mirrorSide')
                #cgmMeta.cgmAttr(mi_control,'mirrorAxis').doCopyTo(mObj,connectTargetToSource = 1)
                #ATTR.connect(mObj.mNode + '.mirrorAxis',"{0}.mirrorAxis".format(mi_control.mNode))
                #ATTR.connect(mObj.mNode + 'mirrorSide',"{0}.mirrorSide".format(mi_control.mNode))

        #Freeze ============================================================================================
        if not shapeParentTo and noFreeze is not True:
            if not freezeAll:
                if mi_control.getAttr(
                        'cgmName'
                ) == 'cog' or controlType in __l_fullFreezeTypes__:
                    mc.makeIdentity(mi_control.mNode,
                                    apply=True,
                                    t=1,
                                    r=1,
                                    s=1,
                                    n=0)
                else:
                    mc.makeIdentity(mi_control.mNode,
                                    apply=True,
                                    t=1,
                                    r=0,
                                    s=1,
                                    n=0)
            else:
                mc.makeIdentity(mi_control.mNode,
                                apply=True,
                                t=1,
                                r=1,
                                s=1,
                                n=0)

        #Mirror attriubte Bridges ==========================================================================
        if addForwardBack:
            mPlug_forwardBackDriver = cgmMeta.cgmAttr(mi_control,
                                                      "forwardBack",
                                                      attrType='float',
                                                      keyable=True)
            try:
                mPlug_forwardBackDriven = cgmMeta.validateAttrArg(
                    [mi_control, addForwardBack])['mi_plug']
            except Exception, error:
                raise StandardError, "push pull driver | %s" % (error)

            if str_mirrorSide.lower() == 'right':
                arg_forwardBack = "%s = -%s" % (
                    mPlug_forwardBackDriven.p_combinedShortName,
                    mPlug_forwardBackDriver.p_combinedShortName)
            else:
                arg_forwardBack = "%s = %s" % (
                    mPlug_forwardBackDriven.p_combinedShortName,
                    mPlug_forwardBackDriver.p_combinedShortName)

            mPlug_forwardBackDriven.p_locked = True
            mPlug_forwardBackDriven.p_hidden = True
            mPlug_forwardBackDriven.p_keyable = False
            NodeF.argsToNodes(arg_forwardBack).doBuild()

        if _addMirrorAttributeBridges:
            for l_bridge in _addMirrorAttributeBridges:
                _attrName = VALID.stringArg(l_bridge[0])
                _attrToBridge = VALID.stringArg(l_bridge[1])
                if not mi_control.hasAttr(_attrToBridge):
                    raise StandardError, "['%s' lacks the bridge attr '%s']" % (
                        mi_control.p_nameShort, _attrToBridge)

                mPlug_attrBridgeDriver = cgmMeta.cgmAttr(mi_control,
                                                         _attrName,
                                                         attrType='float',
                                                         keyable=True)
                try:
                    mPlug_attrBridgeDriven = cgmMeta.validateAttrArg(
                        [mi_control, _attrToBridge])['mi_plug']
                except Exception, error:
                    raise StandardError, "[validate control attribute bridge attr]{%s}" % (
                        error)

                if str_mirrorSide.lower() == 'right':
                    arg_attributeBridge = "%s = -%s" % (
                        mPlug_attrBridgeDriven.p_combinedShortName,
                        mPlug_attrBridgeDriver.p_combinedShortName)
                else:
                    arg_attributeBridge = "%s = %s" % (
                        mPlug_attrBridgeDriven.p_combinedShortName,
                        mPlug_attrBridgeDriver.p_combinedShortName)

                mPlug_attrBridgeDriven.p_locked = True
                mPlug_attrBridgeDriven.p_hidden = True
                mPlug_attrBridgeDriven.p_keyable = False
                NodeF.argsToNodes(arg_attributeBridge).doBuild()
Exemple #39
0
		    ml_ikJoints.append(i_new)	
	    except Exception,error:
		log.error("build_rigSkeleton>>Build ik joints fail!")
		raise Exception,error  
	    
	    try:#mirror stuff
		if self._go._str_mirrorDirection == 'Right':#mirror control setup
		    self._go.mirrorChainOrientation(ml_fkJoints)#New 
		    
		    ml_fkDriverJoints = self._go.build_handleChain('fkAttach','fkAttachJoints')
		    self._go.connect_toRigGutsVis(ml_fkDriverJoints,vis = True)#connect to guts vis switches
		    
		    for i,mJoint in enumerate(ml_fkJoints):
			log.info("Mirror connect: %s | %s"%(i,mJoint.p_nameShort))
			mJoint.connectChildNode(ml_fkDriverJoints[i],"attachJoint","rootJoint")
			cgmMeta.cgmAttr(mJoint.mNode,"rotateOrder").doConnectOut("%s.rotateOrder"%ml_fkDriverJoints[i].mNode)
	    except Exception,error: raise Exception,"Failed to create mirror chain | %s"%error
	    
	    
	    try:#>>> Store em all to our instance
		#=====================================================================	
		self._go._i_rigNull.msgList_connect(self._go._l_skinJoints,'skinJoints',"rigNull")#push back to reset
		self._go._i_rigNull.msgList_connect(ml_fkJoints,'fkJoints',"rigNull")
		self._go._i_rigNull.msgList_connect(ml_blendJoints,'blendJoints',"rigNull")
		self._go._i_rigNull.msgList_connect(ml_ikJoints,'ikJoints',"rigNull")
	
	    except Exception,error:
		log.error("build_finger>>StoreJoints fail!")
		raise Exception,error   
	    
	    try:#>>> Connect vis
Exemple #40
0
def build_FKIK(goInstance = None):
    class fncWrap(modUtils.rigStep):
	def __init__(self,goInstance = None):
	    super(fncWrap, self).__init__(goInstance)
	    self._str_funcName = 'build_FKIK(%s)'%self.d_kws['goInstance']._strShortName	
	    self.__dataBind__()
	    self.l_funcSteps = [{'step':'Build NOT BROKEN UP YET','call':self.build}]	
	    #=================================================================
	    
	def build(self):#================================================================================   	
	    
	    #>>>Get data
	    ml_controlsFK =  self._go._i_rigNull.msgList_get('controlsFK')   
	    ml_rigJoints = self._go._i_rigNull.msgList_get('rigJoints')
	    ml_blendJoints = self._go._i_rigNull.msgList_get('blendJoints')
	    ml_fkJoints = self._go._i_rigNull.msgList_get('fkJoints')
	    ml_ikJoints = self._go._i_rigNull.msgList_get('ikJoints')
		    
	    mi_settings = self._go._i_rigNull.settings
		
	    aimVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[0])
	    upVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[1])
	    outVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[2])
	    
	    mi_controlIK = self._go._i_rigNull.controlIK
	
	    for chain in [ml_ikJoints,ml_blendJoints]:
		chain[0].parent = self._go._i_constrainNull.mNode
		
	    self.ml_fkAttachJoints = []
	    if self._go._str_mirrorDirection == 'Right':#mirror control setup
		self.ml_fkAttachJoints = self._go._i_rigNull.msgList_get('fkAttachJoints')
		
	    #for more stable ik, we're gonna lock off the lower channels degrees of freedom
	    for chain in [ml_ikJoints]:
		for axis in self._go._jointOrientation[:2]:
		    log.info(axis)
		    for i_j in chain[1:]:
			attributes.doSetAttr(i_j.mNode,"jointType%s"%axis.upper(),1)
	    
	    #=============================================================    
	    try:#>>>Finger Root Control and root follow
		for attr in ['tx','ty','tz']:#Unlock a few things
		    i_attr = cgmMeta.cgmAttr(ml_fkJoints[0],attr)
		    i_attr.p_keyable = True
		    i_attr.p_locked = False	   	
	
		#we have to rebuild a little so that we can use our fk base control both for fk and ik
		#Create a orient group that tracks the  module constrain null
		if self._go._partType == 'finger':
		    buffer_fkGroup = ml_fkJoints[0].parent
		    i_orientGroup = cgmMeta.asMeta( ml_fkJoints[1].doGroup(True),'cgmObject',setClass=True )
		    i_orientGroup.addAttr('cgmTypeModifier','toOrient')
		    i_orientGroup.doName()
		    
		    #constrain it 
		    str_orConst = mc.orientConstraint(self._go._i_constrainNull.mNode,i_orientGroup.mNode,maintainOffset = True)[0]
		    self._go._i_constrainNull.connectChildNode(i_orientGroup,'fingerRoot','owner')#Connect
		    i_orientGroup.parent = self._go._i_constrainNull.mNode
		    
		    attributes.doSetLockHideKeyableAttr(i_orientGroup.mNode)#lockNHide
		    
		    i_parentGroup = cgmMeta.asMeta( i_orientGroup.doGroup(True),'cgmObject',setClass=True )
		    i_parentGroup.addAttr('cgmTypeModifier','toParent')
		    i_parentGroup.doName()	
		    str_prntConst = mc.parentConstraint( ml_fkJoints[0].mNode,i_parentGroup.mNode,maintainOffset = True)[0]
		    i_parentGroup.parent = buffer_fkGroup
		    
		    #attributes.doSetLockHideKeyableAttr(ml_fkJoints[0].mNode,lock = False, visible=True, keyable=True, channels=['tx','ty','tz'])
		    
		    #Constrain ik base to fk base
		    mc.orientConstraint(ml_fkJoints[0].mNode,ml_ikJoints[0].mNode,maintainOffset = True)
		    ml_fkJoints[0].parent = self._go._i_constrainNull.mNode
	
	    except Exception,error:
		raise Exception,"%s.build_FKIK>>> Finger Root Control error: %s"%(self._go._strShortName,error)
	    
	    #=============================================================    
	    try:#>>>FK Length connector
		if self._go._partType == 'finger':
		    ml_fkToDo = ml_fkJoints[1:-1]
		else:#thumb
		    ml_fkToDo = ml_fkJoints[:-1]
		    log.info([i_jnt.getShortName() for i_jnt in ml_fkToDo])
		    
		for i,i_jnt in enumerate(ml_fkToDo):
		    rUtils.addJointLengthAttr(i_jnt,orientation=self._go._jointOrientation)
		
		#IK
		rUtils.addJointLengthAttr(ml_ikJoints[-2],[mi_controlIK,'length'],orientation=self._go._jointOrientation)
		
	    except Exception,error:
		raise Exception,"%s.build_FKIK>>> fk length connect error: %s"%(self._go._strShortName,error)
	    
	    #=============================================================  
	    try:#>>>IK No Flip Chain
		self._go._verify_moduleMasterScale()
		mPlug_masterScale = self._go._get_masterScalePlug()
				
		ml_ikNoFlipJoints = ml_ikJoints#Link
		if self._go._partType == 'finger':
		    mi_ikStart = ml_ikNoFlipJoints[1]
		    mi_ikEnd = ml_ikNoFlipJoints[-2]
		    mi_constraintGroup = self._go._i_constrainNull.fingerRoot
		else:#thumb 
		    mi_ikStart = ml_ikNoFlipJoints[0]
		    mi_ikEnd = ml_ikNoFlipJoints[-2]
		    mi_constraintGroup = self._go._i_constrainNull
		
		i_tmpLoc = mi_ikEnd.doLoc()#loc the first real
		i_tmpLoc.parent = mi_controlIK.mNode
		str_twistGroup = i_tmpLoc.doGroup(True)
		
		f_dist = distance.returnDistanceBetweenPoints(mi_ikStart.getPosition(),ml_ikNoFlipJoints[-1].getPosition()) #Measure first finger joint to end
		f_dist = f_dist * 1.5
		if self._go._direction == 'left':#if right, rotate the pivots
		    i_tmpLoc.__setattr__('t%s'%self._go._jointOrientation[2],-f_dist)
		else:
		    i_tmpLoc.__setattr__('t%s'%self._go._jointOrientation[2],f_dist)
		
		#Create no flip finger IK
		d_ankleNoFlipReturn = rUtils.IKHandle_create(mi_ikStart.mNode,mi_ikEnd.mNode,lockMid=False,
			                                     nameSuffix = 'noFlip',rpHandle=True,controlObject=mi_controlIK,addLengthMulti=True,
			                                     globalScaleAttr=mPlug_masterScale.p_combinedName, stretch='translate',moduleInstance=self._go._mi_module)
		
		mi_fingerIKHandleNF = d_ankleNoFlipReturn['mi_handle']
		ml_distHandlesNF = d_ankleNoFlipReturn['ml_distHandles']
		mi_rpHandleNF = d_ankleNoFlipReturn['mi_rpHandle']
		
		#No Flip RP handle
		Snap.go(mi_rpHandleNF,i_tmpLoc.mNode,True)#Snape to hand control, then move it out...
		i_tmpLoc.delete()
		
		mi_rpHandleNF.doCopyNameTagsFromObject(self._go._mi_module.mNode, ignore = ['cgmName','cgmType'])
		mi_rpHandleNF.addAttr('cgmName','%sPoleVector'%self._go._partName, attrType = 'string')
		mi_rpHandleNF.addAttr('cgmTypeModifier','noFlip')
		mi_rpHandleNF.doName()
		
		#spin
		#=========================================================================================
		#Make a spin group
		i_spinGroup = cgmMeta.cgmObject(str_twistGroup)
		i_spinGroup.doCopyNameTagsFromObject(self._go._mi_module.mNode, ignore = ['cgmName','cgmType'])	
		i_spinGroup.addAttr('cgmName','%sNoFlipSpin'%self._go._partName)
		i_spinGroup.doName()
		
		i_spinGroup.doZeroGroup()
		mi_rpHandleNF.parent = i_spinGroup.mNode
			
		#Setup arg
		mPlug_fingerSpin = cgmMeta.cgmAttr(mi_controlIK,'fingerSpin')
		mPlug_fingerSpin.doConnectOut("%s.r%s"%(i_spinGroup.mNode,self._go._jointOrientation[0]))
		
		#>>>Parent IK handles
		mi_fingerIKHandleNF.parent = mi_controlIK.mNode#handle to control	
		ml_distHandlesNF[-1].parent = mi_controlIK.mNode#handle to control
		ml_distHandlesNF[0].parent = mi_constraintGroup.mNode#start to root
		ml_distHandlesNF[1].parent = mi_constraintGroup.mNode#mid to root
		
		#>>> Fix our ik_handle twist at the end of all of the parenting
		rUtils.IKHandle_fixTwist(mi_fingerIKHandleNF)#Fix the twist
		
	    except Exception,error:
		raise Exception,"%s.build_FKIK>>> IK No Flip error: %s"%(self._go._strShortName,error)
Exemple #41
0
def split_blends(driven1 = None,
                 driven2 = None,
                 sealDriver1 = None,
                 sealDriver2 = None,
                 sealDriverMid = None,
                 nameSeal1 = 'left',
                 nameSeal2 = 'right',
                 nameSealMid = 'center',
                 maxValue = 10.0,
                 inTangent = 'auto',
                 outTangent = 'auto',
                 settingsControl = None,
                 buildNetwork = True):
    """
    Split for blend data
    """
    try:
        _str_func = 'split_blends'
        d_dat = {1:{'dist1':[],
                    'dist2':[],
                    'distMid':[]},
                 2:{'dist1':[],
                    'dist2':[],
                    'distMid':[]}}
        _lock=False
        _hidden=False
        #>>> Verify ===================================================================================
        log.debug("|{0}| >> driven1 [Check]...".format(_str_func))        
        d_dat[1]['driven'] = cgmMeta.validateObjListArg(driven1,
                                                        mType = 'cgmObject',
                                                        mayaType=['joint'], noneValid = False)
        log.debug("|{0}| >> driven2 [Check]...".format(_str_func))                
        d_dat[2]['driven'] = cgmMeta.validateObjListArg(driven2,
                                                        mType = 'cgmObject',
                                                        mayaType=['joint'], noneValid = False)

        mSettings = cgmMeta.validateObjArg(settingsControl,'cgmObject')
        pprint.pprint(d_dat[1]['driven'])
        pprint.pprint(d_dat[2]['driven'])

        if buildNetwork:
            log.debug("|{0}| >> buildNetwork | building driver attrs...".format(_str_func))                            
            mPlug_sealMid = cgmMeta.cgmAttr(mSettings.mNode,
                                            'seal_{0}'.format(nameSealMid),
                                            attrType='float',
                                            minValue=0.0,
                                            maxValue = maxValue,
                                            lock=False,
                                            keyable=True)
            mPlug_seal1 = cgmMeta.cgmAttr(mSettings.mNode,
                                          'seal_{0}'.format(nameSeal1),
                                          attrType='float',
                                          minValue=0.0,
                                          maxValue = maxValue,
                                          lock=False,
                                          keyable=True)
            mPlug_seal2 = cgmMeta.cgmAttr(mSettings.mNode,
                                          'seal_{0}'.format(nameSeal2),
                                          attrType='float',
                                          minValue=0.0,
                                          maxValue = maxValue,
                                          lock=False,
                                          keyable=True)            

        pos1 = POS.get(sealDriver1)
        pos2 = POS.get(sealDriver2)
        posMid = POS.get(sealDriverMid)

        normMin = maxValue * .1
        normMax = maxValue - normMin

        for idx,dat in d_dat.iteritems():
            mDriven = dat['driven']

            d_tmp = {'dist1':{'pos':pos1,
                              'res':dat['dist1']},
                     'dist2':{'pos':pos2,
                              'res':dat['dist2']},
                     'distMid':{'pos':posMid,
                                'res':dat['distMid']},
                     }

            for mObj in mDriven:
                for n,d in d_tmp.iteritems():
                    dTmp = DIST.get_distance_between_points(d['pos'],mObj.p_position)
                    if MATH.is_float_equivalent(dTmp,0.0):
                        dTmp = 0.0
                    d['res'].append(dTmp)

            dat['dist1Norm'] = MATH.normalizeList(dat['dist1'],normMax)
            dat['dist2Norm'] = MATH.normalizeList(dat['dist2'],normMax)
            dat['distMidNorm'] = MATH.normalizeList(dat['distMid'],normMax)

            dat['dist1On'] = [v + normMin for v in dat['dist1Norm']]
            dat['dist2On'] = [v + normMin for v in dat['dist2Norm']]
            dat['distMidOn'] = [v + normMin for v in dat['distMidNorm']]
            
            if buildNetwork:
                log.debug("|{0}| >> buildNetwork | building driver attrs...".format(_str_func))
                dat['mPlugs'] = {'1':{},
                                 '2':{},
                                 'mid':{},
                                 'on':{},
                                 'off':{},
                                 'sum':{}}
                for i,mObj in enumerate(mDriven):
                    log.debug("|{0}| >> buildNetwork | On: {1}".format(_str_func,mObj) + cgmGEN._str_subLine)
                    dat['mPlugs']['1'][i] = cgmMeta.cgmAttr(mSettings,
                                                            'set{0}_idx{1}_blend{2}'.format(idx,i,'1'),
                                                            attrType='float',
                                                            keyable = False,lock=_lock,hidden=_hidden)
                    dat['mPlugs']['2'][i] = cgmMeta.cgmAttr(mSettings,
                                                            'set{0}_idx{1}_blend{2}'.format(idx,i,'2'),
                                                            attrType='float',
                                                            keyable = False,lock=_lock,hidden=_hidden)
                    dat['mPlugs']['mid'][i] = cgmMeta.cgmAttr(mSettings,
                                                              'set{0}_idx{1}_blend{2}'.format(idx,i,'mid'),
                                                              attrType='float',
                                                              keyable = False,lock=_lock,hidden=_hidden)                    
                    dat['mPlugs']['on'][i] = cgmMeta.cgmAttr(mSettings,
                                                             'set{0}_idx{1}_on'.format(idx,i),
                                                             attrType='float',
                                                             keyable = False,lock=_lock,hidden=_hidden)
                    dat['mPlugs']['off'][i] = cgmMeta.cgmAttr(mSettings,
                                                              'set{0}_idx{1}_off'.format(idx,i),
                                                              attrType='float',
                                                              keyable = False,lock=_lock,hidden=_hidden)

                    dat['mPlugs']['sum'][i] = cgmMeta.cgmAttr(mSettings,
                                                              'set{0}_idx{1}_sum'.format(idx,i),
                                                              attrType='float',
                                                              keyable = False,lock=_lock,hidden=_hidden)

                    args = []
                    args.append("{0} = {1} + {2} + {3}".format(dat['mPlugs']['sum'][i].p_combinedShortName,
                                                               dat['mPlugs']['1'][i].p_combinedShortName,
                                                               dat['mPlugs']['2'][i].p_combinedShortName,
                                                               dat['mPlugs']['mid'][i].p_combinedShortName))
                    args.append("{0} = clamp(0 , 1.0, {1}".format(dat['mPlugs']['on'][i].p_combinedShortName,
                                                                  dat['mPlugs']['sum'][i].p_combinedShortName,))
                    args.append("{0} = 1.0 - {1}".format(dat['mPlugs']['off'][i].p_combinedShortName,
                                                         dat['mPlugs']['on'][i].p_combinedShortName,))                    
                    for a in args:
                        NODEFAC.argsToNodes(a).doBuild()

                    zeroMid = 0
                    zero1 = 0
                    zero2 = 0
                    
                    """
                    1
                    'dist1Norm': [9.0, 7.202468187218439, 4.077128668939619],
                    'dist1On': [10.0, 8.20246818721844, 5.077128668939619],
                    'dist2': [2.055457665682541, 3.632951746156667, 4.537290944991008],
                    'dist2Norm': [4.077128668939596, 7.206186711809993, 9.0],
                    'dist2On': [5.077128668939596, 8.206186711809993, 10.0],
                    
                    2
                    'dist1On': [10.0, 7.77630635569009, 4.3748619466292595],
                    'dist2': [1.6982080013368184, 3.4097921203066526, 4.528739916989064],
                    'dist2Norm': [3.3748619466301477, 6.7763063556899725, 9.0],
                    'dist2On': [4.374861946630148, 7.7763063556899725, 10.0],
                    
                    """
                    

                    try:zero1 = dat['dist1On'][i+1]
                    except:zero1 = 0
                    
                    if i:
                        try:zero2 = dat['dist2On'][i-1]
                        except:zero2 = 0
                        
                    #try:zeroMid = dat['distMidOn'][i-1]
                    #except:zeroMid= 0
                        
                   #if i:
                   #     zero1 = dat['dist1On'][i-1]

                    #try:zero2 = dat['dist2On'][i+1]
                    #except:zero2 = 0
                        #zero1 = MATH.Clamp(dat['dist1On'][i-1],normMin,maxValue)
                        #zero2 = MATH.Clamp(dat['dist2On'][i-1],normMin,maxValue)

                    mc.setDrivenKeyframe(dat['mPlugs']['1'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal1.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,
                                         driverValue = zero1,value = 0.0)

                    mc.setDrivenKeyframe(dat['mPlugs']['1'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal1.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = dat['dist1On'][i],value = 1.0)


                    mc.setDrivenKeyframe(dat['mPlugs']['2'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal2.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = zero2,value = 0.0)                    
                    mc.setDrivenKeyframe(dat['mPlugs']['2'][i].p_combinedShortName,
                                         currentDriver = mPlug_seal2.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = dat['dist2On'][i],value = 1.0)

                    last1 = dat['dist1On'][i]
                    last2 = dat['dist2On'][i]


                    mc.setDrivenKeyframe(dat['mPlugs']['mid'][i].p_combinedShortName,
                                         currentDriver = mPlug_sealMid.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = zeroMid,value = 0.0)                    
                    mc.setDrivenKeyframe(dat['mPlugs']['mid'][i].p_combinedShortName,
                                         currentDriver = mPlug_sealMid.p_combinedShortName,
                                         itt=inTangent,ott=outTangent,                                         
                                         driverValue = dat['distMidOn'][i],value = 1.0)

        pprint.pprint(d_dat)
        #return d_dat

        for idx,dat in d_dat.iteritems():
            for plugSet,mSet in dat['mPlugs'].iteritems():
                for n,mPlug in mSet.iteritems():
                    mPlug.p_lock=True
                    mPlug.p_hidden = True

        return d_dat

    except Exception,err:
        cgmGEN.cgmExceptCB(Exception,err,msg=vars())    
Exemple #42
0
        i_dup.delete()

    #reparent
    if mi_parent:
        try:
            ml_targetJoints[0].parent = mi_parent
        except Exception, error:
            raise StandardError, "Failed to parent back %s" % error
    for i, i_jnt in enumerate(ml_targetJoints):
        for ii, i_c in enumerate(d_children[i_jnt]):
            #log.info("{0} | {1}".format(i,ii))
            #log.info(i_c)
            log.debug("freezeJointOrientation>> parented '%s' back" %
                      i_c.getShortName())
            i_c.parent = i_jnt.mNode
            cgmMeta.cgmAttr(i_c, "inverseScale").doConnectIn("%s.scale" %
                                                             i_jnt.mNode)
    #log.info('reparent')
    #log.info("{0}>> reparent: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1)))
    #t1 = time.time()
    return True


def build_chain(posList=[],
                targetList=[],
                curve=None,
                axisAim='z+',
                axisUp='y+',
                worldUpAxis=[0, 1, 0],
                count=None,
                splitMode='curve',
                parent=False,
Exemple #43
0
def freezeOrientation(targetJoints):
    """
    Freeze joint orientations in place. 
    """
    _str_funcName = "metaFreezeJointOrientation"		
    #t1 = time.time()

    if type(targetJoints) not in [list,tuple]:targetJoints=[targetJoints]

    ml_targetJoints = cgmMeta.validateObjListArg(targetJoints,'cgmObject')

    #log.info("{0}>> meta'd: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1)))
    #t1 = time.time()				
    '''
    for i_jnt in ml_targetJoints:
        if i_jnt.getConstraintsTo():
        log.warning("freezeJointOrientation>> target joint has constraints. Can't change orientation. Culling from targets: '%s'"%i_jnt.getShortName())
        return False
        '''
    #buffer parents and children of 
    d_children = {}
    d_parent = {}
    mi_parent = cgmMeta.validateObjArg(ml_targetJoints[0].parent,noneValid=True)
    #log.info('validate')
    for i,i_jnt in enumerate(ml_targetJoints):
        _relatives = TRANS.children_get(i_jnt.mNode)
        log.debug("{0} relatives: {1}".format(i,_relatives))
        d_children[i_jnt] = cgmMeta.validateObjListArg( _relatives ,'cgmObject',True) or []
        d_parent[i_jnt] = cgmMeta.validateObjArg(i_jnt.parent,noneValid=True)
    for i_jnt in ml_targetJoints:
        for i,i_c in enumerate(d_children[i_jnt]):
        #log.debug(i_c.getShortName())
        #log.debug("freezeJointOrientation>> parented '%s' to world to orient parent"%i_c.mNode)
            i_c.parent = False
    if mi_parent:
        ml_targetJoints[0].parent = False

    #Orient
    t_loop = time.time()
    for i,i_jnt in enumerate(ml_targetJoints):
        """
        So....jointOrient is always in xyz rotate order
        dup,rotate order
        Unparent, add rotate & joint rotate, push value, zero rotate, parent back, done
        """    
        log.debug("parent...")
        if i != 0 and d_parent.get(i_jnt):
            i_jnt.parent = d_parent.get(i_jnt)#parent back first before duping

        #New method  ----
        log.debug("loc...")
    
        #mi_rootLoc = i_jnt.doLoc(fastMode = True)#Make some locs
        mi_zLoc = i_jnt.doLoc(fastMode = True)#Make some locs
        mi_yLoc = mi_zLoc.doDuplicate()

        log.debug("dup...")
        i_dup = i_jnt.doDuplicate(parentOnly = True)

        i_dup.parent = i_jnt.parent
        i_dup.rotate = 0,0,0
        i_dup.rotateOrder = 0
        i_dup.jointOrient = 0,0,0

        log.debug("group...")
        str_group = TRANS.group_me(i_jnt,False,True) #group for easy move
        
        mi_yLoc.parent = str_group
        mi_zLoc.parent = str_group

        mi_zLoc.tz = 1#Move
        mi_yLoc.ty = 1

        mc.makeIdentity(i_dup.mNode, apply = 1, jo = 1)#Freeze

        #Aim
        log.debug("constrain...")

        str_const = mc.aimConstraint(mi_zLoc.mNode,
                                     i_dup.mNode,
                                     maintainOffset = False,
                                     weight = 1,
                                     aimVector = [0,0,1],
                                     upVector = [0,1,0],
                                     worldUpVector = [0,1,0],
                                     worldUpObject = mi_yLoc.mNode,
                                     worldUpType = 'object' )[0]
        

        
        i_jnt.rotate = [0,0,0] #Move to joint
        i_jnt.jointOrient = i_dup.rotate
        
        #log.info('{0} delete'.format(i))

        log.debug("delete...")	    
        mc.delete([str_const,str_group])#Delete extra stuff str_group
        i_dup.delete()
        
    #reparent
    if mi_parent:
        try:ml_targetJoints[0].parent = mi_parent
        except Exception,error: raise StandardError,"Failed to parent back %s"%error
    for i,i_jnt in enumerate(ml_targetJoints):
        for ii,i_c in enumerate(d_children[i_jnt]):
            #log.info("{0} | {1}".format(i,ii))
            #log.info(i_c)
            log.debug("freezeJointOrientation>> parented '%s' back"%i_c.getShortName())
            i_c.parent = i_jnt.mNode 
            cgmMeta.cgmAttr(i_c,"inverseScale").doConnectIn("%s.scale"%i_jnt.mNode )
    #log.info('reparent')
    #log.info("{0}>> reparent: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1)))
    #t1 = time.time()				
    return True
Exemple #44
0
#Playing with constraing group for mid group
targets = mc.ls(sl=True)
reload(constraints)
constraints.doPointAimConstraintObjectGroup(targets, 'spine_2_ik_anim', 0)
from cgm.lib import logic
logic.returnLocalAimDirection('spine_2_ik_anim', targets[-1])
distance.returnLocalAimDirection('spine_2_ik_anim', targets[-1])

#>>> Scale buffer
#============================================================================
i_curve = cgmMeta.cgmObject('spine_splineIKCurve')
i_dBuffer = i_curve.scaleBuffer
for k in i_dBuffer.d_indexToAttr.keys():
    attrName = 'spineMult_%s' % k
    cgmMeta.cgmAttr(i_dBuffer.mNode,
                    'scaleMult_%s' % k).doCopyTo('cog_anim',
                                                 attrName,
                                                 connectSourceToTarget=True)
    cgmMeta.cgmAttr('cog_anim', attrName, keyable=True, lock=False)

i_rig.d_controlShapes
rig_segmentFK(i_rig.d_controlShapes)
Rig.registerControl('pelvis_anim')
l_joints = mc.ls(sl=True)
s = cgmMeta.cgmAttr('pelvis_surfaceJoint', 'scaleX')
s.p_hidden = False
curves.createControlCurve('semiSphere', 10, 'z-')
attributes.doSetAttr('closestPointOnSurface1', 'inPostionX', 5)
mc.setAttr('closestPointOnSurface1.inPostionX', 5)
m1 = cgmPM.cgmModule(name='test')
m1 = cgmMeta.cgmNode('spine_part')
m1.setState('skeleton', forceNew=True)
Exemple #45
0
    class fncWrap(modUtils.rigStep):
        def __init__(self, goInstance=None):
            super(fncWrap, self).__init__(goInstance)
            self._str_funcName = 'build_controls(%s)' % self._go._strShortName
            self.__dataBind__()
            self.l_funcSteps = [{
                'step': 'Verify',
                'call': self.verify
            }, {
                'step': 'Control Groups',
                'call': self.build_groups
            }, {
                'step': 'FK',
                'call': self.build_fk
            }, {
                'step': 'Connections',
                'call': self.build_connections
            }]
            #=================================================================

        def verify(self):
            self.ml_controlsFK = cgmMeta.validateObjListArg(
                self._go._i_rigNull.getMessage('shape_clavicle'),
                cgmMeta.cgmObject,
                noneValid=False)
            self.ml_fkJoints = cgmMeta.validateObjListArg(
                self._go._i_rigNull.msgList_getMessage('fkJoints'),
                cgmMeta.cgmObject,
                noneValid=False)

            if len(self.ml_controlsFK) != 1:
                raise Exception, "Must have at least one fk control"

            self.ml_controlsAll = []

        def build_groups(self):
            for grp in ['controlsFK']:
                i_dup = self._go._i_constrainNull.doDuplicateTransform(True)
                i_dup.parent = self._go._i_constrainNull.mNode
                i_dup.addAttr('cgmTypeModifier', grp, lock=True)
                i_dup.doName()

                self._go._i_constrainNull.connectChildNode(i_dup, grp, 'owner')

        def build_fk(self):
            #>>>> FK Segments
            ml_fkJoints = self.ml_fkJoints
            ml_controlsFK = self.ml_controlsFK

            ml_fkJoints[0].parent = self._go._i_constrainNull.controlsFK.mNode

            i_obj = ml_controlsFK[0]
            log.info(" %s controlFK : %s" %
                     (self._str_reportStart, i_obj.p_nameShort))
            log.info(" %s controlFK : %s" %
                     (self._str_reportStart, ml_fkJoints[0].p_nameShort))
            try:
                d_buffer = mControlFactory.registerControl(
                    i_obj.mNode,
                    shapeParentTo=ml_fkJoints[0].mNode,
                    mirrorSide=self._go._str_mirrorDirection,
                    mirrorAxis="translateX",
                    makeAimable=True,
                    typeModifier='fk')
            except Exception, error:
                raise Exception, "Register control | %s" % error

            try:
                i_obj = d_buffer['instance']
                i_obj.axisAim = "%s+" % self._go._jointOrientation[0]
                i_obj.axisUp = "%s+" % self._go._jointOrientation[1]
                i_obj.axisOut = "%s+" % self._go._jointOrientation[2]
                try:
                    i_obj.drawStyle = 2  #Stick joint draw style
                except:
                    self.log_error("{0} Failed to set drawStyle".format(
                        i_obj.p_nameShort))
                cgmMeta.cgmAttr(i_obj, 'radius', hidden=True)
            except Exception, error:
                raise Exception, "Failed to set attrs | %s" % error
Exemple #46
0
#==============================================================================================
#>> cgmMeta.cgmAttr
#==============================================================================================
from cgm.core import cgm_Meta as cgmMeta
import maya.cmds as mc

#>>Intro =========================================================================
#First we're gonna make some objects 
try:mi_baseObj = cgmMeta.cgmObject('baseObj')#...if it exists, initialize, except, make...
except:mi_baseObj = cgmMeta.cgmObject(mc.spaceLocator(p = [5,0,0],name = 'baseObj')[0])
try:mi_catchObj = cgmMeta.cgmObject('catchObj')#...if it exists, initialize, except, make...
except:mi_catchObj = cgmMeta.cgmObject(mc.spaceLocator(p = [-5,0,0],name = 'catchObj')[0])

#>> Let's start with existing attributes
mi_baseObj.select()
mPlug_t = cgmMeta.cgmAttr(mi_baseObj,'translate')
mPlug_tx = cgmMeta.cgmAttr(mi_baseObj,'tx')

#Getting attribte names as we like
mPlug_tx.p_combinedName
mPlug_tx.p_combinedShortName
mPlug_tx.p_nameNice
mPlug_t.p_hidden = True #...Hide something
mPlug_tx.p_hidden = False #...Unhide 1
mPlug_t.p_hidden = False #...unHide all
mPlug_t.p_keyable = 1 #...unHide all
mPlug_t.p_locked = 1 #...lock all
mPlug_t.p_locked = False #...unlock all

#>> Name alias
mPlug_tx.p_nameAlias#...Nothing
                NodeF.argsToNodes(arg_attributeBridge).doBuild()

        #lock N Hide ============================================================================================
        if mi_control.hasAttr('visibility'):
            mi_control.visibility = True

        if autoLockNHide:
            if mi_control.hasAttr('cgmTypeModifier'):
                if mi_control.cgmTypeModifier.lower() == 'fk':
                    ATTR.set_standardFlags(
                        mi_control.mNode,
                        attrs=['tx', 'ty', 'tz', 'sx', 'sy', 'sz'])
            if mi_control.cgmName.lower() == 'cog':
                ATTR.set_standardFlags(mi_control.mNode,
                                       attrs=['sx', 'sy', 'sz'])
            cgmMeta.cgmAttr(mi_control, 'visibility', lock=True, hidden=True)

        if mi_control.hasAttr('cgmIterator'):
            ATTR.set_standardFlags(mi_control.mNode, attrs=['cgmIterator'])

        str_base = mi_control.p_nameBase
        for i, mShape in enumerate(mi_control.getShapes(asMeta=True)):
            mShape.rename("{0}_shape_{1}".format(str_base, i))
            #mShape.doName()

        #return ============================================================================================
        #pprint.pprint(vars())

        return {
            'mObj': mi_control,
            'instance': mi_control,
Exemple #48
0
def attach_toShape(obj=None,
                   targetShape=None,
                   connectBy='parent',
                   driver=None):
    """
    :parameters:
        obj - transform to attach
        targetShape(str) - Curve, Nurbs, Mesh
        connectBy(str)
            parent - parent to track transform
            parentGroup - parent to group and have group follow
            conPoint - just point contraint
            conPointGroup - pointConstrain group
            conPointOrientGroup - point/orient constrain group
            conParentGroup - parent Constrain group
            None - just the tracker nodes
    :returns:
        resulting dat

    """
    try:
        _str_func = 'attach_toShape'
        mObj = cgmMeta.validateObjArg(obj, 'cgmObject')
        mDriver = cgmMeta.validateObjArg(driver, 'cgmObject', noneValid=True)

        targetShape = VALID.mNodeString(targetShape)
        log.debug("targetShape: {0}".format(targetShape))

        #Get our data...
        d_closest = DIST.get_closest_point_data(targetShape, mObj.mNode)

        log.debug("|{0}| >> jnt: {1} | {2}".format(_str_func, mObj.mNode,
                                                   d_closest))
        #pprint.pprint(d_closest)
        md_res = {}

        if d_closest['type'] in ['mesh', 'nurbsSurface']:
            log.debug("|{0}| >> Follicle mode...".format(_str_func))
            _shape = SHAPES.get_nonintermediate(d_closest['shape'])
            log.debug("_shape: {0}".format(_shape))

            l_follicleInfo = NODES.createFollicleOnMesh(_shape)

            i_follicleTrans = cgmMeta.asMeta(l_follicleInfo[1],
                                             'cgmObject',
                                             setClass=True)
            i_follicleShape = cgmMeta.asMeta(l_follicleInfo[0], 'cgmNode')

            #> Name...
            i_follicleTrans.doStore('cgmName', mObj)
            i_follicleTrans.doStore('cgmTypeModifier', 'surfaceTrack')
            i_follicleTrans.doName()
            _trackTransform = i_follicleTrans.mNode

            #>Set follicle value...
            if d_closest['type'] == 'mesh':
                i_follicleShape.parameterU = d_closest['parameterU']
                i_follicleShape.parameterV = d_closest['parameterV']
            else:
                i_follicleShape.parameterU = d_closest['normalizedU']
                i_follicleShape.parameterV = d_closest['normalizedV']
            _res = [i_follicleTrans.mNode, i_follicleShape.mNode]

            md_res['mFollicle'] = i_follicleTrans
            md_res['mFollicleShape'] = i_follicleShape
        else:
            log.debug("|{0}| >> Curve mode...".format(_str_func))
            #d_returnBuff = distance.returnNearestPointOnCurveInfo(obj,crv)
            _shape = SHAPES.get_nonintermediate(d_closest['shape'])
            mPOCI = cgmMeta.cgmNode(nodeType='pointOnCurveInfo')
            mc.connectAttr("%s.worldSpace" % _shape,
                           "%s.inputCurve" % mPOCI.mNode)
            mPOCI.parameter = d_closest['parameter']

            mTrack = mObj.doCreateAt()
            mTrack.doStore('cgmName', mObj)
            mTrack.doStore('cgmType', 'surfaceTrack')
            mTrack.doName()

            _trackTransform = mTrack.mNode

            mc.connectAttr("%s.position" % mPOCI.mNode,
                           "%s.t" % _trackTransform)
            mPOCI.doStore('cgmName', mObj)
            mPOCI.doName()
            _res = [mTrack.mNode, mPOCI.mNode]

        if mDriver:
            if d_closest['type'] in ['nurbsSurface']:
                mFollicle = i_follicleTrans
                mFollShape = i_follicleShape

                minU = ATTR.get(_shape, 'minValueU')
                maxU = ATTR.get(_shape, 'maxValueU')
                minV = ATTR.get(_shape, 'minValueV')
                maxV = ATTR.get(_shape, 'maxValueV')

                mDriverLoc = mDriver.doLoc()
                mc.pointConstraint(mDriver.mNode, mDriverLoc.mNode)
                #mLoc = mObj.doLoc()

                str_baseName = "{0}_to_{1}".format(mDriver.p_nameBase,
                                                   mObj.p_nameBase)
                mPlug_normalizedU = cgmMeta.cgmAttr(
                    mDriverLoc.mNode,
                    "{0}_normalizedU".format(str_baseName),
                    attrType='float',
                    hidden=False,
                    lock=False)
                mPlug_sumU = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                             "{0}_sumU".format(str_baseName),
                                             attrType='float',
                                             hidden=False,
                                             lock=False)

                mPlug_normalizedV = cgmMeta.cgmAttr(
                    mDriverLoc.mNode,
                    "{0}_normalizedV".format(str_baseName),
                    attrType='float',
                    hidden=False,
                    lock=False)
                mPlug_sumV = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                             "{0}_sumV".format(str_baseName),
                                             attrType='float',
                                             hidden=False,
                                             lock=False)

                #res_closest = DIST.create_closest_point_node(mLoc.mNode, mCrv_reparam.mNode,True)
                log.debug("|{0}| >> Closest info {1}".format(_str_func, _res))

                srfNode = mc.createNode('closestPointOnSurface')
                mc.connectAttr("%s.worldSpace[0]" % _shape,
                               "%s.inputSurface" % srfNode)
                mc.connectAttr("%s.translate" % mDriverLoc.mNode,
                               "%s.inPosition" % srfNode)
                #mc.connectAttr("%s.position" % srfNode, "%s.translate" % mLoc.mNode, f=True)

                #mClosestPoint =  cgmMeta.validateObjArg(srfNode,setClass=True)
                #mClosestPoint.doStore('cgmName',mObj)
                #mClosestPoint.doName()

                log.debug("|{0}| >> paramU {1}.parameterU | {2}".format(
                    _str_func, srfNode, ATTR.get(srfNode, 'parameterU')))
                log.debug("|{0}| >> paramV {1}.parameterV | {2}".format(
                    _str_func, srfNode, ATTR.get(srfNode, 'parameterV')))

                l_argBuild = []
                mPlug_uSize = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                              "{0}_uSize".format(str_baseName),
                                              attrType='float',
                                              hidden=False,
                                              lock=False)
                mPlug_vSize = cgmMeta.cgmAttr(mDriverLoc.mNode,
                                              "{0}_vSize".format(str_baseName),
                                              attrType='float',
                                              hidden=False,
                                              lock=False)

                l_argBuild.append("{0} = {1} - {2}".format(
                    mPlug_vSize.p_combinedName, maxV, minV))
                l_argBuild.append("{0} = {1} - {2}".format(
                    mPlug_uSize.p_combinedName, maxU, minU))

                l_argBuild.append("{0} = {1} + {2}.parameterU".format(
                    mPlug_sumU.p_combinedName, minU, srfNode))

                l_argBuild.append("{0} = {1} / {2}".format(
                    mPlug_normalizedU.p_combinedName,
                    mPlug_sumU.p_combinedName, mPlug_uSize.p_combinedName))

                l_argBuild.append("{0} = {1} + {2}.parameterV".format(
                    mPlug_sumV.p_combinedName, minV, srfNode))

                l_argBuild.append("{0} = {1} / {2}".format(
                    mPlug_normalizedV.p_combinedName,
                    mPlug_sumV.p_combinedName, mPlug_vSize.p_combinedName))

                for arg in l_argBuild:
                    log.debug("|{0}| >> Building arg: {1}".format(
                        _str_func, arg))
                    NODEFACTORY.argsToNodes(arg).doBuild()

                ATTR.connect(mPlug_normalizedU.p_combinedShortName,
                             '{0}.parameterU'.format(mFollShape.mNode))
                ATTR.connect(mPlug_normalizedV.p_combinedShortName,
                             '{0}.parameterV'.format(mFollShape.mNode))

                md_res['mDriverLoc'] = mDriverLoc

            elif d_closest['type'] in ['curve', 'nurbsCurve']:
                mDriverLoc = mDriver.doLoc()
                mc.pointConstraint(mDriver.mNode, mDriverLoc.mNode)

                _resClosest = DIST.create_closest_point_node(
                    mDriverLoc.mNode, _shape, True)
                _loc = _resClosest[0]

                md_res['mDriverLoc'] = mDriverLoc
                md_res['mDrivenLoc'] = cgmMeta.asMeta(_loc)
                md_res['mTrack'] = mTrack

            else:
                log.warning(
                    cgmGEN.logString_msg(
                        _str_func,
                        "Shape type not currently supported for driver setup. Type: {0}"
                        .format(d_closest['type'])))

        #if connectBy is None:
        #return _res
        if connectBy == 'parent':
            mObj.p_parent = _trackTransform
        elif connectBy == 'conPoint':
            mc.pointConstraint(_trackTransform,
                               mObj.mNode,
                               maintainOffset=True)
        elif connectBy == 'conParent':
            mc.parentConstraint(_trackTransform,
                                mObj.mNode,
                                maintainOffset=True)
        elif connectBy == 'parentGroup':
            mGroup = mObj.doGroup(asMeta=True)
            #_grp = TRANS.group_me(obj,True)
            #TRANS.parent_set(_grp,_trackTransform)
            mGroup.p_parent = _trackTransform
            _res = _res + [mGroup.mNode]
        elif connectBy == 'conPointGroup':
            mLoc = mObj.doLoc()
            mLoc.p_parent = _trackTransform
            mGroup = mObj.doGroup(asMeta=True)
            mc.pointConstraint(mLoc.mNode, mGroup.mNode)
            _res = _res + [mGroup.mNode]

        elif connectBy == 'conPointOrientGroup':
            mLoc = mObj.doLoc()
            mLoc.p_parent = _trackTransform
            mGroup = mObj.doGroup(asMeta=True)

            mc.pointConstraint(mLoc.mNode, mGroup.mNode)
            mc.orientConstraint(mLoc.mNode, mGroup.mNode)
            _res = _res + [mGroup.mNode]

        elif connectBy == 'conParentGroup':
            mLoc = mObj.doLoc()
            mLoc.p_parent = _trackTransform
            mGroup = mObj.doGroup(asMeta=True)
            mc.parentConstraint(mLoc.mNode, mGroup.mNode)
            _res = _res + [mGroup.mNode]
        elif connectBy is None:
            pass
        else:
            raise NotImplementedError, "|{0}| >>invalid connectBy: {1}".format(
                _str_func, connectBy)

        if md_res:
            return _res, md_res
        return _res

        #pprint.pprint(vars())
    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err)
def create(obj,parentTo = False):
    """   
    Create a spacePivot from a given object

    :parameters:
        *a(varied): - Uses validate_arg 

    :returns
        mSpacePivot(metaList)
    """ 
    _str_func = 'create'
    
    #....inital...
    i_obj = cgmMeta.validateObjArg(obj,cgmMeta.cgmObject,noneValid=False)    
    i_parent = cgmMeta.validateObjArg(parentTo,cgmMeta.cgmObject,noneValid=True)    
    bbSize = DIST.get_bb_size(i_obj.mNode)
    size = max(bbSize)

    #>>>Create #====================================================
    #CURVES.create_controlCurve(i_obj.mNode,'jack')
    i_control = cgmMeta.asMeta(CURVES.create_controlCurve(i_obj.mNode,'jack',sizeMode='guess')[0],'cgmObject',setClass=True)
    log.debug(i_control)
    try:l_color = curves.returnColorsFromCurve(i_obj.mNode)
    except Exception,error:raise Exception,"color | %s"%(error)          
    log.debug("l_color: %s"%l_color)
    curves.setColorByIndex(i_control.mNode,l_color[0])
    
    #>>>Snap and Lock
    #====================================================	
    #Snap.go(i_control,i_obj.mNode,move=True, orient = True)

    #>>>Copy Transform
    #====================================================   
    i_newTransform = i_obj.doCreateAt()

    #Need to move this to default cgmNode stuff
    mBuffer = i_control
    i_newTransform.doCopyNameTagsFromObject(i_control.mNode)
    curves.parentShapeInPlace(i_newTransform.mNode,i_control.mNode)#Parent shape
    i_newTransform.parent = mBuffer.parent#Copy parent
    i_control = i_newTransform
    mc.delete(mBuffer.mNode)
    
    #>>>Register
    #====================================================    
    #Attr
    i = ATTR.get_nextAvailableSequentialAttrIndex(i_obj.mNode,"pivot")
    str_pivotAttr = str("pivot_%s"%i)
    str_objName = str(i_obj.getShortName())
    str_pivotName = str(i_control.getShortName())
    
    #Build the network
    i_obj.addAttr(str_pivotAttr,enumName = 'off:lock:on', defaultValue = 2, value = 0, attrType = 'enum',keyable = False, hidden = False)
    i_control.overrideEnabled = 1
    d_ret = NodeF.argsToNodes("%s.overrideVisibility = if %s.%s > 0"%(str_pivotName,str_objName,str_pivotAttr)).doBuild()
    log.debug(d_ret)
    d_ret = NodeF.argsToNodes("%s.overrideDisplayType = if %s.%s == 2:0 else 2"%(str_pivotName,str_objName,str_pivotAttr)).doBuild()
    
    for shape in mc.listRelatives(i_control.mNode,shapes=True,fullPath=True):
        log.debug(shape)
        mc.connectAttr("%s.overrideVisibility"%i_control.mNode,"%s.overrideVisibility"%shape,force=True)
        mc.connectAttr("%s.overrideDisplayType"%i_control.mNode,"%s.overrideDisplayType"%shape,force=True)
    
    #Vis 
    #>>>Name stuff
    #====================================================
    cgmMeta.cgmAttr(i_control,'visibility',lock=True,hidden=True)   
    i_control = cgmMeta.validateObjArg(i_control,'cgmControl',setClass = True)
    i_control.doStore('cgmName',i_obj)
    i_control.addAttr('cgmType','controlAnim',lock=True)    
    i_control.addAttr('cgmIterator',"%s"%i,lock=True)        
    i_control.addAttr('cgmTypeModifier','spacePivot',lock=True)

    i_control.doName(nameShapes=True)

    i_control.addAttr('cgmAlias',(i_obj.getNameAlias()+'_pivot_%s'%i),lock=False)
    
    #Store on object
    #====================================================    
    i_obj.addAttr("spacePivots", attrType = 'message',lock=True)
    _l_spacePivots = i_obj.getMessage('spacePivots',True) or []
    if i_control.getLongName() not in _l_spacePivots:
        #_l_spacePivots = i_obj.getMessage('spacePivots',True)
        #_l_spacePivots.append(i_control.mNode)
        i_obj.msgList_append('spacePivots',i_control,'controlTarget')
    log.debug("spacePivots: %s"%i_obj.msgList_get('spacePivots',asMeta = True))

    #parent
    if i_parent:
        i_control.parent = i_parent.mNode
        i_constraintGroup = (cgmMeta.asMeta(i_control.doGroup(True),'cgmObject',setClass=True))
        i_constraintGroup.addAttr('cgmTypeModifier','constraint',lock=True)
        i_constraintGroup.doName()
        i_control.connectChildNode(i_constraintGroup,'constraintGroup','groupChild')	

        log.debug("constraintGroup: '%s'"%i_constraintGroup.getShortName())		

    #change to cgmControl
    i_control = cgmMeta.asMeta(i_control.mNode,'cgmControl', setClass=1)

    return i_control
Exemple #50
0
def create_uvPickerNetworkBAK(target=None, name='iris', split=9):
    _str_func = 'create_uvPickerNetwork'
    log.debug("|{0}| >> ".format(_str_func) + '-' * 80)

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

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

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

    md_pmas = {}

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

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

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

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

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

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

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

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

        mNode.colorIfFalseR = 0
        mNode.colorIfFalseG = 0

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

        mAttr.doConnectOut('%s.firstTerm' % i_node.mNode)
        attributes.doConnectAttr('%s.outColorR' % i_node.mNode,
                                 '%s.%s' % (c, self.connectToAttr))