[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45970] trunk/blender/source/blender/bmesh /operators/bmo_inset.c: bmesh: inset tool depth used bad normals for edge verts.

Campbell Barton ideasman42 at gmail.com
Thu Apr 26 05:40:15 CEST 2012


Revision: 45970
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45970
Author:   campbellbarton
Date:     2012-04-26 03:40:10 +0000 (Thu, 26 Apr 2012)
Log Message:
-----------
bmesh: inset tool depth used bad normals for edge verts. 

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/operators/bmo_inset.c

Modified: trunk/blender/source/blender/bmesh/operators/bmo_inset.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_inset.c	2012-04-26 03:11:15 UTC (rev 45969)
+++ trunk/blender/source/blender/bmesh/operators/bmo_inset.c	2012-04-26 03:40:10 UTC (rev 45970)
@@ -495,8 +495,6 @@
 		BM_face_copy_shared(bm, f);
 	}
 
-	MEM_freeN(edge_info);
-
 	/* we could flag new edges/verts too, is it useful? */
 	BMO_slot_buffer_from_enabled_flag(bm, op, "faceout", BM_FACE, ELE_NEW);
 
@@ -505,6 +503,28 @@
 		float (*varr_co)[3];
 		BMOIter oiter;
 
+		/* we need to re-calculate tagged normals, but for this purpose we can copy tagged verts from the
+		 * faces they inset from,  */
+		for (i = 0, es = edge_info; i < edge_info_len; i++, es++) {
+			zero_v3(es->e_new->v1->no);
+			zero_v3(es->e_new->v2->no);
+		}
+		for (i = 0, es = edge_info; i < edge_info_len; i++, es++) {
+			float *no = es->l->f->no;
+			add_v3_v3(es->e_new->v1->no, no);
+			add_v3_v3(es->e_new->v2->no, no);
+		}
+		for (i = 0, es = edge_info; i < edge_info_len; i++, es++) {
+			/* annoying, avoid normalizing twice */
+			if (len_squared_v3(es->e_new->v1->no) != 1.0f) {
+				normalize_v3(es->e_new->v1->no);
+			}
+			if (len_squared_v3(es->e_new->v2->no) != 1.0f) {
+				normalize_v3(es->e_new->v2->no);
+			}
+		}
+		/* done correcting edge verts normals */
+
 		/* untag verts */
 		BM_mesh_elem_hflag_disable_all(bm, BM_VERT, BM_ELEM_TAG, FALSE);
 
@@ -537,4 +557,6 @@
 		}
 		MEM_freeN(varr_co);
 	}
+
+	MEM_freeN(edge_info);
 }




More information about the Bf-blender-cvs mailing list