Example #1
0
        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 = []
Example #2
0
        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 = []
Example #3
0
def setup_linearSegment(
    joints=[],
    skip=['y', 'x'],
):
    """
    Should be a joint chain to work properly
    """
    ml_joints = cgmMeta.validateObjListArg(joints, 'cgmObject')
    ml_new = []
    mStartHandle = ml_joints[0]
    mEndHandle = ml_joints[-1]

    for mObj in ml_joints[1:-1]:
        mGroup = mObj.doGroup(True, True, asMeta=True, typeModifier='twist')
        mObj.parent = False

        _vList = DIST.get_normalizedWeightsByDistance(
            mGroup.mNode, [mStartHandle.mNode, mEndHandle.mNode])
        _point = mc.pointConstraint(
            [mStartHandle.mNode, mEndHandle.mNode],
            mGroup.mNode,
            maintainOffset=False)  #Point contraint loc to the object
        _orient = mc.orientConstraint(
            [mStartHandle.mNode, mEndHandle.mNode],
            mGroup.mNode,
            skip=skip,
            maintainOffset=False)  #Point contraint loc to the object

        for c in [_point, _orient]:
            CONSTRAINT.set_weightsByDistance(c[0], _vList)

        mObj.parent = mGroup
Example #4
0
def uiFunc_getTargets(self):
    _str_func = 'uiFunc_getTargets'
    _b_lockSource = cgmMeta.cgmOptionVar('cgmVar_transformLockSource', defaultValue = 1).getValue()
    
    _targets = mc.ls(sl=True)
    _ml_targets = []
    if _targets:
        _ml_targets = cgmMeta.validateObjListArg(_targets,'cgmObject')
        
    if _b_lockSource and self._mTransformTarget:
        log.info("|{0}| >> lock Source on. Checking list".format(_str_func))
        if self._mTransformTarget in _ml_targets:
            _ml_targets.remove(self._mTransformTarget)
            log.info("|{0}| >> Removed source...".format(_str_func))            
    elif not _b_lockSource and self._mTransformTarget:
        if self._mTransformTarget not in _ml_targets:
            _ml_targets.insert(0,self._mTransformTarget)
    
    if not _ml_targets:
        log.info("|{0}| >> No targets selected".format(_str_func))                
        
    log.info("|{0}| >> targets...".format(_str_func))                
    for mObj in _ml_targets:
        print(mObj.mNode)
    
    return _ml_targets
Example #5
0
def rigJoint_connect(joints=[]):
    try:
        if not joints:
            joints = mc.ls(sl=True, type='joint')

        ml_joints = cgmMeta.validateObjListArg(joints, 'cgmObject')
        ml_rigJoints = []

        for i, mObj in enumerate(ml_joints):
            mDirect = mObj.getMessageAsMeta('rigJoint')
            if not mDirect:
                log.error("{0} missing rig joint!".format(mObj.p_nameShort))
                continue
            ml_rigJoints.append(mDirect)
            mc.pointConstraint([mDirect.mNode],
                               mObj.mNode,
                               maintainOffset=True)
            mc.orientConstraint([mDirect.mNode],
                                mObj.mNode,
                                maintainOffset=True)
            mc.scaleConstraint([mDirect.mNode],
                               mObj.mNode,
                               maintainOffset=True)

        return ml_rigJoints

    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err, msg=vars())
Example #6
0
def rigJoint_verify(joints = [], name=True, connect=True):
    try:
        if not joints:
            joints = mc.ls(sl=True,type='joint')
            
        ml_joints = cgmMeta.validateObjListArg(joints,'cgmObject')
        ml_rigJoints = []
        
        for i,mObj in enumerate(ml_joints):
            mDirect = mObj.getMessageAsMeta('rigJoint')
            if not mDirect:
                mDirect = mObj.doDuplicate(po=True)
                if name:
                    if 'sknJnt' not in mObj.p_nameBase:
                        mObj.rename( "{0}_sknJnt".format(mObj.p_nameBase) )
                mDirect.rename( mObj.p_nameBase.replace('sknJnt','rig') )
                mDirect.connectChildNode(mObj,'skinJoint','rigJoint')
            
            ml_rigJoints.append(mDirect)
            """
            if i > 0:
                if ml_joints[i].parent:
                    _buffer = ml_joints[i].getParent(asMeta=True).getMessage('rigJoint')
                    if _buffer:
                        mDirect.parent =_buffer[0]"""
            
            if connect:
                mc.pointConstraint([mDirect.mNode], mObj.mNode, maintainOffset = True)
                mc.orientConstraint([mDirect.mNode], mObj.mNode, maintainOffset = True)
                mc.scaleConstraint([mDirect.mNode], mObj.mNode, maintainOffset = True)
                
        return ml_rigJoints
    
    except Exception,err:
        cgmGEN.cgmExceptCB(Exception,err,msg=vars())
Example #7
0
def rigJoint_connectFromRig(joints=[]):
    try:
        if not joints:
            joints = mc.ls(sl=True, type='joint')

        ml_joints = cgmMeta.validateObjListArg(joints, 'cgmObject')
        ml_rigJoints = []

        for i, mObj in enumerate(ml_joints):
            mDriven = mObj.getMessageAsMeta('skinJoint')
            if not mDriven:
                log.error("{0} missing skin joint!".format(mObj.p_nameShort))
                continue
            ml_rigJoints.append(mDriven)
            log.error("Connecting {0} --> {1}".format(mObj.p_nameShort,
                                                      mDriven.p_nameShort))

            mc.pointConstraint([mObj.mNode],
                               mDriven.mNode,
                               maintainOffset=True)
            mc.orientConstraint([mObj.mNode],
                                mDriven.mNode,
                                maintainOffset=True)
        return ml_rigJoints

    except Exception, err:
        cgmGEN.cgmExceptCB(Exception, err, msg=vars())
