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:
authorJoshua Leung <aligorith@gmail.com>2008-05-11 17:07:40 +0400
committerJoshua Leung <aligorith@gmail.com>2008-05-11 17:07:40 +0400
commit97e72570d11c6669e4c5a3a1627008128c85112c (patch)
treeba2889985955292057f0e2f8ffa3c8270d9b6848 /source/blender/src/transform_generics.c
parent2d96d1189fac31d634d519a6b5d925e5159f221a (diff)
NLA Transform Bugfixes:
* Scaling NLA-strips now resets their scale setting correctly at all times * Added safe-guards against negative scaling being created through the use of the transform tools. Note: at scale 0 or thereabouts, there will still be a little blip, when keyframes are scaled as if scale were 1.0f. It's quite harmless.
Diffstat (limited to 'source/blender/src/transform_generics.c')
-rw-r--r--source/blender/src/transform_generics.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c
index 1a803bf00a8..a0dde01ba8e 100644
--- a/source/blender/src/transform_generics.c
+++ b/source/blender/src/transform_generics.c
@@ -39,6 +39,7 @@
#include "DNA_lattice_types.h"
#include "DNA_mesh_types.h"
#include "DNA_modifier_types.h"
+#include "DNA_nla_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_particle_types.h"
@@ -303,10 +304,50 @@ void recalcData(TransInfo *t)
if (base->object->recalc)
base->object->ctime= -1234567.0f; // eveil!
+
+ /* recalculate scale of selected nla-strips */
+ if (base->object->nlastrips.first) {
+ Object *bob= base->object;
+ bActionStrip *strip;
+
+ for (strip= bob->nlastrips.first; strip; strip= strip->next) {
+ if (strip->flag & ACTSTRIP_SELECT) {
+ float actlen= strip->actend - strip->actstart;
+ float len= strip->end - strip->start;
+
+ strip->scale= len / (actlen * strip->repeat);
+ }
+ }
+ }
}
DAG_scene_flush_update(G.scene, screen_view3d_layers(), 0);
}
+ else {
+ for (base=G.scene->base.first; base; base=base->next) {
+ /* recalculate scale of selected nla-strips */
+ if (base->object->nlastrips.first) {
+ Object *bob= base->object;
+ bActionStrip *strip;
+
+ for (strip= bob->nlastrips.first; strip; strip= strip->next) {
+ if (strip->flag & ACTSTRIP_SELECT) {
+ float actlen= strip->actend - strip->actstart;
+ float len= strip->end - strip->start;
+
+ /* prevent 'negative' scaling */
+ if (len < 0) {
+ SWAP(float, strip->start, strip->end);
+ len= fabs(len);
+ }
+
+ /* calculate new scale */
+ strip->scale= len / (actlen * strip->repeat);
+ }
+ }
+ }
+ }
+ }
}
else if (t->spacetype == SPACE_IPO) {
EditIpo *ei;