def build_fk(self): #>>>> FK Segments ml_fkJoints = self.ml_fkJoints ml_controlsFK = self.ml_controlsFK ml_fkJoints[0].parent = self._go._i_constrainNull.controlsFK.mNode i_obj = ml_controlsFK[0] log.info(" %s controlFK : %s"%(self._str_reportStart,i_obj.p_nameShort)) log.info(" %s controlFK : %s"%(self._str_reportStart,ml_fkJoints[0].p_nameShort)) try: d_buffer = mControlFactory.registerControl(i_obj.mNode,shapeParentTo=ml_fkJoints[0].mNode, mirrorSide=self._go._str_mirrorDirection, mirrorAxis="translateX", makeAimable=True,typeModifier='fk') except Exception,error: raise Exception,"Register control | %s"%error try: i_obj = d_buffer['instance'] i_obj.axisAim = "%s+"%self._go._jointOrientation[0] i_obj.axisUp= "%s+"%self._go._jointOrientation[1] i_obj.axisOut= "%s+"%self._go._jointOrientation[2] try:i_obj.drawStyle = 2#Stick joint draw style except:self.log_error("{0} Failed to set drawStyle".format(i_obj.p_nameShort)) cgmMeta.cgmAttr(i_obj,'radius',hidden=True) except Exception,error: raise Exception,"Failed to set attrs | %s"%error try: for i_obj in ml_controlsFK: i_obj.delete() except Exception,error: raise Exception,"Failed to delete | %s"%error self.ml_controlsAll.extend([ml_fkJoints[0]])
def duplicateJointInPlace(joint, asMeta = True): """ :parameters: joint | str/instance Joint to duplicate asMeta | bool What to return as :returns: str or instance of new joint :raises: TypeError | if 'arg' is not a joint """ _str_func_ = 'duplicateJointInPlace' try: mJoint = cgmMeta.validateObjArg(joint, mayaType = 'joint', mType = 'cgmObject') #dup = mc.joint() mDup = mJoint.doDuplicate(parentOnly=True) #mDup.parent = mJoint.parent #mc.delete(mc.parentConstraint(mJoint.mNode,mDup.mNode)) ''' ('rotateOrder','rotateAxisX','rotateAxisY','rotateAxisZ', 'inheritsTransform','drawStyle','radius', 'jointTypeX','jointTypeY','jointTypeZ', 'stiffnessX','stiffnessY','stiffnessZ', 'preferredAngleX','preferredAngleY','preferredAngleZ', 'jointOrientX','jointOrientY','jointOrientZ','segmentScaleCompensate','showManipDefault', 'displayHandle','displayLocalAxis','selectHandleX','selectHandleY','selectHandleZ'), ''' mDup.rotateOrder = mJoint.rotateOrder mDup.jointOrient = mJoint.jointOrient mDup.rotateAxis = mJoint.rotateAxis mDup.inheritsTransform = mJoint.inheritsTransform mDup.radius = mJoint.radius mDup.stiffness = mJoint.stiffness mDup.preferredAngle = mJoint.preferredAngle mDup.segmentScaleCompensate = mJoint.segmentScaleCompensate #mDup.displayHandle = mJoint.displayHandle #mDup.selectHandle = mJoint.selectHandle #Inverse scale... mAttr_inverseScale = cgmMeta.cgmAttr(mJoint,'inverseScale') _driver = mAttr_inverseScale.getDriver() if mAttr_inverseScale.getDriver(): cgmMeta.cgmAttr(mDup,"inverseScale").doConnectIn(_driver) mAttr_inverseScale.getDriver(mJoint) for attr in mJoint.getUserAttrs(): cgmMeta.cgmAttr(mJoint,attr).doCopyTo(mDup.mNode) if asMeta: return mDup return mDup.mNode except Exception,error: raise Exception,"{0} | {1}".format(_str_func_,error)
def build_lockNHide(self): ml_controlsFK = self.ml_controlsFK #Lock set groups for mCtrl in ml_controlsFK: mCtrl._setControlGroupLocks() cgmMeta.cgmAttr(mCtrl,"translate",lock=True,hidden=True,keyable=False) cgmMeta.cgmAttr(mCtrl,"v",lock=True,hidden=True,keyable=False)
def build_connections(self): ml_jointsToConnect = [] ml_jointsToConnect.extend(self.ml_rigJoints) for i_jnt in ml_jointsToConnect: i_jnt.overrideEnabled = 1 cgmMeta.cgmAttr(self._go._i_rigNull.mNode,'gutsVis',lock=False).doConnectOut("%s.%s"%(i_jnt.mNode,'overrideVisibility')) cgmMeta.cgmAttr(self._go._i_rigNull.mNode,'gutsLock',lock=False).doConnectOut("%s.%s"%(i_jnt.mNode,'overrideDisplayType'))
def _lockNHide(self): autoLockNHide = self.d_kws['autoLockNHide'] if autoLockNHide: if self.mi_control.hasAttr('cgmTypeModifier'): if self.mi_control.cgmTypeModifier.lower() == 'fk': attributes.doSetLockHideKeyableAttr(self.mi_control.mNode,channels=['tx','ty','tz','sx','sy','sz']) if self.mi_control.cgmName.lower() == 'cog': attributes.doSetLockHideKeyableAttr(self.mi_control.mNode,channels=['sx','sy','sz']) cgmMeta.cgmAttr(self.mi_control,'visibility',lock=True,hidden=True)
def build_lockNHide(self): ml_controlsFK = self.ml_controlsFK #Lock set groups for mCtrl in ml_controlsFK: mCtrl._setControlGroupLocks() cgmMeta.cgmAttr(mCtrl, "translate", lock=True, hidden=True, keyable=False) cgmMeta.cgmAttr(mCtrl, "v", lock=True, hidden=True, keyable=False)
def _mirrorAttributeBridges_(self): addForwardBack = self.d_kws['addForwardBack'] if addForwardBack: mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control, "forwardBack", attrType='float', keyable=True) try: mPlug_forwardBackDriven = cgmMeta.validateAttrArg( [self.mi_control, addForwardBack])['mi_plug'] except Exception, error: raise StandardError, "push pull driver | %s" % (error) if self.str_mirrorSide.lower() == 'right': arg_forwardBack = "%s = -%s" % ( mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) else: arg_forwardBack = "%s = %s" % ( mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) mPlug_forwardBackDriven.p_locked = True mPlug_forwardBackDriven.p_hidden = True mPlug_forwardBackDriven.p_keyable = False NodeF.argsToNodes(arg_forwardBack).doBuild()
def build_connections(self): ml_jointsToConnect = [] ml_jointsToConnect.extend(self.ml_rigJoints) for i_jnt in ml_jointsToConnect: i_jnt.overrideEnabled = 1 cgmMeta.cgmAttr(self._go._i_rigNull.mNode, 'gutsVis', lock=False).doConnectOut( "%s.%s" % (i_jnt.mNode, 'overrideVisibility')) cgmMeta.cgmAttr(self._go._i_rigNull.mNode, 'gutsLock', lock=False).doConnectOut( "%s.%s" % (i_jnt.mNode, 'overrideDisplayType'))
def _mirrorSetup(self): str_mirrorSide = self.str_mirrorSide str_mirrorAxis = self.str_mirrorAxis b_makeMirrorable = self.b_makeMirrorable if str_mirrorSide is not None or b_makeMirrorable: for mObj in [self.mi_control] + self.ml_spacePivots: #log.info("mirrorsetup: {0}".format(mObj.p_nameShort)) try:self.mi_control._verifyMirrorable() except Exception,error:raise StandardError,"_mirrorSetup | %s"%(error) l_enum = cgmMeta.cgmAttr(self.mi_control,'mirrorSide').p_enum if str_mirrorSide in l_enum: log.debug("%s >> %s >> found in : %s"%(self._str_funcCombined, "mirrorSetup", l_enum)) try: self.mi_control.mirrorSide = l_enum.index(str_mirrorSide) log.debug("%s >> %s >> mirrorSide set to: %s"%(self._str_funcCombined,"mirrorSetup",self.mi_control.mirrorSide )) except Exception,error:raise StandardError,"str_mirrorSide : %s | %s"%(str_mirrorSide,error) if str_mirrorAxis: try: self.mi_control.mirrorAxis = str_mirrorAxis log.debug("%s >> %s >> str_mirrorAxis set: %s"%(self._str_funcCombined,"mirrorSetup",str_mirrorAxis)) except Exception,error:raise StandardError,"str_mirrorAxis : %s | %s"%(str_mirrorAxis,error) for mObj in self.mi_control.msgList_get('spacePivots'): try: try:mObj._verifyMirrorable() except Exception,error:raise StandardError,"_mirrorSetup | %s"%(error) #cgmMeta.cgmAttr(mObj,'mirrorSide').doConnectIn(self.mi_control,'mirrorSide') #cgmMeta.cgmAttr(self.mi_control,'mirrorAxis').doCopyTo(mObj,connectTargetToSource = 1) attributes.storeInfo(mObj.mNode,'mirrorAxis',"{0}.mirrorAxis".format(self.mi_control.mNode)) attributes.storeInfo(mObj.mNode,'mirrorSide',"{0}.mirrorSide".format(self.mi_control.mNode)) except Exception,error:raise StandardError,"spacePivot failed failed! {0}| error: {1}".format(mObj,error)
def get_spinGroup(self, mStart, mRoot, mControl): #========================================================================================= log.debug("|{0}| >> spin setup...".format(_str_func)) #Make a spin group mSpinGroup = mStart.doGroup(False, False, asMeta=True) mSpinGroup.doCopyNameTagsFromObject(self.mModule.mNode, ignore=['cgmName', 'cgmType']) mSpinGroup.addAttr('cgmName', '{0}NoFlipSpin'.format(self.d_module['partName'])) mSpinGroup.doName() mSpinGroup.parent = mRoot mSpinGroup.doGroup(True, True, typeModifier='zero') #Setup arg mPlug_spin = cgmMeta.cgmAttr(mControl, 'spin', attrType='float', keyable=True, defaultValue=0, hidden=False) mPlug_spin.doConnectOut("%s.r%s" % (mSpinGroup.mNode, self.d_orientation['str'][0])) return mSpinGroup
def _mirrorSetup(self): str_mirrorSide = self.str_mirrorSide str_mirrorAxis = self.str_mirrorAxis b_makeMirrorable = self.b_makeMirrorable if str_mirrorSide is not None or b_makeMirrorable: for mObj in [self.mi_control] + self.ml_spacePivots: #log.info("mirrorsetup: {0}".format(mObj.p_nameShort)) try: self.mi_control._verifyMirrorable() except Exception, error: raise StandardError, "_mirrorSetup | %s" % (error) l_enum = cgmMeta.cgmAttr(self.mi_control, 'mirrorSide').p_enum if str_mirrorSide in l_enum: log.debug( "%s >> %s >> found in : %s" % (self._str_funcCombined, "mirrorSetup", l_enum)) try: self.mi_control.mirrorSide = l_enum.index( str_mirrorSide) log.debug("%s >> %s >> mirrorSide set to: %s" % (self._str_funcCombined, "mirrorSetup", self.mi_control.mirrorSide)) except Exception, error: raise StandardError, "str_mirrorSide : %s | %s" % ( str_mirrorSide, error) if str_mirrorAxis: try: self.mi_control.mirrorAxis = str_mirrorAxis log.debug("%s >> %s >> str_mirrorAxis set: %s" % (self._str_funcCombined, "mirrorSetup", str_mirrorAxis)) except Exception, error: raise StandardError, "str_mirrorAxis : %s | %s" % ( str_mirrorAxis, error)
def get_spinGroup(self): try: _str_func = 'get_spinGroup' log_start(_str_func) #Make a spin group mSpinGroup = mStart.doGroup(False, False, asMeta=True) mSpinGroup.doCopyNameTagsFromObject(self.mModule.mNode, ignore=['cgmName', 'cgmType']) mSpinGroup.addAttr('cgmName', '{0}NoFlipSpin'.format(self.d_module['partName'])) mSpinGroup.doName() mSpinGroup.parent = mRoot mSpinGroup.doGroup(True, True, typeModifier='zero') #Setup arg mPlug_spin = cgmMeta.cgmAttr(mIKControl, 'spin', attrType='float', keyable=True, defaultValue=0, hidden=False) mPlug_spin.doConnectOut("%s.r%s" % (mSpinGroup.mNode, _jointOrientation[0])) return mSpinGroup except Exception, err: cgmGEN.cgmExceptCB(Exception, err, localDat=vars())
def _mirrorAttributeBridges_(self): addForwardBack = self.d_kws['addForwardBack'] if addForwardBack: mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,"forwardBack",attrType = 'float',keyable=True) try: mPlug_forwardBackDriven = cgmMeta.validateAttrArg([self.mi_control,addForwardBack])['mi_plug'] except Exception,error:raise StandardError,"push pull driver | %s"%(error) if self.str_mirrorSide.lower() == 'right': arg_forwardBack = "%s = -%s"%(mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) else: arg_forwardBack = "%s = %s"%(mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) mPlug_forwardBackDriven.p_locked = True mPlug_forwardBackDriven.p_hidden = True mPlug_forwardBackDriven.p_keyable = False NodeF.argsToNodes(arg_forwardBack).doBuild() if self._addMirrorAttributeBridges: for l_bridge in self._addMirrorAttributeBridges: _attrName = VALID.stringArg(l_bridge[0]) _attrToBridge = VALID.stringArg(l_bridge[1]) if not self.mi_control.hasAttr(_attrToBridge): raise StandardError,"['%s' lacks the bridge attr '%s']"%(self.mi_control.p_nameShort,_attrToBridge) mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control,_attrName,attrType = 'float',keyable=True) try: mPlug_attrBridgeDriven = cgmMeta.validateAttrArg([self.mi_control,_attrToBridge])['mi_plug'] except Exception,error:raise StandardError,"[validate control attribute bridge attr]{%s}"%(error) if self.str_mirrorSide.lower() == 'right': arg_attributeBridge = "%s = -%s"%(mPlug_attrBridgeDriven.p_combinedShortName, mPlug_attrBridgeDriver.p_combinedShortName) else: arg_attributeBridge = "%s = %s"%(mPlug_attrBridgeDriven.p_combinedShortName, mPlug_attrBridgeDriver.p_combinedShortName) mPlug_attrBridgeDriven.p_locked = True mPlug_attrBridgeDriven.p_hidden = True mPlug_attrBridgeDriven.p_keyable = False NodeF.argsToNodes(arg_attributeBridge).doBuild()
def _mirrorAttributeBridges_(self): addForwardBack = self.d_kws['addForwardBack'] if addForwardBack: mPlug_forwardBackDriver = cgmMeta.cgmAttr(self.mi_control,"forwardBack",attrType = 'float',keyable=True) try: mPlug_forwardBackDriven = cgmMeta.validateAttrArg([self.mi_control,addForwardBack])['mi_plug'] except Exception,error:raise StandardError,"push pull driver | %s"%(error) if self.str_mirrorSide.lower() == 'right': arg_forwardBack = "%s = -%s"%(mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) else: arg_forwardBack = "%s = %s"%(mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) mPlug_forwardBackDriven.p_locked = True mPlug_forwardBackDriven.p_hidden = True mPlug_forwardBackDriven.p_keyable = False NodeF.argsToNodes(arg_forwardBack).doBuild() if self._addMirrorAttributeBridges: for l_bridge in self._addMirrorAttributeBridges: _attrName = cgmValid.stringArg(l_bridge[0]) _attrToBridge = cgmValid.stringArg(l_bridge[1]) if not self.mi_control.hasAttr(_attrToBridge): raise StandardError,"['%s' lacks the bridge attr '%s']"%(self.mi_control.p_nameShort,_attrToBridge) mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control,_attrName,attrType = 'float',keyable=True) try: mPlug_attrBridgeDriven = cgmMeta.validateAttrArg([self.mi_control,_attrToBridge])['mi_plug'] except Exception,error:raise StandardError,"[validate control attribute bridge attr]{%s}"%(error) if self.str_mirrorSide.lower() == 'right': arg_attributeBridge = "%s = -%s"%(mPlug_attrBridgeDriven.p_combinedShortName, mPlug_attrBridgeDriver.p_combinedShortName) else: arg_attributeBridge = "%s = %s"%(mPlug_attrBridgeDriven.p_combinedShortName, mPlug_attrBridgeDriver.p_combinedShortName) mPlug_attrBridgeDriven.p_locked = True mPlug_attrBridgeDriven.p_hidden = True mPlug_attrBridgeDriven.p_keyable = False NodeF.argsToNodes(arg_attributeBridge).doBuild()
def setupWheelRoll(dat = _d_wheels): for m,d in dat.iteritems(): mModule = cgmMeta.asMeta(m) mRigNull = mModule.rigNull mPivot = mRigNull.getMessageAsMeta('pivotResultDriver') mSettings = mRigNull.getMessageAsMeta('settings') mAttr = cgmMeta.cgmAttr(mSettings, 'wheelSpin','float',hidden=False,keyable=True) mAttr.doConnectOut("{0}.rx".format(mPivot.mNode))
def _buildPupilIris_(self): mi_go = self._go#Rig Go instance link str_mirrorSide = self.str_mirrorSide try:#>>>> Iris pupil #================================================================== try: _l_build = [{'tag':'iris','buildCheck':self.mi_helper.buildIris,'shape':self.md_rigList['iris_shape'],'joint':self.md_rigList['iris'],'parent':self.md_rigList['eye']}, {'tag':'pupil','buildCheck':self.mi_helper.buildPupil,'shape':self.md_rigList['pupil_shape'],'joint':self.md_rigList['pupil'],'parent':self.md_rigList['iris']}] except Exception,error:raise Exception,"[build dict]{%s}"%(error) for _d in _l_build: try: self._d_buffer = _d self.log_infoNestedDict('_d_buffer') _tag = _d['tag'] _shape = _d['shape'] _joint = _d['joint'] _b_buildCheck = _d['buildCheck'] if not _b_buildCheck: self.log_info("Build %s toggle: off"%(_tag)) _shape.delete() else: _joint.parent = mi_go._i_constrainNull.eyeTrackNull.mNode d_buffer = mControlFactory.registerControl(_joint,useShape = _shape, mirrorSide = str_mirrorSide, mirrorAxis="", makeAimable=True,setRotateOrder ='zxy') mi_control = d_buffer['instance'] _shape.delete() attributes.doSetAttr(mi_control.mNode,'overrideEnabled',0) attributes.doSetAttr(mi_control.mNode,'overrideDisplayType',0) cgmMeta.cgmAttr(mi_control,'radius',.0001,hidden=True) mi_go._i_rigNull.connectChildNode(mi_control,'control%s'%_tag.capitalize(),"rigNull") self.ml_controlsAll.append(mi_control) attributes.doSetLockHideKeyableAttr(mi_control.mNode,channels=['tx','ty','tz','rx','ry','rz','v','s%s'%mi_go._jointOrientation[0]]) except Exception,error:raise Exception,"[%s]{%s}"%(_tag,error) except Exception,error:raise Exception,"[Build iris/pupil fail]{%s}"%(error)
def _gatherInfo_(self): mi_go = self._go#Rig Go instance link self.md_rigList = {} self.mi_helper = cgmMeta.validateObjArg(mi_go._mi_module.getMessage('helper'),noneValid=True) if not self.mi_helper:raise StandardError,"No suitable helper found" try:#verify eye look mi_go._verify_eyeLook() except Exception,error: raise StandardError,"[Faied to verify eye look]{%s}"%error #>> Find our joint lists =================================================================== self.md_jointLists = {} self.ml_rigJoints = mi_go._mi_module.rigNull.msgList_get('rigJoints') self.md_rigList['eyeOrbJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints, cgmName = 'eyeOrb')[0] self.md_rigList['eyeJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints, cgmName = 'eye')[0] if self.mi_helper.buildIris: self.md_rigList['irisJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints, cgmName = 'iris')[0] try:self.md_rigList['controlIris'] = mi_go._i_rigNull.controlIris except Exception,error:raise StandardError,"iris fail]{%s}"%(error) if self.mi_helper.buildPupil: self.md_rigList['pupilJoint'] = metaUtils.get_matchedListFromAttrDict(self.ml_rigJoints, cgmName = 'pupil')[0] try:self.md_rigList['controlPupil'] = mi_go._i_rigNull.controlPupil except Exception,error:raise StandardError,"pupil fail]{%s}"%(error) #>> Running lists =========================================================================== try:self.md_rigList['eyeLook'] = mi_go._get_eyeLook() except Exception,error:raise StandardError,"[eyeLook fail]{%s}"%(error) try:self.md_rigList['controlIK'] = mi_go._i_rigNull.controlIK except Exception,error:raise StandardError,"controlIK fail]{%s}"%(error) try:self.md_rigList['controlFK'] = mi_go._i_rigNull.controlFK except Exception,error:raise StandardError,"controlFK fail]{%s}"%(error) try:self.md_rigList['settings'] = mi_go._i_rigNull.settings except Exception,error:raise StandardError,"controlIK fail]{%s}"%(error) try:self.md_rigList['eyeMove'] = mi_go._i_rigNull.eyeMove except Exception,error:raise StandardError,"eyeMove fail]{%s}"%(error) #Settings self.mPlug_FKIK = cgmMeta.cgmAttr(self.md_rigList['settings'].mNode,'blend_FKIK')
def __init__(self, group, chooseAttr='switcher', controlObject=None, connectTo='visibility', *args, **kws): """Constructor""" self.d_iAttrs = {} #attr instances stores as {index:instance} self.l_iAttrs = [] #Indices for iAttrs self.d_resultNetworksToBuild = { } #Index desctiptions of networks to build {target:[[1,2],3]} self.i_group = False self.i_control = False self.connectToAttr = connectTo self.i_attr = False #>>>Keyword args log.debug(">>> build_conditionNetworkFromGroup.__init__") if kws: log.debug("kws: %s" % str(kws)) if args: log.debug("args: %s" % str(args)) #Check our group if not mc.objExists(group): log.error("Group doesn't exist: '%s'" % group) return elif not search.returnObjectType(group) == 'group': log.error("Object is not a group: '%s'" % search.returnObjectType(group)) return self.i_group = cgmMeta.cgmObject(group) if not self.i_group.getChildren(): log.error("No children detected: '%s'" % group) return #Check our control if controlObject is None or not mc.objExists(controlObject): log.error("No suitable control object found: '%s'" % controlObject) return else: i_controlObject = cgmMeta.cgmNode(controlObject) self.i_attr = cgmMeta.cgmAttr(i_controlObject, chooseAttr, attrType='enum', initialValue=1) if self.buildNetwork(*args, **kws): log.debug("Chooser Network good to go")
for i,i_o in enumerate(self.ml_objList): if i >= int_maxObjects: log.warning("More than %s objects select, only loading first %s for speed"%(int_maxObjects,int_maxObjects)) break d_buffer = {} #>>> Space switching ------------------------------------------------------------------ if i_o.getMessage('dynParentGroup'): i_dynParent = cgmMeta.validateObjArg(i_o.getMessage('dynParentGroup')[0],cgmRigMeta.cgmDynParentGroup,True) d_buffer['dynParent'] = {'mi_dynParent':i_dynParent,'attrs':[],'attrOptions':{}}#Build our data gatherer if i_dynParent: for a in cgmRigMeta.d_DynParentGroupModeAttrs[i_dynParent.dynMode]: if i_o.hasAttr(a): d_buffer['dynParent']['attrs'].append(a) lBuffer_attrOptions = [] for i,o in enumerate(cgmMeta.cgmAttr(i_o.mNode,a).p_enum): lBuffer_attrOptions.append(o) d_buffer['dynParent']['attrOptions'][a] = lBuffer_attrOptions self.d_objectsInfo[i_o] = d_buffer #>>> Module -------------------------------------------------------------------------- if self.BuildModuleOptionVar.value or self.BuildPuppetOptionVar.value: if i_o.getMessage('rigNull'): _mi_rigNull = i_o.rigNull try:_mi_module = _mi_rigNull.module except Exception:_mi_module = False if self.BuildModuleOptionVar.value: try: self.ml_modules.append(_mi_module) except Exception,error:
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 create_uvPickerNetwork(target=None, name='iris', mode=1, enums=None, count=9, split=3): _str_func = 'create_uvPickerNetwork' log.debug("|{0}| >> ".format(_str_func) + '-' * 80) if count / split != split: raise ValueError, "{0} || Split must divide evently to count. count: {1} | split: {2}".format( _str_func, count, split) if not target: target = mc.group(em=True, name='uvPickerDefault') if mode == 2: log.debug(cgmGen.logString_msg(_str_func, '2 Attr mode')) if not enums: enums = ['{0}_{1}'.format(name, i) for i in range(2)] for a in enums: ATTR.add(target, a, 'enum', enumOptions=[str(i) for i in range(split)]) for a in 'U', 'V': _a = 'res_{0}{1}'.format(name, a) ATTR.add(target, _a, 'float', keyable=False, hidden=False) ATTR.set_hidden(target, _a, False) mMD = cgmMeta.cgmNode(name="{0}_picker_md".format(name), nodeType='multiplyDivide') mMD.operation = 2 mMD.input2X = split mMD.input2Y = split mMD.doConnectIn('input1X', "{0}.{1}".format(target, enums[0])) mMD.doConnectIn('input1Y', "{0}.{1}".format(target, enums[1])) mMD.doConnectOut('outputX', '{0}.res_{1}U'.format(target, name)) mMD.doConnectOut('outputY', '{0}.res_{1}V'.format(target, name)) else: log.debug(cgmGen.logString_msg(_str_func, '1 Attr mode')) _d_values = { 9: [ [.999, .666], [.333, .666], [.666, .666], [.999, .333], [.333, .333], [.666, .333], [.999, .999], [.333, .999], [.666, .999], ] } l_dat = _d_values.get(count) if not l_dat: raise ValueError, "{0} | count {1} not supported".format( _str_func, count) for a in 'U', 'V': _a = 'res_{0}{1}'.format(name, a) ATTR.add(target, _a, 'float', keyable=False, hidden=False) ATTR.set_hidden(target, _a, False) mPMA = cgmMeta.cgmNode(name="{0}_picker_pma".format(name), nodeType='plusMinusAverage') mPMA.operation = 1 ATTR.add(target, name, 'enum', enumOptions=[str(i) for i in range(9)]) mAttr = cgmMeta.cgmAttr(target, name) for i, vSet in enumerate(l_dat): _iterBase = "{0}_{1}".format(name, i) if mc.objExists('%s_condNode' % _iterBase): mc.delete('%s_condNode' % _iterBase) mNode = cgmMeta.cgmNode(name="{0}_condNode".format(_iterBase), nodeType='condition') mNode.secondTerm = i mNode.colorIfTrueR = vSet[0] mNode.colorIfTrueG = vSet[1] mNode.colorIfFalseR = 0 mNode.colorIfFalseG = 0 mAttr.doConnectOut('%s.firstTerm' % mNode.mNode) ATTR.connect('%s.outColor' % mNode.mNode, "{0}.input3D[{1}]".format(mPMA.mNode, i)) #attributes.doConnectAttr('%s.outColorR'%mNode.mNode,'%s.%s'%(c,self.connectToAttr)) mPMA.doConnectOut('output3Dx', '{0}.res_{1}U'.format(target, name)) mPMA.doConnectOut('output3Dy', '{0}.res_{1}V'.format(target, name))
def _buildControls_(self): mi_go = self._go#Rig Go instance link try:#Query ==================================================================================== ml_rigJoints = self.ml_rigJoints mi_fkShape = self.md_rigList['fk_shape'] mi_ikShape = self.md_rigList['ik_shape'] mi_settingsShape = self.md_rigList['settings_shape'] mi_eyeMoveShape = self.md_rigList['eyeMove_shape'] str_mirrorSide = self.str_mirrorSide except Exception,error:raise Exception,"[Query]{%s}"%error try:#>>>> FK #================================================================== mi_fkShape.parent = mi_go._i_constrainNull.controlsFKNull.mNode i_obj = mi_fkShape d_buffer = mControlFactory.registerControl(i_obj,copyTransform = ml_rigJoints[0], mirrorSide = str_mirrorSide, mirrorAxis="rotateY,rotateZ", makeAimable=True,setRotateOrder ='zxy',typeModifier='fk') mi_controlFK = d_buffer['instance'] mi_controlFK.axisAim = "%s+"%mi_go._jointOrientation[0] mi_controlFK.axisUp= "%s+"%mi_go._jointOrientation[1] mi_controlFK.axisOut= "%s+"%mi_go._jointOrientation[2] #We're gonna lock the aim rot cgmMeta.cgmAttr(mi_controlFK,'r%s'%mi_go._jointOrientation[0], keyable = False, lock=True,hidden=True) mi_go._i_rigNull.connectChildNode(mi_controlFK,'controlFK',"rigNull") self.ml_controlsAll.append(mi_controlFK) attributes.doSetLockHideKeyableAttr(mi_controlFK.mNode,channels=['tx','ty','tz','sx','sy','sz','v']) except Exception,error:raise Exception,"[Build fk fail]{%s}"%(error) try:#>>>> IK #================================================================== mi_ikShape.parent = mi_go._i_constrainNull.controlsIKNull.mNode d_buffer = mControlFactory.registerControl(mi_ikShape, mirrorSide = str_mirrorSide, mirrorAxis="", typeModifier='ik',addDynParentGroup=True) mi_ikControl = d_buffer['instance'] mi_go._i_rigNull.connectChildNode(mi_ikControl,'controlIK',"rigNull") self.ml_controlsAll.append(mi_ikControl) attributes.doSetLockHideKeyableAttr(mi_ikControl.mNode,channels=['sx','sy','sz','v']) except Exception,error:raise Exception,"[Build ik fail]{%s}"%(error) try:#>>>> Settings #================================================================== mi_settingsShape.parent = mi_go._i_constrainNull.mNode try:#Register the control d_buffer = mControlFactory.registerControl(mi_settingsShape, mirrorSide = str_mirrorSide, mirrorAxis="", makeAimable=False,typeModifier='settings') mi_settings = d_buffer['instance'] mi_go._i_rigNull.connectChildNode(mi_settings,'settings','rigNull') self.ml_controlsAll.append(mi_settings) #>>> Verify out vis controls self.mPlug_result_moduleFaceSubDriver = mi_go.build_visSubFace() except Exception,error:raise StandardError,"registration | %s"%error try:#Set up some attributes attributes.doSetLockHideKeyableAttr(mi_settings.mNode) mPlug_FKIK = cgmMeta.cgmAttr(mi_settings.mNode,'blend_FKIK',attrType='float',lock=False,keyable=True, minValue=0,maxValue=1.0) except Exception,error:raise StandardError,"attribute setup | %s"%error except Exception,error:raise Exception,"[Build Settings fail]{%s}"%(error) try:#>>>> eyeMove #================================================================== mi_eyeMoveShape.parent = mi_go._i_constrainNull.mNode try:#Register the control d_buffer = mControlFactory.registerControl(mi_eyeMoveShape, addMirrorAttributeBridges = [["mirrorIn","t%s"%mi_go._jointOrientation[2]], ["mirrorBank","r%s"%mi_go._jointOrientation[0]]], mirrorSide = str_mirrorSide, mirrorAxis="", makeAimable=False,typeModifier='eyeMove') mObj = d_buffer['instance'] mi_go._i_rigNull.connectChildNode(mObj,'eyeMove','rigNull') self.ml_controlsAll.append(mObj) except Exception,error:raise Exception,"[registration]{%s}"%(error) try:#Set up some attributes attributes.doSetLockHideKeyableAttr(mObj.mNode,channels = ["r%s"%mi_go._jointOrientation[1],"r%s"%mi_go._jointOrientation[2],'v']) except Exception,error:raise Exception,"[Attribute setup]{%s}"%(error) try:#Vis Connect for shp in mObj.getShapes(): mShp = cgmMeta.cgmNode(shp) mShp.overrideEnabled = 1 self.mPlug_result_moduleFaceSubDriver.doConnectOut("%s.overrideVisibility"%mShp.mNode) except Exception,error:raise Exception,"[subVisConnect]{%s}"%(error) except Exception,error:raise Exception,"[Build Settings fail]{%s}"%(error)
def ik_rp(self, mStart, mEnd, ml_ikFrame=None, mIKControl=None, mIKBaseControl=None, mIKHandleDriver=None, mRoot=None, mIKGroup=None, mIKControlEnd=None, ml_ikFullChain=None): try: _str_func = "ik_rp" log.debug("|{0}| >> {1}...".format(_str_func, _str_func) + '-' * 60) mRigNull = self.mRigNull mBlock = self.mBlock if not ml_ikFrame: ml_ikFrame = self.ml_handleTargetsCulled if not mIKControl: raise ValueError, "Must have mIKControl" if not mIKHandleDriver: raise ValueError, "Must have mIKHandleDriver" if not mRoot: raise ValueError, "Must have mRoot" log.debug("|{0}| >> rp setup...".format(_str_func)) mIKMid = mRigNull.controlIKMid str_ikEnd = mBlock.getEnumValueString('ikEnd') #Measture ====================================================== log.debug("|{0}| >> measure... ".format(_str_func) + '-' * 30) res_ikScale = self.UTILS.get_blockScale( self, '{0}_ikMeasure'.format(self.d_module['partName'], ), ml_ikFrame) mPlug_masterScale = res_ikScale[0] mMasterCurve = res_ikScale[1] mMasterCurve.p_parent = mRoot self.fnc_connect_toRigGutsVis(mMasterCurve) mMasterCurve.dagLock(True) #Unparent the children from the end while we set stuff up... log.debug("|{0}| >> end unparent ...".format(_str_func) + '-' * 30) ml_end_children = mEnd.getChildren(asMeta=True) if ml_end_children: for mChild in ml_end_children: mChild.parent = False #Build the IK --------------------------------------------------------------------- reload(IK) """ if mIKControlEnd and str_ikEnd in ['tipCombo']: mMainIKControl = mIKControlEnd else: mMainIKControl = mIKControl """ _d_ik = { 'globalScaleAttr': mPlug_masterScale. p_combinedName, #mPlug_globalScale.p_combinedName, 'stretch': 'translate', 'lockMid': True, 'rpHandle': mIKMid.mNode, 'nameSuffix': 'ik', 'baseName': '{0}_ikRP'.format(self.d_module['partName']), 'controlObject': mIKControl.mNode, 'moduleInstance': self.mModule.mNode } d_ikReturn = IK.handle(mStart.mNode, mEnd.mNode, **_d_ik) mIKHandle = d_ikReturn['mHandle'] ml_distHandlesNF = d_ikReturn['ml_distHandles'] mRPHandleNF = d_ikReturn['mRPHandle'] #>>>Parent IK handles ----------------------------------------------------------------- log.debug("|{0}| >> parent IK stuff ...".format(_str_func) + '-' * 30) mIKHandle.parent = mIKHandleDriver.mNode #handle to control for mObj in ml_distHandlesNF[:-1]: mObj.parent = mRoot ml_distHandlesNF[-1].parent = mIKHandleDriver.mNode #handle to control ml_distHandlesNF[1].parent = mIKMid ml_distHandlesNF[1].t = 0, 0, 0 ml_distHandlesNF[1].r = 0, 0, 0 if mIKBaseControl: ml_distHandlesNF[0].parent = mIKBaseControl #>>> Fix our ik_handle twist at the end of all of the parenting IK.handle_fixTwist(mIKHandle, self.d_orientation['str'][0]) #Fix the twist if mIKControlEnd: mIKEndDriver = mIKControlEnd else: mIKEndDriver = mIKControl if ml_end_children: for mChild in ml_end_children: mChild.parent = mEnd #mc.scaleConstraint([mIKControl.mNode], # ml_ikFrame[self.int_handleEndIdx].mNode, # maintainOffset = True) #if mIKBaseControl: #ml_ikFrame[0].parent = mRigNull.controlIKBase #if mIKBaseControl: #mc.pointConstraint(mIKBaseControl.mNode, ml_ikFrame[0].mNode,maintainOffset=True) #Make a spin group =========================================================== log.debug("|{0}| >> spin group ...".format(_str_func) + '-' * 30) mSpinGroup = mStart.doGroup(False, False, asMeta=True) mSpinGroup.doCopyNameTagsFromObject(self.mModule.mNode, ignore=['cgmName', 'cgmType']) mSpinGroup.addAttr('cgmName', '{0}NoFlipSpin'.format(self.d_module['partName'])) mSpinGroup.doName() ATTR.set(mSpinGroup.mNode, 'rotateOrder', self.d_orientation['str']) mSpinGroup.parent = mIKGroup mSpinGroup.doGroup(True, True, typeModifier='zero') mSpinGroupAdd = mSpinGroup.doDuplicate() mSpinGroupAdd.doStore('cgmTypeModifier', 'addSpin') mSpinGroupAdd.doName() mSpinGroupAdd.p_parent = mSpinGroup if mIKBaseControl: mc.pointConstraint(mIKBaseControl.mNode, mSpinGroup.mNode, maintainOffset=True) #Setup arg #mPlug_spin = cgmMeta.cgmAttr(mIKControl,'spin',attrType='float',keyable=True, defaultValue = 0, hidden = False) #mPlug_spin.doConnectOut("%s.r%s"%(mSpinGroup.mNode,_jointOrientation[0])) mSpinTarget = mIKControl if mBlock.getMayaAttr('ikRPAim'): mc.aimConstraint(mSpinTarget.mNode, mSpinGroup.mNode, maintainOffset=False, aimVector=[0, 0, 1], upVector=[0, 1, 0], worldUpType='none') else: mc.aimConstraint(mSpinTarget.mNode, mSpinGroup.mNode, maintainOffset=False, aimVector=[0, 0, 1], upVector=[0, 1, 0], worldUpObject=mSpinTarget.mNode, worldUpType='objectrotation', worldUpVector=self.v_twistUp) mPlug_spinMid = cgmMeta.cgmAttr(mSpinTarget, 'spinMid', attrType='float', defaultValue=0, keyable=True, lock=False, hidden=False) _direction = self.d_module.get('direction') or 'center' if _direction.lower() == 'right': str_arg = "{0}.r{1} = -{2}".format( mSpinGroupAdd.mNode, self.d_orientation['str'][0].lower(), mPlug_spinMid.p_combinedShortName) log.debug("|{0}| >> Right knee spin: {1}".format( _str_func, str_arg)) NODEFACTORY.argsToNodes(str_arg).doBuild() else: mPlug_spinMid.doConnectOut("{0}.r{1}".format( mSpinGroupAdd.mNode, self.d_orientation['str'][0])) mSpinGroup.dagLock(True) mSpinGroupAdd.dagLock(True) #>>> mBallRotationControl ========================================================== mIKBallRotationControl = mRigNull.getMessageAsMeta( 'controlBallRotation') if mIKBallRotationControl: # and str_ikEnd not in ['tipCombo']: log.debug("|{0}| >> mIKBallRotationControl...".format(_str_func) + '-' * 30) mBallOrientGroup = cgmMeta.validateObjArg( mIKBallRotationControl.doGroup(True, False, asMeta=True, typeModifier='orient'), 'cgmObject', setClass=True) ATTR.set(mBallOrientGroup.mNode, 'rotateOrder', self.d_orientation['str']) mLocBase = mIKBallRotationControl.doCreateAt() mLocAim = mIKBallRotationControl.doCreateAt() mLocAim.doStore('cgmTypeModifier', 'extendedIK') mLocBase = mIKBallRotationControl.doCreateAt() mLocBase.doName() mLocAim.doName() mLocAim.p_parent = ml_ikFullChain[-1] mLocBase.p_parent = mIKBallRotationControl.masterGroup const = mc.orientConstraint([mLocAim.mNode, mLocBase.mNode], mBallOrientGroup.mNode, maintainOffset=True)[0] d_blendReturn = NODEFACTORY.createSingleBlendNetwork( [mIKControl.mNode, 'extendIK'], [mIKControl.mNode, 'resRootFollow'], [mIKControl.mNode, 'resFullFollow'], keyable=True) targetWeights = mc.orientConstraint(const, q=True, weightAliasList=True, maintainOffset=True) #Connect d_blendReturn['d_result1']['mi_plug'].doConnectOut( '%s.%s' % (const, targetWeights[0])) d_blendReturn['d_result2']['mi_plug'].doConnectOut( '%s.%s' % (const, targetWeights[1])) d_blendReturn['d_result1']['mi_plug'].p_hidden = True d_blendReturn['d_result2']['mi_plug'].p_hidden = True mBallOrientGroup.dagLock(True) mLocAim.dagLock(True) mLocBase.dagLock(True) mIKBallRotationControl.p_parent = mBallOrientGroup #Joint constraint ------------------------- mIKBallRotationControl.masterGroup.p_parent = mPivotResultDriver mc.orientConstraint([mIKBallRotationControl.mNode], ml_ikFrame[self.int_handleEndIdx].mNode, maintainOffset=True) mc.parentConstraint([mPivotResultDriver.mNode], ml_ikFrame[self.int_handleEndIdx + 1].mNode, maintainOffset=True) ATTR.set_default(mIKControl.mNode, 'extendIK', 1.0) mIKControl.extendIK = 0.0 elif str_ikEnd == 'bank': mc.orientConstraint([mPivotResultDriver.mNode], ml_ikFrame[self.int_handleEndIdx].mNode, maintainOffset=True) elif str_ikEnd == 'pad': mc.orientConstraint([mPivotResultDriver.mNode], ml_ikFrame[self.int_handleEndIdx].mNode, maintainOffset=True) else: mc.orientConstraint([mIKEndDriver.mNode], ml_ikFrame[self.int_handleEndIdx].mNode, maintainOffset=True) #Mid IK driver ----------------------------------------------------------------------- log.debug("|{0}| >> mid Ik driver...".format(_str_func) + '-' * 30) log.debug("|{0}| >> mid IK driver.".format(_str_func)) mMidControlDriver = mIKMid.doCreateAt() mMidControlDriver.addAttr( 'cgmName', '{0}_midIK'.format(self.d_module['partName'])) mMidControlDriver.addAttr('cgmType', 'driver') mMidControlDriver.doName() mMidControlDriver.addAttr('cgmAlias', 'midDriver') if mIKBaseControl: l_midDrivers = [mIKBaseControl.mNode] else: l_midDrivers = [mRoot.mNode] if str_ikEnd in ['tipCombo'] and mIKControlEnd: log.debug("|{0}| >> mIKControlEnd + tipCombo...".format(_str_func)) l_midDrivers.append(mIKControl.mNode) else: l_midDrivers.append(mIKHandleDriver.mNode) mc.pointConstraint(l_midDrivers, mMidControlDriver.mNode) mMidControlDriver.parent = mSpinGroupAdd #mIKGroup mIKMid.masterGroup.parent = mMidControlDriver mMidControlDriver.dagLock(True) #Mid IK trace log.debug("|{0}| >> midIK track Crv".format(_str_func, mIKMid)) trackcrv, clusters = CORERIG.create_at( [ mIKMid.mNode, ml_ikFrame[MATH.get_midIndex( len(ml_ikFrame))].mNode ], #ml_handleJoints[1]], 'linearTrack', baseName='{0}_midTrack'.format(self.d_module['partName'])) mTrackCrv = cgmMeta.asMeta(trackcrv) mTrackCrv.p_parent = self.mModule mHandleFactory = mBlock.asHandleFactory() mHandleFactory.color(mTrackCrv.mNode, controlType='sub') for s in mTrackCrv.getShapes(asMeta=True): s.overrideEnabled = 1 s.overrideDisplayType = 2 mTrackCrv.doConnectIn('visibility', "{0}.v".format(mIKGroup.mNode)) #Full IK chain ----------------------------------------------------------------------- if ml_ikFullChain: log.debug("|{0}| >> Full IK Chain...".format(_str_func)) _d_ik = { 'globalScaleAttr': mPlug_masterScale. p_combinedName, #mPlug_globalScale.p_combinedName, 'stretch': 'translate', 'lockMid': False, 'rpHandle': mIKMid.mNode, 'baseName': '{0}_ikFullChain'.format(self.d_module['partName']), 'nameSuffix': 'ikFull', 'controlObject': mIKControl.mNode, 'moduleInstance': self.mModule.mNode } d_ikReturn = IK.handle(ml_ikFullChain[0], ml_ikFullChain[-1], **_d_ik) mIKHandle = d_ikReturn['mHandle'] ml_distHandlesNF = d_ikReturn['ml_distHandles'] mRPHandleNF = d_ikReturn['mRPHandle'] mIKHandle.parent = mIKControl.mNode #handle to control for mObj in ml_distHandlesNF[:-1]: mObj.parent = mRoot ml_distHandlesNF[-1].parent = mIKControl.mNode #handle to control #ml_distHandlesNF[1].parent = mIKMid #ml_distHandlesNF[1].t = 0,0,0 #ml_distHandlesNF[1].r = 0,0,0 #>>> Fix our ik_handle twist at the end of all of the parenting IK.handle_fixTwist(mIKHandle, self.d_orientation['str'][0]) #Fix the twist #mIKControl.masterGroup.p_parent = ml_ikFullChain[-2] ######mc.parentConstraint([mIKControl.mNode], ml_ikFrame[-1].mNode, maintainOffset = True) if mIKBaseControl: ml_ikFrame[0].parent = mIKBaseControl #if mIKBaseControl: #mc.pointConstraint(mIKBaseControl.mNode, ml_ikFrame[0].mNode,maintainOffset=True) except Exception, err: cgmGEN.cgmExceptCB(Exception, err, localDat=vars())
def duplicateJointInPlace(joint, asMeta=True): """ :parameters: joint | str/instance Joint to duplicate asMeta | bool What to return as :returns: str or instance of new joint :raises: TypeError | if 'arg' is not a joint """ _str_func_ = 'duplicateJointInPlace' try: mJoint = cgmMeta.validateObjArg(joint, mayaType='joint', mType='cgmObject') #dup = mc.joint() mDup = mJoint.doDuplicate(parentOnly=True) #mDup.parent = mJoint.parent #mc.delete(mc.parentConstraint(mJoint.mNode,mDup.mNode)) ''' ('rotateOrder','rotateAxisX','rotateAxisY','rotateAxisZ', 'inheritsTransform','drawStyle','radius', 'jointTypeX','jointTypeY','jointTypeZ', 'stiffnessX','stiffnessY','stiffnessZ', 'preferredAngleX','preferredAngleY','preferredAngleZ', 'jointOrientX','jointOrientY','jointOrientZ','segmentScaleCompensate','showManipDefault', 'displayHandle','displayLocalAxis','selectHandleX','selectHandleY','selectHandleZ'), ''' mDup.rotateOrder = mJoint.rotateOrder mDup.jointOrient = mJoint.jointOrient mDup.rotateAxis = mJoint.rotateAxis mDup.inheritsTransform = mJoint.inheritsTransform mDup.radius = mJoint.radius mDup.stiffness = mJoint.stiffness mDup.preferredAngle = mJoint.preferredAngle mDup.segmentScaleCompensate = mJoint.segmentScaleCompensate #mDup.displayHandle = mJoint.displayHandle #mDup.selectHandle = mJoint.selectHandle #Inverse scale... mAttr_inverseScale = cgmMeta.cgmAttr(mJoint, 'inverseScale') _driver = mAttr_inverseScale.getDriver() if mAttr_inverseScale.getDriver(): cgmMeta.cgmAttr(mDup, "inverseScale").doConnectIn(_driver) mAttr_inverseScale.getDriver(mJoint) for attr in mJoint.getUserAttrs(): try: cgmMeta.cgmAttr(mJoint, attr).doCopyTo(mDup.mNode) except Exception, err: log.error( "duplicateJointInPlace({0}) .{1} failed << {2} >>".format( mJoint.p_nameShort, attr, err)) if asMeta: return mDup return mDup.mNode
objList = [] orientation = ['xyz'] orientation[1] #>>> Modules #======================================================= m1 = r9Meta.MetaClass('spine_part') m1.__dict__.keys() m1.rigNull.skinJoints i_rig = Rig.go(m1) m1.getState() i_rig.d_controlShapes rig_segmentFK(i_rig.d_controlShapes) Rig.registerControl('pelvis_anim') l_joints = mc.ls(sl=True) s = cgmMeta.cgmAttr('pelvis_surfaceJoint','scaleX') s.p_hidden = False curves.createControlCurve('semiSphere',10,'z-') attributes.doSetAttr('closestPointOnSurface1','inPostionX',5) mc.setAttr('closestPointOnSurface1.inPostionX',5) m1 = cgmPM.cgmModule(name = 'test') m1 = cgmMeta.cgmNode('spine_part') m1.setState('skeleton',forceNew = True) m1.rigNull.skinJoints m1.getModuleColors() m1.getPartNameBase() m1.modulePuppet.getGeo() targetObj = mc.ls(sl=True)[0] distance.returnClosestPointOnSurfaceInfo(targetObj,'test_controlSurface') distance.returnClosestUV(targetObj,'test_controlSurface') log.info(a)
mPlug_forwardBackDriven.p_locked = True mPlug_forwardBackDriven.p_hidden = True mPlug_forwardBackDriven.p_keyable = False NodeF.argsToNodes(arg_forwardBack).doBuild() if self._addMirrorAttributeBridges: for l_bridge in self._addMirrorAttributeBridges: _attrName = VALID.stringArg(l_bridge[0]) _attrToBridge = VALID.stringArg(l_bridge[1]) if not self.mi_control.hasAttr(_attrToBridge): raise StandardError, "['%s' lacks the bridge attr '%s']" % ( self.mi_control.p_nameShort, _attrToBridge) mPlug_attrBridgeDriver = cgmMeta.cgmAttr(self.mi_control, _attrName, attrType='float', keyable=True) try: mPlug_attrBridgeDriven = cgmMeta.validateAttrArg( [self.mi_control, _attrToBridge])['mi_plug'] except Exception, error: raise StandardError, "[validate control attribute bridge attr]{%s}" % ( error) if self.str_mirrorSide.lower() == 'right': arg_attributeBridge = "%s = -%s" % ( mPlug_attrBridgeDriven.p_combinedShortName, mPlug_attrBridgeDriver.p_combinedShortName) else: arg_attributeBridge = "%s = %s" % ( mPlug_attrBridgeDriven.p_combinedShortName,
rUtils.createCGMSegment(jointList) start = 'l_left_index_2_ik_jnt' end = 'l_left_index_4_ik_jnt' mc.ikHandle( sj=start, ee=end,solver = 'ikSpringSolver', forceSolver = True,snapHandleFlagToggle=True ) rUtils.IKHandle_addSplineIKTwist(handle,True) rUtils.IKHandle_addSplineIKTwist(handle,False) #>>> Playing with spline Ik twist setup #======================================================= #root twist mode off #Playing with a better spline IK twist setup, ramp multiplier works handle = 'ikHandle1' mPlug_start = cgmMeta.cgmAttr(handle,'twistStart',attrType='float',keyable=True, hidden=False) mPlug_end = cgmMeta.cgmAttr(handle,'twistEnd',attrType='float',keyable=True, hidden=False) mPlug_equalizedRoll = cgmMeta.cgmAttr(handle,'twistEqualized',attrType='float',keyable=True, hidden=False) mPlug_twist = cgmMeta.cgmAttr(handle,'twist',attrType='float',keyable=True, hidden=False) mPlug_start.doConnectOut("%s.roll"%handle) arg1 = "%s = %s - %s"%(mPlug_equalizedRoll.p_combinedShortName,mPlug_start.p_combinedShortName,mPlug_end.p_combinedShortName) log.info("arg1: %s"%arg1) NodeF.argsToNodes(arg1).doBuild() arg2 = "%s = %s - %s"%(mPlug_twist.p_combinedShortName,mPlug_end.p_combinedShortName,mPlug_equalizedRoll.p_combinedShortName) log.info("arg2: %s"%arg2) NodeF.argsToNodes(arg2).doBuild() mPlug_twistRampMultiplier = cgmMeta.cgmAttr(handle,'twistRampMultiplier',attrType='float',keyable=True, hidden=False) mPlug_twistRampMultiplier.doConnectOut("%s.dTwistRampMult"%handle)
def ribbon_seal( driven1=None, driven2=None, influences1=None, influences2=None, msgDriver=None, #...msgLink on joint to a driver group for constaint purposes extendEnds=False, loftAxis='z', orientation='zyx', secondaryAxis='y+', baseName=None, baseName1=None, baseName2=None, connectBy='constraint', sectionSpans=1, settingsControl=None, specialMode=None, sealSplit=False, sealDriver1=None, sealDriver2=None, sealDriverMid=None, sealName1='left', sealName2='right', sealNameMid='center', maxValue=10.0, moduleInstance=None, parentGutsTo=None): try: _str_func = 'ribbon_seal' ml_rigObjectsToConnect = [] md_drivers = {} md_base = {} md_seal = {} md_blend = {} md_follicles = {} md_follicleShapes = {} d_dat = {1: {}, 2: {}} if msgDriver: ml_missingDrivers = [] def check_msgDriver(mObj): mDriver = mObj.getMessageAsMeta(msgDriver) if mDriver: md_drivers[mObj] = mDriver else: log.error("|{0}| >> Missing driver: {1}".format( _str_func, mObj)) ml_missingDrivers.append(mObj) return False #>>> Verify =================================================================================== log.debug("|{0}| >> driven1 [Check]...".format(_str_func)) d_dat[1]['driven'] = cgmMeta.validateObjListArg(driven1, mType='cgmObject', mayaType=['joint'], noneValid=False) log.debug("|{0}| >> driven2 [Check]...".format(_str_func)) d_dat[2]['driven'] = cgmMeta.validateObjListArg(driven2, mType='cgmObject', mayaType=['joint'], noneValid=False) #Check our msgDrivers ----------------------------------------------------------- if msgDriver: log.debug("|{0}| >> msgDriver [Check]...".format(_str_func)) for mObj in d_dat[1]['driven'] + d_dat[2]['driven']: if mObj not in ml_missingDrivers: check_msgDriver(mObj) if ml_missingDrivers: raise ValueError, "Missing drivers. See errors." log.debug("|{0}| >> msgDriver [Pass]...".format(_str_func)) d_dat[1]['int_driven'] = len(d_dat[1]['driven']) d_dat[2]['int_driven'] = len(d_dat[2]['driven']) log.debug("|{0}| >> Driven lengths {1} | {2}".format( _str_func, d_dat[1]['int_driven'], d_dat[2]['int_driven'])) log.debug("|{0}| >> influences1 [Check]...".format(_str_func)) d_dat[1]['mInfluences'] = cgmMeta.validateObjListArg( influences1, mType='cgmObject', mayaType=['joint'], noneValid=False) log.debug("|{0}| >> influences2 [Check]...".format(_str_func)) d_dat[2]['mInfluences'] = cgmMeta.validateObjListArg( influences2, mType='cgmObject', mayaType=['joint'], noneValid=False) d_dat[1]['int_influences'] = len(d_dat[1]['mInfluences']) d_dat[2]['int_influences'] = len(d_dat[2]['mInfluences']) log.debug("|{0}| >> Influence lengths {1} | {2}".format( _str_func, d_dat[1]['int_influences'], d_dat[2]['mInfluences'])) mi_mayaOrientation = VALID.simpleOrientation(orientation) str_orientation = mi_mayaOrientation.p_string str_secondaryAxis = VALID.stringArg(secondaryAxis, noneValid=True) if specialMode and specialMode not in [ 'noStartEnd', 'endsToInfluences' ]: raise ValueError, "Unknown special mode: {0}".format(specialMode) #module ----------------------------------------------------------------------------------------------- mModule = cgmMeta.validateObjArg(moduleInstance, noneValid=True) #try:mModule.isModule() #except:mModule = False mi_rigNull = False if mModule: log.debug("|{0}| >> mModule [Check]...".format(_str_func)) mi_rigNull = mModule.rigNull if str_baseName is None: str_baseName = mModule.getPartNameBase() #Get part base name if not baseName: baseName = 'testRibbonSeal' if not baseName1: baseName1 = 'ribbon1' if not baseName2: baseName2 = 'ribbon2' d_check = { 'driven1': d_dat[1]['int_driven'], 'driven2': d_dat[2]['int_driven'] } for k, i in d_check.iteritems(): if i < 3: raise ValueError, "needs at least three driven. Found : {0} | {1}".format( k, i) log.debug("|{0}| >> Group [Check]...".format(_str_func)) if parentGutsTo is None: mGroup = cgmMeta.cgmObject(name='newgroup') mGroup.addAttr('cgmName', str(baseName), lock=True) mGroup.addAttr('cgmTypeModifier', 'segmentStuff', lock=True) mGroup.doName() else: mGroup = cgmMeta.validateObjArg(parentGutsTo, 'cgmObject', False) if mModule: mGroup.parent = mModule.rigNull #Good way to verify an instance list? #validate orientation #> axis ------------------------------------------------------------- """ axis_aim = VALID.simpleAxis("{0}+".format(str_orientation[0])) axis_aimNeg = axis_aim.inverse axis_up = VALID.simpleAxis("{0}+".format(str_orientation [1])) axis_out = VALID.simpleAxis("{0}+".format(str_orientation [2])) v_aim = axis_aim.p_vector#aimVector v_aimNeg = axis_aimNeg.p_vector#aimVectorNegative v_up = axis_up.p_vector #upVector v_out = axis_out.p_vector str_up = axis_up.p_string loftAxis2 = False #Figure out our loft axis stuff if loftAxis not in orientation: _lower_loftAxis = loftAxis.lower() if _lower_loftAxis in ['out','up']: if _lower_loftAxis == 'out': loftAxis = str_orientation[2] else: loftAxis = str_orientation[1] else: raise ValueError,"Not sure what to do with loftAxis: {0}".format(loftAxis) """ outChannel = str_orientation[2] #outChannel upChannel = str_orientation[1] #upChannel = '{0}up'.format(str_orientation[1])#upChannel #>>> Ribbon Surface ============================================================================ log.debug("|{0}| >> Ribbons generating...".format(_str_func)) l_surfaceReturn1 = IK.ribbon_createSurface(d_dat[1]['driven'], loftAxis, sectionSpans, extendEnds) d_dat[1]['mSurf'] = cgmMeta.validateObjArg(l_surfaceReturn1[0], 'cgmObject', setClass=True) d_dat[1]['mSurf'].addAttr('cgmName', str(baseName1), attrType='string', lock=True) d_dat[1]['mSurf'].addAttr('cgmType', 'controlSurface', attrType='string', lock=True) d_dat[1]['mSurf'].doName() l_surfaceReturn2 = IK.ribbon_createSurface(d_dat[2]['driven'], loftAxis, sectionSpans, extendEnds) d_dat[2]['mSurf'] = cgmMeta.validateObjArg(l_surfaceReturn1[0], 'cgmObject', setClass=True) d_dat[2]['mSurf'].addAttr('cgmName', str(baseName2), attrType='string', lock=True) d_dat[2]['mSurf'].addAttr('cgmType', 'controlSurface', attrType='string', lock=True) d_dat[2]['mSurf'].doName() log.debug("d_dat[1]['mSurf']: {0}".format(d_dat[1]['mSurf'])) log.debug("d_dat[2]['mSurf']: {0}".format(d_dat[2]['mSurf'])) ml_toConnect = [] ml_toConnect.extend([d_dat[1]['mSurf'], d_dat[2]['mSurf']]) #Special Mode ================================================================================= if specialMode in ['noStartEnd', 'endsToInfluences']: log.debug( "|{0}| >> Special Mode: {1}".format(_str_func, specialMode) + cgmGEN._str_subLine) if specialMode == 'endsToInfluences': d_special = { '1start': { 'mObj': d_dat[1]['driven'][0], 'mDriver': d_dat[1]['mInfluences'][0] }, '1end': { 'mObj': d_dat[1]['driven'][-1], 'mDriver': d_dat[1]['mInfluences'][-1] }, '2start': { 'mObj': d_dat[2]['driven'][0], 'mDriver': d_dat[2]['mInfluences'][0] }, '2end': { 'mObj': d_dat[2]['driven'][-1], 'mDriver': d_dat[2]['mInfluences'][-1] } } for n, dat in d_special.iteritems(): mObj = dat['mObj'] mDriven = md_drivers[mObj] mDriver = dat['mDriver'] log.debug("|{0}| >> {1} | Driver: {2}".format( _str_func, i, mDriven)) _const = mc.parentConstraint([mDriver.mNode], mDriven.mNode, maintainOffset=True)[0] ATTR.set(_const, 'interpType', 2) d_dat[1]['driven'] = d_dat[1]['driven'][1:-1] d_dat[2]['driven'] = d_dat[2]['driven'][1:-1] driven1 = driven1[1:-1] driven2 = driven2[1:-1] #>>> Setup our Attributes ================================================================ log.debug("|{0}| >> Settings...".format(_str_func)) if settingsControl: mSettings = cgmMeta.validateObjArg(settingsControl, 'cgmObject') else: mSettings = d_dat[1]['mSurf'] mPlug_sealHeight = cgmMeta.cgmAttr(mSettings.mNode, 'sealHeight', attrType='float', lock=False, keyable=True) mPlug_sealHeight.doDefault(.5) mPlug_sealHeight.value = .5 #>>> Setup blend results -------------------------------------------------------------------- if sealSplit: d_split = split_blends( driven1, #d_dat[1]['driven'], driven2, #d_dat[2]['driven'], sealDriver1, sealDriver2, sealDriverMid, nameSeal1=sealName1, nameSeal2=sealName2, nameSealMid=sealNameMid, settingsControl=mSettings, maxValue=maxValue) for k, d in d_split.iteritems(): d_dat[k]['mPlugs'] = d['mPlugs'] else: mPlug_seal = cgmMeta.cgmAttr(mSettings.mNode, 'seal', attrType='float', lock=False, keyable=True) mPlug_sealOn = cgmMeta.cgmAttr(mSettings, 'result_sealOn', attrType='float', defaultValue=0, keyable=False, lock=True, hidden=False) mPlug_sealOff = cgmMeta.cgmAttr(mSettings, 'result_sealOff', attrType='float', defaultValue=0, keyable=False, lock=True, hidden=False) NODEFACTORY.createSingleBlendNetwork(mPlug_seal.p_combinedName, mPlug_sealOn.p_combinedName, mPlug_sealOff.p_combinedName) d_dat[1]['mPlug_sealOn'] = mPlug_sealOn d_dat[1]['mPlug_sealOff'] = mPlug_sealOff d_dat[2]['mPlug_sealOn'] = mPlug_sealOn d_dat[2]['mPlug_sealOff'] = mPlug_sealOff mPlug_FavorOneMe = cgmMeta.cgmAttr(mSettings, 'result_sealOneMe', attrType='float', defaultValue=0, keyable=False, lock=True, hidden=False) mPlug_FavorOneThee = cgmMeta.cgmAttr(mSettings, 'result_sealOneThee', attrType='float', defaultValue=0, keyable=False, lock=True, hidden=False) mPlug_FavorTwoMe = cgmMeta.cgmAttr(mSettings, 'result_sealTwoMe', attrType='float', defaultValue=0, keyable=False, lock=True, hidden=False) mPlug_FavorTwoThee = cgmMeta.cgmAttr(mSettings, 'result_sealTwoThee', attrType='float', defaultValue=0, keyable=False, lock=True, hidden=False) NODEFACTORY.createSingleBlendNetwork(mPlug_sealHeight.p_combinedName, mPlug_FavorOneThee.p_combinedName, mPlug_FavorOneMe.p_combinedName) NODEFACTORY.createSingleBlendNetwork(mPlug_sealHeight.p_combinedName, mPlug_FavorTwoThee.p_combinedName, mPlug_FavorTwoMe.p_combinedName) d_dat[1]['mPlug_me'] = mPlug_FavorOneMe d_dat[1]['mPlug_thee'] = mPlug_FavorOneThee d_dat[2]['mPlug_me'] = mPlug_FavorTwoMe d_dat[2]['mPlug_thee'] = mPlug_FavorTwoThee """ b_attachToInfluences = False if attachEndsToInfluences: log.debug("|{0}| >> attachEndsToInfluences flag. Checking...".format(_str_func)) if influences and len(influences) > 1: b_attachToInfluences = True log.debug("|{0}| >> b_attachToInfluences: {1}".format(_str_func,b_attachToInfluences)) """ #>>> Skinning ============================================================================ log.debug("|{0}| >> Skinning Ribbons...".format(_str_func)) for idx, dat in d_dat.iteritems(): max_influences = 2 mode_tighten = 'twoBlend' blendLength = int(dat['int_driven'] / 2) blendMin = 2 _hardLength = 2 if extendEnds: blendMin = 4 _hardLength = 4 mode_tighten = None if dat['int_influences'] > 2: mode_tighten = None #blendLength = int(int_lenInfluences/2) max_influences = MATH.Clamp(blendLength, 2, 4) blendLength = MATH.Clamp(int(dat['int_influences'] / 2), 2, 6) if dat['int_influences'] == dat['int_driven']: _hardLength = 3 #Tighten the weights... mSkinCluster = cgmMeta.validateObjArg(mc.skinCluster( [mObj.mNode for mObj in dat['mInfluences']], dat['mSurf'].mNode, tsb=True, maximumInfluences=max_influences, normalizeWeights=1, dropoffRate=5.0), 'cgmNode', setClass=True) mSkinCluster.doStore('cgmName', dat['mSurf']) mSkinCluster.doName() #Tighten the weights... RIGSKIN.surface_tightenEnds(dat['mSurf'].mNode, hardLength=_hardLength, blendLength=blendLength, mode=mode_tighten) #>>> Meat ============================================================================ ml_processed = [] for idx, dat in d_dat.iteritems(): idx_seal = 1 if idx == 1: idx_seal = 2 dat_seal = d_dat[idx_seal] log.debug("|{0}| >> Building [{1}] | seal idx: {2} |".format( _str_func, idx, idx_seal) + cgmGEN._str_subLine) mSurfBase = dat['mSurf'] mSurfSeal = dat_seal['mSurf'] for i, mObj in enumerate(dat['driven']): if mObj in ml_processed: log.debug("|{0}| >> Already completed: {1}".format( _str_func, mObj)) continue ml_processed.append(mObj) log.debug("|{0}| >> {1} | Driven: {2}".format( _str_func, i, mObj)) mDriven = md_drivers[mObj] log.debug("|{0}| >> {1} | Driver: {2}".format( _str_func, i, mDriven)) log.debug("|{0}| >> Create track drivers...".format(_str_func)) mTrackBase = mDriven.doCreateAt(setClass=True) mTrackBase.doStore('cgmName', mObj) mTrackSeal = mTrackBase.doDuplicate() mTrackBlend = mTrackBase.doDuplicate() mTrackSeal.doStore('cgmType', 'trackSeal') mTrackBase.doStore('cgmType', 'trackBase') mTrackBlend.doStore('cgmType', 'trackBlend') for mTrack in mTrackBase, mTrackSeal, mTrackBlend: mTrack.doName() log.debug("|{0}| >> Attach drivers...".format(_str_func)) d_tmp = { 'base': { 'mSurf': mSurfBase, 'mTrack': mTrackBase }, 'seal': { 'mSurf': mSurfSeal, 'mTrack': mTrackSeal }, } for n, d in d_tmp.iteritems(): mTrack = d['mTrack'] mSurf = d['mSurf'] _res = RIGCONSTRAINTS.attach_toShape( mTrack.mNode, mSurf.mNode, 'parent') mFollicle = _res[-1][ 'mFollicle'] #cgmMeta.asMeta(follicle) mFollShape = _res[-1][ 'mFollicleShape'] #cgmMeta.asMeta(shape) md_follicleShapes[mObj] = mFollShape md_follicles[mObj] = mFollicle mFollicle.parent = mGroup.mNode if mModule: #if we have a module, connect vis mFollicle.overrideEnabled = 1 cgmMeta.cgmAttr( mModule.rigNull.mNode, 'gutsVis', lock=False).doConnectOut( "%s.%s" % (mFollicle.mNode, 'overrideVisibility')) cgmMeta.cgmAttr( mModule.rigNull.mNode, 'gutsLock', lock=False).doConnectOut( "%s.%s" % (mFollicle.mNode, 'overrideDisplayType')) #Blend point -------------------------------------------------------------------- _const = mc.parentConstraint( [mTrackBase.mNode, mTrackSeal.mNode], mTrackBlend.mNode)[0] ATTR.set(_const, 'interpType', 2) targetWeights = mc.parentConstraint(_const, q=True, weightAliasList=True) #Connect if idx == 1: dat['mPlug_thee'].doConnectOut('%s.%s' % (_const, targetWeights[0])) dat['mPlug_me'].doConnectOut('%s.%s' % (_const, targetWeights[1])) else: dat['mPlug_me'].doConnectOut('%s.%s' % (_const, targetWeights[0])) dat['mPlug_thee'].doConnectOut('%s.%s' % (_const, targetWeights[1])) #seal -------------------------------------------------------------------- _const = mc.parentConstraint( [mTrackBase.mNode, mTrackBlend.mNode], mDriven.mNode)[0] ATTR.set(_const, 'interpType', 2) targetWeights = mc.parentConstraint(_const, q=True, weightAliasList=True) if sealSplit: dat['mPlugs']['off'][i].doConnectOut( '%s.%s' % (_const, targetWeights[0])) dat['mPlugs']['on'][i].doConnectOut( '%s.%s' % (_const, targetWeights[1])) else: dat['mPlug_sealOff'].doConnectOut( '%s.%s' % (_const, targetWeights[0])) dat['mPlug_sealOn'].doConnectOut( '%s.%s' % (_const, targetWeights[1])) log.debug("|{0}| >> Blend drivers...".format(_str_func)) """ #Simple contrain if b_attachToInfluences and mJnt in [ml_joints[0],ml_joints[-1]]: if mJnt == ml_joints[0]: mUse = ml_influences[0] else: mUse = ml_influences[-1] mc.parentConstraint([mUse.mNode], mDriven.mNode, maintainOffset=True) else: mc.parentConstraint([mDriver.mNode], mDriven.mNode, maintainOffset=True) """ #pprint.pprint(d_dat) return except Exception, err: cgmGEN.cgmExceptCB(Exception, err, msg=vars())
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 _buildPupilIris_(self): mi_go = self._go #Rig Go instance link str_mirrorSide = self.str_mirrorSide try: #>>>> Iris pupil #================================================================== try: _l_build = [{ 'tag': 'iris', 'buildCheck': self.mi_helper.buildIris, 'shape': self.md_rigList['iris_shape'], 'joint': self.md_rigList['iris'], 'parent': self.md_rigList['eye'] }, { 'tag': 'pupil', 'buildCheck': self.mi_helper.buildPupil, 'shape': self.md_rigList['pupil_shape'], 'joint': self.md_rigList['pupil'], 'parent': self.md_rigList['iris'] }] except Exception, error: raise Exception, "[build dict]{%s}" % (error) for _d in _l_build: try: self._d_buffer = _d self.log_infoNestedDict('_d_buffer') _tag = _d['tag'] _shape = _d['shape'] _joint = _d['joint'] _b_buildCheck = _d['buildCheck'] if not _b_buildCheck: self.log_info("Build %s toggle: off" % (_tag)) _shape.delete() else: _joint.parent = mi_go._i_constrainNull.eyeTrackNull.mNode d_buffer = mControlFactory.registerControl( _joint, useShape=_shape, mirrorSide=str_mirrorSide, mirrorAxis="", makeAimable=True, setRotateOrder='zxy') mi_control = d_buffer['instance'] _shape.delete() attributes.doSetAttr(mi_control.mNode, 'overrideEnabled', 0) attributes.doSetAttr(mi_control.mNode, 'overrideDisplayType', 0) cgmMeta.cgmAttr(mi_control, 'radius', .0001, hidden=True) mi_go._i_rigNull.connectChildNode( mi_control, 'control%s' % _tag.capitalize(), "rigNull") self.ml_controlsAll.append(mi_control) attributes.doSetLockHideKeyableAttr( mi_control.mNode, channels=[ 'tx', 'ty', 'tz', 'rx', 'ry', 'rz', 'v', 's%s' % mi_go._jointOrientation[0] ]) except Exception, error: raise Exception, "[%s]{%s}" % (_tag, error)
def build(self):#================================================================================ #>>>Get data ml_controlsFK = self._go._i_rigNull.msgList_get('controlsFK') ml_rigJoints = self._go._i_rigNull.msgList_get('rigJoints') ml_blendJoints = self._go._i_rigNull.msgList_get('blendJoints') ml_fkJoints = self._go._i_rigNull.msgList_get('fkJoints') ml_ikJoints = self._go._i_rigNull.msgList_get('ikJoints') mi_settings = self._go._i_rigNull.settings aimVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[0]) upVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[1]) outVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[2]) mi_controlIK = self._go._i_rigNull.controlIK for chain in [ml_ikJoints,ml_blendJoints]: chain[0].parent = self._go._i_constrainNull.mNode self.ml_fkAttachJoints = [] if self._go._str_mirrorDirection == 'Right':#mirror control setup self.ml_fkAttachJoints = self._go._i_rigNull.msgList_get('fkAttachJoints') #for more stable ik, we're gonna lock off the lower channels degrees of freedom for chain in [ml_ikJoints]: for axis in self._go._jointOrientation[:2]: log.info(axis) for i_j in chain[1:]: attributes.doSetAttr(i_j.mNode,"jointType%s"%axis.upper(),1) #============================================================= try:#>>>Finger Root Control and root follow for attr in ['tx','ty','tz']:#Unlock a few things i_attr = cgmMeta.cgmAttr(ml_fkJoints[0],attr) i_attr.p_keyable = True i_attr.p_locked = False #we have to rebuild a little so that we can use our fk base control both for fk and ik #Create a orient group that tracks the module constrain null if self._go._partType == 'finger': buffer_fkGroup = ml_fkJoints[0].parent i_orientGroup = cgmMeta.asMeta( ml_fkJoints[1].doGroup(True),'cgmObject',setClass=True ) i_orientGroup.addAttr('cgmTypeModifier','toOrient') i_orientGroup.doName() #constrain it str_orConst = mc.orientConstraint(self._go._i_constrainNull.mNode,i_orientGroup.mNode,maintainOffset = True)[0] self._go._i_constrainNull.connectChildNode(i_orientGroup,'fingerRoot','owner')#Connect i_orientGroup.parent = self._go._i_constrainNull.mNode attributes.doSetLockHideKeyableAttr(i_orientGroup.mNode)#lockNHide i_parentGroup = cgmMeta.asMeta( i_orientGroup.doGroup(True),'cgmObject',setClass=True ) i_parentGroup.addAttr('cgmTypeModifier','toParent') i_parentGroup.doName() str_prntConst = mc.parentConstraint( ml_fkJoints[0].mNode,i_parentGroup.mNode,maintainOffset = True)[0] i_parentGroup.parent = buffer_fkGroup #attributes.doSetLockHideKeyableAttr(ml_fkJoints[0].mNode,lock = False, visible=True, keyable=True, channels=['tx','ty','tz']) #Constrain ik base to fk base mc.orientConstraint(ml_fkJoints[0].mNode,ml_ikJoints[0].mNode,maintainOffset = True) ml_fkJoints[0].parent = self._go._i_constrainNull.mNode except Exception,error: raise Exception,"%s.build_FKIK>>> Finger Root Control error: %s"%(self._go._strShortName,error)
i_obj, copyTransform=ml_rigJoints[0], mirrorSide=str_mirrorSide, mirrorAxis="rotateY,rotateZ", makeAimable=True, setRotateOrder='zxy', typeModifier='fk') mi_controlFK = d_buffer['instance'] mi_controlFK.axisAim = "%s+" % mi_go._jointOrientation[0] mi_controlFK.axisUp = "%s+" % mi_go._jointOrientation[1] mi_controlFK.axisOut = "%s+" % mi_go._jointOrientation[2] #We're gonna lock the aim rot cgmMeta.cgmAttr(mi_controlFK, 'r%s' % mi_go._jointOrientation[0], keyable=False, lock=True, hidden=True) mi_go._i_rigNull.connectChildNode(mi_controlFK, 'controlFK', "rigNull") self.ml_controlsAll.append(mi_controlFK) attributes.doSetLockHideKeyableAttr( mi_controlFK.mNode, channels=['tx', 'ty', 'tz', 'sx', 'sy', 'sz', 'v']) except Exception, error: raise Exception, "[Build fk fail]{%s}" % (error) try: #>>>> IK #==================================================================
def build_rig(goInstance = None): class fncWrap(modUtils.rigStep): def __init__(self,goInstance = None): super(fncWrap, self).__init__(goInstance) self._str_funcName = 'build_rig(%s)'%self.d_kws['goInstance']._strShortName self.__dataBind__() self.l_funcSteps = [{'step':'Build NOT BROKEN UP YET','call':self.build}] #================================================================= def build(self):#================================================================================ try:#>>>Get data orientation = self._go._jointOrientation or modules.returnSettingsData('jointOrientation') mi_moduleParent = False if self._go._mi_module.getMessage('moduleParent'): mi_moduleParent = self._go._mi_module.moduleParent mi_controlIK = self._go._i_rigNull.controlIK ml_controlsFK = self._go._i_rigNull.msgList_get('controlsFK') ml_rigJoints = self._go._i_rigNull.msgList_get('rigJoints') ml_blendJoints = self._go._i_rigNull.msgList_get('blendJoints') mi_settings = self._go._i_rigNull.settings log.info("mi_controlIK: %s"%mi_controlIK.getShortName()) log.info("ml_controlsFK: %s"%[o.getShortName() for o in ml_controlsFK]) log.info("mi_settings: %s"%mi_settings.getShortName()) log.info("ml_rigJoints: %s"%[o.getShortName() for o in ml_rigJoints]) log.info("ml_blendJoints: %s"%[o.getShortName() for o in ml_blendJoints]) ml_segmentHandleChains = self._go._get_segmentHandleChains() ml_segmentChains = self._go._get_segmentChains() ml_influenceChains = self._go._get_influenceChains() aimVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[0]) upVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[1]) #Build our contrain to pool l_constrainTargetJoints = [] """ for ml_chain in ml_segmentChains: l_constrainTargetJoints.extend([i_jnt.mNode for i_jnt in ml_chain[:-1]]) l_constrainTargetJoints.extend([i_jnt.mNode for i_jnt in ml_blendJoints[-2:]]) """ if not l_constrainTargetJoints: l_constrainTargetJoints = [i_jnt.mNode for i_jnt in ml_blendJoints] for i_jnt in ml_blendJoints: attributes.doSetLockHideKeyableAttr(i_jnt.mNode,lock=True, visible=True, keyable=False) i_jnt.radius = 0#This is how we can hide joints without hiding them since we have children we want to ride along i_jnt.drawStyle = 2 for i_jnt in ml_controlsFK: i_jnt.radius = 0#This is how we can hide joints without hiding them since we have children we want to ride along i_jnt.drawStyle = 2 #Set group lockks for mCtrl in self._go._i_rigNull.msgList_get('controlsAll'): try:mCtrl._setControlGroupLocks() except Exception,error:log.error("%s _setControlGroupLocks failed on object: %s"%(self._str_reportStart,mCtrl.p_nameShort)) except Exception,error: log.error("finger.build_rig>> Gather data fail!") raise Exception,error #Dynamic parent groups #==================================================================================== try:#>>>> IK ml_fingerDynParents = [] #Build our dynamic groups """ 1)wrist 2)fk root 3)... 4)world """ if mi_moduleParent: mi_blendEndJoint = mi_moduleParent.rigNull.msgList_get('blendJoints')[-1] mi_parentRigNull = mi_moduleParent.rigNull if mi_moduleParent: mi_parentRigNull = mi_moduleParent.rigNull buffer = mi_parentRigNull.msgList_get('moduleJoints') if buffer: ml_fingerDynParents.append( buffer[-1]) ml_fingerDynParents.append( ml_controlsFK[0]) mi_spine = self._go._mi_module.modulePuppet.getModuleFromDict(moduleType= ['torso','spine']) if mi_spine: log.info("spine found: %s"%mi_spine) mi_spineRigNull = mi_spine.rigNull ml_fingerDynParents.append( mi_spineRigNull.handleIK ) ml_fingerDynParents.append( mi_spineRigNull.cog ) ml_fingerDynParents.append( mi_spineRigNull.hips ) ml_fingerDynParents.append(self._go._i_masterControl) if mi_controlIK.getMessage('spacePivots'): ml_fingerDynParents.extend(mi_controlIK.msgList_get('spacePivots',asMeta = True)) log.info("%s.build_rig>>> Dynamic parents to add: %s"%(self._go._strShortName,[i_obj.getShortName() for i_obj in ml_fingerDynParents])) #Add our parents i_dynGroup = mi_controlIK.dynParentGroup log.info("Dyn group at setup: %s"%i_dynGroup) i_dynGroup.dynMode = 0 for o in ml_fingerDynParents: i_dynGroup.addDynParent(o) i_dynGroup.rebuild() except Exception,error: log.error("finger.build_rig>> finger ik dynamic parent setup fail!") raise Exception,error self._go.collect_worldDynDrivers()#...collect world dyn drivers #Make some connections #==================================================================================== #Parent and constrain joints #==================================================================================== ml_rigJoints[0].parent = self._go._i_deformNull.mNode#shoulder #ml_rigJoints[-1].parent = self._go._i_deformNull.mNode#wrist #For each of our rig joints, find the closest constraint target joint log.info("targetJoints: %s"%l_constrainTargetJoints) l_rigJoints = [i_jnt.mNode for i_jnt in ml_rigJoints] for i,i_jnt in enumerate(ml_rigJoints): #Don't try scale constraints in here, they're not viable log.info("Checking: '%s'"%i_jnt.getShortName()) attachJoint = distance.returnClosestObject(i_jnt.mNode,l_constrainTargetJoints) log.info("'%s'<< drives <<'%s'"%(i_jnt.getShortName(),cgmMeta.cgmNode(attachJoint).getShortName())) pntConstBuffer = mc.pointConstraint(attachJoint,i_jnt.mNode,maintainOffset=False,weight=1) orConstBuffer = mc.orientConstraint(attachJoint,i_jnt.mNode,maintainOffset=False,weight=1) mc.connectAttr((attachJoint+'.s'),(i_jnt.mNode+'.s')) #Setup finger scaling #==================================================================================== #Parent deform Null to last blend parent if mi_moduleParent: mi_blendEndJoint = mi_moduleParent.rigNull.msgList_get('blendJoints')[-1] mi_parentBlendPlug = cgmMeta.cgmAttr(mi_blendEndJoint,'scale') self._go._i_deformNull.parent = mi_blendEndJoint.mNode #connect blend joint scale to the finger blend joints for i_jnt in ml_blendJoints: mi_parentBlendPlug.doConnectOut("%s.scale"%i_jnt.mNode) #intercept world scale on finger IK and add in the blend wrist scale mPlug_moduleMasterScale = cgmMeta.cgmAttr(self._go._i_rigNull,'masterScale',value = 1.0,defaultValue=1.0) mPlug_globalScale = cgmMeta.cgmAttr(self._go._i_masterControl.mNode,'scaleY') mPlug_globalScale.doConnectOut(mPlug_moduleMasterScale) NodeF.argsToNodes("%s = %s * %s.sy"%(mPlug_moduleMasterScale.p_combinedShortName, mPlug_globalScale.p_combinedShortName, mi_blendEndJoint.p_nameShort)).doBuild() try:#Vis Network, lock and hide #==================================================================================== #Segment handles need to lock for ml_chain in ml_segmentHandleChains: for i_obj in ml_chain: attributes.doSetLockHideKeyableAttr(i_obj.mNode,lock=True, visible=False, keyable=False, channels=['s%s'%orientation[1], 's%s'%orientation[2]]) attributes.doSetLockHideKeyableAttr(mi_settings.mNode,lock=True, visible=False, keyable=False) attributes.doSetLockHideKeyableAttr(ml_blendJoints[0].mNode,lock=True, visible=True, keyable=False) for i,mCtrl in enumerate(ml_controlsFK): l_attrs = ['sx','sy','sz','v'] if i != 0: l_attrs.extend(['tx','ty','tz']) attributes.doSetLockHideKeyableAttr(mCtrl.mNode,channels=l_attrs, lock=True, visible=False, keyable=False) attributes.doSetLockHideKeyableAttr(mi_controlIK.mNode,channels=['sx','sy','sz','v'], lock=True, visible=False, keyable=False) except Exception,error: raise Exception,"Lock and hide fail! | {0}".format(error)
def build_old(self):#================================================================================ if not self._go.isShaped(): raise Exception,"%s.build_controls>>> needs shapes to build controls"%self._go._strShortName if not self._go.isRigSkeletonized(): raise Exception,"%s.build_controls>>> needs shapes to build controls"%self._go._strShortName """ __d_controlShapes__ = {'shape':['controlsFK','midIK','settings','hand'], 'pivot':['toe','heel','ball','inner','outer for shape in __d_controlShapes__['shape']: self._go.__dict__['mi_%s'%shape] = cgmMeta.validateObjArg(self._go._i_rigNull.msgList_getMessage('shape_%s'%shape),noneValid=False) log.info(self._go.__dict__['mi_%s'%shape] )""" ml_controlsFK = cgmMeta.validateObjListArg(self._go._i_rigNull.msgList_getMessage('shape_controlsFK'),cgmMeta.cgmObject) ml_segmentIK = cgmMeta.validateObjListArg(self._go._i_rigNull.msgList_getMessage('shape_segmentIK'),cgmMeta.cgmObject) #self._go._i_rigNull.msgList_connect(self._go._md_controlShapes['segmentIK'],'shape_segmentIK_%s'%i,"rigNull") l_segmentIKChains = [] ml_segmentIKChains = [] for i in range(50): buffer = self._go._i_rigNull.msgList_getMessage('shape_segmentIK_%s'%i) if buffer: l_segmentIKChains.append(buffer) ml_segmentIKChains.append(cgmMeta.validateObjListArg(buffer,cgmMeta.cgmObject)) else: break #mi_midIK = cgmMeta.validateObjArg(self._go._i_rigNull.getMessage('shape_midIK'),cgmMeta.cgmObject) mi_settings= cgmMeta.validateObjArg(self._go._i_rigNull.getMessage('shape_settings'),cgmMeta.cgmObject) ml_fkJoints = cgmMeta.validateObjListArg(self._go._i_rigNull.msgList_getMessage('fkJoints'),cgmMeta.cgmObject) mi_cap = cgmMeta.validateObjArg(self._go._i_rigNull.getMessage('shape_moduleCap'),cgmMeta.cgmObject) log.info("mi_settings: '%s'"%mi_settings.getShortName()) log.info("mi_cap: '%s'"%mi_cap.getShortName()) log.info("ml_fkJoints: %s"%[i_o.getShortName() for i_o in ml_fkJoints]) #>>>Make a few extra groups for storing controls and what not to in the deform group for grp in ['controlsFK','controlsIK']: i_dup = self._go._i_constrainNull.doDuplicateTransform(True) i_dup.parent = self._go._i_constrainNull.mNode i_dup.addAttr('cgmTypeModifier',grp,lock=True) i_dup.doName() self._go._i_constrainNull.connectChildNode(i_dup,grp,'owner') l_controlsAll = [] #================================================================== try:#>>>> FK Segments if len( ml_controlsFK )<3: raise Exception,"%s.build_controls>>> Must have at least three fk controls"%self._go._strShortName #for i,i_obj in enumerate(ml_controlsFK[1:]):#parent #i_obj.parent = ml_controlsFK[i].mNode ml_fkJoints[0].parent = self._go._i_constrainNull.controlsFK.mNode for i,i_obj in enumerate(ml_controlsFK): d_buffer = mControlFactory.registerControl(i_obj,shapeParentTo=ml_fkJoints[i],setRotateOrder=3, mirrorSide=self._go._str_mirrorDirection, mirrorAxis="translateX", makeAimable=True,typeModifier='fk',) i_obj = d_buffer['instance'] i_obj.axisAim = "%s+"%self._go._jointOrientation[0] i_obj.axisUp= "%s+"%self._go._jointOrientation[1] i_obj.axisOut= "%s+"%self._go._jointOrientation[2] i_obj.drawStyle = 6#Stick joint draw style cgmMeta.cgmAttr(i_obj,'radius',hidden=True) for i_obj in ml_controlsFK: i_obj.delete() #ml_controlsFK[0].masterGroup.parent = self._go._i_constrainNull.mNode self._go._i_rigNull.msgList_connect(ml_fkJoints,'controlsFK',"rigNull") l_controlsAll.extend(ml_fkJoints[:-1]) except Exception,error: log.error("%s.build_controls>>> Build fk fail!"%self._go._strShortName) raise Exception,error
def register( controlObject=None, #(mObject - None) -- The object to use as a control typeModifier=None, #(string - None) -- Tag for cgmTypeModifier for naming copyTransform=None, #(mObject - None) -- Object to copy the transform of for our control object copyPivot=None, #(mObject - None) -- Object to copy the pivot of for our control object shapeParentTo=None, #'(mObject - None) -- Object to shape parent our control curve to to use that transform useShape=None, #'(mObject - None) -- Object to use the curve shape of for our control setRotateOrder=None, #'(rotateOrder - None) -- Argument for a rotate order to set autoLockNHide=None, #'(bool - None) -- Try to set lock and hide mirrorAxis=None, #'(string - None) -- Mirror axis to set - using red9's setup terms mirrorSide=None, #'(string/int - None) -- Mirror side - using red9's setup terms makeMirrorable=True, #'(bool - True) -- Setup for mirrorability (using red9) -- implied by other mirror args addDynParentGroup=False, #'(False) -- Add a dynParent group setup addExtraGroups=False, #'(int - False) -- Number of nested extra groups desired addConstraintGroup=False, #'(bool - False) -- If a group just above the control is desired for consraining freezeAll=False, #'(bool - False) -- Freeze all transforms on the control object noFreeze=False, addSpacePivots=False, #'(int - False) -- Number of space pivots to generate and connect controlType=None, #'(string - None) -- Tag for cgmType aim=None, #'(string/int - None) -- aim axis to use up=None, #'(string/int - None) -- up axis to use out=None, #'(string/int - None) -- out axis to use makeAimable=None, #'(mObject - False) -- Make object aimable -- implied by aim/up/out): **kws): _str_func = 'register' """ [{'step':'validate','call':self._validate}, {'step':'Copy Transform','call':self._copyTransform}, {'step':'Shape Parent','call':self._shapeParent}, {'step':'Copy Pivot','call':self._copyPivot}, {'step':'Naming','call':self._naming}, {'step':'Aim Setup','call':self._aimSetup}, {'step':'Rotate Order','call':self._rotateOrder}, {'step':'Initial Freeze','call':self._initialFreeze}, {'step':'Groups Setup','call':self._groupsSetup}, {'step':'Space Pivot','call':self._spacePivots}, {'step':'Mirror Setup','call':self._mirrorSetup}, {'step':'Freeze','call':self._freeze}, {'step':'Mirror Attribute Bridges','call':self._mirrorAttributeBridges_}, {'step':'lock N Hide','call':self._lockNHide}, {'step':'Return build','call':self._returnBuild}] """ try: #Validate ================================================================================================ mi_control = cgmMeta.validateObjArg(controlObject, 'cgmControl', setClass=True) str_mirrorAxis = VALID.stringArg(mirrorAxis, calledFrom=_str_func) str_mirrorSide = cgmGeneral.verify_mirrorSideArg( mirrorSide) #VALID.stringArg(mirrorSide,calledFrom = _str_func) b_makeMirrorable = VALID.boolArg(makeMirrorable, calledFrom=_str_func) _addMirrorAttributeBridges = kws.get('addMirrorAttributeBridges', False) addForwardBack = kws.get('addForwardBack', False) if _addMirrorAttributeBridges: if type(_addMirrorAttributeBridges) not in [list, tuple]: raise ValueError, "[Bad addMirrorAttributeBridge arg]{arg: %s}" % _addMirrorAttributeBridge for i, l in enumerate(_addMirrorAttributeBridges): if type(l) not in [list, tuple]: raise ValueError, "[Bad addMirrorAttributeBridge arg: %s]{arg: %s}" % ( i, l) # Running lists ------------------------------------------------------------------------------------------ ml_groups = [] #Holder for groups ml_constraintGroups = [] ml_spacePivots = [] #Copy Transform ================================================================================================ if copyTransform is not None: mTarget = cgmMeta.validateObjArg(copyTransform, 'cgmObject', noneValid=True) if not mTarget: raise StandardError, "Failed to find suitable copyTransform object: '%s" % copyTransform #Need to move this to default cgmNode stuff mBuffer = mi_control i_newTransform = cgmMeta.cgmObject( rigging.groupMeObject(mTarget.mNode, False)) for a in mc.listAttr(mi_control.mNode, userDefined=True): ATTR.copy_to(mi_control.mNode, a, i_newTransform.mNode) curves.parentShapeInPlace(i_newTransform.mNode, mi_control.mNode) #Parent shape i_newTransform.parent = mi_control.parent #Copy parent mi_control = cgmMeta.asMeta(i_newTransform, 'cgmControl', setClass=True) mc.delete(mBuffer.mNode) #ShapeParent ================================================================================================ if shapeParentTo: i_target = cgmMeta.validateObjArg(shapeParentTo, 'cgmObject') CORERIG.shapeParent_in_place(i_target.mNode, mi_control.mNode) i_target = cgmMeta.asMeta(i_target, 'cgmControl', setClass=True) #mi_control.delete() mi_control = i_target #replace the control with the joint if useShape is not None: i_shape = cgmMeta.validateObjArg(useShape, cgmMeta.cgmObject, mayaType='nurbsCurve') curves.parentShapeInPlace(mi_control.mNode, i_shape.mNode) #Copy Pivot ============================================================================================ if copyPivot is not None: if issubclass(type(copyPivot), cgmMeta.cgmNode): i_target = copyPivot elif mc.objExists(copyPivot): i_target = cgmMeta.cgmObject(copyPivot) else: raise StandardError, "Failed to find suitable copyTransform object: '%s" % copyPivot #Need to move this to default cgmNode stuff mi_control.doCopyPivot(i_target.mNode) #Naming ============================================================================================ mi_control.addAttr('cgmType', 'controlAnim', lock=True) if typeModifier is not None: mi_control.addAttr('cgmTypeModifier', str(typeModifier), lock=True) mi_control.doName() #mi_control.doName(nameShapes=True) #Rotate Order ============================================================================================ _rotateOrder = False if setRotateOrder is not None: _rotateOrder = setRotateOrder elif controlType in __d_rotateOrderDefaults__.keys(): _rotateOrder = __d_rotateOrderDefaults__[controlType] elif mi_control.getAttr('cgmName') in __d_rotateOrderDefaults__.keys(): _rotateOrder = __d_rotateOrderDefaults__[mi_control.getAttr( 'cgmName')] else: log.debug("|{0}| >> Rotate order not set on: {1}".format( _str_func, mi_control.p_nameShort)) #Set it --------------------------------------------------------------- if _rotateOrder: mRotateOrder = VALID.simpleOrientation(_rotateOrder) #dictionary.validateRotateOrderString(_rotateOrder) mc.xform(mi_control.mNode, rotateOrder=mRotateOrder.p_string) #Initial Freeze ============================================================================================ if freezeAll: mc.makeIdentity(mi_control.mNode, apply=True, t=1, r=1, s=1, n=0) #Groups ============================================================================================ if addDynParentGroup or addSpacePivots or mi_control.getAttr( 'cgmName') == 'cog' or _addMirrorAttributeBridges: mi_control.addAttr('________________', attrType='int', keyable=False, hidden=False, lock=True) ATTR.reorder(mi_control.mNode, '________________', top=True) #Aim Setup ============================================================================================ if aim is not None or up is not None or makeAimable: mi_control._verifyAimable() #First our master group: i_masterGroup = (cgmMeta.asMeta(mi_control.doGroup(True), 'cgmObject', setClass=True)) i_masterGroup.doStore('cgmName', mi_control) i_masterGroup.addAttr('cgmTypeModifier', 'master', lock=True) i_masterGroup.doName() mi_control.connectChildNode(i_masterGroup, 'masterGroup', 'groupChild') if addDynParentGroup: i_dynGroup = (cgmMeta.cgmObject(mi_control.doGroup(True))) i_dynGroup = cgmRigMeta.cgmDynParentGroup(dynChild=mi_control, dynGroup=i_dynGroup) i_dynGroup.doName() """ i_zeroGroup = (cgmMeta.cgmObject(mi_control.doGroup(True))) i_zeroGroup.addAttr('cgmTypeModifier','zero',lock=True) i_zeroGroup.doName() mi_control.connectChildNode(i_zeroGroup,'zeroGroup','groupChild')""" if addExtraGroups: for i in range(addExtraGroups): i_group = (cgmMeta.asMeta(mi_control.doGroup(True), 'cgmObject', setClass=True)) if type( addExtraGroups ) == int and addExtraGroups > 1: #Add iterator if necessary i_group.addAttr('cgmIterator', str(i + 1), lock=True) i_group.doName() ml_groups.append(i_group) mi_control.msgList_connect("extraGroups", ml_groups, 'groupChild') if addConstraintGroup: #ConstraintGroups i_constraintGroup = (cgmMeta.asMeta(mi_control.doGroup(True), 'cgmObject', setClass=True)) i_constraintGroup.addAttr('cgmTypeModifier', 'constraint', lock=True) i_constraintGroup.doName() ml_constraintGroups.append(i_constraintGroup) mi_control.connectChildNode(i_constraintGroup, 'constraintGroup', 'groupChild') #Space Pivot ============================================================================================ if addSpacePivots: parent = mi_control.getMessage('masterGroup')[0] for i in range(int(addSpacePivots)): #i_pivot = rUtils.create_spaceLocatorForObject(mi_control.mNode,parent) i_pivot = SPACEPIVOTS.create(mi_control.mNode, parent) ml_spacePivots.append(i_pivot) #log.info("spacePivot created: {0}".format(i_pivot.p_nameShort)) #Mirror Setup ============================================================================================ if str_mirrorSide is not None or b_makeMirrorable: for mObj in [mi_control] + ml_spacePivots: mi_control._verifyMirrorable() l_enum = cgmMeta.cgmAttr(mi_control, 'mirrorSide').p_enum if str_mirrorSide in l_enum: #log.debug("|{0}| >> Rotate order not set on: {1}".format(_str_func,mi_control.p_nameShort)) #log.debug("%s >> %s >> found in : %s"%(_str_funcCombined, "mirrorSetup", l_enum)) mi_control.mirrorSide = l_enum.index(str_mirrorSide) if str_mirrorAxis: mi_control.mirrorAxis = str_mirrorAxis for mObj in mi_control.msgList_get('spacePivots'): mObj._verifyMirrorable() mi_control.doConnectOut('mirrorAxis', mObj.mNode + '.mirrorAxis') mi_control.doConnectOut('mirrorSide', mObj.mNode + '.mirrorSide') #cgmMeta.cgmAttr(mObj,'mirrorSide').doConnectIn(mi_control,'mirrorSide') #cgmMeta.cgmAttr(mi_control,'mirrorAxis').doCopyTo(mObj,connectTargetToSource = 1) #ATTR.connect(mObj.mNode + '.mirrorAxis',"{0}.mirrorAxis".format(mi_control.mNode)) #ATTR.connect(mObj.mNode + 'mirrorSide',"{0}.mirrorSide".format(mi_control.mNode)) #Freeze ============================================================================================ if not shapeParentTo and noFreeze is not True: if not freezeAll: if mi_control.getAttr( 'cgmName' ) == 'cog' or controlType in __l_fullFreezeTypes__: mc.makeIdentity(mi_control.mNode, apply=True, t=1, r=1, s=1, n=0) else: mc.makeIdentity(mi_control.mNode, apply=True, t=1, r=0, s=1, n=0) else: mc.makeIdentity(mi_control.mNode, apply=True, t=1, r=1, s=1, n=0) #Mirror attriubte Bridges ========================================================================== if addForwardBack: mPlug_forwardBackDriver = cgmMeta.cgmAttr(mi_control, "forwardBack", attrType='float', keyable=True) try: mPlug_forwardBackDriven = cgmMeta.validateAttrArg( [mi_control, addForwardBack])['mi_plug'] except Exception, error: raise StandardError, "push pull driver | %s" % (error) if str_mirrorSide.lower() == 'right': arg_forwardBack = "%s = -%s" % ( mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) else: arg_forwardBack = "%s = %s" % ( mPlug_forwardBackDriven.p_combinedShortName, mPlug_forwardBackDriver.p_combinedShortName) mPlug_forwardBackDriven.p_locked = True mPlug_forwardBackDriven.p_hidden = True mPlug_forwardBackDriven.p_keyable = False NodeF.argsToNodes(arg_forwardBack).doBuild() if _addMirrorAttributeBridges: for l_bridge in _addMirrorAttributeBridges: _attrName = VALID.stringArg(l_bridge[0]) _attrToBridge = VALID.stringArg(l_bridge[1]) if not mi_control.hasAttr(_attrToBridge): raise StandardError, "['%s' lacks the bridge attr '%s']" % ( mi_control.p_nameShort, _attrToBridge) mPlug_attrBridgeDriver = cgmMeta.cgmAttr(mi_control, _attrName, attrType='float', keyable=True) try: mPlug_attrBridgeDriven = cgmMeta.validateAttrArg( [mi_control, _attrToBridge])['mi_plug'] except Exception, error: raise StandardError, "[validate control attribute bridge attr]{%s}" % ( error) if str_mirrorSide.lower() == 'right': arg_attributeBridge = "%s = -%s" % ( mPlug_attrBridgeDriven.p_combinedShortName, mPlug_attrBridgeDriver.p_combinedShortName) else: arg_attributeBridge = "%s = %s" % ( mPlug_attrBridgeDriven.p_combinedShortName, mPlug_attrBridgeDriver.p_combinedShortName) mPlug_attrBridgeDriven.p_locked = True mPlug_attrBridgeDriven.p_hidden = True mPlug_attrBridgeDriven.p_keyable = False NodeF.argsToNodes(arg_attributeBridge).doBuild()
ml_ikJoints.append(i_new) except Exception,error: log.error("build_rigSkeleton>>Build ik joints fail!") raise Exception,error try:#mirror stuff if self._go._str_mirrorDirection == 'Right':#mirror control setup self._go.mirrorChainOrientation(ml_fkJoints)#New ml_fkDriverJoints = self._go.build_handleChain('fkAttach','fkAttachJoints') self._go.connect_toRigGutsVis(ml_fkDriverJoints,vis = True)#connect to guts vis switches for i,mJoint in enumerate(ml_fkJoints): log.info("Mirror connect: %s | %s"%(i,mJoint.p_nameShort)) mJoint.connectChildNode(ml_fkDriverJoints[i],"attachJoint","rootJoint") cgmMeta.cgmAttr(mJoint.mNode,"rotateOrder").doConnectOut("%s.rotateOrder"%ml_fkDriverJoints[i].mNode) except Exception,error: raise Exception,"Failed to create mirror chain | %s"%error try:#>>> Store em all to our instance #===================================================================== self._go._i_rigNull.msgList_connect(self._go._l_skinJoints,'skinJoints',"rigNull")#push back to reset self._go._i_rigNull.msgList_connect(ml_fkJoints,'fkJoints',"rigNull") self._go._i_rigNull.msgList_connect(ml_blendJoints,'blendJoints',"rigNull") self._go._i_rigNull.msgList_connect(ml_ikJoints,'ikJoints',"rigNull") except Exception,error: log.error("build_finger>>StoreJoints fail!") raise Exception,error try:#>>> Connect vis
def build_FKIK(goInstance = None): class fncWrap(modUtils.rigStep): def __init__(self,goInstance = None): super(fncWrap, self).__init__(goInstance) self._str_funcName = 'build_FKIK(%s)'%self.d_kws['goInstance']._strShortName self.__dataBind__() self.l_funcSteps = [{'step':'Build NOT BROKEN UP YET','call':self.build}] #================================================================= def build(self):#================================================================================ #>>>Get data ml_controlsFK = self._go._i_rigNull.msgList_get('controlsFK') ml_rigJoints = self._go._i_rigNull.msgList_get('rigJoints') ml_blendJoints = self._go._i_rigNull.msgList_get('blendJoints') ml_fkJoints = self._go._i_rigNull.msgList_get('fkJoints') ml_ikJoints = self._go._i_rigNull.msgList_get('ikJoints') mi_settings = self._go._i_rigNull.settings aimVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[0]) upVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[1]) outVector = dictionary.stringToVectorDict.get("%s+"%self._go._jointOrientation[2]) mi_controlIK = self._go._i_rigNull.controlIK for chain in [ml_ikJoints,ml_blendJoints]: chain[0].parent = self._go._i_constrainNull.mNode self.ml_fkAttachJoints = [] if self._go._str_mirrorDirection == 'Right':#mirror control setup self.ml_fkAttachJoints = self._go._i_rigNull.msgList_get('fkAttachJoints') #for more stable ik, we're gonna lock off the lower channels degrees of freedom for chain in [ml_ikJoints]: for axis in self._go._jointOrientation[:2]: log.info(axis) for i_j in chain[1:]: attributes.doSetAttr(i_j.mNode,"jointType%s"%axis.upper(),1) #============================================================= try:#>>>Finger Root Control and root follow for attr in ['tx','ty','tz']:#Unlock a few things i_attr = cgmMeta.cgmAttr(ml_fkJoints[0],attr) i_attr.p_keyable = True i_attr.p_locked = False #we have to rebuild a little so that we can use our fk base control both for fk and ik #Create a orient group that tracks the module constrain null if self._go._partType == 'finger': buffer_fkGroup = ml_fkJoints[0].parent i_orientGroup = cgmMeta.asMeta( ml_fkJoints[1].doGroup(True),'cgmObject',setClass=True ) i_orientGroup.addAttr('cgmTypeModifier','toOrient') i_orientGroup.doName() #constrain it str_orConst = mc.orientConstraint(self._go._i_constrainNull.mNode,i_orientGroup.mNode,maintainOffset = True)[0] self._go._i_constrainNull.connectChildNode(i_orientGroup,'fingerRoot','owner')#Connect i_orientGroup.parent = self._go._i_constrainNull.mNode attributes.doSetLockHideKeyableAttr(i_orientGroup.mNode)#lockNHide i_parentGroup = cgmMeta.asMeta( i_orientGroup.doGroup(True),'cgmObject',setClass=True ) i_parentGroup.addAttr('cgmTypeModifier','toParent') i_parentGroup.doName() str_prntConst = mc.parentConstraint( ml_fkJoints[0].mNode,i_parentGroup.mNode,maintainOffset = True)[0] i_parentGroup.parent = buffer_fkGroup #attributes.doSetLockHideKeyableAttr(ml_fkJoints[0].mNode,lock = False, visible=True, keyable=True, channels=['tx','ty','tz']) #Constrain ik base to fk base mc.orientConstraint(ml_fkJoints[0].mNode,ml_ikJoints[0].mNode,maintainOffset = True) ml_fkJoints[0].parent = self._go._i_constrainNull.mNode except Exception,error: raise Exception,"%s.build_FKIK>>> Finger Root Control error: %s"%(self._go._strShortName,error) #============================================================= try:#>>>FK Length connector if self._go._partType == 'finger': ml_fkToDo = ml_fkJoints[1:-1] else:#thumb ml_fkToDo = ml_fkJoints[:-1] log.info([i_jnt.getShortName() for i_jnt in ml_fkToDo]) for i,i_jnt in enumerate(ml_fkToDo): rUtils.addJointLengthAttr(i_jnt,orientation=self._go._jointOrientation) #IK rUtils.addJointLengthAttr(ml_ikJoints[-2],[mi_controlIK,'length'],orientation=self._go._jointOrientation) except Exception,error: raise Exception,"%s.build_FKIK>>> fk length connect error: %s"%(self._go._strShortName,error) #============================================================= try:#>>>IK No Flip Chain self._go._verify_moduleMasterScale() mPlug_masterScale = self._go._get_masterScalePlug() ml_ikNoFlipJoints = ml_ikJoints#Link if self._go._partType == 'finger': mi_ikStart = ml_ikNoFlipJoints[1] mi_ikEnd = ml_ikNoFlipJoints[-2] mi_constraintGroup = self._go._i_constrainNull.fingerRoot else:#thumb mi_ikStart = ml_ikNoFlipJoints[0] mi_ikEnd = ml_ikNoFlipJoints[-2] mi_constraintGroup = self._go._i_constrainNull i_tmpLoc = mi_ikEnd.doLoc()#loc the first real i_tmpLoc.parent = mi_controlIK.mNode str_twistGroup = i_tmpLoc.doGroup(True) f_dist = distance.returnDistanceBetweenPoints(mi_ikStart.getPosition(),ml_ikNoFlipJoints[-1].getPosition()) #Measure first finger joint to end f_dist = f_dist * 1.5 if self._go._direction == 'left':#if right, rotate the pivots i_tmpLoc.__setattr__('t%s'%self._go._jointOrientation[2],-f_dist) else: i_tmpLoc.__setattr__('t%s'%self._go._jointOrientation[2],f_dist) #Create no flip finger IK d_ankleNoFlipReturn = rUtils.IKHandle_create(mi_ikStart.mNode,mi_ikEnd.mNode,lockMid=False, nameSuffix = 'noFlip',rpHandle=True,controlObject=mi_controlIK,addLengthMulti=True, globalScaleAttr=mPlug_masterScale.p_combinedName, stretch='translate',moduleInstance=self._go._mi_module) mi_fingerIKHandleNF = d_ankleNoFlipReturn['mi_handle'] ml_distHandlesNF = d_ankleNoFlipReturn['ml_distHandles'] mi_rpHandleNF = d_ankleNoFlipReturn['mi_rpHandle'] #No Flip RP handle Snap.go(mi_rpHandleNF,i_tmpLoc.mNode,True)#Snape to hand control, then move it out... i_tmpLoc.delete() mi_rpHandleNF.doCopyNameTagsFromObject(self._go._mi_module.mNode, ignore = ['cgmName','cgmType']) mi_rpHandleNF.addAttr('cgmName','%sPoleVector'%self._go._partName, attrType = 'string') mi_rpHandleNF.addAttr('cgmTypeModifier','noFlip') mi_rpHandleNF.doName() #spin #========================================================================================= #Make a spin group i_spinGroup = cgmMeta.cgmObject(str_twistGroup) i_spinGroup.doCopyNameTagsFromObject(self._go._mi_module.mNode, ignore = ['cgmName','cgmType']) i_spinGroup.addAttr('cgmName','%sNoFlipSpin'%self._go._partName) i_spinGroup.doName() i_spinGroup.doZeroGroup() mi_rpHandleNF.parent = i_spinGroup.mNode #Setup arg mPlug_fingerSpin = cgmMeta.cgmAttr(mi_controlIK,'fingerSpin') mPlug_fingerSpin.doConnectOut("%s.r%s"%(i_spinGroup.mNode,self._go._jointOrientation[0])) #>>>Parent IK handles mi_fingerIKHandleNF.parent = mi_controlIK.mNode#handle to control ml_distHandlesNF[-1].parent = mi_controlIK.mNode#handle to control ml_distHandlesNF[0].parent = mi_constraintGroup.mNode#start to root ml_distHandlesNF[1].parent = mi_constraintGroup.mNode#mid to root #>>> Fix our ik_handle twist at the end of all of the parenting rUtils.IKHandle_fixTwist(mi_fingerIKHandleNF)#Fix the twist except Exception,error: raise Exception,"%s.build_FKIK>>> IK No Flip error: %s"%(self._go._strShortName,error)
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())
i_dup.delete() #reparent if mi_parent: try: ml_targetJoints[0].parent = mi_parent except Exception, error: raise StandardError, "Failed to parent back %s" % error for i, i_jnt in enumerate(ml_targetJoints): for ii, i_c in enumerate(d_children[i_jnt]): #log.info("{0} | {1}".format(i,ii)) #log.info(i_c) log.debug("freezeJointOrientation>> parented '%s' back" % i_c.getShortName()) i_c.parent = i_jnt.mNode cgmMeta.cgmAttr(i_c, "inverseScale").doConnectIn("%s.scale" % i_jnt.mNode) #log.info('reparent') #log.info("{0}>> reparent: {1}".format(_str_funcName, "%0.3f seconds"%(time.time() - t1))) #t1 = time.time() return True def build_chain(posList=[], targetList=[], curve=None, axisAim='z+', axisUp='y+', worldUpAxis=[0, 1, 0], count=None, splitMode='curve', parent=False,
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
#Playing with constraing group for mid group targets = mc.ls(sl=True) reload(constraints) constraints.doPointAimConstraintObjectGroup(targets, 'spine_2_ik_anim', 0) from cgm.lib import logic logic.returnLocalAimDirection('spine_2_ik_anim', targets[-1]) distance.returnLocalAimDirection('spine_2_ik_anim', targets[-1]) #>>> Scale buffer #============================================================================ i_curve = cgmMeta.cgmObject('spine_splineIKCurve') i_dBuffer = i_curve.scaleBuffer for k in i_dBuffer.d_indexToAttr.keys(): attrName = 'spineMult_%s' % k cgmMeta.cgmAttr(i_dBuffer.mNode, 'scaleMult_%s' % k).doCopyTo('cog_anim', attrName, connectSourceToTarget=True) cgmMeta.cgmAttr('cog_anim', attrName, keyable=True, lock=False) i_rig.d_controlShapes rig_segmentFK(i_rig.d_controlShapes) Rig.registerControl('pelvis_anim') l_joints = mc.ls(sl=True) s = cgmMeta.cgmAttr('pelvis_surfaceJoint', 'scaleX') s.p_hidden = False curves.createControlCurve('semiSphere', 10, 'z-') attributes.doSetAttr('closestPointOnSurface1', 'inPostionX', 5) mc.setAttr('closestPointOnSurface1.inPostionX', 5) m1 = cgmPM.cgmModule(name='test') m1 = cgmMeta.cgmNode('spine_part') m1.setState('skeleton', forceNew=True)
class fncWrap(modUtils.rigStep): def __init__(self, goInstance=None): super(fncWrap, self).__init__(goInstance) self._str_funcName = 'build_controls(%s)' % self._go._strShortName self.__dataBind__() self.l_funcSteps = [{ 'step': 'Verify', 'call': self.verify }, { 'step': 'Control Groups', 'call': self.build_groups }, { 'step': 'FK', 'call': self.build_fk }, { 'step': 'Connections', 'call': self.build_connections }] #================================================================= def verify(self): self.ml_controlsFK = cgmMeta.validateObjListArg( self._go._i_rigNull.getMessage('shape_clavicle'), cgmMeta.cgmObject, noneValid=False) self.ml_fkJoints = cgmMeta.validateObjListArg( self._go._i_rigNull.msgList_getMessage('fkJoints'), cgmMeta.cgmObject, noneValid=False) if len(self.ml_controlsFK) != 1: raise Exception, "Must have at least one fk control" self.ml_controlsAll = [] def build_groups(self): for grp in ['controlsFK']: i_dup = self._go._i_constrainNull.doDuplicateTransform(True) i_dup.parent = self._go._i_constrainNull.mNode i_dup.addAttr('cgmTypeModifier', grp, lock=True) i_dup.doName() self._go._i_constrainNull.connectChildNode(i_dup, grp, 'owner') def build_fk(self): #>>>> FK Segments ml_fkJoints = self.ml_fkJoints ml_controlsFK = self.ml_controlsFK ml_fkJoints[0].parent = self._go._i_constrainNull.controlsFK.mNode i_obj = ml_controlsFK[0] log.info(" %s controlFK : %s" % (self._str_reportStart, i_obj.p_nameShort)) log.info(" %s controlFK : %s" % (self._str_reportStart, ml_fkJoints[0].p_nameShort)) try: d_buffer = mControlFactory.registerControl( i_obj.mNode, shapeParentTo=ml_fkJoints[0].mNode, mirrorSide=self._go._str_mirrorDirection, mirrorAxis="translateX", makeAimable=True, typeModifier='fk') except Exception, error: raise Exception, "Register control | %s" % error try: i_obj = d_buffer['instance'] i_obj.axisAim = "%s+" % self._go._jointOrientation[0] i_obj.axisUp = "%s+" % self._go._jointOrientation[1] i_obj.axisOut = "%s+" % self._go._jointOrientation[2] try: i_obj.drawStyle = 2 #Stick joint draw style except: self.log_error("{0} Failed to set drawStyle".format( i_obj.p_nameShort)) cgmMeta.cgmAttr(i_obj, 'radius', hidden=True) except Exception, error: raise Exception, "Failed to set attrs | %s" % error
#============================================================================================== #>> cgmMeta.cgmAttr #============================================================================================== from cgm.core import cgm_Meta as cgmMeta import maya.cmds as mc #>>Intro ========================================================================= #First we're gonna make some objects try:mi_baseObj = cgmMeta.cgmObject('baseObj')#...if it exists, initialize, except, make... except:mi_baseObj = cgmMeta.cgmObject(mc.spaceLocator(p = [5,0,0],name = 'baseObj')[0]) try:mi_catchObj = cgmMeta.cgmObject('catchObj')#...if it exists, initialize, except, make... except:mi_catchObj = cgmMeta.cgmObject(mc.spaceLocator(p = [-5,0,0],name = 'catchObj')[0]) #>> Let's start with existing attributes mi_baseObj.select() mPlug_t = cgmMeta.cgmAttr(mi_baseObj,'translate') mPlug_tx = cgmMeta.cgmAttr(mi_baseObj,'tx') #Getting attribte names as we like mPlug_tx.p_combinedName mPlug_tx.p_combinedShortName mPlug_tx.p_nameNice mPlug_t.p_hidden = True #...Hide something mPlug_tx.p_hidden = False #...Unhide 1 mPlug_t.p_hidden = False #...unHide all mPlug_t.p_keyable = 1 #...unHide all mPlug_t.p_locked = 1 #...lock all mPlug_t.p_locked = False #...unlock all #>> Name alias mPlug_tx.p_nameAlias#...Nothing
NodeF.argsToNodes(arg_attributeBridge).doBuild() #lock N Hide ============================================================================================ if mi_control.hasAttr('visibility'): mi_control.visibility = True if autoLockNHide: if mi_control.hasAttr('cgmTypeModifier'): if mi_control.cgmTypeModifier.lower() == 'fk': ATTR.set_standardFlags( mi_control.mNode, attrs=['tx', 'ty', 'tz', 'sx', 'sy', 'sz']) if mi_control.cgmName.lower() == 'cog': ATTR.set_standardFlags(mi_control.mNode, attrs=['sx', 'sy', 'sz']) cgmMeta.cgmAttr(mi_control, 'visibility', lock=True, hidden=True) if mi_control.hasAttr('cgmIterator'): ATTR.set_standardFlags(mi_control.mNode, attrs=['cgmIterator']) str_base = mi_control.p_nameBase for i, mShape in enumerate(mi_control.getShapes(asMeta=True)): mShape.rename("{0}_shape_{1}".format(str_base, i)) #mShape.doName() #return ============================================================================================ #pprint.pprint(vars()) return { 'mObj': mi_control, 'instance': mi_control,
def attach_toShape(obj=None, targetShape=None, connectBy='parent', driver=None): """ :parameters: obj - transform to attach targetShape(str) - Curve, Nurbs, Mesh connectBy(str) parent - parent to track transform parentGroup - parent to group and have group follow conPoint - just point contraint conPointGroup - pointConstrain group conPointOrientGroup - point/orient constrain group conParentGroup - parent Constrain group None - just the tracker nodes :returns: resulting dat """ try: _str_func = 'attach_toShape' mObj = cgmMeta.validateObjArg(obj, 'cgmObject') mDriver = cgmMeta.validateObjArg(driver, 'cgmObject', noneValid=True) targetShape = VALID.mNodeString(targetShape) log.debug("targetShape: {0}".format(targetShape)) #Get our data... d_closest = DIST.get_closest_point_data(targetShape, mObj.mNode) log.debug("|{0}| >> jnt: {1} | {2}".format(_str_func, mObj.mNode, d_closest)) #pprint.pprint(d_closest) md_res = {} if d_closest['type'] in ['mesh', 'nurbsSurface']: log.debug("|{0}| >> Follicle mode...".format(_str_func)) _shape = SHAPES.get_nonintermediate(d_closest['shape']) log.debug("_shape: {0}".format(_shape)) l_follicleInfo = NODES.createFollicleOnMesh(_shape) i_follicleTrans = cgmMeta.asMeta(l_follicleInfo[1], 'cgmObject', setClass=True) i_follicleShape = cgmMeta.asMeta(l_follicleInfo[0], 'cgmNode') #> Name... i_follicleTrans.doStore('cgmName', mObj) i_follicleTrans.doStore('cgmTypeModifier', 'surfaceTrack') i_follicleTrans.doName() _trackTransform = i_follicleTrans.mNode #>Set follicle value... if d_closest['type'] == 'mesh': i_follicleShape.parameterU = d_closest['parameterU'] i_follicleShape.parameterV = d_closest['parameterV'] else: i_follicleShape.parameterU = d_closest['normalizedU'] i_follicleShape.parameterV = d_closest['normalizedV'] _res = [i_follicleTrans.mNode, i_follicleShape.mNode] md_res['mFollicle'] = i_follicleTrans md_res['mFollicleShape'] = i_follicleShape else: log.debug("|{0}| >> Curve mode...".format(_str_func)) #d_returnBuff = distance.returnNearestPointOnCurveInfo(obj,crv) _shape = SHAPES.get_nonintermediate(d_closest['shape']) mPOCI = cgmMeta.cgmNode(nodeType='pointOnCurveInfo') mc.connectAttr("%s.worldSpace" % _shape, "%s.inputCurve" % mPOCI.mNode) mPOCI.parameter = d_closest['parameter'] mTrack = mObj.doCreateAt() mTrack.doStore('cgmName', mObj) mTrack.doStore('cgmType', 'surfaceTrack') mTrack.doName() _trackTransform = mTrack.mNode mc.connectAttr("%s.position" % mPOCI.mNode, "%s.t" % _trackTransform) mPOCI.doStore('cgmName', mObj) mPOCI.doName() _res = [mTrack.mNode, mPOCI.mNode] if mDriver: if d_closest['type'] in ['nurbsSurface']: mFollicle = i_follicleTrans mFollShape = i_follicleShape minU = ATTR.get(_shape, 'minValueU') maxU = ATTR.get(_shape, 'maxValueU') minV = ATTR.get(_shape, 'minValueV') maxV = ATTR.get(_shape, 'maxValueV') mDriverLoc = mDriver.doLoc() mc.pointConstraint(mDriver.mNode, mDriverLoc.mNode) #mLoc = mObj.doLoc() str_baseName = "{0}_to_{1}".format(mDriver.p_nameBase, mObj.p_nameBase) mPlug_normalizedU = cgmMeta.cgmAttr( mDriverLoc.mNode, "{0}_normalizedU".format(str_baseName), attrType='float', hidden=False, lock=False) mPlug_sumU = cgmMeta.cgmAttr(mDriverLoc.mNode, "{0}_sumU".format(str_baseName), attrType='float', hidden=False, lock=False) mPlug_normalizedV = cgmMeta.cgmAttr( mDriverLoc.mNode, "{0}_normalizedV".format(str_baseName), attrType='float', hidden=False, lock=False) mPlug_sumV = cgmMeta.cgmAttr(mDriverLoc.mNode, "{0}_sumV".format(str_baseName), attrType='float', hidden=False, lock=False) #res_closest = DIST.create_closest_point_node(mLoc.mNode, mCrv_reparam.mNode,True) log.debug("|{0}| >> Closest info {1}".format(_str_func, _res)) srfNode = mc.createNode('closestPointOnSurface') mc.connectAttr("%s.worldSpace[0]" % _shape, "%s.inputSurface" % srfNode) mc.connectAttr("%s.translate" % mDriverLoc.mNode, "%s.inPosition" % srfNode) #mc.connectAttr("%s.position" % srfNode, "%s.translate" % mLoc.mNode, f=True) #mClosestPoint = cgmMeta.validateObjArg(srfNode,setClass=True) #mClosestPoint.doStore('cgmName',mObj) #mClosestPoint.doName() log.debug("|{0}| >> paramU {1}.parameterU | {2}".format( _str_func, srfNode, ATTR.get(srfNode, 'parameterU'))) log.debug("|{0}| >> paramV {1}.parameterV | {2}".format( _str_func, srfNode, ATTR.get(srfNode, 'parameterV'))) l_argBuild = [] mPlug_uSize = cgmMeta.cgmAttr(mDriverLoc.mNode, "{0}_uSize".format(str_baseName), attrType='float', hidden=False, lock=False) mPlug_vSize = cgmMeta.cgmAttr(mDriverLoc.mNode, "{0}_vSize".format(str_baseName), attrType='float', hidden=False, lock=False) l_argBuild.append("{0} = {1} - {2}".format( mPlug_vSize.p_combinedName, maxV, minV)) l_argBuild.append("{0} = {1} - {2}".format( mPlug_uSize.p_combinedName, maxU, minU)) l_argBuild.append("{0} = {1} + {2}.parameterU".format( mPlug_sumU.p_combinedName, minU, srfNode)) l_argBuild.append("{0} = {1} / {2}".format( mPlug_normalizedU.p_combinedName, mPlug_sumU.p_combinedName, mPlug_uSize.p_combinedName)) l_argBuild.append("{0} = {1} + {2}.parameterV".format( mPlug_sumV.p_combinedName, minV, srfNode)) l_argBuild.append("{0} = {1} / {2}".format( mPlug_normalizedV.p_combinedName, mPlug_sumV.p_combinedName, mPlug_vSize.p_combinedName)) for arg in l_argBuild: log.debug("|{0}| >> Building arg: {1}".format( _str_func, arg)) NODEFACTORY.argsToNodes(arg).doBuild() ATTR.connect(mPlug_normalizedU.p_combinedShortName, '{0}.parameterU'.format(mFollShape.mNode)) ATTR.connect(mPlug_normalizedV.p_combinedShortName, '{0}.parameterV'.format(mFollShape.mNode)) md_res['mDriverLoc'] = mDriverLoc elif d_closest['type'] in ['curve', 'nurbsCurve']: mDriverLoc = mDriver.doLoc() mc.pointConstraint(mDriver.mNode, mDriverLoc.mNode) _resClosest = DIST.create_closest_point_node( mDriverLoc.mNode, _shape, True) _loc = _resClosest[0] md_res['mDriverLoc'] = mDriverLoc md_res['mDrivenLoc'] = cgmMeta.asMeta(_loc) md_res['mTrack'] = mTrack else: log.warning( cgmGEN.logString_msg( _str_func, "Shape type not currently supported for driver setup. Type: {0}" .format(d_closest['type']))) #if connectBy is None: #return _res if connectBy == 'parent': mObj.p_parent = _trackTransform elif connectBy == 'conPoint': mc.pointConstraint(_trackTransform, mObj.mNode, maintainOffset=True) elif connectBy == 'conParent': mc.parentConstraint(_trackTransform, mObj.mNode, maintainOffset=True) elif connectBy == 'parentGroup': mGroup = mObj.doGroup(asMeta=True) #_grp = TRANS.group_me(obj,True) #TRANS.parent_set(_grp,_trackTransform) mGroup.p_parent = _trackTransform _res = _res + [mGroup.mNode] elif connectBy == 'conPointGroup': mLoc = mObj.doLoc() mLoc.p_parent = _trackTransform mGroup = mObj.doGroup(asMeta=True) mc.pointConstraint(mLoc.mNode, mGroup.mNode) _res = _res + [mGroup.mNode] elif connectBy == 'conPointOrientGroup': mLoc = mObj.doLoc() mLoc.p_parent = _trackTransform mGroup = mObj.doGroup(asMeta=True) mc.pointConstraint(mLoc.mNode, mGroup.mNode) mc.orientConstraint(mLoc.mNode, mGroup.mNode) _res = _res + [mGroup.mNode] elif connectBy == 'conParentGroup': mLoc = mObj.doLoc() mLoc.p_parent = _trackTransform mGroup = mObj.doGroup(asMeta=True) mc.parentConstraint(mLoc.mNode, mGroup.mNode) _res = _res + [mGroup.mNode] elif connectBy is None: pass else: raise NotImplementedError, "|{0}| >>invalid connectBy: {1}".format( _str_func, connectBy) if md_res: return _res, md_res return _res #pprint.pprint(vars()) except Exception, err: cgmGEN.cgmExceptCB(Exception, err)
def create(obj,parentTo = False): """ Create a spacePivot from a given object :parameters: *a(varied): - Uses validate_arg :returns mSpacePivot(metaList) """ _str_func = 'create' #....inital... i_obj = cgmMeta.validateObjArg(obj,cgmMeta.cgmObject,noneValid=False) i_parent = cgmMeta.validateObjArg(parentTo,cgmMeta.cgmObject,noneValid=True) bbSize = DIST.get_bb_size(i_obj.mNode) size = max(bbSize) #>>>Create #==================================================== #CURVES.create_controlCurve(i_obj.mNode,'jack') i_control = cgmMeta.asMeta(CURVES.create_controlCurve(i_obj.mNode,'jack',sizeMode='guess')[0],'cgmObject',setClass=True) log.debug(i_control) try:l_color = curves.returnColorsFromCurve(i_obj.mNode) except Exception,error:raise Exception,"color | %s"%(error) log.debug("l_color: %s"%l_color) curves.setColorByIndex(i_control.mNode,l_color[0]) #>>>Snap and Lock #==================================================== #Snap.go(i_control,i_obj.mNode,move=True, orient = True) #>>>Copy Transform #==================================================== i_newTransform = i_obj.doCreateAt() #Need to move this to default cgmNode stuff mBuffer = i_control i_newTransform.doCopyNameTagsFromObject(i_control.mNode) curves.parentShapeInPlace(i_newTransform.mNode,i_control.mNode)#Parent shape i_newTransform.parent = mBuffer.parent#Copy parent i_control = i_newTransform mc.delete(mBuffer.mNode) #>>>Register #==================================================== #Attr i = ATTR.get_nextAvailableSequentialAttrIndex(i_obj.mNode,"pivot") str_pivotAttr = str("pivot_%s"%i) str_objName = str(i_obj.getShortName()) str_pivotName = str(i_control.getShortName()) #Build the network i_obj.addAttr(str_pivotAttr,enumName = 'off:lock:on', defaultValue = 2, value = 0, attrType = 'enum',keyable = False, hidden = False) i_control.overrideEnabled = 1 d_ret = NodeF.argsToNodes("%s.overrideVisibility = if %s.%s > 0"%(str_pivotName,str_objName,str_pivotAttr)).doBuild() log.debug(d_ret) d_ret = NodeF.argsToNodes("%s.overrideDisplayType = if %s.%s == 2:0 else 2"%(str_pivotName,str_objName,str_pivotAttr)).doBuild() for shape in mc.listRelatives(i_control.mNode,shapes=True,fullPath=True): log.debug(shape) mc.connectAttr("%s.overrideVisibility"%i_control.mNode,"%s.overrideVisibility"%shape,force=True) mc.connectAttr("%s.overrideDisplayType"%i_control.mNode,"%s.overrideDisplayType"%shape,force=True) #Vis #>>>Name stuff #==================================================== cgmMeta.cgmAttr(i_control,'visibility',lock=True,hidden=True) i_control = cgmMeta.validateObjArg(i_control,'cgmControl',setClass = True) i_control.doStore('cgmName',i_obj) i_control.addAttr('cgmType','controlAnim',lock=True) i_control.addAttr('cgmIterator',"%s"%i,lock=True) i_control.addAttr('cgmTypeModifier','spacePivot',lock=True) i_control.doName(nameShapes=True) i_control.addAttr('cgmAlias',(i_obj.getNameAlias()+'_pivot_%s'%i),lock=False) #Store on object #==================================================== i_obj.addAttr("spacePivots", attrType = 'message',lock=True) _l_spacePivots = i_obj.getMessage('spacePivots',True) or [] if i_control.getLongName() not in _l_spacePivots: #_l_spacePivots = i_obj.getMessage('spacePivots',True) #_l_spacePivots.append(i_control.mNode) i_obj.msgList_append('spacePivots',i_control,'controlTarget') log.debug("spacePivots: %s"%i_obj.msgList_get('spacePivots',asMeta = True)) #parent if i_parent: i_control.parent = i_parent.mNode i_constraintGroup = (cgmMeta.asMeta(i_control.doGroup(True),'cgmObject',setClass=True)) i_constraintGroup.addAttr('cgmTypeModifier','constraint',lock=True) i_constraintGroup.doName() i_control.connectChildNode(i_constraintGroup,'constraintGroup','groupChild') log.debug("constraintGroup: '%s'"%i_constraintGroup.getShortName()) #change to cgmControl i_control = cgmMeta.asMeta(i_control.mNode,'cgmControl', setClass=1) return i_control
def create_uvPickerNetworkBAK(target=None, name='iris', split=9): _str_func = 'create_uvPickerNetwork' log.debug("|{0}| >> ".format(_str_func) + '-' * 80) _d_values = { 9: [ [.999, .666], [.333, .666], [.666, .666], [.999, .333], [.333, .333], [.666, .333], [.999, .999], [.333, .999], [.666, .999], ] } l_dat = _d_values.get(split) if not l_dat: raise ValueError, "{0} | split {1} not supported".format( _str_func, split) if not target: target = mc.group(em=True, name='uvPickerDefault') md_pmas = {} for a in 'U', 'V': _a = '{0}{1}'.format(name, a) ATTR.add(target, _a, 'float', keyable=False, hidden=False) ATTR.set_hidden(target, _a, False) #if mc.objExists('%s_pma'%_iterBase): #mc.delete('%s_condNode'%_iterBase) mPMA = cgmMeta.cgmNode(name="{0}_pma".format(_iterBase), nodeType='plusMinusAverage') mPMA.operation = 1 md_pmas[a] = mPMA ATTR.add(target, name, 'enum', enumOptions=[str(i) for i in range(9)]) mAttr = cgmMeta.cgmAttr(target, name) #Pma nodes ------------------------------------------------- #Condition loop ---------------------------------------- #place 2d texture = number of rolls for i, vSet in enumerate(l_dat): _iterBase = "{0}_{1}".format(name, i) if mc.objExists('%s_condNode' % _iterBase): mc.delete('%s_condNode' % _iterBase) mNode = cgmMeta.cgmNode(name="{0}_condNode".format(_iterBase), nodeType='condition') mNode.secondTerm = i mNode.colorIfTrueR = vSet[0] mNode.colorIfTrueR = vSet[1] mNode.colorIfFalseR = 0 mNode.colorIfFalseG = 0 #attributes.doSetAttr(i_node.mNode,'colorIfTrueR',1) #attributes.doSetAttr(i_node.mNode,'colorIfFalseR',0) #i_node.colorIfTrueR = 1 #i_node.colorIfTrueR = 0 mAttr.doConnectOut('%s.firstTerm' % i_node.mNode) attributes.doConnectAttr('%s.outColorR' % i_node.mNode, '%s.%s' % (c, self.connectToAttr))