[Bf-blender-cvs] [2a25676] master: Fix for inset bug (edge rail had feedback loop with direction)

Campbell Barton noreply at git.blender.org
Fri Mar 28 11:38:41 CET 2014


Commit: 2a2567616876a9fa4561143d731875801a2df8e3
Author: Campbell Barton
Date:   Fri Mar 28 21:30:22 2014 +1100
https://developer.blender.org/rB2a2567616876a9fa4561143d731875801a2df8e3

Fix for inset bug (edge rail had feedback loop with direction)

also disable edge-rail by default.

===================================================================

M	source/blender/bmesh/operators/bmo_inset.c
M	source/blender/editors/mesh/editmesh_inset.c

===================================================================

diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c
index a255c53..343d6cd 100644
--- a/source/blender/bmesh/operators/bmo_inset.c
+++ b/source/blender/bmesh/operators/bmo_inset.c
@@ -395,6 +395,9 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op)
 	const float thickness          = BMO_slot_float_get(op->slots_in, "thickness");
 	const float depth              = BMO_slot_float_get(op->slots_in, "depth");
 
+	/* store vert coords in normals, needed for 'use_edge_rail' */
+#define USE_VERTNORMAL_HACK
+
 	int edge_info_len = 0;
 
 	BMIter iter;
@@ -453,6 +456,11 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op)
 
 			BM_elem_index_set(e, -1); /* set_dirty! */
 		}
+
+#ifdef USE_VERTNORMAL_HACK
+			copy_v3_v3(e->v1->no, e->v1->co);
+			copy_v3_v3(e->v2->no, e->v2->co);
+#endif
 	}
 	bm->elem_index_dirty |= BM_EDGE;
 
@@ -564,6 +572,9 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op)
 
 				/* in some cases the edge doesn't split off */
 				if (r_vout_len == 1) {
+#ifdef USE_VERTNORMAL_HACK
+					copy_v3_v3(vout[0]->no, vout[0]->co);
+#endif
 					MEM_freeN(vout);
 					continue;
 				}
@@ -575,6 +586,10 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op)
 					int vert_edge_tag_tot = 0;
 					int vecpair[2];
 
+#ifdef USE_VERTNORMAL_HACK
+					copy_v3_v3(v_split->no, v_split->co);
+#endif
+
 					/* find adjacent */
 					BM_ITER_ELEM (e, &iter, v_split, BM_EDGES_OF_VERT) {
 						if (BM_elem_flag_test(e, BM_ELEM_TAG) &&
@@ -628,7 +643,17 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op)
 								if (l_other_a->v == l_other_b->v) {
 									/* both edges faces are adjacent, but we don't need to know the shared edge
 									 * having both verts is enough. */
-									sub_v3_v3v3(tvec, l_other_a->v->co, v_split->co);
+									const float *co_other;
+
+									/* note that we can't use 'l_other_a->v' directly since it
+									 * may be inset and give a feedback loop. */
+#ifdef USE_VERTNORMAL_HACK
+									co_other = l_other_a->v->no;
+#else
+									co_other = l_other_a->v->co;
+#endif
+
+									sub_v3_v3v3(tvec, co_other, v_split->co);
 									is_mid = false;
 								}
 								else if (compare_v3v3(f_a->no, f_b->no, 0.001f) == false) {
diff --git a/source/blender/editors/mesh/editmesh_inset.c b/source/blender/editors/mesh/editmesh_inset.c
index 2ca5301..aa3a2c8 100644
--- a/source/blender/editors/mesh/editmesh_inset.c
+++ b/source/blender/editors/mesh/editmesh_inset.c
@@ -503,7 +503,7 @@ void MESH_OT_inset(wmOperatorType *ot)
 	RNA_def_boolean(ot->srna, "use_boundary",        true, "Boundary",  "Inset face boundaries");
 	RNA_def_boolean(ot->srna, "use_even_offset",     true, "Offset Even",      "Scale the offset to give more even thickness");
 	RNA_def_boolean(ot->srna, "use_relative_offset", false, "Offset Relative", "Scale the offset by surrounding geometry");
-	RNA_def_boolean(ot->srna, "use_edge_rail",     true, "Edge Rail", "Inset the region along existing edges");
+	RNA_def_boolean(ot->srna, "use_edge_rail",       false, "Edge Rail", "Inset the region along existing edges");
 
 	prop = RNA_def_float(ot->srna, "thickness", 0.01f, 0.0f, FLT_MAX, "Thickness", "", 0.0f, 10.0f);
 	/* use 1 rather then 10 for max else dragging the button moves too far */




More information about the Bf-blender-cvs mailing list