def setUpPickerGroups(control=None, atr=None, groups=[]):
    import cgm.core.classes.NodeFactory as nodeF
    import cgm.core.cgm_Meta as cgmMeta
    import cgm.core.lib.attribute_utils as ATTR

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

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

    #for i,mGrp in enumerate(mGroups):
    #    shortName = mGrp.getShortName()
    #if log.getEffectiveLevel() == 10:log.debug(shortName)
    #Let's get basic info for a good attr name
    #d = nameTools.returnObjectGeneratedNameDict(shortName,ignore=['cgmTypeModifier','cgmType'])
    #n = nameTools.returnCombinedNameFromDict(d)
    #    nodeF.build_conditionNetworkFromGroup(shortName, chooseAttr = i, controlObject = "{0}.{1}".format(mControl.mNode,atr))
    return True
Example #9
0
def joinCurves(targetObjects, mode='simple', curveDegree=1):
    try:
        ml_targetObjects = cgmMeta.validateObjListArg(targetObjects)
        d_objInfo = {}
        for i_obj in ml_targetObjects:
            d_buffer = {}
            if i_obj.getMayaType() != 'nurbsCurve':
                raise StandardError, "joinCurve>> %s is not a 'nurbsCurve'. Type: %s" % (
                    i_obj.getShortName(), i_obj.getMayaType())
            l_components = i_obj.getComponents('ep')
            l_componentIndices = []
            for c in l_components:
                l_componentIndices.append(int(c.split('[')[-1].split(']')[0]))
            d_buffer['indices'] = l_componentIndices
            d_buffer['components'] = l_components
            d_buffer['indexMid'] = int(len(l_componentIndices) / 2)
            d_buffer['midComponent'] = l_components[d_buffer['indexMid']]
            d_objInfo[i_obj] = d_buffer

        #components
        l_created = []
        l_toDo = []
        l_nestedPos = []
        if mode == 'simple':
            for ep in [0, 'mid', -1]:
                l_pos = []
                for i_crv in ml_targetObjects:
                    if ep == 'mid': ep = d_objInfo[i_crv]['indexMid']
                    l_pos.append(
                        cgmMeta.cgmNode(
                            d_objInfo[i_crv]['components'][ep]).getPosition())
                l_created.append(mc.curve(d=curveDegree, ep=l_pos,
                                          os=True))  #Make the curve
        elif mode == 'quartered':
            d_pntsConnect = {}
            for mObj in ml_targetObjects:
                l_pos = crvUtils.returnSplitCurveList(mObj.mNode, 5)
                for i, p in enumerate(l_pos):
                    if not d_pntsConnect.get(i): d_pntsConnect[i] = []
                    d_pntsConnect[i].append(p)
            for k in d_pntsConnect.keys():
                l_created.append(
                    mc.curve(d=curveDegree, ep=d_pntsConnect[k],
                             os=True))  #Make the curve
        else:
            for idx in d_objInfo[d_objInfo.keys()[0]]['indices']:
                l_pos = []
                for i_crv in ml_targetObjects:
                    l_pos.append(
                        cgmMeta.cgmNode(
                            d_objInfo[i_crv]['components'][idx]).getPosition())
                l_created.append(mc.curve(d=curveDegree, ep=l_pos,
                                          os=True))  #Make the curve
        return l_created

    except StandardError, error:
        raise StandardError, "joinCurve>> Failure. targets: %s | error: %s" % (
            targetObjects, error)
Example #10
0
	def __func__(self):
	    """
	    """
	    self.ml_joints = cgmMeta.validateObjListArg(self.d_kws['l_joints'],cgmMeta.cgmObject,mayaType='joint',noneValid=False)
	    self.mi_orientation = cgmValid.simpleOrientation(self.d_kws['orientation'],self._str_funcCombined)
	    ml_chain = self.ml_joints
	    		
	    for mJoint in ml_chain:
		mJoint.__setattr__("r%s"%self.mi_orientation.p_string[2],180)
		
	    metaFreezeJointOrientation(ml_chain)
def setupDirectOrbs(joints=None):
    ml_joints = cgmMeta.validateObjListArg(joints, 'cgmObject')

    for mJnt in ml_joints:
        mTrans = mJnt.createAt()
        #ATTR.set_message(mJnt.mNode, 'cgmSource',mTrans.mNode)
        mJnt.doStore('cgmSource', mTrans)
        mTrans.doStore('cgmName', mJnt)
        mTrans.doStore('cgmType', 'anim')
        mTrans.doName()

        mTrans.doGroup(True)
Example #12
0
def get_orientChild(targetJoint):
    mi_targetJoint = cgmMeta.validateObjArg(targetJoint,cgmMeta.cgmObject,mayaType='joint')
    ml_childrenJoints = cgmMeta.validateObjListArg(mi_targetJoint.getChildren(),cgmMeta.cgmObject,mayaType='joint')
    if not ml_childrenJoints:
	log.warning("%s.get_orientChild >> failed to find children joints to check"%(mi_targetJoint.p_nameShort))
	return False
    
    for i_j in ml_childrenJoints:
	"""
	Measure dist
	"""
	pass
Example #13
0
def check_nameMatches(self,mlControls,justReport = False):
    _str_func = 'check_nameMatches'
    log.debug("|{0}| >>  ".format(_str_func)+ '-'*80)

    _nameMatches = False
    mlControls  = cgmMeta.validateObjListArg(mlControls)

    for mCtrl in mlControls:
        if mCtrl.getNameMatches(True):
            _nameMatches = True
    if _nameMatches and not justReport:
        raise ValueError,"Fix this name match"
    return True
