def generate(self): """ Generate the rig. Do NOT modify any of the original bones, except for adding constraints. The main armature should be selected and active before this is called. """ bpy.ops.object.mode_set(mode='EDIT') # Make a control bone (copy of original). bone = copy_bone(self.obj, self.org_bone, self.org_name) # Make a deformation bone (copy of original, child of original). def_bone = copy_bone(self.obj, self.org_bone, make_deformer_name(self.org_name)) # Get edit bones eb = self.obj.data.edit_bones bone_e = eb[bone] def_bone_e = eb[def_bone] # Parent def_bone_e.use_connect = False def_bone_e.parent = eb[self.org_bone] bpy.ops.object.mode_set(mode='OBJECT') pb = self.obj.pose.bones # Constrain the original bone. con = pb[self.org_bone].constraints.new('COPY_TRANSFORMS') con.name = "copy_loc" con.target = self.obj con.subtarget = bone # Create control widget create_bone_widget(self.obj, bone)
def generate(self): """ Generate the rig. Do NOT modify any of the original bones, except for adding constraints. The main armature should be selected and active before this is called. """ bpy.ops.object.mode_set(mode='EDIT') # Create the deformation and control bone chains. # Just copies of the original chain. def_chain = [] ctrl_chain = [] for i in range(len(self.org_bones)): name = self.org_bones[i] # Control bone if self.make_controls: # Copy ctrl_bone = copy_bone(self.obj, name) eb = self.obj.data.edit_bones ctrl_bone_e = eb[ctrl_bone] # Name ctrl_bone_e.name = strip_org(name) # Parenting if i == 0: # First bone ctrl_bone_e.parent = eb[self.org_bones[0]].parent else: # The rest ctrl_bone_e.parent = eb[ctrl_chain[-1]] # Add to list ctrl_chain += [ctrl_bone_e.name] else: ctrl_chain += [None] # Deformation bone if self.make_deforms: # Copy def_bone = copy_bone(self.obj, name) eb = self.obj.data.edit_bones def_bone_e = eb[def_bone] # Name def_bone_e.name = make_deformer_name(strip_org(name)) # Parenting if i == 0: # First bone def_bone_e.parent = eb[self.org_bones[0]].parent else: # The rest def_bone_e.parent = eb[def_chain[-1]] # Add to list def_chain += [def_bone_e.name] else: def_chain += [None] bpy.ops.object.mode_set(mode='OBJECT') pb = self.obj.pose.bones # Constraints for org and def for org, ctrl, defrm in zip(self.org_bones, ctrl_chain, def_chain): if self.make_controls: con = pb[org].constraints.new('COPY_TRANSFORMS') con.name = "copy_transforms" con.target = self.obj con.subtarget = ctrl if self.make_deforms: con = pb[defrm].constraints.new('COPY_TRANSFORMS') con.name = "copy_transforms" con.target = self.obj con.subtarget = org # Create control widgets if self.make_controls: for bone in ctrl_chain: create_bone_widget(self.obj, bone)