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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to