[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32424] trunk/blender/source/blender/ editors: bugfix [#23191] Ctrl-LMB quick extrude problem with non-perpendicular edges/faces.

Campbell Barton ideasman42 at gmail.com
Tue Oct 12 05:23:45 CEST 2010


Revision: 32424
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32424
Author:   campbellbarton
Date:     2010-10-12 05:23:44 +0200 (Tue, 12 Oct 2010)

Log Message:
-----------
bugfix [#23191] Ctrl-LMB quick extrude problem with non-perpendicular edges/faces.
also remove is_mat4_flipped() from transform_manipulator.c.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh_add.c
    trunk/blender/source/blender/editors/transform/transform_manipulator.c

Modified: trunk/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_add.c	2010-10-11 22:25:28 UTC (rev 32423)
+++ trunk/blender/source/blender/editors/mesh/editmesh_add.c	2010-10-12 03:23:44 UTC (rev 32424)
@@ -141,7 +141,16 @@
 				done= 1;
 			}
 		}
-		if(done) normalize_v3(nor);
+		if(done) {
+			float view_vec[3], cross[3];
+
+			/* correct the normal to be aligned on the view plane */
+			copy_v3_v3(view_vec, vc.rv3d->viewinv[2]);
+			mul_mat3_m4_v3(vc.obedit->imat, view_vec);
+			cross_v3_v3v3(cross, nor, view_vec);
+			cross_v3_v3v3(nor, view_vec, cross);
+			normalize_v3(nor);
+		}
 		
 		/* center */
 		add_v3_v3v3(cent, min, max);

Modified: trunk/blender/source/blender/editors/transform/transform_manipulator.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_manipulator.c	2010-10-11 22:25:28 UTC (rev 32423)
+++ trunk/blender/source/blender/editors/transform/transform_manipulator.c	2010-10-12 03:23:44 UTC (rev 32424)
@@ -101,16 +101,6 @@
 #define MAN_GHOST	1
 #define MAN_MOVECOL	2
 
-
-static int is_mat4_flipped(float mat[][4])
-{
-	float vec[3];
-
-	cross_v3_v3v3(vec, mat[0], mat[1]);
-	if( dot_v3v3(vec, mat[2]) < 0.0 ) return 1;
-	return 0;
-}
-
 /* transform widget center calc helper for below */
 static void calc_tw_center(Scene *scene, float *co)
 {
@@ -753,7 +743,7 @@
 		orthogonalize_m4(omat, axis);
 		glPushMatrix();
 		glMultMatrixf(omat);
-		glFrontFace( is_mat4_flipped(omat)?GL_CW:GL_CCW);
+		glFrontFace(is_negative_m4(omat) ? GL_CW:GL_CCW);
 	}
 }
 
@@ -850,12 +840,12 @@
 		// XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat);
 		if (ortho) {
 			glMultMatrixf(matt);
-			glFrontFace( is_mat4_flipped(matt)?GL_CW:GL_CCW);
+			glFrontFace(is_negative_m4(matt) ? GL_CW:GL_CCW);
 		}
 	}
 	else {
 		if (ortho) {
-			glFrontFace( is_mat4_flipped(rv3d->twmat)?GL_CW:GL_CCW);
+			glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW:GL_CCW);
 			glMultMatrixf(rv3d->twmat);
 		}
 	}
@@ -1116,11 +1106,11 @@
 		copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3]
 		// XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat);
 		glMultMatrixf(matt);
-		glFrontFace( is_mat4_flipped(matt)?GL_CW:GL_CCW);
+		glFrontFace(is_negative_m4(matt) ? GL_CW:GL_CCW);
 	}
 	else {
 		glMultMatrixf(rv3d->twmat);
-		glFrontFace( is_mat4_flipped(rv3d->twmat)?GL_CW:GL_CCW);
+		glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW:GL_CCW);
 	}
 
 	/* axis */
@@ -1327,7 +1317,7 @@
 		glMultMatrixf(rv3d->twmat);
 	}
 
-	glFrontFace( is_mat4_flipped(rv3d->twmat)?GL_CW:GL_CCW);
+	glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW:GL_CCW);
 
 	/* axis */
 	if( (G.f & G_PICKSEL)==0 ) {





More information about the Bf-blender-cvs mailing list