diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 4f0606ddb40..0cd13d528d5 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -3259,15 +3259,16 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t case 1: /* rotation */ for (i = 0; i < 3; i++) { float tmin, tmax; + float val; tmin = data->to_min[i]; tmax = data->to_max[i]; /* all values here should be in degrees */ - eul[i] = tmin + (sval[(int)data->map[i]] * (tmax - tmin)); + val = tmin + (sval[(int)data->map[i]] * (tmax - tmin)); - /* now convert final value back to radians */ - eul[i] = DEG2RADF(eul[i]); + /* now convert final value back to radians, and add to original rotation (so that it can still be rotated) */ + eul[i] += DEG2RADF(val); } break; default: /* location */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index b93f03bea0b..f0abd0743ac 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4563,16 +4563,17 @@ static bool constraints_list_needinv(TransInfo *t, ListBase *list) if ((con->flag & CONSTRAINT_DISABLE) == 0 && (con->enforce != 0.0f)) { /* (affirmative) returns for specific constraints here... */ /* constraints that require this regardless */ - if (ELEM5(con->type, + if (ELEM6(con->type, CONSTRAINT_TYPE_CHILDOF, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO, CONSTRAINT_TYPE_OBJECTSOLVER, - CONSTRAINT_TYPE_FOLLOWTRACK)) + CONSTRAINT_TYPE_FOLLOWTRACK, + CONSTRAINT_TYPE_TRANSFORM)) { return true; } - + /* constraints that require this only under special conditions */ if (con->type == CONSTRAINT_TYPE_ROTLIKE) { /* CopyRot constraint only does this when rotating, and offset is on */