[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24653] trunk/blender/source/blender/ editors/transform: Custom Ratio mouse input didn' t check for initialization properly, which could lead to NaN values with edge slide.

Martin Poirier theeth at yahoo.com
Wed Nov 18 18:14:56 CET 2009


Revision: 24653
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24653
Author:   theeth
Date:     2009-11-18 18:14:56 +0100 (Wed, 18 Nov 2009)

Log Message:
-----------
Custom Ratio mouse input didn't check for initialization properly, which could lead to NaN values with edge slide.

Also adding missing modal keymaps for some transform operators.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform_input.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2009-11-18 17:08:29 UTC (rev 24652)
+++ trunk/blender/source/blender/editors/transform/transform.c	2009-11-18 17:14:56 UTC (rev 24653)
@@ -555,7 +555,8 @@
 	WM_modalkeymap_assign(keymap, "TFM_OT_shrink_fatten");
 	WM_modalkeymap_assign(keymap, "TFM_OT_tilt");
 	WM_modalkeymap_assign(keymap, "TFM_OT_trackball");
-	
+	WM_modalkeymap_assign(keymap, "TFM_OT_mirror");
+	WM_modalkeymap_assign(keymap, "TFM_OT_edge_slide");
 }
 
 
@@ -4445,8 +4446,9 @@
 
 	t->customFree = freeSlideVerts;
 
+	/* set custom point first if you want value to be initialized by init */
+	setCustomPoints(t, &t->mouse, sld->end, sld->start);
 	initMouseInputMode(t, &t->mouse, INPUT_CUSTOM_RATIO);
-	setCustomPoints(t, &t->mouse, sld->end, sld->start);
 	
 	t->idx_max = 0;
 	t->num.idx_max = 0;

Modified: trunk/blender/source/blender/editors/transform/transform_input.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_input.c	2009-11-18 17:08:29 UTC (rev 24652)
+++ trunk/blender/source/blender/editors/transform/transform_input.c	2009-11-18 17:14:56 UTC (rev 24653)
@@ -165,8 +165,14 @@
 
 void setCustomPoints(TransInfo *t, MouseInput *mi, short start[2], short end[2])
 {
-	short *data = mi->data;
+	short *data;
+
+	if (mi->data == NULL) {
+		mi->data = MEM_callocN(sizeof(short) * 4, "custom points");
+	}
 	
+	data = mi->data;
+
 	data[0] = start[0];
 	data[1] = start[1];
 	data[2] = end[0];
@@ -180,28 +186,30 @@
 	short *data = mi->data;
 	short dx, dy;
 	
-	dx = data[2] - data[0];
-	dy = data[3] - data[1];
-	
-	length = (float)sqrtf(dx*dx + dy*dy);
-	
-	if (mi->precision) {
-		/* deal with Shift key by adding motion / 10 to motion before shift press */
-		short mdx, mdy;
-		mdx = (mi->precision_mval[0] + (float)(mval[0] - mi->precision_mval[0]) / 10.0f) - data[2];
-		mdy = (mi->precision_mval[1] + (float)(mval[1] - mi->precision_mval[1]) / 10.0f) - data[3];
+	if (data) {
+		dx = data[2] - data[0];
+		dy = data[3] - data[1];
 		
-		distance = (mdx*dx + mdy*dy) / length;
-	}
-	else {
-		short mdx, mdy;
-		mdx = mval[0] - data[2];
-		mdy = mval[1] - data[3];
+		length = (float)sqrtf(dx*dx + dy*dy);
 		
-		distance = (mdx*dx + mdy*dy) / length;
+		if (mi->precision) {
+			/* deal with Shift key by adding motion / 10 to motion before shift press */
+			short mdx, mdy;
+			mdx = (mi->precision_mval[0] + (float)(mval[0] - mi->precision_mval[0]) / 10.0f) - data[2];
+			mdy = (mi->precision_mval[1] + (float)(mval[1] - mi->precision_mval[1]) / 10.0f) - data[3];
+
+			distance = (mdx*dx + mdy*dy) / length;
+		}
+		else {
+			short mdx, mdy;
+			mdx = mval[0] - data[2];
+			mdy = mval[1] - data[3];
+
+			distance = (mdx*dx + mdy*dy) / length;
+		}
+
+		output[0] = distance / length;
 	}
-
-	output[0] = distance / length;
 }
 
 void InputAngle(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
@@ -335,7 +343,6 @@
 	case INPUT_CUSTOM_RATIO:
 		mi->apply = InputCustomRatio;
 		t->helpline = HLP_NONE;
-		mi->data = MEM_callocN(sizeof(short) * 4, "custom points");
 		break;
 	case INPUT_NONE:
 	default:





More information about the Bf-blender-cvs mailing list