[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26280] trunk/blender/source/blender/ editors: Finishing off the Transform code changes for Degrees/Radians:

Joshua Leung aligorith at gmail.com
Tue Jan 26 10:25:32 CET 2010


Revision: 26280
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26280
Author:   aligorith
Date:     2010-01-26 10:25:32 +0100 (Tue, 26 Jan 2010)

Log Message:
-----------
Finishing off the Transform code changes for Degrees/Radians:

Added flags for the mapping function offering more control over what values were affected and when. In the WIP code, the values for unselected verts were getting the restoration conversion being repeatedly applied, resulting in the values tending to zero.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_draw.c
    trunk/blender/source/blender/editors/include/ED_anim_api.h
    trunk/blender/source/blender/editors/space_graph/graph_draw.c
    trunk/blender/source/blender/editors/space_graph/graph_edit.c
    trunk/blender/source/blender/editors/space_graph/graph_select.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c

Modified: trunk/blender/source/blender/editors/animation/anim_draw.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_draw.c	2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/animation/anim_draw.c	2010-01-26 09:25:32 UTC (rev 26280)
@@ -42,6 +42,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_blenlib.h"
+#include "BLI_math.h"
 
 #include "BKE_animsys.h"
 #include "BKE_action.h"
@@ -360,44 +361,56 @@
 /* helper function for ANIM_unit_mapping_apply_fcurve -> mapping callback for unit mapping */
 static short bezt_unit_mapping_apply (BeztEditData *bed, BezTriple *bezt)
 {
-	/* mapping factor is stored in f1, only_keys option is stored in i1 */
-	short only_keys= (short)bed->i1;
+	/* mapping factor is stored in f1, flags are stored in i1 */
+	short only_keys= (bed->i1 & ANIM_UNITCONV_ONLYKEYS);
+	short sel_vs= (bed->i1 & ANIM_UNITCONV_SELVERTS);
 	float fac= bed->f1;
 	
 	/* adjust BezTriple handles only if allowed to */
 	if (only_keys == 0) {
-		bezt->vec[0][1] *= fac;
-		bezt->vec[2][1] *= fac;
+		if ((sel_vs==0) || (bezt->f1 & SELECT)) 
+			bezt->vec[0][1] *= fac;
+		if ((sel_vs==0) || (bezt->f3 & SELECT)) 
+			bezt->vec[2][1] *= fac;
 	}
 	
-	bezt->vec[1][1] *= fac;
+	if ((sel_vs == 0) || (bezt->f2 & SELECT))
+		bezt->vec[1][1] *= fac;
 	
 	return 0;
 }
 
 /* Apply/Unapply units conversions to keyframes */
-void ANIM_unit_mapping_apply_fcurve (Scene *scene, ID *id, FCurve *fcu, short restore, short only_keys)
+void ANIM_unit_mapping_apply_fcurve (Scene *scene, ID *id, FCurve *fcu, short flag)
 {
 	BeztEditData bed;
+	BeztEditFunc sel_cb;
 	float fac;
 	
 	/* calculate mapping factor, and abort if nothing to change */
-	fac= ANIM_unit_mapping_get_factor(scene, id, fcu, restore);
+	fac= ANIM_unit_mapping_get_factor(scene, id, fcu, (flag & ANIM_UNITCONV_RESTORE));
 	if (fac == 1.0f)
 		return;
 	
 	/* init edit data 
 	 *	- mapping factor is stored in f1
-	 *	- only_keys is stored in 'i1'
+	 *	- flags are stored in 'i1'
 	 */
 	memset(&bed, 0, sizeof(BeztEditData));
 	bed.f1= (float)fac;
-	bed.i1= (int)only_keys;
+	bed.i1= (int)flag;
 	
+	/* only selected? */
+	if (flag & ANIM_UNITCONV_ONLYSEL)
+		sel_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
+	else
+		sel_cb= NULL;
+	
 	/* apply to F-Curve */
-	ANIM_fcurve_keys_bezier_loop(&bed, fcu, NULL, bezt_unit_mapping_apply, NULL);
+	ANIM_fcurve_keys_bezier_loop(&bed, fcu, sel_cb, bezt_unit_mapping_apply, NULL);
 	
 	// FIXME: loop here for samples should be generalised
+	// TODO: only sel?
 	if (fcu->fpt) {
 		FPoint *fpt;
 		int i;

Modified: trunk/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_anim_api.h	2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/include/ED_anim_api.h	2010-01-26 09:25:32 UTC (rev 26280)
@@ -467,11 +467,23 @@
 /* ------------- Unit Conversion Mappings ------------- */
 /* anim_draw.c */
 
+/* flags for conversion mapping */
+typedef enum eAnimUnitConv_Flags {
+		/* restore to original internal values */
+	ANIM_UNITCONV_RESTORE	= (1<<0),
+		/* ignore handles (i.e. only touch main keyframes) */
+	ANIM_UNITCONV_ONLYKEYS	= (1<<1),
+		/* only touch selected BezTriples */
+	ANIM_UNITCONV_ONLYSEL	= (1<<2),
+		/* only touch selected vertices */
+	ANIM_UNITCONV_SELVERTS	= (1<<3),
+} eAnimUnitConv_Flags;
+
 /* Get unit conversion factor for given ID + F-Curve */
 float ANIM_unit_mapping_get_factor(struct Scene *scene, struct ID *id, struct FCurve *fcu, short restore);
 
 /* Apply/Unapply units conversions to keyframes */
-void ANIM_unit_mapping_apply_fcurve(struct Scene *scene, struct ID *id, struct FCurve *fcu, short restore, short only_keys);
+void ANIM_unit_mapping_apply_fcurve(struct Scene *scene, struct ID *id, struct FCurve *fcu, short flag);
 
 /* ------------- Utility macros ----------------------- */
 

Modified: trunk/blender/source/blender/editors/space_graph/graph_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_draw.c	2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/space_graph/graph_draw.c	2010-01-26 09:25:32 UTC (rev 26280)
@@ -561,7 +561,7 @@
 	glBegin(GL_LINE_STRIP);
 	
 	/* apply unit mapping */
-	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0, 0);
+	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0);
 	
 	/* extrapolate to left? - left-side of view comes before first keyframe? */
 	if (prevfpt->vec[0] > v2d->cur.xmin) {
@@ -622,7 +622,7 @@
 	}
 	
 	/* unapply unit mapping */
