def addFinger(self, name, data): fingerCtrls = [] fingerJoints = [] parentCtrl = self.handCtrl for i, joint in enumerate(data): if i == 0: jointName = name + 'Meta' else: jointName = name + str(i).zfill(2) jointXfo = joint.get('xfo', Xfo()) jointCrvData = joint.get('curveData') # Create Controls newJointCtrlSpace = CtrlSpace(jointName, parent=parentCtrl) newJointCtrl = Control(jointName, parent=newJointCtrlSpace, shape='square') newJointCtrl.lockScale(True, True, True) newJointCtrl.lockTranslation(True, True, True) if jointCrvData is not None: newJointCtrl.setCurveData(jointCrvData) fingerCtrls.append(newJointCtrl) # Create Deformers jointDef = Joint(jointName, parent=self.defCmpGrp) fingerJoints.append(jointDef) # Create Constraints # Set Xfos newJointCtrlSpace.xfo = jointXfo newJointCtrl.xfo = jointXfo parentCtrl = newJointCtrl # ================= # Create Operators # ================= # Add Deformer KL Op deformersToCtrlsKLOp = KLOperator(name + 'DeformerKLOp', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(deformersToCtrlsKLOp) # Add Att Inputs deformersToCtrlsKLOp.setInput('drawDebug', self.drawDebugInputAttr) deformersToCtrlsKLOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs deformersToCtrlsKLOp.setInput('constrainers', fingerCtrls) # Add Xfo Outputs deformersToCtrlsKLOp.setOutput('constrainees', fingerJoints) return deformersToCtrlsKLOp
def addFinger(self, name, data): fingerCtrls = [] fingerJoints = [] parentCtrl = self.handCtrl for i, joint in enumerate(data): if i == 0: jointName = name + 'Meta' else: jointName = name + str(i).zfill(2) jointXfo = joint.get('xfo', Xfo()) jointCrvData = joint.get('curveData') # Create Controls newJointCtrlSpace = CtrlSpace(jointName, parent=parentCtrl) newJointCtrl = Control(jointName, parent=newJointCtrlSpace, shape='square') newJointCtrl.lockScale(True, True, True) newJointCtrl.lockTranslation(True, True, True) if jointCrvData is not None: newJointCtrl.setCurveData(jointCrvData) fingerCtrls.append(newJointCtrl) # Create Deformers jointDef = Joint(jointName, parent=self.defCmpGrp) fingerJoints.append(jointDef) # Create Constraints # Set Xfos newJointCtrlSpace.xfo = jointXfo newJointCtrl.xfo = jointXfo parentCtrl = newJointCtrl # ================= # Create Operators # ================= # Add Deformer KL Op deformersToCtrlsKLOp = KLOperator(name + 'DeformerKLOp', 'MultiPoseConstraintSolver', 'Kraken') self.addOperator(deformersToCtrlsKLOp) # Add Att Inputs deformersToCtrlsKLOp.setInput('drawDebug', self.drawDebugInputAttr) deformersToCtrlsKLOp.setInput('rigScale', self.rigScaleInputAttr) # Add Xfo Inputs deformersToCtrlsKLOp.setInput('constrainers', fingerCtrls) # Add Xfo Outputs deformersToCtrlsKLOp.setOutput('constrainees', fingerJoints) return deformersToCtrlsKLOp
def updateNumJointControls(self, numJoints): """Load a saved guide representation from persisted data. Arguments: numJoints -- object, The number of joints inthe chain. Return: True if successful. """ if numJoints == 0: raise IndexError("'numJoints' must be > 0") if numJoints + 1 > len(self.jointCtrls): for i in xrange(len(self.jointCtrls), numJoints + 1): if i == 0: ctrlParent = self.ctrlCmpGrp else: ctrlParent = self.jointCtrls[i - 1] newCtrl = Control('chain' + str(i + 1).zfill(2), parent=ctrlParent, shape="sphere") newCtrl.scalePoints(Vec3(0.25, 0.25, 0.25)) # Generate thew new ctrl off the end of the existing one. newCtrl.xfo = self.jointCtrls[i - 1].xfo.multiply( Xfo(Vec3(10.0, 0.0, 0.0))) self.jointCtrls.append(newCtrl) elif numJoints + 1 < len(self.jointCtrls): numExtraCtrls = len(self.jointCtrls) - (numJoints + 1) for i in xrange(numExtraCtrls): extraCtrl = self.jointCtrls.pop() extraCtrl.getParent().removeChild(extraCtrl) # Reset the control positions based on new number of joints jointPositions = self.generateGuidePositions(numJoints) for i in xrange(len(self.jointCtrls)): self.jointCtrls[i].xfo.tr = jointPositions[i] return True
def updateNumJointControls(self, numJoints): """Load a saved guide representation from persisted data. Arguments: numJoints -- object, The number of joints inthe chain. Return: True if successful. """ if numJoints == 0: raise IndexError("'numJoints' must be > 0") if numJoints + 1 > len(self.jointCtrls): for i in xrange(len(self.jointCtrls), numJoints + 1): if i == 0: ctrlParent = self.ctrlCmpGrp else: ctrlParent = self.jointCtrls[i - 1] newCtrl = Control('chain' + str(i + 1).zfill(2), parent=ctrlParent, shape="sphere") newCtrl.scalePoints(Vec3(0.25, 0.25, 0.25)) # Generate thew new ctrl off the end of the existing one. newCtrl.xfo = self.jointCtrls[i-1].xfo.multiply(Xfo(Vec3(10.0, 0.0, 0.0))) self.jointCtrls.append(newCtrl) elif numJoints + 1 < len(self.jointCtrls): numExtraCtrls = len(self.jointCtrls) - (numJoints + 1) for i in xrange(numExtraCtrls): extraCtrl = self.jointCtrls.pop() extraCtrl.getParent().removeChild(extraCtrl) # Reset the control positions based on new number of joints jointPositions = self.generateGuidePositions(numJoints) for i in xrange(len(self.jointCtrls)): self.jointCtrls[i].xfo.tr = jointPositions[i] return True