[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55137] trunk/blender/source/blender: bmesh operator 'contextual_create' wasn' t flagging single faces that were created ( caused glitch in some cases with recent create-select functionality).

Campbell Barton ideasman42 at gmail.com
Sat Mar 9 15:42:10 CET 2013


Revision: 55137
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55137
Author:   campbellbarton
Date:     2013-03-09 14:42:10 +0000 (Sat, 09 Mar 2013)
Log Message:
-----------
bmesh operator 'contextual_create' wasn't flagging single faces that were created (caused glitch in some cases with recent create-select functionality).

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/operators/bmo_create.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c

Modified: trunk/blender/source/blender/bmesh/operators/bmo_create.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_create.c	2013-03-09 14:14:20 UTC (rev 55136)
+++ trunk/blender/source/blender/bmesh/operators/bmo_create.c	2013-03-09 14:42:10 UTC (rev 55137)
@@ -1491,6 +1491,7 @@
 			if (use_smooth) {
 				BM_elem_flag_enable(f, BM_ELEM_SMOOTH);
 			}
+			BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "faces.out", BM_FACE, ELE_OUT);
 		}
 
 		MEM_freeN(vert_arr);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-03-09 14:14:20 UTC (rev 55136)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-03-09 14:42:10 UTC (rev 55137)
@@ -1143,7 +1143,7 @@
 		}
 
 		if (found) {
-			BMEdge *ed_pair[3] = {NULL};
+			BMEdge *ed_pair[3];
 			if (
 			    ((edbm_add_edge_face_exec__vert_edge_lookup(v, NULL, ed_pair, 3, BM_edge_is_wire) == 2) &&
 			     (BM_edge_share_face_check(ed_pair[0], ed_pair[1]) == false)) ||
@@ -1152,8 +1152,13 @@
 			     (BM_edge_share_face_check(ed_pair[0], ed_pair[1]) == false))
 			    )
 			{
+				BMEdge *e_other = BM_edge_exists(BM_edge_other_vert(ed_pair[0], v),
+				                                 BM_edge_other_vert(ed_pair[1], v));
 				BM_edge_select_set(bm, ed_pair[0], true);
 				BM_edge_select_set(bm, ed_pair[1], true);
+				if (e_other) {
+					BM_edge_select_set(bm, e_other, true);
+				}
 				return (BMElem *)v;
 			}
 		}
@@ -1169,22 +1174,27 @@
 			}
 		}
 		if (found) {
-			BMEdge *ed_pair_a[2] = {NULL};
-			BMEdge *ed_pair_b[2] = {NULL};
+			BMEdge *ed_pair_v1[2];
+			BMEdge *ed_pair_v2[2];
 			if (
-			    ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_a, 2, BM_edge_is_wire) == 1) &&
-			     (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_b, 2, BM_edge_is_wire) == 1) &&
-			     (BM_edge_share_face_check(e, ed_pair_a[0]) == false) &&
-			     (BM_edge_share_face_check(e, ed_pair_b[0]) == false)) ||
+			    ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_v1, 2, BM_edge_is_wire) == 1) &&
+			     (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_v2, 2, BM_edge_is_wire) == 1) &&
+			     (BM_edge_share_face_check(e, ed_pair_v1[0]) == false) &&
+			     (BM_edge_share_face_check(e, ed_pair_v2[0]) == false)) ||
 
-			    ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_a, 2, BM_edge_is_boundary) == 1) &&
-			     (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_b, 2, BM_edge_is_boundary) == 1) &&
-			     (BM_edge_share_face_check(e, ed_pair_a[0]) == false) &&
-			     (BM_edge_share_face_check(e, ed_pair_b[0]) == false))
+			    ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_v1, 2, BM_edge_is_boundary) == 1) &&
+			     (edbm_add_edge_face_exec__vert_edge_lookup(e->v2, e, ed_pair_v2, 2, BM_edge_is_boundary) == 1) &&
+			     (BM_edge_share_face_check(e, ed_pair_v1[0]) == false) &&
+			     (BM_edge_share_face_check(e, ed_pair_v2[0]) == false))
 			    )
 			{
-				BM_edge_select_set(bm, ed_pair_a[0], true);
-				BM_edge_select_set(bm, ed_pair_b[0], true);
+				BMEdge *e_other = BM_edge_exists(BM_edge_other_vert(ed_pair_v1[0], e->v1),
+				                                 BM_edge_other_vert(ed_pair_v2[0], e->v2));
+				BM_edge_select_set(bm, ed_pair_v1[0], true);
+				BM_edge_select_set(bm, ed_pair_v2[0], true);
+				if (e_other) {
+					BM_edge_select_set(bm, e_other, true);
+				}
 				return (BMElem *)e;
 			}
 		}




More information about the Bf-blender-cvs mailing list