Example #14
0
def tweakOrient(joints = None, tweak = [0,0,0]):
    """
    Pythonification fo Michael Comet's function. Full acknoledgement.
    
    """
    ml_joints = cgmMeta.validateObjListArg(joints,mayaType=['joint'],noneValid=False)

    for mJnt in ml_joints:
        _short = mJnt.mNode
        mc.xform(_short, r=True, os=True, ra= tweak)
        
        mc.joint(_short, e=True, zso=True)
        mc.makeIdentity(_short, apply=True)
        """   
Example #15
0
def joinCurves(targetObjects, mode = 'simple', curveDegree = 1):
    try:
	ml_targetObjects = cgmMeta.validateObjListArg(targetObjects)
	d_objInfo = {}
	for i_obj in ml_targetObjects:
	    d_buffer = {}
	    if i_obj.getMayaType() != 'nurbsCurve':
		raise StandardError,"joinCurve>> %s is not a 'nurbsCurve'. Type: %s"%(i_obj.getShortName(),i_obj.getMayaType())
	    l_components = i_obj.getComponents('ep')
	    l_componentIndices = []
	    for c in l_components:
		l_componentIndices.append( int(c.split('[')[-1].split(']')[0]) )	
	    d_buffer['indices'] = l_componentIndices
	    d_buffer['components'] = l_components	
	    d_buffer['indexMid'] = int(len(l_componentIndices)/2)
	    d_buffer['midComponent'] = l_components[ d_buffer['indexMid'] ]
	    d_objInfo[i_obj] = d_buffer
	    
	
	#components
	l_created = []
	l_toDo = []
	l_nestedPos = []
	if mode == 'simple':
	    for ep in [0,'mid',-1]:
		l_pos = []
		for i_crv in ml_targetObjects:
		    if ep == 'mid':ep = d_objInfo[i_crv]['indexMid']
		    l_pos.append( cgmMeta.cgmNode(d_objInfo[i_crv]['components'][ep]).getPosition() )
		l_created.append( mc.curve(d=curveDegree,ep=l_pos,os =True) )#Make the curve
	elif mode == 'quartered':
	    d_pntsConnect = {}
	    for mObj in ml_targetObjects:
		l_pos = crvUtils.returnSplitCurveList( mObj.mNode, 5 ) 
		for i,p in enumerate(l_pos):
		    if not d_pntsConnect.get(i):d_pntsConnect[i] = []
		    d_pntsConnect[i].append(p)
	    for k in d_pntsConnect.keys():
		l_created.append( mc.curve(d=curveDegree,ep=d_pntsConnect[k],os =True) )#Make the curve		    
	else:
	    for idx in d_objInfo[d_objInfo.keys()[0]]['indices']:
		l_pos = []
		for i_crv in ml_targetObjects:
		    l_pos.append( cgmMeta.cgmNode(d_objInfo[i_crv]['components'][idx]).getPosition() )
		l_created.append( mc.curve(d=curveDegree,ep=l_pos,os =True) )#Make the curve	
	return l_created
    
    except StandardError,error:
	raise StandardError,"joinCurve>> Failure. targets: %s | error: %s"%(targetObjects,error)
Example #16
0
	def build(self):#================================================================================   	
	    
	    if self._go._i_templateNull.handles not in range(4,6):
		raise Exception, "%s.build_shapes>>> Too many handles. don't know how to rig"%(self._go._strShortName)
	    
	    if not self._go.isRigSkeletonized():
		raise Exception, "%s.build_shapes>>> Must be rig skeletonized to shape"%(self._go._strShortName)	
	    
	    #>>> Get our segment influence joints
	    #=============================================================    
	    l_influenceChains = []
	    ml_influenceChains = []
	    for i in range(50):
		buffer = self._go._i_rigNull.msgList_getMessage('segment%s_InfluenceJoints'%i)
		if buffer:
		    l_influenceChains.append(buffer)
		    ml_influenceChains.append(cgmMeta.validateObjListArg(buffer,cgmMeta.cgmObject))
		else:
		    break    
		
	    log.info("%s.build_shapes>>> Influence Chains -- cnt: %s | lists: %s"%(self._go._strShortName,len(l_influenceChains),l_influenceChains))
	    
	    #>>>Build our Shapes
	    #=============================================================
	    try:
		#Segment IK
		"""
		ml_segmentIKShapes = []
		for i,ml_chain in enumerate(ml_influenceChains):
		    mShapeCast.go(self._go._mi_module,['segmentIK'],targetObjects = [i_jnt.mNode for i_jnt in ml_chain] , storageInstance=self)#This will store controls to a dict called    
		    log.info("%s.build_shapes>>> segmentIK chain %s: %s"%(self._go._strShortName,i,self._go._md_controlShapes))
		    ml_segmentIKShapes.extend(self._go._md_controlShapes['segmentIK'])
		    
		    self._go._i_rigNull.msgList_connect(self._go._md_controlShapes['segmentIK'],'shape_segmentIK_%s'%i,"rigNull")		
		
		self._go._i_rigNull.msgList_connect(ml_segmentIKShapes,'shape_segmentIK',"rigNull")		
		"""
		#Rest of it
		l_toBuild = __d_controlShapes__['shape']
		mShapeCast.go(self._go._mi_module,l_toBuild, storageInstance=self._go)#This will store controls to a dict called    
		log.info(self._go._md_controlShapes)
		log.info(self._go._md_controlPivots)
		self._go._i_rigNull.msgList_connect(self._go._md_controlShapes['segmentFK'],'shape_controlsFK',"rigNull")	
		self._go._i_rigNull.connectChildNode(self._go._md_controlShapes['settings'],'shape_settings',"rigNull")		
		self._go._i_rigNull.connectChildNode(self._go._md_controlShapes['moduleCap'],'shape_cap',"rigNull")
		
	    except Exception,error:
		log.error("%s.build_shapes>>Build shapes fail!"%self._go._strShortName)
		raise Exception,error  
Example #17
0
        def __func__(self):
            """
	    """
            self.ml_joints = cgmMeta.validateObjListArg(self.d_kws['l_joints'],
                                                        cgmMeta.cgmObject,
                                                        mayaType='joint',
                                                        noneValid=False)
            self.mi_orientation = cgmValid.simpleOrientation(
                self.d_kws['orientation'], self._str_funcCombined)
            ml_chain = self.ml_joints

            for mJoint in ml_chain:
                mJoint.__setattr__("r%s" % self.mi_orientation.p_string[2],
                                   180)

            metaFreezeJointOrientation(ml_chain)
Example #18
0
def uiFunc_load_selected(self, bypassAttrCheck = False):
    _str_func = 'uiFunc_load_selected'  
    self._mTransformTargets = False

    _sel = mc.ls(sl=True,type='transform')

    #Get our raw data
    if _sel:
        mNodes = cgmMeta.validateObjListArg(_sel)
        _short = ', '.join([mNode.p_nameBase for mNode in mNodes])
        log.debug("|{0}| >> Target: {1}".format(_str_func, _short))
        self._mTransformTargets = mNodes

        uiFunc_updateObjectDisplay(self.uiTF_objLoad, self._mTransformTargets)
    else:
        log.warning("|{0}| >> Nothing selected.".format(_str_func))            
        uiFunc_clear_loaded(self.uiTF_objLoad)
Example #19
0
def get_orientChild(targetJoint):
    mi_targetJoint = cgmMeta.validateObjArg(targetJoint,
                                            cgmMeta.cgmObject,
                                            mayaType='joint')
    ml_childrenJoints = cgmMeta.validateObjListArg(
        mi_targetJoint.getChildren(), cgmMeta.cgmObject, mayaType='joint')
    if not ml_childrenJoints:
        log.warning(
            "%s.get_orientChild >> failed to find children joints to check" %
            (mi_targetJoint.p_nameShort))
        return False

    for i_j in ml_childrenJoints:
        """
	Measure dist
	"""
        pass
Example #20
0
def driverGroup_verify(joints = []):
    try:
        if not joints:
            joints = mc.ls(sl=True)
            
        ml_joints = cgmMeta.validateObjListArg(joints,'cgmObject')
        ml_new = []
        
        for i,mObj in enumerate(ml_joints):
            mDriver = mObj.getMessageAsMeta('driverGroup')
            if not mDriver:
                mDriver = mObj.doGroup(True,asMeta=True,typeModifier = 'driver')
            ml_new.append(mDriver)

        return ml_new
    
    except Exception,err:
        cgmGEN.cgmExceptCB(Exception,err,msg=vars())
Example #21
0
def createAndContrainRigFromSkinJoints(joints = []):
    pprint.pprint(vars())    
    
    ml_joints = cgmMeta.validateObjListArg(joints,'cgmObject')
    ml_new = []
    for i,mObj in enumerate(ml_joints):
        mDup = mObj.doDuplicate(po=True)
        mDup.rename( mObj.p_nameBase.replace('sknj','rig') )
        mDup.connectChildNode(mObj,'skinJoin','rigJoint')
        ml_new.append(mObj)
        if i > 0:
            if ml_joints[i].parent:
                _buffer = ml_joints[i].getParent(asMeta=True).getMessage('rigJoint')
                if _buffer:
                    mDup.parent =_buffer[0]
        
        mc.pointConstraint([mDup.mNode], mObj.mNode, maintainOffset = True)
        mc.orientConstraint([mDup.mNode], mObj.mNode, maintainOffset = True)
    return ml_new
Example #22
0
def jointStuff_meta():
    ml_joints = cgmMeta.validateObjListArg(
        mc.ls(sl=1), mayaType='joint'
    )  #...gets us a validated meta data list of our selection

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

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

        #...same data storage
        mJnt.connectChildNode(mi_crv, 'curveObject', 'targetJoint')
Example #23
0
face1.rigNull.gui_main = 'facialRig_gui'
face1.rigNull.bsNode_bridge = 'faceBridge_bsNode'

face1.templateNull.rigBlock_eye_left = 'l_eye_rigHelper'
face1.templateNull.rigBlock_eye_right = 'r_eye_rigHelper'
face1.templateNull.rigBlock_face_lwr = 'mouthNose_rigHelper'
face1.templateNull.rigBlock_face_upr = 'brow_rigHelper'


face1.rigNull.msgList_connect(mc.ls(sl=True),'bsNodes','driving')
face1.rigNull.msgList_connect(mc.ls(sl=True),'controlsAll')

#mirroring
from Red9.core import Red9_AnimationUtils as r9Anim
r9Anim.MirrorHierarchy().makeSymmetrical(face1.rigNull.msgList_get('controlsAll',False),mode = '',primeAxis = 'Left')
r9Anim.MirrorHierarchy().mirrorData(face1.rigNull.msgList_get('controlsAll',False),mode = '')

#...setup
for obj in face1.rigNull.msgList_get('controlsAll',False):
    mi_obj = cgmMeta.validateObjArg(obj,'cgmControl',setClass = True)
    mi_obj._verifyMirrorable()

#do centre, left, right
for i,mi_obj in enumerate(cgmMeta.validateObjListArg(mc.ls(sl=True))):
    mi_obj.mirrorSide = 'Right'
    mi_obj.mirrorIndex = i
    



Example #24
0
cgmMeta.cgmNode(mc.ls(sl=1)[0]).doName()


#>>>msgList stuff
#================================================================
import cgm.core
cgm.core._reload()
mi_obj = cgmMeta.cgmObject(nodeType = 'transform')
items1 = mc.ls(sl=True)
mi_obj.msgList_connect(items1,'testList1','backTrack2')
mi_obj.msgList_connect(items1,'testList1')
mi_obj.msgList_connect(items1,'testList2')
mi_obj.msgList_connect(items1,'testList3')

cgmMeta.validateObjListArg(items1)
os = cgmMeta.cgmObjectSet(setName='testing')
n1 = cgmMeta.cgmNode(nodeType='transform')
n2 = cgmMeta.cgmNode(nodeType='transform')
os.extend([n2,n1])
os.extend(n2,n1)


#>>>Object set stuff
#================================================================
import cgm.core
cgm.core._reload()

os = cgmMeta.cgmObjectSet(setName='testing')
n1 = cgmMeta.cgmNode(nodeType='transform')
n2 = cgmMeta.cgmNode(nodeType='transform')
Example #25
0
def reorderUnderParent():
    ml = cgmMeta.validateObjListArg(mc.ls(sl=1))
    for mObj in ml:
        p = mObj.parent
        mObj.parent = False
        mObj.parent = p
Example #26
0
import cgm.core.lib.curve_Utils as CURVES
reload(CURVES)
import maya.cmds as mc
CURVES.mirror_worldSpace('l_eye_block|uprLid_rigHelper','r_eye_block|uprLid_rigHelper')
CURVES.mirror_worldSpace(mc.ls(sl=1)[0],mc.ls(sl=1)[1])

CURVES.Copy


eyeBlock = cgmMeta.asMeta('r_eyelids_part')
eyeBlock.doSkeletonize()

#Joints ==========================================================================
_l = mc.ls(sl=True, type='joint')
_good = []
for mObj in cgmMeta.validateObjListArg(_l):
    if mObj.hasAttr('scaleJoint'):
        continue
    _good.append(mObj.mNode)
mc.select(_good)


#>>.Fixes =======================================================================
for m in 'l_eyelids_part','r_eyelids_part':
    mMod = cgmMeta.asMeta(m)
    mMod.helper.uprLidJoints = 12
    mMod.helper.lwrLidJoints = 12
    #mMod.doDeleteSkeleton()
    mMod.doSkeletonize()
    
mHead = cgmMeta.cgmObject('head_jnt')
Example #27
0
def add_defHelpJoint(targetJoint,childJoint = None, helperType = 'halfPush',
                       orientation = 'zyx',doSetup = True, forceNew = False):
    """
    Add helper joints to other joints
    
    @KWS
    targetJoint(string/inst)
    helperType(str) --
         'halfHold' -- like a regular bend joint that needs a holder at it's root, like a finger
	 'childRootHold' -- holds form on a hard rotate, like a finger root
    jointUp(str) --
    orientation(str)
    forceNew(bool) -- delete if exists
    
    """
    mi_posLoc = False
    if orientation != 'zyx':
	raise NotImplementedError, "add_defHelpJoints >> only currently can do orienation of 'zyx'"
    #Validate base info
    mi_targetJoint = cgmMeta.validateObjArg(targetJoint,cgmMeta.cgmObject,mayaType='joint')
    log.debug(">>> %s.add_defHelpJoint >> "%mi_targetJoint.p_nameShort + "="*75)            
    
    #>>Child joint
    #TODO -- implement child guessing
    mi_childJoint = cgmMeta.validateObjArg(childJoint,cgmMeta.cgmObject,mayaType='joint',noneValid=True)
    log.debug("%s.add_defHelpJoints >> Child joint : '%s'"%(mi_targetJoint.p_nameShort,mi_childJoint))
        
    str_plugHook = 'defHelp_joints'
    
    #Validate some data
    d_typeChecks = {'halfHold':[mi_childJoint],'childRootHold':[mi_childJoint],'halfPush':[mi_childJoint]}
    if helperType in d_typeChecks.keys():
	for k in d_typeChecks[helperType]:
	    if not k:
		log.warning("%s.add_defHelpJoints >> must have valid %s for helperType: '%s'"%(mi_targetJoint.p_nameShort,k,helperType))	    
		return False    
    
    #>Register
    #----------------------------------------------------------------
    #First see if we have one
    ml_dynDefHelpJoints = cgmMeta.validateObjListArg(mi_targetJoint.getMessage(str_plugHook),cgmMeta.cgmObject,noneValid=True)
    i_matchJnt = False
    for i_jnt in ml_dynDefHelpJoints:
	log.debug(i_jnt.p_nameShort)
	if i_jnt.getAttr('defHelpType') == helperType and i_jnt.getMessage('defHelp_target') == [mi_targetJoint.p_nameLong]:
	    i_matchJnt = i_jnt
	    log.debug("%s.add_defHelpJoints >> Found match: '%s'"%(mi_targetJoint.p_nameShort,i_matchJnt.p_nameShort))	    	    
	    break
	
    if i_matchJnt:#if we have a match
	if forceNew:
	    log.debug("%s.add_defHelpJoints >> helper exists, no force new : '%s'"%(mi_targetJoint.p_nameShort,i_matchJnt.p_nameShort))	    	    
	    ml_dynDefHelpJoints.remove(i_matchJnt)	    
	    mc.delete(i_matchJnt.mNode)
	else:
	    log.debug("%s.add_defHelpJoints >> helper exists, no force new : '%s'"%(mi_targetJoint.p_nameShort,i_matchJnt.p_nameShort))	    
	    
    if not i_matchJnt:
	log.debug("No match joint")
	#i_dupJnt = mi_targetJoint.doDuplicate(incomingConnections = False)#Duplicate
	i_dupJnt= duplicateJointInPlace(mi_targetJoint)
	
	i_dupJnt.addAttr('cgmTypeModifier',helperType)#Tag
	i_dupJnt.addAttr('defHelpType',helperType,lock=True)#Tag    
	i_dupJnt.doName()#Rename
	i_dupJnt.parent = mi_targetJoint#Parent
	ml_dynDefHelpJoints.append(i_dupJnt)#append to help joint list
	
	i_dupJnt.connectChildNode(mi_childJoint,"defHelp_childTarget")#Connect Child target
	mi_targetJoint.msgList_append(ml_dynDefHelpJoints,str_plugHook,'defHelp_target')#Connect
    else:
	i_dupJnt = i_matchJnt
    #------------------------------------------------------------
    log.debug("%s.add_defHelpJoints >> Created helper joint : '%s'"%(mi_targetJoint.p_nameShort,i_dupJnt.p_nameShort))
    
    if doSetup:
	try:setup_defHelpJoint(i_dupJnt,orientation)
	except StandardError,error:
	    log.warning("%s.add_defHelpJoints >> Failed to setup | %s"%(i_dupJnt.p_nameShort,error))	    
Example #28
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
Example #29
0
                    log.error("%s >> obj: '%s' | error: %s"%(_str_funcName,mMod.p_nameShort,error))
            if l_slBuffer:mc.select(l_slBuffer)		    	    

        IsClickedOptionVar = cgmMeta.cgmOptionVar('cgmVar_IsClicked',value = 0)
        IsClickedOptionVar.value = 1


        #>>>> Sel check
        #====================================================================
        int_maxObjects = 5	

        l_selected = mc.ls(sl=True) or []
        if len(l_selected) <= int_maxObjects:self._l_selected = l_selected
        else:self._l_selected = l_selected[:5]

        self.ml_objList = cgmMeta.validateObjListArg(self._l_selected,cgmMeta.cgmObject,True)
        log.debug("ml_objList: %s"%self.ml_objList)	    	

        self.ml_modules = []
        self.l_modules = []
        self.l_puppets = []	
        self.ml_puppets = []
        if l_selected:selCheck = True
        else:selCheck = False

        #>>>> Aim check
        #====================================================================
        b_aimable = False
        self.i_target = False
        log.info("ml_objList: %s"%self.ml_objList)
        if len(self.ml_objList)>=2:
Example #30
0
def get_puppet_heirarchy_context(mModule,
                                 context='below',
                                 asList=False,
                                 report=True):
    """

    Get a contextual heirarchal dict/list of an mBlock. 
    
    :parameters:
        mBlock(str): RigBlock
        context(str):
            self
            below
            root
            scene
            
        asList(bool): Whether you want an ordered list or a dict
        report(bool): Reports the data in a useful format

    :returns
        parents(list)
           
    """
    #def walk_down(mBlock,dataDict,asMeta):

    _str_func = 'get_puppet_heirarchy_context'

    #blocks = VALID.listArg(mBlock)
    ml_blocksRaw = cgmMeta.validateObjListArg(mModule)
    #mBlock = cgmMeta.validateObjArg(mBlock,'cgmRigBlock')
    _res = {}

    if context == 'scene':
        raise NotImplementedError, '{0} || scene mode not done'.format(
            _str_func)
        _res = get_scene_block_heirarchy()
    elif context == 'root':
        ml_roots = []
        ml_puppets = []
        for mObj in ml_blocksRaw:
            mPuppet = mObj.modulePuppet
            if mPuppet not in ml_puppets:
                ml_puppets.append(mPuppet)

        for mPuppet in ml_puppets:
            for mChild in mPuppet.UTILS.modules_get(mPuppet):
                if not mChild.moduleParent:
                    ml_roots.append(mChild)

        for mRoot in ml_roots:
            _res.update(walk_module_heirarchy(mRoot))

    elif context in ['self', 'below']:
        for mObj in ml_blocksRaw:
            log.debug("|{0}| >> mModule: {1} | context: {2}".format(
                _str_func, mObj.mNode, context))
            if context == 'self':
                _res.update({mObj: {}})
            elif context == 'below':
                _res.update(walk_module_heirarchy(mObj))

    else:
        raise ValueError, "|{0}| >> unknown context: {1}".format(
            _str_func, context)

    if report:
        log.debug("|{0}| >> report...".format(_str_func))
        #cgmGEN.walk_dat(_res,"Walking rigBLock: {0} | context: {1}".format(mBlock.mNode,context))
        print_heirarchy_dict(_res, "Walking context: {0}".format(context))

    if asList:
        log.debug("|{0}| >> asList...".format(_str_func))
        reload(cgmGEN)
        return cgmGEN.walk_heirarchy_dict_to_list(_res)
    return _res
Example #31
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)
Example #32
0
def orientByPlane(joints = None, axisAim = 'z+', axisUp = 'y+',
                worldUpAxis = [0,1,0], planarMode = 'up', relativeOrient = True,
                progressBar=None,
                baseName = None, cleanUp = True, asMeta = True):
                
    """
    Given a chain of joints, setup 

    :parameters:
        planarMode - up/out - What plane to use
        
    :returns
        created(list)
    """    
    _str_func = 'orientPlane'
    
    ml_joints = cgmMeta.validateObjListArg(joints,mayaType=['joint'],noneValid=False)
    ml_joints = LISTS.get_noDuplicates(ml_joints)
    
    mAxis_aim = VALID.simpleAxis(axisAim)
    mAxis_up = VALID.simpleAxis(axisUp)
    str_aim = mAxis_aim.p_string
    str_up = mAxis_up.p_string
    ml_delete = []
    
    if str_aim == str_up:
        raise ValueError,"axisAim and axisUp cannot be the same"
    if len(ml_joints) < 3:
        raise ValueError,"{0} > Need more than 3 joints".format(_str_func)
    
    #First setup a dup chain of first and end, orient those ----------------------------------------------------------------
    log.debug("|{0}| >> Setup tmp chain...".format(_str_func))                     
    
    mStart = ml_joints[0].doDuplicate(parentOnly = True)
    mEnd = ml_joints[-1].doDuplicate(parentOnly = True)
    mEnd.parent = mStart
    
    orientChain([mStart,mEnd], axisAim, axisUp, worldUpAxis, relativeOrient)

    #Setup Loft curves and plane ----------------------------------------------------------------
    log.debug("|{0}| >> Setup curves...".format(_str_func))                     
    
    if planarMode == 'up':
        crvUp = mAxis_up.p_string
        crvDn = mAxis_up.inverse.p_string
    else:
        for a in 'xyz':
            if a not in str_aim and a not in str_up:
                mAxisCrv_tmp = VALID.simpleAxis(a+'+')
                crvUp = mAxisCrv_tmp.p_string
                crvDn = mAxisCrv_tmp.inverse.p_string
        
    d_distance = DIST.get_distance_between_targets([mStart.mNode,mEnd.mNode])
    
    l_crvs = []
    for mObj in [mStart,mEnd]:
        crv =   mc.curve (d=1, ep = [DIST.get_pos_by_axis_dist(mObj.mNode, crvUp, d_distance),
                                     DIST.get_pos_by_axis_dist(mObj.mNode, crvDn, d_distance)],
                               os=True)
        log.debug("|{0}| >> Created: {1}".format(_str_func,crv))
        l_crvs.append(crv)
        
    _res_body = mc.loft(l_crvs, o = True, d = 1, po = 1 )
    _inputs = mc.listHistory(_res_body[0],pruneDagObjects=True)
    _tessellate = _inputs[0]
    
    _d = {'format':2,#General
          'polygonType':1,#'quads'
          }
          
    for a,v in _d.iteritems():
        ATTR.set(_tessellate,a,v)    
            
    #Snap our joints ---------------------------------------------------------------------------------
    for mJnt in ml_joints[1:-1]:
        ml_children = mJnt.getChildren(asMeta=True)
        for mChild in ml_children:
            mChild.parent = False
            
        SNAP.go(mJnt, _res_body[0], rotation=False, pivot='closestPoint')

        for mChild in ml_children:
            mChild.parent = mJnt
            
    #Cleanup --------------------------------------------------------------------------------------------
    if cleanUp:
        mc.delete(_res_body + l_crvs)
        mStart.delete()
        
    orientChain(ml_joints, axisAim, axisUp, worldUpAxis, relativeOrient,progressBar)

    return

    l_start = []
    l_end = []
    
    mStartCrv = mc.curve()
    mc.curve (d=1, ep = posList, os=True)
Example #33
0
def add_defHelpJoint(targetJoint,
                     childJoint=None,
                     helperType='halfPush',
                     orientation='zyx',
                     doSetup=True,
                     forceNew=False):
    """
    Add helper joints to other joints
    
    @KWS
    targetJoint(string/inst)
    helperType(str) --
         'halfHold' -- like a regular bend joint that needs a holder at it's root, like a finger
	 'childRootHold' -- holds form on a hard rotate, like a finger root
    jointUp(str) --
    orientation(str)
    forceNew(bool) -- delete if exists
    
    """
    mi_posLoc = False
    if orientation != 'zyx':
        raise NotImplementedError, "add_defHelpJoints >> only currently can do orienation of 'zyx'"
    #Validate base info
    mi_targetJoint = cgmMeta.validateObjArg(targetJoint,
                                            cgmMeta.cgmObject,
                                            mayaType='joint')
    log.debug(">>> %s.add_defHelpJoint >> " % mi_targetJoint.p_nameShort +
              "=" * 75)

    #>>Child joint
    #TODO -- implement child guessing
    mi_childJoint = cgmMeta.validateObjArg(childJoint,
                                           cgmMeta.cgmObject,
                                           mayaType='joint',
                                           noneValid=True)
    log.debug("%s.add_defHelpJoints >> Child joint : '%s'" %
              (mi_targetJoint.p_nameShort, mi_childJoint))

    str_plugHook = 'defHelp_joints'

    #Validate some data
    d_typeChecks = {
        'halfHold': [mi_childJoint],
        'childRootHold': [mi_childJoint],
        'halfPush': [mi_childJoint]
    }
    if helperType in d_typeChecks.keys():
        for k in d_typeChecks[helperType]:
            if not k:
                log.warning(
                    "%s.add_defHelpJoints >> must have valid %s for helperType: '%s'"
                    % (mi_targetJoint.p_nameShort, k, helperType))
                return False

    #>Register
    #----------------------------------------------------------------
    #First see if we have one
    ml_dynDefHelpJoints = cgmMeta.validateObjListArg(
        mi_targetJoint.getMessage(str_plugHook),
        cgmMeta.cgmObject,
        noneValid=True)
    i_matchJnt = False
    for i_jnt in ml_dynDefHelpJoints:
        log.debug(i_jnt.p_nameShort)
        if i_jnt.getAttr('defHelpType') == helperType and i_jnt.getMessage(
                'defHelp_target') == [mi_targetJoint.p_nameLong]:
            i_matchJnt = i_jnt
            log.debug("%s.add_defHelpJoints >> Found match: '%s'" %
                      (mi_targetJoint.p_nameShort, i_matchJnt.p_nameShort))
            break

    if i_matchJnt:  #if we have a match
        if forceNew:
            log.debug(
                "%s.add_defHelpJoints >> helper exists, no force new : '%s'" %
                (mi_targetJoint.p_nameShort, i_matchJnt.p_nameShort))
            ml_dynDefHelpJoints.remove(i_matchJnt)
            mc.delete(i_matchJnt.mNode)
        else:
            log.debug(
                "%s.add_defHelpJoints >> helper exists, no force new : '%s'" %
                (mi_targetJoint.p_nameShort, i_matchJnt.p_nameShort))

    if not i_matchJnt:
        log.debug("No match joint")
        i_dupJnt = mi_targetJoint.doDuplicate(
            inputConnections=False)  #Duplicate
        #i_dupJnt= duplicateJointInPlace(mi_targetJoint)

        i_dupJnt.addAttr('cgmTypeModifier', helperType)  #Tag
        i_dupJnt.addAttr('defHelpType', helperType, lock=True)  #Tag
        i_dupJnt.doName()  #Rename
        i_dupJnt.parent = mi_targetJoint  #Parent
        ml_dynDefHelpJoints.append(i_dupJnt)  #append to help joint list

        i_dupJnt.connectChildNode(mi_childJoint,
                                  "defHelp_childTarget")  #Connect Child target
        mi_targetJoint.msgList_append(ml_dynDefHelpJoints, str_plugHook,
                                      'defHelp_target')  #Connect
    else:
        i_dupJnt = i_matchJnt
    #------------------------------------------------------------
    log.debug("%s.add_defHelpJoints >> Created helper joint : '%s'" %
              (mi_targetJoint.p_nameShort, i_dupJnt.p_nameShort))

    if doSetup:
        try:
            setup_defHelpJoint(i_dupJnt, orientation)
        except StandardError, error:
            log.warning("%s.add_defHelpJoints >> Failed to setup | %s" %
                        (i_dupJnt.p_nameShort, error))
from cgm.core import cgm_PuppetMeta as cgmPM
import Red9.core.Red9_Meta as r9Meta
import cgm.core
cgm.core._reload()
import maya.cmds as mc
from cgm.lib import curves
from cgm.lib import locators
from cgm.lib import distance
from cgm.lib import joints
reload(distance)
from cgm.core.rigger.lib import rig_Utils as rUtils
from cgm.core.cgmPy import str_Utils as strUtils
reload(strUtils)
from cgm.core.rigger.lib import joint_Utils as jUtils
for i_jnt in cgmMeta.validateObjListArg(mc.ls(sl=True),
                                        cgmMeta.cgmObject,
                                        mayaType='joint'):
    jUtils.metaFreezeJointOrientation(i_jnt)

reload(rUtils)
from cgm.core.classes import NodeFactory as NodeF
reload(NodeF)

obj = mc.ls(sl=True)[0] or False
obj = ''
objList = []
objList = mc.ls(sl=True)
cgmMeta.cgmObject(obj).createTransformFromObj()
_str = "5_asdfasdf<><"
_str = "dog -1 * 3"
strUtils.stripInvalidChars(_str)
Example #35
0
     for mJnt in ml_joints:
         #log.debug("|{0}| >> reparenting: {1} | {2}".format(_str_func,mJnt.mNode, _d_parents[mJnt]))         
         #cgmUI.progressBar_iter(progressBar,status='Reparenting: {0}'.format(mJnt.mNode))
         
         mJnt.parent = _d_parents[mJnt]
         
         for mChild in _d_children[mJnt]:
             #if mChild not in ml_joints:
                 #log.debug("|{0}| >> reparenting child: {1}".format(_str_func,mChild.mNode))                             
             mChild.parent = mJnt
         
         if mJnt in ml_ends and mJnt not in ml_world:
             log.debug("|{0}| >> End joint. No world: {1}".format(_str_func,mJnt))                                             
             mJnt.jointOrient = 0,0,0                
                     
 ml_joints = cgmMeta.validateObjListArg(joints,mayaType=['joint'],noneValid=False)
 ml_joints = LISTS.get_noDuplicates(ml_joints)
 
 mAxis_aim = VALID.simpleAxis(axisAim)
 mAxis_up = VALID.simpleAxis(axisUp)
 _axisWorldUp = worldUpAxis
 str_aim = mAxis_aim.p_string
 str_up = mAxis_up.p_string
 
 if str_aim == str_up:
     raise ValueError,"axisAim and axisUp cannot be the same"
 
 _len = len(ml_joints)
 _d_parents = {}
 _d_children = {}
 ml_roots = []
Example #36
0
		    log.error("%s >> obj: '%s' | error: %s"%(_str_funcName,mMod.p_nameShort,error))
	    if l_slBuffer:mc.select(l_slBuffer)		    	    
	
	IsClickedOptionVar = cgmMeta.cgmOptionVar('cgmVar_IsClicked',value = 0)
	IsClickedOptionVar.value = 1
	

	#>>>> Sel check
	#====================================================================
	int_maxObjects = 5	
	
	l_selected = mc.ls(sl=True) or []
	if len(l_selected) <= int_maxObjects:self._l_selected = l_selected
	else:self._l_selected = l_selected[:5]
	
	self.ml_objList = cgmMeta.validateObjListArg(self._l_selected,cgmMeta.cgmObject,True)
	log.debug("ml_objList: %s"%self.ml_objList)	    	

	self.ml_modules = []
	self.l_modules = []
	self.l_puppets = []	
	self.ml_puppets = []
	if l_selected:selCheck = True
	else:selCheck = False

	#>>>> Aim check
	#====================================================================
	b_aimable = False
	self.i_target = False
	log.info("ml_objList: %s"%self.ml_objList)
	if len(self.ml_objList)>=2:
Example #37
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())    
Example #38
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)
def renameFinger(base='thumb', direction='l', tag='sknj'):
    import cgm.core.cgm_Meta as cgmMeta
    import maya.cmds as mc
    ml = cgmMeta.validateObjListArg(mc.ls(sl=1))
    for i, mObj in enumerate(ml):
        mObj.rename("{0}_{1}_{2}_{3}".format(base, direction, i, tag))
Example #40
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