[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