Index: source/blender/editors/armature/editarmature.c =================================================================== --- source/blender/editors/armature/editarmature.c (Revision 34599) +++ source/blender/editors/armature/editarmature.c (Arbeitskopie) @@ -398,15 +398,15 @@ /* remove zero sized bones, this gives instable restposes */ for (eBone=arm->edbo->first; eBone; eBone= neBone) { - float len= len_v3v3(eBone->head, eBone->tail); - neBone= eBone->next; + float len = len_v3v3(eBone->head, eBone->tail); + neBone = eBone->next; if (len <= 0.000001f) { /* FLT_EPSILON is too large? */ EditBone *fBone; /* Find any bones that refer to this bone */ for (fBone=arm->edbo->first; fBone; fBone= fBone->next) { - if (fBone->parent==eBone) - fBone->parent= eBone->parent; + if (fBone->parent == eBone) + fBone->parent = eBone->parent; } if (G.f & G_DEBUG) printf("Warning: removed zero sized bone: %s\n", eBone->name); @@ -416,59 +416,52 @@ /* Copy the bones from the editData into the armature */ for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { - newBone= MEM_callocN(sizeof(Bone), "bone"); - eBone->temp= newBone; /* Associate the real Bones with the EditBones */ + newBone = MEM_callocN(sizeof(Bone), "bone"); + /* Associate the real Bones with the EditBones */ + eBone->temp = newBone; + BLI_strncpy(newBone->name, eBone->name, sizeof(newBone->name)); - memcpy(newBone->head, eBone->head, sizeof(newBone->head)); - memcpy(newBone->tail, eBone->tail, sizeof(newBone->tail)); - newBone->flag= eBone->flag; + newBone->flag = eBone->flag; if (eBone == arm->act_edbone) { - newBone->flag |= BONE_SELECTED; /* important, editbones can be active with only 1 point selected */ - arm->act_edbone= NULL; - arm->act_bone= newBone; + /* important, editbones can be active with only 1 point selected */ + newBone->flag |= BONE_SELECTED; + arm->act_edbone = NULL; + arm->act_bone = newBone; } newBone->roll = 0.0f; - newBone->weight = eBone->weight; newBone->dist = eBone->dist; - newBone->xwidth = eBone->xwidth; newBone->zwidth = eBone->zwidth; - newBone->ease1= eBone->ease1; - newBone->ease2= eBone->ease2; - newBone->rad_head= eBone->rad_head; - newBone->rad_tail= eBone->rad_tail; - newBone->segments= eBone->segments; + newBone->ease1 = eBone->ease1; + newBone->ease2 = eBone->ease2; + newBone->rad_head = eBone->rad_head; + newBone->rad_tail = eBone->rad_tail; + newBone->segments = eBone->segments; newBone->layer = eBone->layer; if(eBone->prop) - newBone->prop= IDP_CopyProperty(eBone->prop); + newBone->prop = IDP_CopyProperty(eBone->prop); } /* Fix parenting in a separate pass to ensure ebone->bone connections are valid at this point */ - for (eBone=arm->edbo->first;eBone;eBone=eBone->next) { - newBone= (Bone *)eBone->temp; + for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { + newBone = (Bone *)eBone->temp; if (eBone->parent) { - newBone->parent= (Bone *)eBone->parent->temp; + newBone->parent = (Bone *)eBone->parent->temp; BLI_addtail(&newBone->parent->childbase, newBone); - { - float M_boneRest[3][3]; float M_parentRest[3][3]; float iM_parentRest[3][3]; - float delta[3]; + float delta[3]; /* Get the parent's matrix (rotation only) */ sub_v3_v3v3(delta, eBone->parent->tail, eBone->parent->head); vec_roll_to_mat3(delta, eBone->parent->roll, M_parentRest); - - /* Get this bone's matrix (rotation only) */ - sub_v3_v3v3(delta, eBone->tail, eBone->head); - vec_roll_to_mat3(delta, eBone->roll, M_boneRest); - + /* Invert the parent matrix */ invert_m3_m3(iM_parentRest, M_parentRest); @@ -481,8 +474,11 @@ } } /* ...otherwise add this bone to the armature's bonebase */ - else + else { + memcpy(newBone->head, eBone->head, sizeof(newBone->head)); + memcpy(newBone->tail, eBone->tail, sizeof(newBone->tail)); BLI_addtail(&arm->bonebase, newBone); + } } /* Make a pass through the new armature to fix rolling */