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 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 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
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
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())
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())
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
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)
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)
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
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
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) """
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)
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
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 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)
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
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())
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
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')
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
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')
def reorderUnderParent(): ml = cgmMeta.validateObjListArg(mc.ls(sl=1)) for mObj in ml: p = mObj.parent mObj.parent = False mObj.parent = p
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')
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))
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
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:
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
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)
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)
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)
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 = []
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())
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))
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