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:
authorBastien Montagne <montagne29@wanadoo.fr>2014-04-07 14:10:37 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2014-04-07 14:17:01 +0400
commit8714ae09f89426242ecd0c65f3291de1a2b51fc4 (patch)
tree9bb7eae32b739ff7972670909271e81fa10fa186 /source/blender/blenkernel/intern/constraint.c
parentf3db0389c02bf9fec7a195fa5c2767e81337e3b2 (diff)
Fix T39563: Tiny unit-display problem in constraint panels.
There is no good solution here, since RNA props can only have one type/unit. Tried to find the less worse one - have different RNA props for same DNA value (a bit like the angle/length for camera lens). Also fixed two other issues with Transform conctraint: * Angle were still in degrees (yes, another backward-compatibility breacking). * Scale was absolute, unlike loc/rot. Also cleaned up a bit the code, replaced some magic numbers by proper enums, ...
Diffstat (limited to 'source/blender/blenkernel/intern/constraint.c')
-rw-r--r--source/blender/blenkernel/intern/constraint.c44
1 files changed, 18 insertions, 26 deletions
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 7ec00352853..2b486f64b61 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3206,7 +3206,7 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
/* obtain target effect */
switch (data->from) {
- case 2: /* scale */
+ case TRANS_SCALE:
mat4_to_size(dvec, ct->matrix);
if (is_negative_m4(ct->matrix)) {
@@ -3218,11 +3218,11 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
negate_v3(dvec);
}
break;
- case 1: /* rotation (convert to degrees first) */
+ case TRANS_ROTATION:
mat4_to_eulO(dvec, cob->rotOrder, ct->matrix);
- mul_v3_fl(dvec, RAD2DEGF(1.0f)); /* rad -> deg */
break;
- default: /* location */
+ case TRANS_LOCATION:
+ default:
copy_v3_v3(dvec, ct->matrix[3]);
break;
}
@@ -3255,32 +3255,24 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
/* apply transforms */
switch (data->to) {
- case 2: /* scaling */
- for (i = 0; i < 3; i++)
- size[i] = data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i]));
+ case TRANS_SCALE:
+ for (i = 0; i < 3; i++) {
+ /* multiply with original scale (so that it can still be scaled) */
+ size[i] *= data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i]));
+ }
break;
- case 1: /* rotation */
+ case TRANS_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 */
- val = tmin + (sval[(int)data->map[i]] * (tmax - tmin));
-
- /* now convert final value back to radians, and add to original rotation (so that it can still be rotated) */
- eul[i] += DEG2RADF(val);
+ /* add to original rotation (so that it can still be rotated) */
+ eul[i] += data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i]));
}
break;
- default: /* location */
- /* get new location */
- for (i = 0; i < 3; i++)
- loc[i] = (data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i])));
-
- /* add original location back on (so that it can still be moved) */
- add_v3_v3v3(loc, cob->matrix[3], loc);
+ case TRANS_LOCATION:
+ default:
+ for (i = 0; i < 3; i++) {
+ /* add to original location (so that it can still be moved) */
+ loc[i] += (data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i])));
+ }
break;
}