[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12241] trunk/blender/source/blender/src/ transform.c: Bugfix #7489:

Joshua Leung aligorith at gmail.com
Tue Oct 9 07:54:31 CEST 2007


Revision: 12241
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12241
Author:   aligorith
Date:     2007-10-09 07:54:31 +0200 (Tue, 09 Oct 2007)

Log Message:
-----------
Bugfix #7489:

Warp Tool (Shift-W) suffered from 'division-by-zero' (TM) problems when there was only one element (selected object or selected vertex) to transform. 

Modified Paths:
--------------
    trunk/blender/source/blender/src/transform.c

Modified: trunk/blender/source/blender/src/transform.c
===================================================================
--- trunk/blender/source/blender/src/transform.c	2007-10-09 00:54:37 UTC (rev 12240)
+++ trunk/blender/source/blender/src/transform.c	2007-10-09 05:54:31 UTC (rev 12241)
@@ -1321,12 +1321,13 @@
 			VECCOPY(min, center);
 		}
 	}
-
+	
 	t->center[0]= (min[0]+max[0])/2.0f;
 	t->center[1]= (min[1]+max[1])/2.0f;
 	t->center[2]= (min[2]+max[2])/2.0f;
 	
-	t->val= (max[0]-min[0])/2.0f;	// t->val is free variable
+	if (max[0] == min[0]) max[0] += 0.1; /* not optimal, but flipping is better than invalid garbage (i.e. division by zero!) */
+	t->val= (max[0]-min[0])/2.0f; /* t->val is X dimension projected boundbox */
 }
 
 int Warp(TransInfo *t, short mval[2])
@@ -1357,7 +1358,7 @@
 	Mat4MulVecfl(t->viewmat, cursor);
 	VecSubf(cursor, cursor, t->viewmat[3]);
 
-	// amount of degrees for warp
+	/* amount of degrees for warp */
 	circumfac= 360.0f * InputHorizontalRatio(t, mval);
 
 	snapGrid(t, &circumfac);
@@ -1378,22 +1379,22 @@
 	
 	circumfac*= (float)(-M_PI/360.0);
 	
-	for(i = 0 ; i < t->total; i++, td++) {
+	for(i = 0; i < t->total; i++, td++) {
 		float loc[3];
 		if (td->flag & TD_NOACTION)
 			break;
-
+		
 		/* translate point to center, rotate in such a way that outline==distance */
-		
 		VECCOPY(vec, td->iloc);
 		Mat3MulVecfl(td->mtx, vec);
 		Mat4MulVecfl(t->viewmat, vec);
 		VecSubf(vec, vec, t->viewmat[3]);
 		
 		dist= vec[0]-cursor[0];
-
-		phi0= (circumfac*dist/t->val);	// t->val is X dimension projected boundbox
 		
+		/* t->val is X dimension projected boundbox */
+		phi0= (circumfac*dist/t->val);	
+		
 		vec[1]= (vec[1]-cursor[1]);
 		
 		co= (float)cos(phi0);
@@ -1405,7 +1406,7 @@
 		Mat4MulVecfl(t->viewinv, loc);
 		VecSubf(loc, loc, t->viewinv[3]);
 		Mat3MulVecfl(td->smtx, loc);
-
+		
 		VecSubf(loc, loc, td->iloc);
 		VecMulf(loc, td->factor);
 		VecAddf(td->loc, td->iloc, loc);





More information about the Bf-blender-cvs mailing list