def getRigBuildData(self): """Returns the Guide data used by the Rig Component to define the layout of the final rig.. Return: The JSON rig data object. """ data = super(ArmComponentGuide, self).getRigBuildData() # values bicepPosition = self.bicepCtrl.xfo.tr forearmPosition = self.forearmCtrl.xfo.tr wristPosition = self.wristCtrl.xfo.tr # Calculate Bicep Xfo rootToWrist = wristPosition.subtract(bicepPosition).unit() rootToElbow = forearmPosition.subtract(bicepPosition).unit() bone1Normal = rootToWrist.cross(rootToElbow).unit() bone1ZAxis = rootToElbow.cross(bone1Normal).unit() bicepXfo = Xfo() bicepXfo.setFromVectors(rootToElbow, bone1Normal, bone1ZAxis, bicepPosition) # Calculate Forearm Xfo elbowToWrist = wristPosition.subtract(forearmPosition).unit() elbowToRoot = bicepPosition.subtract(forearmPosition).unit() bone2Normal = elbowToRoot.cross(elbowToWrist).unit() bone2ZAxis = elbowToWrist.cross(bone2Normal).unit() forearmXfo = Xfo() forearmXfo.setFromVectors(elbowToWrist, bone2Normal, bone2ZAxis, forearmPosition) handXfo = Xfo() handXfo.tr = self.handCtrl.xfo.tr handXfo.ori = self.handCtrl.xfo.ori bicepLen = bicepPosition.subtract(forearmPosition).length() forearmLen = forearmPosition.subtract(wristPosition).length() armEndXfo = Xfo() armEndXfo.tr = wristPosition armEndXfo.ori = forearmXfo.ori upVXfo = xfoFromDirAndUpV(bicepPosition, wristPosition, forearmPosition) upVXfo.tr = forearmPosition upVXfo.tr = upVXfo.transformVector(Vec3(0, 0, 5)) data['bicepXfo'] = bicepXfo data['forearmXfo'] = forearmXfo data['handXfo'] = handXfo data['armEndXfo'] = armEndXfo data['upVXfo'] = upVXfo data['forearmLen'] = forearmLen data['bicepLen'] = bicepLen return data
def getRigBuildData(self): """Returns the Guide data used by the Rig Component to define the layout of the final rig.. Return: The JSON rig data object. """ data = super(StretchyLimbComponentGuide, self).getRigBuildData() # Values startPos = self.upperCtl.xfo.tr midPos = self.lowerCtl.xfo.tr endPos = self.endCtl.xfo.tr # Calculate Upper Xfo startToEnd = endPos.subtract(startPos).unit() startToMid = midPos.subtract(startPos).unit() bone1Normal = startToEnd.cross(startToMid).unit() bone1ZAxis = startToMid.cross(bone1Normal).unit() upperXfo = Xfo() upperXfo.setFromVectors(startToMid, bone1Normal, bone1ZAxis, startPos) # Calculate Lower Xfo midToEnd = endPos.subtract(midPos).unit() midToStart = startPos.subtract(midPos).unit() bone2Normal = midToStart.cross(midToEnd).unit() bone2ZAxis = midToEnd.cross(bone2Normal).unit() lowerXfo = Xfo() lowerXfo.setFromVectors(midToEnd, bone2Normal, bone2ZAxis, midPos) upperLen = startPos.subtract(midPos).length() lowerLen = endPos.subtract(midPos).length() handleXfo = Xfo() handleXfo.tr = endPos endXfo = Xfo() endXfo.tr = endPos # endXfo.ori = lowerXfo.ori upVXfo = xfoFromDirAndUpV(startPos, endPos, midPos) upVXfo.tr = midPos upVXfo.tr = upVXfo.transformVector(Vec3(0, 0, 5)) data['upperXfo'] = upperXfo data['lowerXfo'] = lowerXfo data['endXfo'] = endXfo data['handleXfo'] = handleXfo data['upVXfo'] = upVXfo data['upperLen'] = upperLen data['lowerLen'] = lowerLen return data
def getRigBuildData(self): """Returns the Guide data used by the Rig Component to define the layout of the final rig.. Return: The JSON rig data object. """ data = super(ArmComponentGuide, self).getRigBuildData() # values bicepPosition = self.bicepCtrl.xfo.tr forearmPosition = self.forearmCtrl.xfo.tr wristPosition = self.wristCtrl.xfo.tr # Calculate Bicep Xfo rootToWrist = wristPosition.subtract(bicepPosition).unit() rootToElbow = forearmPosition.subtract(bicepPosition).unit() bone1Normal = rootToWrist.cross(rootToElbow).unit() bone1ZAxis = rootToElbow.cross(bone1Normal).unit() bicepXfo = Xfo() bicepXfo.setFromVectors(rootToElbow, bone1Normal, bone1ZAxis, bicepPosition) # Calculate Forearm Xfo elbowToWrist = wristPosition.subtract(forearmPosition).unit() elbowToRoot = bicepPosition.subtract(forearmPosition).unit() bone2Normal = elbowToRoot.cross(elbowToWrist).unit() bone2ZAxis = elbowToWrist.cross(bone2Normal).unit() forearmXfo = Xfo() forearmXfo.setFromVectors(elbowToWrist, bone2Normal, bone2ZAxis, forearmPosition) handXfo = Xfo() handXfo.tr = self.handCtrl.xfo.tr handXfo.ori = self.handCtrl.xfo.ori bicepLen = bicepPosition.subtract(forearmPosition).length() forearmLen = forearmPosition.subtract(wristPosition).length() armEndXfo = Xfo() armEndXfo.tr = wristPosition armEndXfo.ori = forearmXfo.ori upVXfo = xfoFromDirAndUpV(bicepPosition, wristPosition, forearmPosition) upVXfo.tr = forearmPosition upVXfo.tr = upVXfo.transformVector(Vec3(0, 0, 5)) data["bicepXfo"] = bicepXfo data["forearmXfo"] = forearmXfo data["handXfo"] = handXfo data["armEndXfo"] = armEndXfo data["upVXfo"] = upVXfo data["forearmLen"] = forearmLen data["bicepLen"] = bicepLen return data
def getRigBuildData(self): """Returns the Guide data used by the Rig Component to define the layout of the final rig.. Return: The JSON rig data object. """ data = super(LegComponentGuide, self).getRigBuildData() # Values femurPosition = self.femurCtrl.xfo.tr kneePosition = self.kneeCtrl.xfo.tr anklePosition = self.ankleCtrl.xfo.tr # Calculate Bicep Xfo rootToWrist = anklePosition.subtract(femurPosition).unit() rootToKnee = kneePosition.subtract(femurPosition).unit() bone1Normal = rootToWrist.cross(rootToKnee).unit() bone1ZAxis = rootToKnee.cross(bone1Normal).unit() femurXfo = Xfo() femurXfo.setFromVectors(rootToKnee, bone1Normal, bone1ZAxis, femurPosition) # Calculate Forearm Xfo elbowToWrist = anklePosition.subtract(kneePosition).unit() elbowToRoot = femurPosition.subtract(kneePosition).unit() bone2Normal = elbowToRoot.cross(elbowToWrist).unit() bone2ZAxis = elbowToWrist.cross(bone2Normal).unit() kneeXfo = Xfo() kneeXfo.setFromVectors(elbowToWrist, bone2Normal, bone2ZAxis, kneePosition) femurLen = femurPosition.subtract(kneePosition).length() shinLen = kneePosition.subtract(anklePosition).length() handleXfo = Xfo() handleXfo.tr = anklePosition upVXfo = xfoFromDirAndUpV(femurPosition, anklePosition, kneePosition) upVXfo.tr = kneePosition upVXfo.tr = upVXfo.transformVector(Vec3(0, 0, 5)) data['femurXfo'] = femurXfo data['kneeXfo'] = kneeXfo data['handleXfo'] = handleXfo data['upVXfo'] = upVXfo data['femurLen'] = femurLen data['shinLen'] = shinLen return data
def __init__(self, name, parent=None, location='M'): super(ArmComponent, self).__init__(name, parent, location) # ========= # Controls # ========= # Setup component attributes defaultAttrGroup = self.getAttributeGroupByIndex(0) defaultAttrGroup.addAttribute(BoolAttribute("toggleDebugging", True)) # Default values if self.getLocation() == "R": ctrlColor = "red" bicepPosition = Vec3(-2.27, 15.295, -0.753) forearmPosition = Vec3(-5.039, 13.56, -0.859) wristPosition = Vec3(-7.1886, 12.2819, 0.4906) else: ctrlColor = "greenBright" bicepPosition = Vec3(2.27, 15.295, -0.753) forearmPosition = Vec3(5.039, 13.56, -0.859) wristPosition = Vec3(7.1886, 12.2819, 0.4906) # Calculate Bicep Xfo rootToWrist = wristPosition.subtract(bicepPosition).unit() rootToElbow = forearmPosition.subtract(bicepPosition).unit() bone1Normal = rootToWrist.cross(rootToElbow).unit() bone1ZAxis = rootToElbow.cross(bone1Normal).unit() bicepXfo = Xfo() bicepXfo.setFromVectors(rootToElbow, bone1Normal, bone1ZAxis, bicepPosition) # Calculate Forearm Xfo elbowToWrist = wristPosition.subtract(forearmPosition).unit() elbowToRoot = bicepPosition.subtract(forearmPosition).unit() bone2Normal = elbowToRoot.cross(elbowToWrist).unit() bone2ZAxis = elbowToWrist.cross(bone2Normal).unit() forearmXfo = Xfo() forearmXfo.setFromVectors(elbowToWrist, bone2Normal, bone2ZAxis, forearmPosition) # Bicep bicepFKCtrl = CubeControl('bicepFK') bicepFKCtrl.alignOnXAxis() bicepLen = bicepPosition.subtract(forearmPosition).length() bicepFKCtrl.scalePoints(Vec3(bicepLen, 1.75, 1.75)) bicepFKCtrl.setColor(ctrlColor) bicepFKCtrl.xfo.copy(bicepXfo) bicepFKCtrlSrtBuffer = SrtBuffer('bicepFK') self.addChild(bicepFKCtrlSrtBuffer) bicepFKCtrlSrtBuffer.xfo.copy(bicepFKCtrl.xfo) bicepFKCtrlSrtBuffer.addChild(bicepFKCtrl) # Forearm forearmFKCtrl = CubeControl('forearmFK') forearmFKCtrl.alignOnXAxis() forearmLen = forearmPosition.subtract(wristPosition).length() forearmFKCtrl.scalePoints(Vec3(forearmLen, 1.5, 1.5)) forearmFKCtrl.setColor(ctrlColor) forearmFKCtrl.xfo.copy(forearmXfo) forearmFKCtrlSrtBuffer = SrtBuffer('forearmFK') bicepFKCtrl.addChild(forearmFKCtrlSrtBuffer) forearmFKCtrlSrtBuffer.xfo.copy(forearmFKCtrl.xfo) forearmFKCtrlSrtBuffer.addChild(forearmFKCtrl) # Arm IK armIKCtrlSrtBuffer = SrtBuffer('IK', parent=self) armIKCtrlSrtBuffer.xfo.tr.copy(wristPosition) armIKCtrl = PinControl('IK', parent=armIKCtrlSrtBuffer) armIKCtrl.xfo.copy(armIKCtrlSrtBuffer.xfo) armIKCtrl.setColor(ctrlColor) if self.getLocation() == "R": armIKCtrl.rotatePoints(0, 90, 0) else: armIKCtrl.rotatePoints(0, -90, 0) # Add Component Params to IK control armDebugInputAttr = BoolAttribute('debug', True) armBone1LenInputAttr = FloatAttribute('bone1Len', bicepLen, 0.0, 100.0) armBone2LenInputAttr = FloatAttribute('bone2Len', forearmLen, 0.0, 100.0) armFkikInputAttr = FloatAttribute('fkik', 0.0, 0.0, 1.0) armSoftIKInputAttr = BoolAttribute('softIK', True) armSoftDistInputAttr = FloatAttribute('softDist', 0.0, 0.0, 1.0) armStretchInputAttr = BoolAttribute('stretch', True) armStretchBlendInputAttr = FloatAttribute('stretchBlend', 0.0, 0.0, 1.0) armSettingsAttrGrp = AttributeGroup("DisplayInfo_ArmSettings") armIKCtrl.addAttributeGroup(armSettingsAttrGrp) armSettingsAttrGrp.addAttribute(armDebugInputAttr) armSettingsAttrGrp.addAttribute(armBone1LenInputAttr) armSettingsAttrGrp.addAttribute(armBone2LenInputAttr) armSettingsAttrGrp.addAttribute(armFkikInputAttr) armSettingsAttrGrp.addAttribute(armSoftIKInputAttr) armSettingsAttrGrp.addAttribute(armSoftDistInputAttr) armSettingsAttrGrp.addAttribute(armStretchInputAttr) armSettingsAttrGrp.addAttribute(armStretchBlendInputAttr) # UpV upVXfo = xfoFromDirAndUpV(bicepPosition, wristPosition, forearmPosition) upVXfo.tr.copy(forearmPosition) upVOffset = Vec3(0, 0, 5) upVOffset = upVXfo.transformVector(upVOffset) armUpVCtrl = TriangleControl('UpV') armUpVCtrl.xfo.tr.copy(upVOffset) armUpVCtrl.alignOnZAxis() armUpVCtrl.rotatePoints(180, 0, 0) armUpVCtrl.setColor(ctrlColor) armUpVCtrlSrtBuffer = SrtBuffer('UpV') self.addChild(armUpVCtrlSrtBuffer) armUpVCtrlSrtBuffer.xfo.tr.copy(upVOffset) armUpVCtrlSrtBuffer.addChild(armUpVCtrl) # ========== # Deformers # ========== container = self.getParent().getParent() deformersLayer = container.getChildByName('deformers') bicepDef = Joint('bicep') bicepDef.setComponent(self) forearmDef = Joint('forearm') forearmDef.setComponent(self) wristDef = Joint('wrist') wristDef.setComponent(self) deformersLayer.addChild(bicepDef) deformersLayer.addChild(forearmDef) deformersLayer.addChild(wristDef) # ===================== # Create Component I/O # ===================== # Setup component Xfo I/O's clavicleEndInput = Locator('clavicleEnd') clavicleEndInput.xfo.copy(bicepXfo) bicepOutput = Locator('bicep') bicepOutput.xfo.copy(bicepXfo) forearmOutput = Locator('forearm') forearmOutput.xfo.copy(forearmXfo) armEndXfo = Xfo() armEndXfo.rot = forearmXfo.rot.clone() armEndXfo.tr.copy(wristPosition) armEndXfoOutput = Locator('armEndXfo') armEndXfoOutput.xfo.copy(armEndXfo) armEndPosOutput = Locator('armEndPos') armEndPosOutput.xfo.copy(armEndXfo) # Setup componnent Attribute I/O's debugInputAttr = BoolAttribute('debug', True) bone1LenInputAttr = FloatAttribute('bone1Len', bicepLen, 0.0, 100.0) bone2LenInputAttr = FloatAttribute('bone2Len', forearmLen, 0.0, 100.0) fkikInputAttr = FloatAttribute('fkik', 0.0, 0.0, 1.0) softIKInputAttr = BoolAttribute('softIK', True) softDistInputAttr = FloatAttribute('softDist', 0.5, 0.0, 1.0) stretchInputAttr = BoolAttribute('stretch', True) stretchBlendInputAttr = FloatAttribute('stretchBlend', 0.0, 0.0, 1.0) rightSideInputAttr = BoolAttribute('rightSide', location is 'R') # Connect attrs to control attrs debugInputAttr.connect(armDebugInputAttr) bone1LenInputAttr.connect(armBone1LenInputAttr) bone2LenInputAttr.connect(armBone2LenInputAttr) fkikInputAttr.connect(armFkikInputAttr) softIKInputAttr.connect(armSoftIKInputAttr) softDistInputAttr.connect(armSoftDistInputAttr) stretchInputAttr.connect(armStretchInputAttr) stretchBlendInputAttr.connect(armStretchBlendInputAttr) # ============== # Constrain I/O # ============== # Constraint inputs armRootInputConstraint = PoseConstraint('_'.join([armIKCtrl.getName(), 'To', clavicleEndInput.getName()])) armRootInputConstraint.setMaintainOffset(True) armRootInputConstraint.addConstrainer(clavicleEndInput) bicepFKCtrlSrtBuffer.addConstraint(armRootInputConstraint) # Constraint outputs # ================== # Add Component I/O # ================== # Add Xfo I/O's self.addInput(clavicleEndInput) self.addOutput(bicepOutput) self.addOutput(forearmOutput) self.addOutput(armEndXfoOutput) self.addOutput(armEndPosOutput) # Add Attribute I/O's self.addInput(debugInputAttr) self.addInput(bone1LenInputAttr) self.addInput(bone2LenInputAttr) self.addInput(fkikInputAttr) self.addInput(softIKInputAttr) self.addInput(softDistInputAttr) self.addInput(stretchInputAttr) self.addInput(stretchBlendInputAttr) self.addInput(rightSideInputAttr)
def getRigBuildData(self): """Returns the Guide data used by the Rig Component to define the layout of the final rig.. Return: The JSON rig data object. """ data = super(LegComponentGuide, self).getRigBuildData() # Values femurPosition = self.femurCtrl.xfo.tr kneePosition = self.kneeCtrl.xfo.tr anklePosition = self.ankleCtrl.xfo.tr toePosition = self.toeCtrl.xfo.tr toeTipPosition = self.toeTipCtrl.xfo.tr # Calculate Bicep Xfo rootToWrist = anklePosition.subtract(femurPosition).unit() rootToKnee = kneePosition.subtract(femurPosition).unit() bone1Normal = rootToWrist.cross(rootToKnee).unit() bone1ZAxis = rootToKnee.cross(bone1Normal).unit() femurXfo = Xfo() femurXfo.setFromVectors(rootToKnee, bone1Normal, bone1ZAxis, femurPosition) # Calculate Forearm Xfo elbowToWrist = anklePosition.subtract(kneePosition).unit() elbowToRoot = femurPosition.subtract(kneePosition).unit() bone2Normal = elbowToRoot.cross(elbowToWrist).unit() bone2ZAxis = elbowToWrist.cross(bone2Normal).unit() kneeXfo = Xfo() kneeXfo.setFromVectors(elbowToWrist, bone2Normal, bone2ZAxis, kneePosition) femurLen = femurPosition.subtract(kneePosition).length() shinLen = kneePosition.subtract(anklePosition).length() handleXfo = Xfo() handleXfo.tr = anklePosition ankleXfo = Xfo() ankleXfo.tr = anklePosition # ankleXfo.ori = kneeXfo.ori toeXfo = Xfo() toeXfo.tr = toePosition # toeXfo.ori = kneeXfo.ori upVXfo = xfoFromDirAndUpV(femurPosition, anklePosition, kneePosition) upVXfo.tr = kneePosition upVXfo.tr = upVXfo.transformVector(Vec3(0, 0, 5)) data['femurXfo'] = femurXfo data['kneeXfo'] = kneeXfo data['handleXfo'] = handleXfo data['ankleXfo'] = ankleXfo data['toeXfo'] = toeXfo data['upVXfo'] = upVXfo data['femurLen'] = femurLen data['shinLen'] = shinLen return data