[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17286] branches/animsys2/source/blender: AnimSys2: Assorted IPO-code housekeeping

Joshua Leung aligorith at gmail.com
Sun Nov 2 13:12:04 CET 2008


Revision: 17286
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17286
Author:   aligorith
Date:     2008-11-02 13:12:03 +0100 (Sun, 02 Nov 2008)

Log Message:
-----------
AnimSys2: Assorted IPO-code housekeeping

* Cleaned up more of the IPO-code. There's still a LOT of messy code lying around that needs attention

* Restored the double recalculation for curve handles when inserting keyframes, in light of some comments I discovered in messy code

* 'Alpha' sliders are now available when setting the colour of curve handles to help differentiate them from the keyframes. 

* Silenced compiler warnings in transform code due to changes in types for BezTriple vars

Modified Paths:
--------------
    branches/animsys2/source/blender/include/transform.h
    branches/animsys2/source/blender/src/editipo.c
    branches/animsys2/source/blender/src/keyframing.c
    branches/animsys2/source/blender/src/space.c

Modified: branches/animsys2/source/blender/include/transform.h
===================================================================
--- branches/animsys2/source/blender/include/transform.h	2008-11-02 11:01:45 UTC (rev 17285)
+++ branches/animsys2/source/blender/include/transform.h	2008-11-02 12:12:03 UTC (rev 17286)
@@ -138,8 +138,8 @@
 
 /* we need to store 2 handles for each transdata incase the other handle wasnt selected */
 typedef struct TransDataCurveHandleFlags {
-	short ih1, ih2;
-	short *h1, *h2;
+	char ih1, ih2;
+	char *h1, *h2;
 } TransDataCurveHandleFlags;
 
 

Modified: branches/animsys2/source/blender/src/editipo.c
===================================================================
--- branches/animsys2/source/blender/src/editipo.c	2008-11-02 11:01:45 UTC (rev 17285)
+++ branches/animsys2/source/blender/src/editipo.c	2008-11-02 12:12:03 UTC (rev 17286)
@@ -1265,15 +1265,15 @@
 
 /* ****************** EditIpo ************************ */
 
