Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2005-07-17 21:36:54 +0400
committerTon Roosendaal <ton@blender.org>2005-07-17 21:36:54 +0400
commitfdaf1c6eac741fedced835298f04d40c6974d19c (patch)
tree55a4a37c3381c51439fdcbef85f7460afc3edf48 /source/blender
parent099b3e786c7a8609812385aefe3eb0c108e42882 (diff)
Three fixes, thanks to irc reporting of Basse & Sten;
- Bone points for B-Bone drawing were not adjusted for size of Bone, now they draw same size as for other bone type - Deleting bones in editmode didn't check for constraints in Pose, causing weird collapsed poses or even crashes - ALT+S scaling on B-Bones in editmode didn't correct for the Object scale.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/src/drawarmature.c16
-rw-r--r--source/blender/src/editarmature.c41
-rwxr-xr-xsource/blender/src/transform.c2
3 files changed, 41 insertions, 18 deletions
diff --git a/source/blender/src/drawarmature.c b/source/blender/src/drawarmature.c
index 13085f17484..395cfb7340f 100644
--- a/source/blender/src/drawarmature.c
+++ b/source/blender/src/drawarmature.c
@@ -332,7 +332,7 @@ static void draw_bone_solid_octahedral(void)
/* *************** Armature drawing, bones ******************* */
-static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id, float length)
+static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id)
{
/* Draw root point if we have no IK parent */
if (!(boneflag & BONE_IK_TOPARENT)){
@@ -366,12 +366,11 @@ static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id,
BIF_ThemeColor(TH_BONE_SOLID);
}
- glTranslatef(0.0, length, 0.0);
+ glTranslatef(0.0, 1.0, 0.0);
if(dt>OB_WIRE) draw_bonevert_solid();
else draw_bonevert();
- glTranslatef(0.0, -length, 0.0);
+ glTranslatef(0.0, -1.0, 0.0);
- if(length > 0.05f) length-= 0.05f; // make vertices visible
}
static void draw_b_bone_boxes(int dt, bPoseChannel *pchan, float xwidth, float length, float zwidth)
@@ -418,7 +417,12 @@ static void draw_b_bone(int dt, int armflag, int boneflag, int constflag, unsign
/* draw points only if... */
if(armflag & ARM_EDITMODE) {
- draw_bone_points(dt, armflag, boneflag, id, length);
+ /* move to unitspace */
+ glPushMatrix();
+ glScalef(length, length, length);
+ draw_bone_points(dt, armflag, boneflag, id);
+ glPopMatrix();
+ length*= 0.95f; // make vertices visible
}
/* colors for modes */
@@ -507,7 +511,7 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned
}
- draw_bone_points(dt, armflag, boneflag, id, 1.0);
+ draw_bone_points(dt, armflag, boneflag, id);
/* now draw the bone itself */
diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c
index f0bd9e08429..e575c112746 100644
--- a/source/blender/src/editarmature.c
+++ b/source/blender/src/editarmature.c
@@ -795,7 +795,6 @@ static EditBone * get_nearest_editbonepoint (int findunsel, int *selmask)
static void delete_bone(EditBone* exBone)
{
EditBone *curBone;
- bPoseChannel *chan;
/* Find any bones that refer to this bone */
for (curBone=G.edbo.first;curBone;curBone=curBone->next){
@@ -805,27 +804,47 @@ static void delete_bone(EditBone* exBone)
}
}
- /* Erase any associated pose channel */
- if (G.obedit->pose){
- for (chan=G.obedit->pose->chanbase.first; chan; chan=chan->next){
- if (!strcmp (chan->name, exBone->name)){
- free_constraints(&chan->constraints);
- BLI_freelinkN (&G.obedit->pose->chanbase, chan);
- break;
- }
- }
- }
BLI_freelinkN (&G.edbo,exBone);
}
+static EditBone *editbone_name_exists (char *name); // proto for below
+
/* only editmode! */
void delete_armature(void)
{
EditBone *curBone, *next;
+ bConstraint *con;
TEST_EDITARMATURE;
if(okee("Erase selected bone(s)")==0) return;
+ /* First rase any associated pose channel */
+ if (G.obedit->pose){
+ bPoseChannel *chan, *next;
+ for (chan=G.obedit->pose->chanbase.first; chan; chan=next) {
+ next= chan->next;
+ curBone = editbone_name_exists (chan->name);
+
+ if (curBone && (curBone->flag&BONE_SELECTED)) {
+ free_constraints(&chan->constraints);
+ BLI_freelinkN (&G.obedit->pose->chanbase, chan);
+ }
+ else {
+ for(con= chan->constraints.first; con; con= con->next) {
+ char *subtarget = get_con_subtarget_name(con, G.obedit);
+ if (subtarget) {
+ curBone = editbone_name_exists (subtarget);
+ if (curBone && (curBone->flag&BONE_SELECTED)) {
+ con->flag |= CONSTRAINT_DISABLE;
+ subtarget[0]= 0;
+ }
+ }
+ }
+ }
+ }
+ }
+
+
for (curBone=G.edbo.first;curBone;curBone=next){
next=curBone->next;
if (curBone->flag&BONE_SELECTED)
diff --git a/source/blender/src/transform.c b/source/blender/src/transform.c
index 13945db6057..e114d13bbf4 100755
--- a/source/blender/src/transform.c
+++ b/source/blender/src/transform.c
@@ -2227,7 +2227,7 @@ static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3])
/* we've tucked the scale in loc */
oldy= td->iloc[1];
SizeToMat3(td->iloc, sizemat);
- Mat3MulMat3(tmat, smat, sizemat);
+ Mat3MulMat3(tmat, tmat, sizemat);
Mat3ToSize(tmat, td->loc);
td->loc[1]= oldy;
}