-	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 1, 0);
+	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, ANIM_UNITCONV_RESTORE);
 	
 	glEnd();
 }
@@ -641,7 +641,7 @@
 	glBegin(GL_LINE_STRIP);
 	
 	/* apply unit mapping */
-	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0, 0);
+	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0);
 	
 	/* extrapolate to left? */
 	if (prevbezt->vec[1][0] > v2d->cur.xmin) {
@@ -775,7 +775,7 @@
 	}
 	
 	/* unapply unit mapping */
-	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 1, 0);
+	ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, ANIM_UNITCONV_RESTORE);
 	
 	glEnd();
 } 
@@ -912,7 +912,7 @@
 			}
 			else if ( ((fcu->bezt) || (fcu->fpt)) && (fcu->totvert) ) { 
 				/* apply unit mapping */
-				ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, fcu, 0, 0);
+				ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, fcu, 0);
 				
 				if (fcu->bezt) {
 					/* only draw handles/vertices on keyframes */
@@ -928,7 +928,7 @@
 				}
 				
 				/* unapply unit mapping */
-				ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, fcu, 1, 0);
+				ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, fcu, ANIM_UNITCONV_RESTORE);
 			}
 		}
 		

Modified: trunk/blender/source/blender/editors/space_graph/graph_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_edit.c	2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/space_graph/graph_edit.c	2010-01-26 09:25:32 UTC (rev 26280)
@@ -1574,7 +1574,7 @@
 		AnimData *adt= ANIM_nla_mapping_get(&ac, ale);
 		
 		/* apply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, 0, 1);
+		ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYKEYS);
 		
 		if (adt) {
 			ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); 
@@ -1585,7 +1585,7 @@
 			ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL);
 		
 		/* unapply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, 1, 1);
+		ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, ANIM_UNITCONV_RESTORE|ANIM_UNITCONV_ONLYKEYS);
 	}
 	
 	BLI_freelistN(&anim_data);
@@ -1667,7 +1667,7 @@
 		AnimData *adt= ANIM_nla_mapping_get(ac, ale);
 		
 		/* apply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 0, 0);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 0);
 		
 		if (adt) {
 			ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); 
@@ -1678,7 +1678,7 @@
 			ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve);
 			
 		/* apply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 1, 0);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_RESTORE);
 	}
 	
 	BLI_freelistN(&anim_data);
@@ -1791,7 +1791,7 @@
 		AnimData *adt= ANIM_nla_mapping_get(ac, ale);
 		
 		/* apply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 0, 1);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYKEYS);
 		
 		if (adt) {
 			ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); 
@@ -1802,7 +1802,7 @@
 			ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, edit_cb, calchandles_fcurve);
 			
 		/* unapply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 1, 1);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYKEYS|ANIM_UNITCONV_RESTORE);
 	}
 	
 	BLI_freelistN(&anim_data);

Modified: trunk/blender/source/blender/editors/space_graph/graph_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_select.c	2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/space_graph/graph_select.c	2010-01-26 09:25:32 UTC (rev 26280)
@@ -248,7 +248,7 @@
 		FCurve *fcu= (FCurve *)ale->key_data;
 		
 		/* apply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 0, 1);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYKEYS);
 		
 		/* apply NLA mapping to all the keyframes, since it's easier than trying to
 		 * guess when a callback might use something different
@@ -287,7 +287,7 @@
 			ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1);
 			
 		/* unapply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 1, 1);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_RESTORE|ANIM_UNITCONV_ONLYKEYS);
 	}
 	
 	/* cleanup */
@@ -609,7 +609,7 @@
 		AnimData *adt= ANIM_nla_mapping_get(ac, ale);
 		
 		/* apply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 0, 0);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 0);
 		
 		/* try to progressively get closer to the right point... */
 		if (fcu->bezt) {
@@ -679,7 +679,7 @@
 		}
 		
 		/* unapply unit corrections */
-		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, 1, 0);
+		ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_RESTORE);
 	}
 	
 	/* free channels */

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2010-01-26 09:25:32 UTC (rev 26280)
@@ -3495,7 +3495,7 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list