[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38301] branches/bmesh/blender/source/ blender/bmesh/operators/extrudeops.c: Extrude Bug Fixes:

Geoffrey Bantle hairbat at yahoo.com
Mon Jul 11 11:27:21 CEST 2011


Revision: 38301
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38301
Author:   briggs
Date:     2011-07-11 09:27:21 +0000 (Mon, 11 Jul 2011)
Log Message:
-----------
Extrude Bug Fixes:
----------------------------------------------
Two extrude bug fixes provided by howardt in IRC

1: Edges getting extruded in sheets did not have
consistent normals.

2: Sometimes faces created by the extrusion
process were corrupt

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c

Modified: branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c	2011-07-11 09:15:20 UTC (rev 38300)
+++ branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c	2011-07-11 09:27:21 UTC (rev 38301)
@@ -170,11 +170,11 @@
 	BMOperator dupeop, delop;
 	BMOIter siter;
 	BMIter iter, fiter, viter;
-	BMEdge *e, *newedge /* , *e2 */, *ce;
+	BMEdge *e, *newedge;
 	BMLoop *l, *l2;
 	BMVert *verts[4], *v, *v2;
 	BMFace *f;
-	int rlen, found, delorig=0 /*, i */;
+	int rlen, found, fwd, delorig=0;
 
 	/*initialize our sub-operators*/
 	BMO_Init_Op(&dupeop, "dupe");
@@ -204,7 +204,7 @@
 		found = 0;
 
 		BM_ITER(e, &viter, bm, BM_EDGES_OF_VERT, v) {
-			if (!BMO_TestFlag(bm, e, EXT_INPUT)) {
+			if (!BMO_TestFlag(bm, e, EXT_INPUT) || !BMO_TestFlag(bm, e, EXT_DEL)){
 				found = 1;
 				break;
 			}
@@ -254,10 +254,17 @@
 		newedge = BMO_IterMapVal(&siter);
 		newedge = *(BMEdge**)newedge;
 		if (!newedge) continue;
-		if (!newedge->l) ce = e;
-		else ce = newedge;
+
+		/* orient loop to give same normal as a loop of newedge
+		if it exists (will be an extruded face),
+		else same normal as a loop of e, if it exists */
+		if (!newedge->l)
+			fwd = !e->l || !(e->l->v == e->v1);
+		else
+			fwd = (newedge->l->v == newedge->v1);
+
 		
-		if (ce->l && (ce->l->v == ce->v1)) {
+		if (fwd) {
 			verts[0] = e->v1;
 			verts[1] = e->v2;
 			verts[2] = newedge->v2;




More information about the Bf-blender-cvs mailing list