diff options
author | Joshua Leung <aligorith@gmail.com> | 2006-12-27 08:00:43 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2006-12-27 08:00:43 +0300 |
commit | ed2f161c72722b90a1c4e15f998ca678b79e94b0 (patch) | |
tree | 4007a5724d95b1b012e288db92e9f520715f721e | |
parent | 76b6a6611c930655d88962b9f3134018e9d8117c (diff) |
== Copy Rotation Constraint - Bugfix #5519 ==
Now, when only one axis toggle is on and click on it, all of the other
toggles will not be turned on.
For this to work, I've moved the version patches in the drawing/evaluation
code for this constraint to the file-reading code.
-rw-r--r-- | source/blender/blenkernel/intern/constraint.c | 3 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 68 | ||||
-rw-r--r-- | source/blender/src/buttons_object.c | 9 |
3 files changed, 49 insertions, 31 deletions
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 053aede9fe4..e8441d727d8 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -1306,9 +1306,6 @@ void evaluate_constraint (bConstraint *constraint, Object *ob, short ownertype, data = constraint->data; - /* old files stuff only... version patch is too much code! */ - if(data->flag==0) data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; - VECCOPY(loc, ob->obmat[3]); Mat4ToSize(ob->obmat, size); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 8b15623e8cd..30b319794df 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -6166,13 +6166,25 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (list){ bConstraint *curcon; for (curcon = list->first; curcon; curcon=curcon->next){ - if (curcon->type == CONSTRAINT_TYPE_MINMAX){ - bMinMaxConstraint *data = curcon->data; - if (data->sticky==1) { - data->flag|=MINMAX_STICKY; - } else { - data->flag&=~MINMAX_STICKY; + switch (curcon->type) { + case CONSTRAINT_TYPE_MINMAX: + { + bMinMaxConstraint *data = curcon->data; + if (data->sticky==1) + data->flag |= MINMAX_STICKY; + else + data->flag &= ~MINMAX_STICKY; } + break; + case CONSTRAINT_TYPE_ROTLIKE: + { + bRotateLikeConstraint *data = curcon->data; + + /* version patch from buttons_object.c */ + if(data->flag==0) + data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; + } + break; } } } @@ -6181,24 +6193,36 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (ob->pose){ bConstraint *curcon; bPoseChannel *pchan; - for (pchan = ob->pose->chanbase.first; - pchan; pchan=pchan->next){ - for (curcon = pchan->constraints.first; - curcon; curcon=curcon->next){ - if (curcon->type == CONSTRAINT_TYPE_MINMAX){ - bMinMaxConstraint *data = curcon->data; - if (data->sticky==1) { - data->flag|=MINMAX_STICKY; - } else { - data->flag&=~MINMAX_STICKY; + for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next){ + for (curcon = pchan->constraints.first; curcon; curcon=curcon->next){ + switch (curcon->type) { + case CONSTRAINT_TYPE_MINMAX: + { + bMinMaxConstraint *data = curcon->data; + if (data->sticky==1) + data->flag |= MINMAX_STICKY; + else + data->flag &= ~MINMAX_STICKY; } - } - else if (curcon->type == CONSTRAINT_TYPE_KINEMATIC){ - bKinematicConstraint *data = curcon->data; - if (!(data->flag & CONSTRAINT_IK_POS)) { - data->flag |= CONSTRAINT_IK_POS; - data->flag |= CONSTRAINT_IK_STRETCH; + break; + case CONSTRAINT_TYPE_KINEMATIC: + { + bKinematicConstraint *data = curcon->data; + if (!(data->flag & CONSTRAINT_IK_POS)) { + data->flag |= CONSTRAINT_IK_POS; + data->flag |= CONSTRAINT_IK_STRETCH; + } + } + break; + case CONSTRAINT_TYPE_ROTLIKE: + { + bRotateLikeConstraint *data = curcon->data; + + /* version patch from buttons_object.c */ + if(data->flag==0) + data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; } + break; } } } diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c index ea6df7997f5..4e29bb6510d 100644 --- a/source/blender/src/buttons_object.c +++ b/source/blender/src/buttons_object.c @@ -699,9 +699,6 @@ static void draw_constraint (uiBlock *block, ListBase *list, bConstraint *con, s { bRotateLikeConstraint *data = con->data; - /* also old files stuff... version patch is too much code! */ - if(data->flag==0) data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; - height = 66; uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, ""); @@ -723,9 +720,9 @@ static void draw_constraint (uiBlock *block, ListBase *list, bConstraint *con, s uiBlockBeginAlign(block); if (is_armature_target) uiDefButBitS(block, TOG, CONSTRAINT_LOCAL, B_CONSTRAINT_TEST, "Local", *xco+((width/2)-98), *yco-64, 50, 18, &con->flag, 0, 24, 0, 0, "Work on a Pose's local transform"); - uiDefButBitI(block, TOG, ROTLIKE_X, B_CONSTRAINT_TEST, "X", *xco+((width/2)-48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy X component"); - uiDefButBitI(block, TOG, ROTLIKE_Y, B_CONSTRAINT_TEST, "Y", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component"); - uiDefButBitI(block, TOG, ROTLIKE_Z, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component"); + but=uiDefButBitI(block, TOG, ROTLIKE_X, B_CONSTRAINT_TEST, "X", *xco+((width/2)-48), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy X component"); + but=uiDefButBitI(block, TOG, ROTLIKE_Y, B_CONSTRAINT_TEST, "Y", *xco+((width/2)-16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Y component"); + but=uiDefButBitI(block, TOG, ROTLIKE_Z, B_CONSTRAINT_TEST, "Z", *xco+((width/2)+16), *yco-64, 32, 18, &data->flag, 0, 24, 0, 0, "Copy Z component"); uiBlockEndAlign(block); } break; |