+/* bad globals only really used here! */
 int totipo_edit=0, totipo_sel=0, totipo_curve=0, totipo_vis=0, totipo_vert=0, totipo_vertsel=0, totipo_key=0, totipo_keysel=0;
 
 void get_status_editipo(void)
 {
 	EditIpo *ei;
-	IpoKey *ik;
-	BezTriple *bezt;
 	int a, b;
 	
+	/* reset all globals first (bad globals!) */
 	totipo_vis= 0;
 	totipo_curve= 0;
 	totipo_sel= 0;
@@ -1283,48 +1283,55 @@
 	totipo_key= 0;
 	totipo_keysel= 0;
 	
-	if(G.sipo->ipo && G.sipo->ipo->id.lib) return;
+	/* sanity check - cannot edit lib-linked IPO */
+	if (G.sipo->ipo && G.sipo->ipo->id.lib) return;
 	
+	/* sanity check - an editipo might not exist for some reason */
 	ei= G.sipo->editipo;
-	if(ei==0) return;
-	for(a=0; a<G.sipo->totipo; a++) {
-		if( ei->flag & IPO_VISIBLE ) {
+	if (ei == NULL) return;
+	
+	for (a=0; a<G.sipo->totipo; a++, ei++) {
+		if (ei->flag & IPO_VISIBLE ) {
 			totipo_vis++;
-			if(ei->flag & IPO_SELECT) totipo_sel++;
-			if(ei->icu && ei->icu->totvert) totipo_curve++;
-			if(G.sipo->showkey || (ei->flag & IPO_EDIT)) {
-				
+			if (ei->flag & IPO_SELECT) totipo_sel++;
+			if (ei->icu && ei->icu->totvert) totipo_curve++;
+			
+			if ((G.sipo->showkey) || (ei->flag & IPO_EDIT)) {
 				/* if showkey: do count the vertices (for grab) */
-				if(G.sipo->showkey==0) totipo_edit++;
+				if (G.sipo->showkey==0) totipo_edit++;
 				
-				if(ei->icu) {
-					if(ei->icu->bezt) {
-						bezt= ei->icu->bezt;
-						b= ei->icu->totvert;
-						while(b--) {
-							if(ei->icu->ipo==IPO_BEZ) {
-								if(bezt->f1 & SELECT) totipo_vertsel++;
-								if(bezt->f3 & SELECT) totipo_vertsel++;
-								totipo_vert+= 2;
-							}
-							if(bezt->f2 & SELECT) totipo_vertsel++;
-							
+				if (ei->icu && ei->icu->bezt) {
+					IpoCurve *icu= ei->icu;
+					BezTriple *bezt=icu->bezt, *prevbezt=NULL;
+					
+					for (b=0; b < icu->totvert; b++, prevbezt=bezt, bezt++) {
+						/* first handle only visible if previous segment had handles */
+						if ( (!prevbezt && (bezt->ipo==IPO_BEZ)) || (prevbezt && (prevbezt->ipo==IPO_BEZ)) ) {
+							if(bezt->f1 & SELECT) totipo_vertsel++;
 							totipo_vert++;
-							bezt++;
 						}
+						
+						/* second handle only visible if this segment is bezier */
+						if (bezt->ipo == IPO_BEZ) {
+							if (bezt->f3 & SELECT) totipo_vertsel++;
+							totipo_vert++;
+						}
+						
+						/* keyframe itself is always visible */
+						if (bezt->f2 & SELECT) totipo_vertsel++;
+						totipo_vert++;
 					}
 				}
 			}
 		}
-		ei++;
 	}
 	
-	if(G.sipo->showkey) {
-		ik= G.sipo->ipokey.first;
-		while(ik) {
+	if (G.sipo->showkey) {
+		IpoKey *ik;
+		
+		for (ik= G.sipo->ipokey.first; ik; ik= ik->next) {
 			totipo_key++;
-			if(ik->flag & 1) totipo_keysel++;
-			ik= ik->next;
+			if (ik->flag & SELECT) totipo_keysel++;
 		}
 	}
 }
@@ -1337,17 +1344,18 @@
 	int a;
 	
 	ei= G.sipo->editipo;
-	if(ei) {
-		for(a=0; a<G.sipo->totipo; a++, ei++) {
-			if(ei->icu) ei->icu->flag= ei->flag;
+	if (ei) {
+		for (a=0; a<G.sipo->totipo; a++, ei++) {
+			if (ei->icu) 
+				ei->icu->flag= ei->flag;
 		}
 	}
-	if(G.sipo->showkey) {
-		ik= G.sipo->ipokey.first;
-		while(ik) {
-			for(a=0; a<G.sipo->totipo; a++) {
-				if(ik->data[a]) {
-					if(ik->flag & 1) {
+	
+	if (G.sipo->showkey) {
+		for (ik= G.sipo->ipokey.first; ik; ik= ik->next) {
+			for (a=0; a<G.sipo->totipo; a++) {
+				if (ik->data[a]) {
+					if (ik->flag & SELECT) {
 						BEZ_SEL(ik->data[a]);
 					}
 					else {
@@ -1355,7 +1363,6 @@
 					}
 				}
 			}
-			ik= ik->next;
 		}
 	}
 }
@@ -1367,7 +1374,7 @@
 	int a; /*  , tot= 0, ok= 0; */
 	
 	/* after showkey immediately go to editing of selected points */
-	if(G.sipo->showkey) {
+	if (G.sipo->showkey) {
 		G.sipo->showkey= 0;
 		if(G.sipo->ipo) G.sipo->ipo->showkey= 0;
 		ei= G.sipo->editipo;
@@ -1378,7 +1385,7 @@
 	
 	get_status_editipo();
 	
-	if(G.sipo->ipo && G.sipo->ipo->id.lib) return;
+	if (G.sipo->ipo && G.sipo->ipo->id.lib) return;
 	
 	ei= G.sipo->editipo;
 	for(a=0; a<G.sipo->totipo; a++, ei++) {		
@@ -2172,18 +2179,18 @@
 		ei->flag |= IPO_SELECT|IPO_VISIBLE;
 		ei->icu->flag= ei->flag;
 		ei->icu->extrap= IPO_DIR;
-
+		
 		do_ipo_buttons(B_IPOHOME);
 	}
 	else {
 		ei= G.sipo->editipo;
 		for(nr=0; nr<G.sipo->totipo; nr++, ei++) {
 			if (ISPOIN(ei, flag & IPO_VISIBLE, icu)) {
-			
+				
 				ok= 0;
 				if(G.sipo->showkey) ok= 1;
 				else if(ei->flag & IPO_SELECT) ok= 1;
-
+				
 				if(ok) {
 					/* count amount */
 					if(event==1) tot= 1;
@@ -2195,8 +2202,7 @@
 							ik= ik->next;
 						}
 					}
-					if(tot) {
-					
+					if (tot) {
 						/* correction for ob timeoffs */
 						cfra= frame_to_float(CFRA);
 						id= G.sipo->from;	
@@ -2230,16 +2236,14 @@
 						}
 						else {
 							fp= insertvals;
-							ik= G.sipo->ipokey.first;
-							while(ik) {
-								if(ik->flag & 1) {
+							for (ik= G.sipo->ipokey.first; ik; ik= ik->next) {
+								if (ik->flag & SELECT) {
 									calc_ipo(G.sipo->ipo, ik->val);
-
+									
 									fp[0]= ik->val;
 									fp[1]= ei->icu->curval;
 									fp+= 2;
 								}
-								ik= ik->next;
 							}
 						}
 						fp= insertvals;

Modified: branches/animsys2/source/blender/src/keyframing.c
===================================================================
--- branches/animsys2/source/blender/src/keyframing.c	2008-11-02 11:01:45 UTC (rev 17285)
+++ branches/animsys2/source/blender/src/keyframing.c	2008-11-02 12:12:03 UTC (rev 17286)
@@ -331,6 +331,12 @@
 	 */
 	if (a < 0) return;
 	
+	/* don't recalculate handles if fast is set
+	 *	- this is a hack to make importers faster
+	 *	- we may calculate twice (see editipo_changed(), due to autohandle needing two calculations)
+	 */
+	if (!fast) calchandles_ipocurve(icu);
+	
 	/* set handletype and interpolation */
 	if (icu->totvert > 2) {
 		BezTriple *bezt= (icu->bezt + a);
@@ -351,6 +357,12 @@
 		}
 		else
 			bezt->ipo= icu->ipo;
+			
+		/* don't recalculate handles if fast is set
+		 *	- this is a hack to make importers faster
+		 *	- we may calculate twice (see editipo_changed(), due to autohandle needing two calculations)
+		 */
+		if (!fast) calchandles_ipocurve(icu);
 	}
 	else {
 		BezTriple *bezt= (icu->bezt + a);
@@ -358,13 +370,6 @@
 		/* set interpolation directly from ipo-curve */
 		bezt->ipo= icu->ipo;
 	}
-	
-	/* don't recalculate handles if fast is set
-	 *	- this is a hack to make importers faster
-	 *	- in past handles were calculated twice... only once now at end should be sufficient! 
-	 */
-	// TODO: importers should add to a bpoint array allocated once instead 
-	if (!fast) calchandles_ipocurve(icu);
 }
 
 /* ------------------- Get Data ------------------------ */

Modified: branches/animsys2/source/blender/src/space.c
===================================================================
--- branches/animsys2/source/blender/src/space.c	2008-11-02 11:01:45 UTC (rev 17285)
+++ branches/animsys2/source/blender/src/space.c	2008-11-02 12:12:03 UTC (rev 17286)
@@ -3579,7 +3579,7 @@
 	}
 	else {
 		uiBlockBeginAlign(block);
-		if ELEM9(th_curcol, TH_PANEL, TH_LAMP, TH_FACE, TH_FACE_SELECT, TH_EDITMESH_ACTIVE, TH_MENU_BACK, TH_MENU_HILITE, TH_MENU_ITEM, TH_NODE) {
+		if ELEM11(th_curcol, TH_PANEL, TH_LAMP, TH_FACE, TH_FACE_SELECT, TH_EDITMESH_ACTIVE, TH_MENU_BACK, TH_MENU_HILITE, TH_MENU_ITEM, TH_NODE, TH_HANDLE_VERTEX_SELECT, TH_HANDLE_VERTEX) {
 			uiDefButC(block, NUMSLI, B_UPDATE_THEME,"A ",	465,y3+25,200,20,  col+3, 0.0, 255.0, B_THEMECOL, 0, "");
 		}
 		uiDefButC(block, NUMSLI, B_UPDATE_THEME,"R ",	465,y3,200,20,  col, 0.0, 255.0, B_THEMECOL, 0, "");





More information about the Bf-blender-cvs mailing list