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:
authorMartin Poirier <theeth@yahoo.com>2008-11-14 06:13:40 +0300
committerMartin Poirier <theeth@yahoo.com>2008-11-14 06:13:40 +0300
commit7401c57fb36b5f807c84ba0a6af7d981a6794ec6 (patch)
tree8e1cd2cac050bb66e3c725ad934c908023f4b0b0
parentfece3f5e9716c4c214941e236eb8e94297031f14 (diff)
Transform Roll Fixes for editbone. Special case for rotation, we don't need to guess in those case and the result is better if we use the real rotation.
-rw-r--r--source/blender/src/transform_generics.c47
1 files changed, 30 insertions, 17 deletions
diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c
index d8bc2158faa..229889d15ff 100644
--- a/source/blender/src/transform_generics.c
+++ b/source/blender/src/transform_generics.c
@@ -509,24 +509,34 @@ void recalcData(TransInfo *t)
}
}
- /* fix roll */
- for(i = 0; i < t->total; i++, td++)
+
+ if (t->mode != TFM_BONE_ROLL)
{
- if (td->extra)
+ /* fix roll */
+ for(i = 0; i < t->total; i++, td++)
{
- float vec[3], up_axis[3];
- float qrot[4];
-
- ebo = td->extra;
-
- VecSubf(vec, ebo->tail, ebo->head);
- Normalize(vec);
- RotationBetweenVectorsToQuat(qrot, td->axismtx[1], vec);
-
- VECCOPY(up_axis, td->axismtx[2]);
- QuatMulVecf(qrot, up_axis);
-
- ebo->roll = rollBoneToVector(ebo, up_axis);
+ if (td->extra)
+ {
+ float vec[3], up_axis[3];
+ float qrot[4];
+
+ ebo = td->extra;
+ VECCOPY(up_axis, td->axismtx[2]);
+
+ if (t->mode != TFM_ROTATION)
+ {
+ VecSubf(vec, ebo->tail, ebo->head);
+ Normalize(vec);
+ RotationBetweenVectorsToQuat(qrot, td->axismtx[1], vec);
+ QuatMulVecf(qrot, up_axis);
+ }
+ else
+ {
+ Mat3MulVecfl(t->mat, up_axis);
+ }
+
+ ebo->roll = rollBoneToVector(ebo, up_axis);
+ }
}
}
@@ -844,7 +854,10 @@ void restoreTransObjects(TransInfo *t)
((VObjectData*)vnode->data)->flag |= SCALE_SEND_READY;
}
#endif
- }
+ }
+
+ Mat3One(t->mat);
+
recalcData(t);
}