[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25836] trunk/blender/source/blender/ editors/mesh: Fix #20604: Make Normals Consistent (Ctrl N) doesn' t respect selection.

Brecht Van Lommel brecht at blender.org
Fri Jan 8 15:41:32 CET 2010


Revision: 25836
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25836
Author:   blendix
Date:     2010-01-08 15:41:32 +0100 (Fri, 08 Jan 2010)

Log Message:
-----------
Fix #20604: Make Normals Consistent (Ctrl N) doesn't respect selection.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh_add.c
    trunk/blender/source/blender/editors/mesh/editmesh_mods.c
    trunk/blender/source/blender/editors/mesh/mesh_intern.h

Modified: trunk/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_add.c	2010-01-08 14:40:47 UTC (rev 25835)
+++ trunk/blender/source/blender/editors/mesh/editmesh_add.c	2010-01-08 14:41:32 UTC (rev 25836)
@@ -1265,7 +1265,7 @@
 	EM_select_flush(em); /* flushes vertex -> edge -> face selection */
 	
 	if(type!=PRIM_PLANE && type!=PRIM_MONKEY)
-		righthandfaces(em, 1);	/* otherwise monkey has eyes in wrong direction */
+		EM_recalc_normal_direction(em, 0, 0);	/* otherwise monkey has eyes in wrong direction */
 
 	BKE_mesh_end_editmesh(obedit->data, em);
 }

Modified: trunk/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2010-01-08 14:40:47 UTC (rev 25835)
+++ trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2010-01-08 14:41:32 UTC (rev 25836)
@@ -3800,8 +3800,7 @@
 
 /* **************** NORMALS ************** */
 
-/* XXX value of select is messed up, it means two things */
-void righthandfaces(EditMesh *em, int select)	/* makes faces righthand turning */
+void EM_recalc_normal_direction(EditMesh *em, int inside, int select)	/* makes faces righthand turning */
 {
 	EditEdge *eed, *ed1, *ed2, *ed3, *ed4;
 	EditFace *efa, *startvl;
@@ -3893,17 +3892,13 @@
 			cent_tri_v3(cent, startvl->v1->co, startvl->v2->co, startvl->v3->co);
 		}
 		/* first normal is oriented this way or the other */
-		if(select) {
-			if(select==2) {
-				if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] > 0.0) flipface(em, startvl);
-			}
-			else {
-				if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] < 0.0) flipface(em, startvl);
-			}
+		if(inside) {
+			if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] > 0.0) flipface(em, startvl);
 		}
-		else if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] < 0.0) flipface(em, startvl);
+		else {
+			if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] < 0.0) flipface(em, startvl);
+		}
 
-
 		eed= startvl->e1;
 		if(eed->v1==startvl->v1) eed->f2= 1; 
 		else eed->f2= 2;
@@ -4012,7 +4007,7 @@
 }
 
 
-static int righthandfaces_exec(bContext *C, wmOperator *op)
+static int normals_make_consistent_exec(bContext *C, wmOperator *op)
 {
 	Object *obedit= CTX_data_edit_object(C);
 	EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
@@ -4020,7 +4015,7 @@
 	/* 'standard' behaviour - check if selected, then apply relevant selection */
 	
 	// XXX  need other args
-	righthandfaces(em, RNA_boolean_get(op->ptr, "inside"));
+	EM_recalc_normal_direction(em, RNA_boolean_get(op->ptr, "inside"), 1);
 	
 	BKE_mesh_end_editmesh(obedit->data, em);
 
@@ -4038,7 +4033,7 @@
 	ot->idname= "MESH_OT_normals_make_consistent";
 	
 	/* api callbacks */
-	ot->exec= righthandfaces_exec;
+	ot->exec= normals_make_consistent_exec;
 	ot->poll= ED_operator_editmesh;
 	
 	/* flags */

Modified: trunk/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_intern.h	2010-01-08 14:40:47 UTC (rev 25835)
+++ trunk/blender/source/blender/editors/mesh/mesh_intern.h	2010-01-08 14:41:32 UTC (rev 25836)
@@ -172,7 +172,7 @@
 extern EditEdge *findnearestedge(ViewContext *vc, int *dist);
 extern void EM_automerge(Scene *scene, Object *obedit, int update);
 void editmesh_select_by_material(EditMesh *em, int index);
-void righthandfaces(EditMesh *em, int select);	/* makes faces righthand turning */
+void EM_recalc_normal_direction(EditMesh *em, int inside, int select);	/* makes faces righthand turning */
 void EM_select_more(EditMesh *em);
 void selectconnected_mesh_all(EditMesh *em);
 void faceloop_select(EditMesh *em, EditEdge *startedge, int select);





More information about the Bf-blender-cvs mailing list