[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14792] trunk/blender/source/blender/src: NLA Transform Bugfixes:

Joshua Leung aligorith at gmail.com
Sun May 11 15:07:40 CEST 2008


Revision: 14792
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14792
Author:   aligorith
Date:     2008-05-11 15:07:40 +0200 (Sun, 11 May 2008)

Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/src/transform_conversions.c
    trunk/blender/source/blender/src/transform_generics.c

Modified: trunk/blender/source/blender/src/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/src/transform_conversions.c	2008-05-11 12:57:01 UTC (rev 14791)
+++ trunk/blender/source/blender/src/transform_conversions.c	2008-05-11 13:07:40 UTC (rev 14792)
@@ -2726,9 +2726,10 @@
 		if (base->object->action) {
 			/* exclude if strip is selected too */
 			for (strip=base->object->nlastrips.first; strip; strip=strip->next) {
-				if (strip->flag & ACTSTRIP_SELECT)
+				if (strip->flag & ACTSTRIP_SELECT) {
 					if (strip->act == base->object->action)
 						break;
+				}
 			}
 			if (strip==NULL) {
 				cfra = get_action_frame(base->object, CFRA);
@@ -2790,9 +2791,10 @@
 		if (base->object->action) {
 			/* exclude if strip that active action belongs to is selected too */
 			for (strip=base->object->nlastrips.first; strip; strip=strip->next) {
-				if (strip->flag & ACTSTRIP_SELECT)
+				if (strip->flag & ACTSTRIP_SELECT) {
 					if (strip->act == base->object->action)
 						break;
+				}
 			}
 			
 			/* can include if no strip found */

Modified: trunk/blender/source/blender/src/transform_generics.c
===================================================================
--- trunk/blender/source/blender/src/transform_generics.c	2008-05-11 12:57:01 UTC (rev 14791)
+++ trunk/blender/source/blender/src/transform_generics.c	2008-05-11 13:07:40 UTC (rev 14792)
@@ -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 @@
 				
 				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;





More information about the Bf-blender-cvs mailing list