def __init__(self, name='mjEyelid', parent=None): Profiler.getInstance().push("Construct Eyelid Rig Component:" + name) super(mjEyelidComponentRig, self).__init__(name, parent) # ========= # Controls // Get the Guide Xfos data and create the final controllers, offset them if needed. # ========= # Inputs self.eyelidCtrlSpace = CtrlSpace('eyelid', parent=self.ctrlCmpGrp) self.eyeballLocator = Locator('eyeball', parent=self.ctrlCmpGrp) self.eyeballLocator.setShapeVisibility(False) self.eyelidUpVLocator = Locator('eyelid_Upv', parent=self.eyelidCtrlSpace) self.eyelidUpVLocator.setShapeVisibility(False) # Lid Sides self.lidMedialLocator = Locator('lid_Medial', parent=self.eyelidCtrlSpace) self.lidMedialLocator.setShapeVisibility(False) self.lidLateralLocator = Locator('lid_Lateral', parent=self.eyelidCtrlSpace) self.lidLateralLocator.setShapeVisibility(False) # Lid Upper self.lidUpCtrlSpace = CtrlSpace('lid_Up', parent=self.eyelidCtrlSpace) self.lidUpCtrl = Control('lid_Up', parent=self.lidUpCtrlSpace, shape="cube") self.lidUpCtrl.scalePoints(Vec3(0.05, 0.05, 0.05)) self.lidUpCtrl.lockTranslation(x=True, y=False, z=True) self.lidUpCtrl.setColor("yellow") self.lipUpMedialLocator = Locator('lid_Up_Medial', parent=self.eyelidCtrlSpace) self.lipUpMedialLocator.setShapeVisibility(False) self.lipUpLateralLocator = Locator('lid_Up_Lateral', parent=self.eyelidCtrlSpace) self.lipUpLateralLocator.setShapeVisibility(False) # Lid Lower self.lidLowCtrlSpace = CtrlSpace('lid_Low', parent=self.eyelidCtrlSpace) self.lidLowCtrl = Control('lid_Low', parent=self.lidLowCtrlSpace, shape="cube") self.lidLowCtrl.scalePoints(Vec3(0.05, 0.05, 0.05)) self.lidLowCtrl.lockTranslation(x=True, y=False, z=True) self.lidLowCtrl.setColor("yellow") self.lidLowMedialLocator = Locator('lid_Low_Medial', parent=self.eyelidCtrlSpace) self.lidLowMedialLocator.setShapeVisibility(False) self.lidLowLateralLocator = Locator('lid_Low_Lateral', parent=self.eyelidCtrlSpace) self.lidLowLateralLocator.setShapeVisibility(False) # Lid Attributes lidUp_AttrGrp = AttributeGroup("Eyelid_Settings", parent=self.lidUpCtrl) lidLow_AttrGrp = AttributeGroup("Eyelid_Settings", parent=self.lidLowCtrl) self.lidUp_OffsetInputAttr = BoolAttribute('Eyeball_Offset', value=True, parent=lidUp_AttrGrp) self.lidUp_FollowFactorInputAttr = ScalarAttribute( 'Eyeball_Follow_Factor', value=1.0, parent=lidUp_AttrGrp) self.lidUp_DebugInputAttr = BoolAttribute('DrawDebug', value=False, parent=lidUp_AttrGrp) self.lidUp_MedialBlinkInputAttr = ScalarAttribute( 'Medial_Blink_Factor', value=0.25, parent=lidUp_AttrGrp) self.lidUp_LateralBlinkInputAttr = ScalarAttribute( 'Lateral_Blink_Factor', value=0.65, parent=lidUp_AttrGrp) self.lidUp_DefCountInputAttr = IntegerAttribute('numDeformers', value=10, parent=lidUp_AttrGrp) self.lidLow_OffsetInputAttr = BoolAttribute('Eyeball_Offset', value=True, parent=lidLow_AttrGrp) self.lidLow_FollowFactorInputAttr = ScalarAttribute( 'Eyeball_Follow_Factor', value=0.8, parent=lidLow_AttrGrp) self.lidLow_DebugInputAttr = BoolAttribute('DrawDebug', value=False, parent=lidLow_AttrGrp) self.lidLow_MedialBlinkInputAttr = ScalarAttribute( 'Medial_Blink_Factor', value=0.25, parent=lidLow_AttrGrp) self.lidLow_LateralBlinkInputAttr = ScalarAttribute( 'Lateral_Blink_Factor', value=0.65, parent=lidLow_AttrGrp) self.lidLow_DefCountInputAttr = IntegerAttribute('numDeformers', value=10, parent=lidLow_AttrGrp) self.lidUp_DebugInputAttr.connect(self.drawDebugInputAttr) self.lidLow_DebugInputAttr.connect(self.drawDebugInputAttr) self.lidUp_DefCountInputAttr.connect(self.numUpDeformersInputAttr) self.lidLow_DefCountInputAttr.connect(self.numLowDeformersInputAttr) # ========== # Deformers # ========== deformersLayer = self.getOrCreateLayer('deformers') self.defCmpGrp = ComponentGroup(self.getName(), self, parent=deformersLayer) # Lid Sides lidMedialDef = Joint('lid_Medial', parent=self.defCmpGrp) lidMedialDef.setComponent(self) lidLateralDef = Joint('lid_Lateral', parent=self.defCmpGrp) lidLateralDef.setComponent(self) # Lid Up self.eyelidUpDef = [] self.eyelidUpOutputs = [] self.setNumUpDeformers(1) # Lid Low self.eyelidLowDef = [] self.eyelidLowOutputs = [] self.setNumLowDeformers(1) # ===================== # Create Component I/O # ===================== # Setup component Xfo I/O's self.eyelidUpOutput.setTarget(self.eyelidUpOutputs) self.eyelidLowOutput.setTarget(self.eyelidLowOutputs) # ============== # Constrain I/O # ============== # Constraint inputs self.headInputConstraint = PoseConstraint('_'.join([ self.eyelidCtrlSpace.getName(), 'To', self.headInputTgt.getName() ])) self.headInputConstraint.addConstrainer(self.headInputTgt) self.eyelidCtrlSpace.addConstraint(self.headInputConstraint) self.eyeballInputConstraint = PoseConstraint('_'.join([ self.eyeballLocator.getName(), 'To', self.eyeballInputTgt.getName() ])) self.eyeballInputConstraint.setMaintainOffset(True) self.eyeballInputConstraint.addConstrainer(self.eyeballInputTgt) self.eyeballLocator.addConstraint(self.eyeballInputConstraint) # =============== # Add Splice Ops # =============== # Add MultiPoseConstraint Joints Splice Op self.outputsToDeformersKLOp = KLOperator('Canvas_Eyelid_Side_Op', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(self.outputsToDeformersKLOp) # Add Att Inputs self.outputsToDeformersKLOp.setInput('drawDebug', self.drawDebugInputAttr) self.outputsToDeformersKLOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs self.outputsToDeformersKLOp.setInput('constrainers', [ self.lidMedialLocator, self.lidLateralLocator, ]) # Add Xfo Outputs self.outputsToDeformersKLOp.setOutput('constrainees', [ lidMedialDef, lidLateralDef, ]) # Add Lid Up Canvas Op self.lidUpCanvasOp = CanvasOperator( 'Canvas_Eyelid_Up_Op', 'MJCG.Solvers.mjEyelidConstraintSolver') self.addOperator(self.lidUpCanvasOp) # Add Attributes Inputs self.lidUpCanvasOp.setInput('drawDebug', self.lidUp_DebugInputAttr) self.lidUpCanvasOp.setInput('rigScale', self.rigScaleInputAttr) self.lidUpCanvasOp.setInput('Eyeball_Offset', self.lidUp_OffsetInputAttr) self.lidUpCanvasOp.setInput('Eyeball_Follow_Factor', self.lidUp_FollowFactorInputAttr) self.lidUpCanvasOp.setInput('Medial_Blink_Factor', self.lidUp_MedialBlinkInputAttr) self.lidUpCanvasOp.setInput('Lateral_Blink_Factor', self.lidUp_LateralBlinkInputAttr) self.lidUpCanvasOp.setInput('Deformer_Count', self.lidUp_DefCountInputAttr) # Add Xfo Inputs self.lidUpCanvasOp.setInput('Eye_Center', self.eyeballLocator) self.lidUpCanvasOp.setInput('Lid_Global', self.eyelidCtrlSpace) self.lidUpCanvasOp.setInput('Lid_UpV', self.eyelidUpVLocator) self.lidUpCanvasOp.setInput('Lid_Medial', self.lidMedialLocator) self.lidUpCanvasOp.setInput('Lid_MedialCen', self.lipUpMedialLocator) self.lidUpCanvasOp.setInput('Lid_Center_Ref', self.lidUpCtrlSpace) self.lidUpCanvasOp.setInput('Lid_Center_Ctrl', self.lidUpCtrl) self.lidUpCanvasOp.setInput('Lid_LateralCen', self.lipUpLateralLocator) self.lidUpCanvasOp.setInput('Lid_Lateral', self.lidLateralLocator) #Add Xfo Outputs self.lidUpCanvasOp.setOutput('result', self.eyelidUpDef) # Add Lid Low Canvas Op self.lidLowCanvasOp = CanvasOperator( 'Canvas_Eyelid_Low_Op', 'MJCG.Solvers.mjEyelidConstraintSolver') self.addOperator(self.lidLowCanvasOp) # Add Attributes Inputs self.lidLowCanvasOp.setInput('drawDebug', self.lidLow_DebugInputAttr) self.lidLowCanvasOp.setInput('rigScale', self.rigScaleInputAttr) self.lidLowCanvasOp.setInput('Eyeball_Offset', self.lidLow_OffsetInputAttr) self.lidLowCanvasOp.setInput('Eyeball_Follow_Factor', self.lidLow_FollowFactorInputAttr) self.lidLowCanvasOp.setInput('Medial_Blink_Factor', self.lidLow_MedialBlinkInputAttr) self.lidLowCanvasOp.setInput('Lateral_Blink_Factor', self.lidLow_LateralBlinkInputAttr) self.lidLowCanvasOp.setInput('Deformer_Count', self.lidLow_DefCountInputAttr) # Add Xfo Inputs self.lidLowCanvasOp.setInput('Eye_Center', self.eyeballLocator) self.lidLowCanvasOp.setInput('Lid_Global', self.eyelidCtrlSpace) self.lidLowCanvasOp.setInput('Lid_UpV', self.eyelidUpVLocator) self.lidLowCanvasOp.setInput('Lid_Medial', self.lidMedialLocator) self.lidLowCanvasOp.setInput('Lid_MedialCen', self.lidLowMedialLocator) self.lidLowCanvasOp.setInput('Lid_Center_Ref', self.lidLowCtrlSpace) self.lidLowCanvasOp.setInput('Lid_Center_Ctrl', self.lidLowCtrl) self.lidLowCanvasOp.setInput('Lid_LateralCen', self.lidLowLateralLocator) self.lidLowCanvasOp.setInput('Lid_Lateral', self.lidLateralLocator) #Add Xfo Outputs self.lidLowCanvasOp.setOutput('result', self.eyelidLowDef) Profiler.getInstance().pop()
def __init__(self, name='head', parent=None): Profiler.getInstance().push("Construct Head Rig Component:" + name) super(FabriceHeadRig, self).__init__(name, parent) # ========= # Controls # ========= # Head Aim self.headAimCtrlSpace = CtrlSpace('headAim', parent=self.ctrlCmpGrp) self.headAimCtrl = Control('headAim', parent=self.headAimCtrlSpace, shape="sphere") self.headAimCtrl.scalePoints(Vec3(0.35, 0.35, 0.35)) self.headAimCtrl.lockScale(x=True, y=True, z=True) self.headAimUpV = Locator('headAimUpV', parent=self.headAimCtrl) self.headAimUpV.setShapeVisibility(False) # Head self.headAim = Locator('headAim', parent=self.ctrlCmpGrp) self.headAim.setShapeVisibility(False) self.headCtrlSpace = CtrlSpace('head', parent=self.ctrlCmpGrp) self.headCtrl = Control('head', parent=self.headCtrlSpace, shape="circle") self.headCtrl.lockTranslation(x=True, y=True, z=True) self.headCtrl.lockScale(x=True, y=True, z=True) # Jaw self.jawCtrlSpace = CtrlSpace('jawCtrlSpace', parent=self.headCtrl) self.jawCtrl = Control('jaw', parent=self.jawCtrlSpace, shape="cube") self.jawCtrl.lockTranslation(x=True, y=True, z=True) self.jawCtrl.lockScale(x=True, y=True, z=True) self.jawCtrl.setColor("orange") # ========== # Deformers # ========== deformersLayer = self.getOrCreateLayer('deformers') defCmpGrp = ComponentGroup(self.getName(), self, parent=deformersLayer) self.addItem('defCmpGrp', self.defCmpGrp) headDef = Joint('head', parent=defCmpGrp) headDef.setComponent(self) jawDef = Joint('jaw', parent=defCmpGrp) jawDef.setComponent(self) # ============== # Constrain I/O # ============== self.headToAimConstraint = PoseConstraint('_'.join( [self.headCtrlSpace.getName(), 'To', self.headAim.getName()])) self.headToAimConstraint.setMaintainOffset(True) self.headToAimConstraint.addConstrainer(self.headAim) self.headCtrlSpace.addConstraint(self.headToAimConstraint) # Constraint inputs self.headAimInputConstraint = PoseConstraint('_'.join([ self.headAimCtrlSpace.getName(), 'To', self.headBaseInputTgt.getName() ])) self.headAimInputConstraint.setMaintainOffset(True) self.headAimInputConstraint.addConstrainer(self.headBaseInputTgt) self.headAimCtrlSpace.addConstraint(self.headAimInputConstraint) # # Constraint outputs self.headOutputConstraint = PoseConstraint('_'.join( [self.headOutputTgt.getName(), 'To', self.headCtrl.getName()])) self.headOutputConstraint.addConstrainer(self.headCtrl) self.headOutputTgt.addConstraint(self.headOutputConstraint) self.jawOutputConstraint = PoseConstraint('_'.join( [self.jawOutputTgt.getName(), 'To', self.jawCtrl.getName()])) self.jawOutputConstraint.addConstrainer(self.jawCtrl) self.jawOutputTgt.addConstraint(self.jawOutputConstraint) # ============== # Add Operators # ============== # Add Aim Canvas Op # ================= self.headAimCanvasOp = CanvasOperator( 'headAimCanvasOp', 'Kraken.Solvers.DirectionConstraintSolver') self.addOperator(self.headAimCanvasOp) # Add Att Inputs self.headAimCanvasOp.setInput('drawDebug', self.drawDebugInputAttr) self.headAimCanvasOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs self.headAimCanvasOp.setInput('position', self.headBaseInputTgt) self.headAimCanvasOp.setInput('upVector', self.headAimUpV) self.headAimCanvasOp.setInput('atVector', self.headAimCtrl) # Add Xfo Outputs self.headAimCanvasOp.setOutput('constrainee', self.headAim) # Add Deformer KL Op # ================== self.deformersToOutputsKLOp = KLOperator('headDeformerKLOp', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(self.deformersToOutputsKLOp) # Add Att Inputs self.deformersToOutputsKLOp.setInput('drawDebug', self.drawDebugInputAttr) self.deformersToOutputsKLOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Outputs self.deformersToOutputsKLOp.setInput( 'constrainers', [self.headOutputTgt, self.jawOutputTgt]) # Add Xfo Outputs self.deformersToOutputsKLOp.setOutput('constrainees', [headDef, jawDef]) Profiler.getInstance().pop()
def __init__(self, name='InsectLeg', parent=None): Profiler.getInstance().push("Construct InsectLeg Rig Component:" + name) super(InsectLegComponentRig, self).__init__(name, parent) # ========= # Controls # ========= # Chain Base self.chainBase = Locator('ChainBase', parent=self.ctrlCmpGrp) self.chainBase.setShapeVisibility(False) # FK self.fkCtrlSpaces = [] self.fkCtrls = [] self.setNumControls(4) # IK Control self.legIKCtrlSpace = CtrlSpace('IK', parent=self.ctrlCmpGrp) self.legIKCtrl = Control('IK', parent=self.legIKCtrlSpace, shape="pin") if self.getLocation() == 'R': self.legIKCtrl.rotatePoints(0, 90, 0) self.legIKCtrl.translatePoints(Vec3(-1.0, 0.0, 0.0)) else: self.legIKCtrl.rotatePoints(0, -90, 0) self.legIKCtrl.translatePoints(Vec3(1.0, 0.0, 0.0)) # Add Component Params to IK control legSettingsAttrGrp = AttributeGroup("DisplayInfo_LegSettings", parent=self.legIKCtrl) legdrawDebugInputAttr = BoolAttribute('drawDebug', value=False, parent=legSettingsAttrGrp) legUseInitPoseInputAttr = BoolAttribute('useInitPose', value=True, parent=legSettingsAttrGrp) self.rootIndexInputAttr = IntegerAttribute('rootIndex', value=0, parent=legSettingsAttrGrp) legFkikInputAttr = ScalarAttribute('fkik', value=1.0, minValue=0.0, maxValue=1.0, parent=legSettingsAttrGrp) # Connect IO to controls self.drawDebugInputAttr.connect(legdrawDebugInputAttr) # UpV self.legUpVCtrlSpace = CtrlSpace('UpV', parent=self.ctrlCmpGrp) self.legUpVCtrl = Control('UpV', parent=self.legUpVCtrlSpace, shape="triangle") self.legUpVCtrl.alignOnZAxis() self.legUpVCtrl.rotatePoints(0, 90, 0) # ========== # Deformers # ========== deformersLayer = self.getOrCreateLayer('deformers') self.defCmpGrp = ComponentGroup(self.getName(), self, parent=deformersLayer) self.addItem('defCmpGrp', self.defCmpGrp) self.deformerJoints = [] self.boneOutputsTgt = [] self.setNumDeformers(4) # ===================== # Create Component I/O # ===================== # Set IO Targets self.boneOutputs.setTarget(self.boneOutputsTgt) # ============== # Constrain I/O # ============== # Constraint inputs legRootInputConstraint = PoseConstraint('_'.join([ self.fkCtrlSpaces[0].getName(), 'To', self.rootInputTgt.getName() ])) legRootInputConstraint.setMaintainOffset(True) legRootInputConstraint.addConstrainer(self.rootInputTgt) self.fkCtrlSpaces[0].addConstraint(legRootInputConstraint) chainBaseInputConstraint = PoseConstraint('_'.join( [self.chainBase.getName(), 'To', self.rootInputTgt.getName()])) chainBaseInputConstraint.setMaintainOffset(True) chainBaseInputConstraint.addConstrainer(self.rootInputTgt) self.chainBase.addConstraint(chainBaseInputConstraint) # =============== # Add Canvas Ops # =============== # Add Canvas Op self.nBoneSolverKLOp = KLOperator('leg', 'NBoneIKSolver', 'Kraken') self.addOperator(self.nBoneSolverKLOp) # # Add Att Inputs self.nBoneSolverKLOp.setInput('drawDebug', self.drawDebugInputAttr) self.nBoneSolverKLOp.setInput('rigScale', self.rigScaleInputAttr) self.nBoneSolverKLOp.setInput('useInitPose', legUseInitPoseInputAttr) self.nBoneSolverKLOp.setInput('ikblend', legFkikInputAttr) self.nBoneSolverKLOp.setInput('rootIndex', self.rootIndexInputAttr) self.nBoneSolverKLOp.setInput('tipBoneLen', self.tipBoneLenInputAttr) # Add Xfo Inputs self.nBoneSolverKLOp.setInput('chainBase', self.chainBase) self.nBoneSolverKLOp.setInput('ikgoal', self.legIKCtrl) self.nBoneSolverKLOp.setInput('upVector', self.legUpVCtrl) self.nBoneSolverKLOp.setInput('fkcontrols', self.fkCtrls) # Add Xfo Outputs self.nBoneSolverKLOp.setOutput('pose', self.boneOutputsTgt) self.nBoneSolverKLOp.setOutput('legEnd', self.legEndPosOutputTgt) # Add Deformer Canvas Op self.outputsToDeformersKLOp = KLOperator('defConstraint', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(self.outputsToDeformersKLOp) # Add Att Inputs self.outputsToDeformersKLOp.setInput('drawDebug', self.drawDebugInputAttr) self.outputsToDeformersKLOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs self.outputsToDeformersKLOp.setInput('constrainers', self.boneOutputsTgt) # Add Xfo Outputs self.outputsToDeformersKLOp.setOutput('constrainees', self.deformerJoints) Profiler.getInstance().pop()
def __init__(self, name='leg', parent=None): Profiler.getInstance().push("Construct Leg Rig Component:" + name) super(LegComponentRig, self).__init__(name, parent) # ========= # Controls # ========= # Femur self.femurFKCtrlSpace = CtrlSpace('femurFK', parent=self.ctrlCmpGrp) self.femurFKCtrl = Control('femurFK', parent=self.femurFKCtrlSpace, shape="cube") self.femurFKCtrl.alignOnXAxis() # Shin self.shinFKCtrlSpace = CtrlSpace('shinFK', parent=self.femurFKCtrl) self.shinFKCtrl = Control('shinFK', parent=self.shinFKCtrlSpace, shape="cube") self.shinFKCtrl.alignOnXAxis() # Ankle self.legIKCtrlSpace = CtrlSpace('IK', parent=self.ctrlCmpGrp) self.legIKCtrl = Control('IK', parent=self.legIKCtrlSpace, shape="pin") # FK Foot self.footCtrlSpace = CtrlSpace('foot', parent=self.ctrlCmpGrp) self.footCtrl = Control('foot', parent=self.footCtrlSpace, shape="cube") self.footCtrl.alignOnXAxis() # FK Toe self.toeCtrlSpace = CtrlSpace('toe', parent=self.footCtrl) self.toeCtrl = Control('toe', parent=self.toeCtrlSpace, shape="cube") self.toeCtrl.alignOnXAxis() # Rig Ref objects self.footRefSrt = Locator('footRef', parent=self.ctrlCmpGrp) # Add Component Params to IK control footSettingsAttrGrp = AttributeGroup("DisplayInfo_FootSettings", parent=self.footCtrl) footLinkToWorldInputAttr = ScalarAttribute('linkToWorld', 1.0, maxValue=1.0, parent=footSettingsAttrGrp) # Add Component Params to IK control legSettingsAttrGrp = AttributeGroup("DisplayInfo_LegSettings", parent=self.legIKCtrl) legDrawDebugInputAttr = BoolAttribute('drawDebug', value=False, parent=legSettingsAttrGrp) self.legBone0LenInputAttr = ScalarAttribute('bone0Len', value=1.0, parent=legSettingsAttrGrp) self.legBone1LenInputAttr = ScalarAttribute('bone1Len', value=1.0, parent=legSettingsAttrGrp) legIKBlendInputAttr = ScalarAttribute('ikblend', value=1.0, minValue=0.0, maxValue=1.0, parent=legSettingsAttrGrp) legSoftIKInputAttr = BoolAttribute('softIK', value=True, parent=legSettingsAttrGrp) legSoftDistInputAttr = ScalarAttribute('softDist', value=0.0, minValue=0.0, parent=legSettingsAttrGrp) legStretchInputAttr = BoolAttribute('stretch', value=True, parent=legSettingsAttrGrp) legStretchBlendInputAttr = ScalarAttribute('stretchBlend', value=0.0, minValue=0.0, maxValue=1.0, parent=legSettingsAttrGrp) self.drawDebugInputAttr.connect(legDrawDebugInputAttr) # UpV self.legUpVCtrlSpace = CtrlSpace('UpV', parent=self.ctrlCmpGrp) self.legUpVCtrl = Control('UpV', parent=self.legUpVCtrlSpace, shape="triangle") self.legUpVCtrl.alignOnZAxis() # ========== # Deformers # ========== deformersLayer = self.getOrCreateLayer('deformers') self.defCmpGrp = ComponentGroup(self.getName(), self, parent=deformersLayer) femurDef = Joint('femur', parent=self.defCmpGrp) femurDef.setComponent(self) shinDef = Joint('shin', parent=self.defCmpGrp) shinDef.setComponent(self) ankleDef = Joint('ankle', parent=self.defCmpGrp) ankleDef.setComponent(self) self.footDef = Joint('foot', parent=self.defCmpGrp) self.footDef.setComponent(self) self.toeDef = Joint('toe', parent=self.defCmpGrp) self.toeDef.setComponent(self) # ============== # Constrain I/O # ============== # Constraint inputs self.legIKCtrlSpaceInputConstraint = PoseConstraint('_'.join([self.legIKCtrlSpace.getName(), 'To', self.globalSRTInputTgt.getName()])) self.legIKCtrlSpaceInputConstraint.setMaintainOffset(True) self.legIKCtrlSpaceInputConstraint.addConstrainer(self.globalSRTInputTgt) self.legIKCtrlSpace.addConstraint(self.legIKCtrlSpaceInputConstraint) self.legUpVCtrlSpaceInputConstraint = PoseConstraint('_'.join([self.legUpVCtrlSpace.getName(), 'To', self.globalSRTInputTgt.getName()])) self.legUpVCtrlSpaceInputConstraint.setMaintainOffset(True) self.legUpVCtrlSpaceInputConstraint.addConstrainer(self.globalSRTInputTgt) self.legUpVCtrlSpace.addConstraint(self.legUpVCtrlSpaceInputConstraint) self.legRootInputConstraint = PoseConstraint('_'.join([self.legIKCtrl.getName(), 'To', self.legPelvisInputTgt.getName()])) self.legRootInputConstraint.setMaintainOffset(True) self.legRootInputConstraint.addConstrainer(self.legPelvisInputTgt) self.femurFKCtrlSpace.addConstraint(self.legRootInputConstraint) # Constraint outputs self.footOutputConstraint = PoseConstraint('_'.join([self.footOutputTgt.getName(), 'To', self.footCtrl.getName()])) self.footOutputConstraint.addConstrainer(self.footCtrl) self.footOutputTgt.addConstraint(self.footOutputConstraint) self.toeOutputConstraint = PoseConstraint('_'.join([self.toeOutputTgt.getName(), 'To', self.toeCtrl.getName()])) self.toeOutputConstraint.addConstrainer(self.toeCtrl) self.toeOutputTgt.addConstraint(self.toeOutputConstraint) # =============== # Add Splice Ops # =============== # Add Leg Splice Op self.legIKSpliceOp = SpliceOperator('legSpliceOp', 'TwoBoneIKSolver', 'Kraken') self.addOperator(self.legIKSpliceOp) # Add Att Inputs self.legIKSpliceOp.setInput('drawDebug', self.drawDebugInputAttr) self.legIKSpliceOp.setInput('rigScale', self.rigScaleInputAttr) self.legIKSpliceOp.setInput('bone0Len', self.legBone0LenInputAttr) self.legIKSpliceOp.setInput('bone1Len', self.legBone1LenInputAttr) self.legIKSpliceOp.setInput('ikblend', legIKBlendInputAttr) self.legIKSpliceOp.setInput('softIK', legSoftIKInputAttr) self.legIKSpliceOp.setInput('softDist', legSoftDistInputAttr) self.legIKSpliceOp.setInput('stretch', legStretchInputAttr) self.legIKSpliceOp.setInput('stretchBlend', legStretchBlendInputAttr) self.legIKSpliceOp.setInput('rightSide', self.rightSideInputAttr) # Add Xfo Inputs self.legIKSpliceOp.setInput('root', self.legPelvisInputTgt) self.legIKSpliceOp.setInput('bone0FK', self.femurFKCtrl) self.legIKSpliceOp.setInput('bone1FK', self.shinFKCtrl) self.legIKSpliceOp.setInput('ikHandle', self.legIKCtrl) self.legIKSpliceOp.setInput('upV', self.legUpVCtrl) # Add Xfo Outputs self.legIKSpliceOp.setOutput('bone0Out', self.femurOutputTgt) self.legIKSpliceOp.setOutput('bone1Out', self.shinOutputTgt) self.legIKSpliceOp.setOutput('bone2Out', self.legEndXfoOutputTgt) # Add Leg Deformer Splice Op self.outputsToDeformersSpliceOp = SpliceOperator('legDeformerSpliceOp', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(self.outputsToDeformersSpliceOp) # Add Att Inputs self.outputsToDeformersSpliceOp.setInput('drawDebug', self.drawDebugInputAttr) self.outputsToDeformersSpliceOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs self.outputsToDeformersSpliceOp.setInput('constrainers', [self.femurOutputTgt, self.shinOutputTgt, self.legEndXfoOutputTgt]) # Add Xfo Outputs self.outputsToDeformersSpliceOp.setOutput('constrainees', [femurDef, shinDef, ankleDef]) # Add Foot Deformer Splice Op self.footDefSpliceOp = SpliceOperator('footDeformerSpliceOp', 'PoseConstraintSolver', 'Kraken') self.addOperator(self.footDefSpliceOp) # Add Att Inputs self.footDefSpliceOp.setInput('drawDebug', self.drawDebugInputAttr) self.footDefSpliceOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs) self.footDefSpliceOp.setInput('constrainer', self.footOutputTgt) # Add Xfo Outputs self.footDefSpliceOp.setOutput('constrainee', self.footDef) # Add Toe Deformer Splice Op self.toeDefSpliceOp = SpliceOperator('toeDeformerSpliceOp', 'PoseConstraintSolver', 'Kraken') self.addOperator(self.toeDefSpliceOp) # Add Att Inputs self.toeDefSpliceOp.setInput('drawDebug', self.drawDebugInputAttr) self.toeDefSpliceOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs self.toeDefSpliceOp.setInput('constrainer', self.toeOutputTgt) # Add Xfo Outputs self.toeDefSpliceOp.setOutput('constrainee', self.toeDef) Profiler.getInstance().pop()
from kraken import plugins from kraken.core.objects.locator import Locator from kraken.helpers.utility_methods import logHierarchy myLoc = Locator("myLocator") builder = plugins.getBuilder() config = builder.getConfig() config.setExplicitNaming(True) builder.build(myLoc) logHierarchy(myLoc)
def __init__(self, name='Tentacle', parent=None): Profiler.getInstance().push("Construct Tentacle Rig Component:" + name) super(TentacleComponentRig, self).__init__(name, parent) # ========= # Controls # ========= # Chain Base self.chainBase = Locator('ChainBase', parent=self.ctrlCmpGrp) self.chainBase.setShapeVisibility(False) # FK self.fkCtrlSpaces = [] self.fkCtrls = [] self.setNumControls(2) # IK Control self.tentacleIKCtrlSpace = CtrlSpace('IK', parent=self.ctrlCmpGrp) self.tentacleIKCtrl = Control('IK', parent=self.tentacleIKCtrlSpace, shape="sphere") self.tentacleIKCtrl.scalePoints(Vec3(0.25, 0.25, 0.25)) self.tentacleIKCtrl.lockScale(x=True, y=True, z=True) self.tentacleIKCtrl.lockRotation(x=True, y=True, z=True) # Add Component Params to IK control tentacleSettingsAttrGrp = AttributeGroup("DisplayInfo_LegSettings", parent=self.tentacleIKCtrl) tentacledrawDebugInputAttr = BoolAttribute( 'drawDebug', value=False, parent=tentacleSettingsAttrGrp) fkikInputAttr = ScalarAttribute('fkik', value=0.0, minValue=0.0, maxValue=1.0, parent=tentacleSettingsAttrGrp) waveLength_YInputAttr = ScalarAttribute('waveLength_Y', value=1.0, minValue=0.0, maxValue=5.0, parent=tentacleSettingsAttrGrp) waveAmplitude_YInputAttr = ScalarAttribute( 'waveAmplitude_Y', value=0.0, minValue=-3.0, maxValue=3.0, parent=tentacleSettingsAttrGrp) waveFrequency_YInputAttr = ScalarAttribute( 'waveFrequency_Y', value=2.0, minValue=0.0, maxValue=10.0, parent=tentacleSettingsAttrGrp) waveLength_ZInputAttr = ScalarAttribute('waveLength_Z', value=2.329, minValue=0.0, maxValue=5.0, parent=tentacleSettingsAttrGrp) waveAmplitude_ZInputAttr = ScalarAttribute( 'waveAmplitude_Z', value=0.0, minValue=-3.0, maxValue=3.0, parent=tentacleSettingsAttrGrp) waveFrequency_ZInputAttr = ScalarAttribute( 'waveFrequency_Z', value=3.354, minValue=0.0, maxValue=10.0, parent=tentacleSettingsAttrGrp) tipBiasInputAttr = ScalarAttribute('tipBias', value=1.0, minValue=0.0, maxValue=1.0, parent=tentacleSettingsAttrGrp) springStrengthInputAttr = ScalarAttribute( 'springStrength', value=0.3, minValue=0.0, maxValue=1.0, parent=tentacleSettingsAttrGrp) dampeningInputAttr = ScalarAttribute('dampening', value=0.03, minValue=0.0, maxValue=1.0, parent=tentacleSettingsAttrGrp) simulationWeightInputAttr = ScalarAttribute( 'simulationWeight', value=1.0, minValue=0.0, maxValue=1.0, parent=tentacleSettingsAttrGrp) softLimitBoundsInputAttr = ScalarAttribute( 'softLimitBounds', value=5.0, minValue=0.0, maxValue=10.0, parent=tentacleSettingsAttrGrp) # Connect IO to controls self.drawDebugInputAttr.connect(tentacledrawDebugInputAttr) # ========== # Deformers # ========== deformersLayer = self.getOrCreateLayer('deformers') self.defCmpGrp = ComponentGroup(self.getName(), self, parent=deformersLayer) self.addItem('defCmpGrp', self.defCmpGrp) self.deformerJoints = [] self.boneOutputsTgt = [] self.setNumDeformers(4) # ===================== # Create Component I/O # ===================== # Set IO Targets self.boneOutputs.setTarget(self.boneOutputsTgt) # ============== # Constrain I/O # ============== # Constraint inputs tentacleRootInputConstraint = PoseConstraint('_'.join([ self.fkCtrlSpaces[0].getName(), 'To', self.rootInputTgt.getName() ])) tentacleRootInputConstraint.setMaintainOffset(True) tentacleRootInputConstraint.addConstrainer(self.rootInputTgt) self.fkCtrlSpaces[0].addConstraint(tentacleRootInputConstraint) tentacleRootInputConstraint = PoseConstraint('_'.join([ self.tentacleIKCtrlSpace.getName(), 'To', self.rootInputTgt.getName() ])) tentacleRootInputConstraint.setMaintainOffset(True) tentacleRootInputConstraint.addConstrainer(self.rootInputTgt) self.tentacleIKCtrlSpace.addConstraint(tentacleRootInputConstraint) chainBaseInputConstraint = PoseConstraint('_'.join( [self.chainBase.getName(), 'To', self.rootInputTgt.getName()])) chainBaseInputConstraint.setMaintainOffset(True) chainBaseInputConstraint.addConstrainer(self.rootInputTgt) self.chainBase.addConstraint(chainBaseInputConstraint) # =============== # Add Canvas Ops # =============== # Add Canvas Op self.tentacleSolverKLOp = KLOperator('tentacle', 'TentacleSolver', 'Kraken') self.addOperator(self.tentacleSolverKLOp) # # Add Att Inputs self.tentacleSolverKLOp.setInput('drawDebug', self.drawDebugInputAttr) self.tentacleSolverKLOp.setInput('rigScale', self.rigScaleInputAttr) self.tentacleSolverKLOp.setInput('ikblend', fkikInputAttr) self.tentacleSolverKLOp.setInput('waveLength_Y', waveLength_YInputAttr) self.tentacleSolverKLOp.setInput('waveAmplitude_Y', waveAmplitude_YInputAttr) self.tentacleSolverKLOp.setInput('waveFrequency_Y', waveFrequency_YInputAttr) self.tentacleSolverKLOp.setInput('waveLength_Z', waveLength_ZInputAttr) self.tentacleSolverKLOp.setInput('waveAmplitude_Z', waveAmplitude_ZInputAttr) self.tentacleSolverKLOp.setInput('waveFrequency_Z', waveFrequency_ZInputAttr) self.tentacleSolverKLOp.setInput('tipBias', tipBiasInputAttr) self.tentacleSolverKLOp.setInput('springStrength', springStrengthInputAttr) self.tentacleSolverKLOp.setInput('dampening', dampeningInputAttr) self.tentacleSolverKLOp.setInput('simulationWeight', simulationWeightInputAttr) self.tentacleSolverKLOp.setInput('softLimitBounds', softLimitBoundsInputAttr) self.tentacleSolverKLOp.setInput('tipBoneLen', self.tipBoneLenInputAttr) # Add Xfo Inputs self.tentacleSolverKLOp.setInput('chainBase', self.chainBase) self.tentacleSolverKLOp.setInput('ikgoal', self.tentacleIKCtrl) self.tentacleSolverKLOp.setInput('fkcontrols', self.fkCtrls) # Add Xfo Outputs self.tentacleSolverKLOp.setOutput('pose', self.boneOutputsTgt) self.tentacleSolverKLOp.setOutput('tentacleEnd', self.tentacleEndXfoOutputTgt) # Add Deformer Canvas Op self.outputsToDeformersKLOp = KLOperator('defConstraint', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(self.outputsToDeformersKLOp) # Add Att Inputs self.outputsToDeformersKLOp.setInput('drawDebug', self.drawDebugInputAttr) self.outputsToDeformersKLOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs self.outputsToDeformersKLOp.setInput('constrainers', self.boneOutputsTgt) # Add Xfo Outputs self.outputsToDeformersKLOp.setOutput('constrainees', self.deformerJoints) Profiler.getInstance().pop()
from kraken import plugins from kraken.core.maths import Math_degToRad from kraken.core.maths import Vec3 from kraken.core.objects.locator import Locator parentLoc = Locator('parent') locator1 = Locator("locator", parent=parentLoc) locator1.xfo.tr.x = 3 locator1.xfo.tr.y = -1 locator1.xfo.tr.z = 1 locator2 = Locator("locator2", parent=parentLoc) locator2.xfo.sc.x = 1 locator2.xfo.sc.y = 2 locator2.xfo.sc.z = 3 locator2.xfo.tr.x = 2 locator2.xfo.tr.y = 5 locator2.xfo.tr.z = 3 locator2.xfo.ori.setFromEulerAngles(Vec3(Math_degToRad(45.0), Math_degToRad(0.0), Math_degToRad(0.0))) constraint = locator2.constrainTo(locator1, 'Pose', True, 'PoseConstraint') builder = plugins.getBuilder()
from kraken import plugins from kraken.core.objects.locator import Locator from kraken.core.objects.constraints.pose_constraint import PoseConstraint from kraken.core.traverser.traverser import Traverser locA = Locator("locatorA") locB = Locator("locatorB") constraint = PoseConstraint("A to B") constraint.addConstrainer(locB) constraint.setConstrainee(locA) trav = Traverser() trav.addRootItem(locA) def callback(**args): item = args.get('item', None) print 'Visited ' + item.getDecoratedPath() trav.traverse(itemCallback=callback)
def __init__(self, name="foot", parent=None): Profiler.getInstance().push("Construct Neck Rig Component:" + name) super(FootComponentRig, self).__init__(name, parent) # ========= # Controls # ========= self.ankleLenInputAttr = ScalarAttribute('ankleLen', 1.0, maxValue=1.0, parent=self.cmpInputAttrGrp) self.toeLenInputAttr = ScalarAttribute('toeLen', 1.0, maxValue=1.0, parent=self.cmpInputAttrGrp) self.rightSideInputAttr = BoolAttribute('rightSide', False, parent=self.cmpInputAttrGrp) self.footAll = Locator('footAll', parent=self.ctrlCmpGrp) self.footAll.setShapeVisibility(False) self.ankleIKCtrlSpace = CtrlSpace('ankleIK', parent=self.footAll) self.ankleIKCtrl = Control('ankleIK', parent=self.ankleIKCtrlSpace, shape="square") self.ankleIKCtrl.alignOnXAxis(negative=True) self.ankleIKCtrl.lockTranslation(True, True, True) self.ankleIKCtrl.lockScale(True, True, True) self.toeIKCtrlSpace = CtrlSpace('toeIK', parent=self.footAll) self.toeIKCtrl = Control('toeIK', parent=self.toeIKCtrlSpace, shape="square") self.toeIKCtrl.alignOnXAxis() self.toeIKCtrl.lockTranslation(True, True, True) self.toeIKCtrl.lockScale(True, True, True) self.ankleFKCtrlSpace = CtrlSpace('ankleFK', parent=self.ctrlCmpGrp) self.ankleFKCtrl = Control('ankleFK', parent=self.ankleFKCtrlSpace, shape="cube") self.ankleFKCtrl.alignOnXAxis() self.ankleFKCtrl.lockTranslation(True, True, True) self.ankleFKCtrl.lockScale(True, True, True) self.toeFKCtrlSpace = CtrlSpace('toeFK', parent=self.ankleFKCtrl) self.toeFKCtrl = Control('toeFK', parent=self.toeFKCtrlSpace, shape="cube") self.toeFKCtrl.alignOnXAxis() self.toeFKCtrl.lockTranslation(True, True, True) self.toeFKCtrl.lockScale(True, True, True) self.footSettingsAttrGrp = AttributeGroup("DisplayInfo_FootSettings", parent=self.ankleIKCtrl) self.footDebugInputAttr = BoolAttribute('drawDebug', value=False, parent=self.footSettingsAttrGrp) self.footRockInputAttr = ScalarAttribute('footRock', value=0.0, minValue=-1.0, maxValue=1.0, parent=self.footSettingsAttrGrp) self.footBankInputAttr = ScalarAttribute('footBank', value=0.0, minValue=-1.0, maxValue=1.0, parent=self.footSettingsAttrGrp) self.drawDebugInputAttr.connect(self.footDebugInputAttr) self.pivotAll = Locator('pivotAll', parent=self.ctrlCmpGrp) self.pivotAll.setShapeVisibility(False) self.backPivotCtrl = Control('backPivot', parent=self.pivotAll, shape="axesHalfTarget") self.backPivotCtrl.scalePoints(Vec3(0.5, 0.5, 0.5)) self.backPivotCtrl.lockScale(True, True, True) self.backPivotCtrlSpace = self.backPivotCtrl.insertCtrlSpace() self.frontPivotCtrl = Control('frontPivot', parent=self.pivotAll, shape="axesHalfTarget") self.frontPivotCtrl.rotatePoints(0.0, 180.0, 0.0) self.frontPivotCtrl.lockScale(True, True, True) self.frontPivotCtrlSpace = self.frontPivotCtrl.insertCtrlSpace() self.frontPivotCtrl.scalePoints(Vec3(0.5, 0.5, 0.5)) self.outerPivotCtrl = Control('outerPivot', parent=self.pivotAll, shape="axesHalfTarget") self.outerPivotCtrl.rotatePoints(0.0, -90.0, 0.0) self.outerPivotCtrl.lockScale(True, True, True) self.outerPivotCtrlSpace = self.outerPivotCtrl.insertCtrlSpace() self.outerPivotCtrl.scalePoints(Vec3(0.5, 0.5, 0.5)) self.innerPivotCtrl = Control('innerPivot', parent=self.pivotAll, shape="axesHalfTarget") self.innerPivotCtrl.rotatePoints(0.0, 90.0, 0.0) self.innerPivotCtrl.lockScale(True, True, True) self.innerPivotCtrlSpace = self.innerPivotCtrl.insertCtrlSpace() self.innerPivotCtrl.scalePoints(Vec3(0.5, 0.5, 0.5)) # ========== # Deformers # ========== deformersLayer = self.getOrCreateLayer('deformers') self.defCmpGrp = ComponentGroup(self.getName(), self, parent=deformersLayer) self.addItem('defCmpGrp', self.defCmpGrp) self.ankleDef = Joint('ankle', parent=self.defCmpGrp) self.ankleDef.setComponent(self) self.toeDef = Joint('toe', parent=self.defCmpGrp) self.toeDef.setComponent(self) # ============== # Constrain I/O # ============== # Constraint to inputs self.pivotAllInputConstraint = PoseConstraint('_'.join([self.pivotAll.getName(), 'To', self.ikHandleInputTgt.getName()])) self.pivotAllInputConstraint.setMaintainOffset(True) self.pivotAllInputConstraint.addConstrainer(self.ikHandleInputTgt) self.pivotAll.addConstraint(self.pivotAllInputConstraint) self.ankleFKInputConstraint = PoseConstraint('_'.join([self.ankleFKCtrlSpace.getName(), 'To', self.legEndFKInputTgt.getName()])) self.ankleFKInputConstraint.setMaintainOffset(True) self.ankleFKInputConstraint.addConstrainer(self.legEndFKInputTgt) self.ankleFKCtrlSpace.addConstraint(self.ankleFKInputConstraint) # Constraint outputs self.ikTargetOutputConstraint = PoseConstraint('_'.join([self.ikTargetOutputTgt.getName(), 'To', self.ankleIKCtrl.getName()])) self.ikTargetOutputConstraint.setMaintainOffset(True) self.ikTargetOutputConstraint.addConstrainer(self.ankleIKCtrl) self.ikTargetOutputTgt.addConstraint(self.ikTargetOutputConstraint) # ========================= # Add Foot Pivot Canvas Op # ========================= # self.footPivotCanvasOp = CanvasOperator('footPivotCanvasOp', 'Kraken.Solvers.Biped.BipedFootPivotSolver') self.footPivotCanvasOp = KLOperator('footPivotKLOp', 'BipedFootPivotSolver', 'Kraken') self.addOperator(self.footPivotCanvasOp) # Add Att Inputs self.footPivotCanvasOp.setInput('drawDebug', self.drawDebugInputAttr) self.footPivotCanvasOp.setInput('rigScale', self.rigScaleInputAttr) self.footPivotCanvasOp.setInput('rightSide', self.rightSideInputAttr) self.footPivotCanvasOp.setInput('footRock', self.footRockInputAttr) self.footPivotCanvasOp.setInput('footBank', self.footBankInputAttr) # Add Xfo Inputs self.footPivotCanvasOp.setInput('pivotAll', self.pivotAll) self.footPivotCanvasOp.setInput('backPivot', self.backPivotCtrl) self.footPivotCanvasOp.setInput('frontPivot', self.frontPivotCtrl) self.footPivotCanvasOp.setInput('outerPivot', self.outerPivotCtrl) self.footPivotCanvasOp.setInput('innerPivot', self.innerPivotCtrl) # Add Xfo Outputs self.footPivotCanvasOp.setOutput('result', self.footAll) # ========================= # Add Foot Solver Canvas Op # ========================= # self.footSolverCanvasOp = CanvasOperator('footSolverCanvasOp', 'Kraken.Solvers.Biped.BipedFootSolver') self.footSolverCanvasOp = KLOperator('footSolverKLOp', 'BipedFootSolver', 'Kraken') self.addOperator(self.footSolverCanvasOp) # Add Att Inputs self.footSolverCanvasOp.setInput('drawDebug', self.drawDebugInputAttr) self.footSolverCanvasOp.setInput('rigScale', self.rigScaleInputAttr) self.footSolverCanvasOp.setInput('ikBlend', self.ikBlendInputAttr) self.footSolverCanvasOp.setInput('ankleLen', self.ankleLenInputAttr) self.footSolverCanvasOp.setInput('toeLen', self.toeLenInputAttr) # Add Xfo Inputs self.footSolverCanvasOp.setInput('legEnd', self.legEndInputTgt) self.footSolverCanvasOp.setInput('ankleIK', self.ankleIKCtrl) self.footSolverCanvasOp.setInput('toeIK', self.toeIKCtrl) self.footSolverCanvasOp.setInput('ankleFK', self.ankleFKCtrl) self.footSolverCanvasOp.setInput('toeFK', self.toeFKCtrl) # Add Xfo Outputs self.footSolverCanvasOp.setOutput('ankle_result', self.ankleOutputTgt) self.footSolverCanvasOp.setOutput('toe_result', self.toeOutputTgt) # =================== # Add Deformer KL Op # =================== self.outputsToDeformersKLOp = KLOperator('foot' + self.getLocation() + 'DeformerKLOp', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(self.outputsToDeformersKLOp) # Add Att Inputs self.outputsToDeformersKLOp.setInput('drawDebug', self.drawDebugInputAttr) self.outputsToDeformersKLOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs self.outputsToDeformersKLOp.setInput('constrainers', [self.ankleOutputTgt, self.toeOutputTgt]) # Add Xfo Outputs self.outputsToDeformersKLOp.setOutput('constrainees', [self.ankleDef, self.toeDef]) Profiler.getInstance().pop()
def construct(self, jsonData): """Returns a constructed scene item based on the provided json data. Args: jsondata (dict): the JSON data to use to decode into a Math value. Returns: object: The constructed scene item. """ if '__typeHierarchy__' not in jsonData or 'name' not in jsonData: raise Exception("Invalid JSON data for constructing scene item:" + str(jsonData)) # ========= # Controls # ========= if "Control" in jsonData['__typeHierarchy__']: item = Control(jsonData['name']) # =========== # Attributes # =========== elif "AttributeGroup" in jsonData['__typeHierarchy__']: item = AttributeGroup(jsonData['name']) elif "BoolAttribute" in jsonData['__typeHierarchy__']: item = BoolAttribute(jsonData['name']) elif "ScalarAttribute" in jsonData['__typeHierarchy__']: item = ScalarAttribute(jsonData['name']) elif "IntegerAttribute" in jsonData['__typeHierarchy__']: item = IntegerAttribute(jsonData['name']) elif "StringAttribute" in jsonData['__typeHierarchy__']: item = StringAttribute(jsonData['name']) elif "ComponentInput" in jsonData['__typeHierarchy__']: item = ComponentInput(jsonData['name']) elif "ComponentOutput" in jsonData['__typeHierarchy__']: item = ComponentOutput(jsonData['name']) # ============ # Constraints # ============ elif "OrientationConstraint" in jsonData['__typeHierarchy__']: item = OrientationConstraint(jsonData['name']) elif "PoseConstraint" in jsonData['__typeHierarchy__']: item = PoseConstraint(jsonData['name']) elif "PositionConstraint" in jsonData['__typeHierarchy__']: item = PositionConstraint(jsonData['name']) elif "ScaleConstraint" in jsonData['__typeHierarchy__']: item = ScaleConstraint(jsonData['name']) elif "BaseConstraint" in jsonData['__typeHierarchy__']: item = BaseConstraint(jsonData['name']) # ========== # Operators # ========== elif "KLOperator" in jsonData['__typeHierarchy__']: item = KLOperator(jsonData['name']) # ============ # Scene Items # ============ elif "Group" in jsonData['__typeHierarchy__']: item = Group(jsonData['name']) elif "Null" in jsonData['__typeHierarchy__']: item = Null(jsonData['name']) elif "Chain" in jsonData['__typeHierarchy__']: item = Chain(jsonData['name']) elif "Joint" in jsonData['__typeHierarchy__']: item = Joint(jsonData['name']) elif "Container" in jsonData['__typeHierarchy__']: item = Container(jsonData['name']) elif "Curve" in jsonData['__typeHierarchy__']: item = Curve(jsonData['name']) elif "HierarchyGroup" in jsonData['__typeHierarchy__']: item = HierarchyGroup(jsonData['name']) elif "Joint" in jsonData['__typeHierarchy__']: item = Joint(jsonData['name']) elif "Layer" in jsonData['__typeHierarchy__']: item = Layer(jsonData['name']) elif "Locator" in jsonData['__typeHierarchy__']: item = Locator(jsonData['name']) elif "SceneItem" in jsonData['__typeHierarchy__']: item = SceneItem(jsonData['name']) else: raise Exception("KrakenLoader does not support the given type:" + jsonData['__typeHierarchy__']) # Before registering or decoding, set the parent so that the full name contains the entire path. if len(self.parentItems) > 0: item.setParent(self.parentItems[-1]) self.registerItem(item) # Store the item as the parent item before decoding the object # which in turn decodes the children items. self.parentItems.append(item) item.jsonDecode(self, jsonData) # Pop the parent item stack, which reverts the current parent item # to the previous value. self.parentItems.pop() return item
from kraken import plugins from kraken.core.objects.locator import Locator from kraken.core.traverser.traverser import Traverser locA = Locator("locatorA") locB = Locator("locatorB", parent=locA) locC = Locator("locatorC", parent=locB) locD = Locator("locatorD", parent=locB) trav = Traverser() trav.addRootItem(locD) trav.addRootItem(locC) def callback(**args): item = args.get('item', None) print 'Visited ' + item.getDecoratedPath() trav.traverse(itemCallback=callback)
from kraken import plugins from kraken.core.objects.locator import Locator from kraken.core.objects.operators.kl_operator import KLOperator from kraken.core.traverser.traverser import Traverser locInA = Locator("locatorInA") locInB = Locator("locatorInB") locOutA = Locator("locatorOutA") locOutB = Locator("locatorOutB") operator = KLOperator("IK", "MultiPoseConstraintSolver", "Kraken") operator.resizeInput('constrainers', 2) operator.resizeOutput('constrainees', 2) operator.setInput("constrainers", locInA, 0) operator.setInput("constrainers", locInB, 1) operator.setOutput("constrainees", locOutA, 0) operator.setOutput("constrainees", locOutB, 1) trav = Traverser() trav.addRootItem(locOutA) trav.addRootItem(locOutB) def callback(**args): item = args.get('item', None) print 'Visited ' + item.getDecoratedPath() trav.traverse(itemCallback=callback)
from kraken import plugins from kraken.core.maths import RotationOrder from kraken.core.maths import Vec3 from kraken.core.maths import Math_degToRad from kraken.core.objects.locator import Locator parentLoc = Locator('parent') for i in xrange(0, 6): print i rotOrderStrMap = { 0: 'XYZ', 1: 'YZX', 2: 'ZXY', 3: 'XZY', 4: 'ZYX', 5: 'YXZ' } srcLoc = Locator(rotOrderStrMap[i] + '_src', parent=parentLoc) srcLoc.xfo.tr.x = i * 2 srcLoc.xfo.tr.y = 0 srcLoc.xfo.tr.z = 0 tgtLoc = Locator(rotOrderStrMap[i] + '_tgt', parent=parentLoc) tgtLoc.ro = RotationOrder(i) tgtLoc.xfo.tr.x = i * 2 tgtLoc.xfo.tr.y = 0 tgtLoc.xfo.tr.z = 0