2.5
authorMichael Fox <mfoxdogg@gmail.com>
Wed, 18 Feb 2009 01:50:26 +0000 (01:50 +0000)
committerMichael Fox <mfoxdogg@gmail.com>
Wed, 18 Feb 2009 01:50:26 +0000 (01:50 +0000)
******
added a ARMATURE_OT_bone_add operator, ita generic operator to add a bone it behaves the same way as the old add bone (making a bone not set the tail but have it selected), commiting this so other add bone ops like add bonre pinative or making new armature

source/blender/editors/armature/armature_intern.h
source/blender/editors/armature/armature_ops.c
source/blender/editors/armature/editarmature.c

index ace30fab20e6c904ca95ebd78f379c67bd061e77..8b5f6f5985a83750d2f16cd8f8bd52854a85f219 100644 (file)
@@ -32,7 +32,7 @@
 struct wmOperatorType;
 
 /* editarmature.c */
-
+void ARMATURE_OT_bone_add(struct wmOperatorType *ot);
 void ARMATURE_OT_align_bones(struct wmOperatorType *ot);
 void ARMATURE_OT_calculate_roll(struct wmOperatorType *ot);
 void ARMATURE_OT_switch_direction(struct wmOperatorType *ot);
index ffd547806baa99e99553eca496cd7bf60c3c8a55..b396e16ac72bc659454ba563cbdc1bd63a75aa23 100644 (file)
@@ -108,6 +108,8 @@ void ARMATURE_OT_test(wmOperatorType *ot)
 void ED_operatortypes_armature(void)
 {
        /* EDIT ARMATURE */
+       WM_operatortype_append(ARMATURE_OT_bone_add);
+       
        WM_operatortype_append(ARMATURE_OT_align_bones);
        WM_operatortype_append(ARMATURE_OT_calculate_roll);
        WM_operatortype_append(ARMATURE_OT_switch_direction);
index 68e9cb6ab5aff630b44b1761503f5581aacf19bc..393d1771c0bc54f729a231aee00ee75d406d0cf5 100644 (file)
@@ -2977,6 +2977,60 @@ void extrude_armature(Scene *scene, int forked)
 //     Transform();
        
 }
+/* ********************** Bone Add ********************/
+
+/*op makes a new bone and returns it with its tip selected */
+
+static int armature_bone_add_exec(bContext *C, wmOperator *op) 
+{
+       Object *ob= CTX_data_edit_object(C);
+       bArmature *arm= (bArmature *)ob->data;
+       EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone");
+       char name[32];
+        
+       RNA_string_get(op->ptr, "name", name);
+
+       BLI_strncpy(bone->name, name, 32);
+       unique_editbone_name(arm->edbo, bone->name);
+       
+       BLI_addtail(arm->edbo, bone);
+       
+       bone->flag |= BONE_TIPSEL;
+       bone->weight= 1.0f;
+       bone->dist= 0.25f;
+       bone->xwidth= 0.1f;
+       bone->zwidth= 0.1f;
+       bone->ease1= 1.0f;
+       bone->ease2= 1.0f;
+       bone->rad_head= 0.10f;
+       bone->rad_tail= 0.05f;
+       bone->segments= 1;
+       bone->layer= arm->layer;
+       
+       armature_sync_selection(arm->edbo);
+
+       WM_event_add_notifier(C, NC_OBJECT, ob);
+       
+       return OPERATOR_FINISHED;
+}
+
+void ARMATURE_OT_bone_add(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Add Bone";
+       ot->idname= "ARMATURE_OT_bone_add";
+       
+       /* api callbacks */
+       ot->exec = armature_bone_add_exec;
+       ot->poll = ED_operator_editarmature;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       
+       RNA_def_string(ot->srna, "name", "Bone", 32, "Name", "Name of the newly created bone");
+       
+}
+
 
 /* ----------- */