[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56318] trunk/blender/source/blender: fix/ feature [#35085] Loop cut slide

Campbell Barton ideasman42 at gmail.com
Fri Apr 26 17:05:20 CEST 2013


Revision: 56318
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56318
Author:   campbellbarton
Date:     2013-04-26 15:05:19 +0000 (Fri, 26 Apr 2013)
Log Message:
-----------
fix/feature [#35085] Loop cut slide

Loop cut slide now works with multicut.

issue is that since edge slide now supports more configurations, cases where loop-cut-slide silently failed before,
now slide (albeit in an awkward way at times).

Fix this my adjusting the selection of after loopcut so edge slide can properly operate on it.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c
    trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c

Modified: trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c	2013-04-26 14:43:38 UTC (rev 56317)
+++ trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c	2013-04-26 15:05:19 UTC (rev 56318)
@@ -1086,10 +1086,12 @@
 
 			for (j = 0; j < BLI_array_count(loops_split); j++) {
 				if (loops_split[j][0]) {
+					BMFace *f_new;
 					BLI_assert(BM_edge_exists(loops_split[j][0]->v, loops_split[j][1]->v) == NULL);
-
-					/* BMFace *f_new = */ /* UNUSED */
-					BM_face_split(bm, face, loops_split[j][0]->v, loops_split[j][1]->v, &l_new, NULL, false);
+					f_new = BM_face_split(bm, face, loops_split[j][0]->v, loops_split[j][1]->v, &l_new, NULL, false);
+					if (f_new) {
+						BMO_elem_flag_enable(bm, l_new->e, ELE_INNER);
+					}
 				}
 			}
 
@@ -1183,28 +1185,8 @@
 		/* deselect input */
 		BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false);
 
-		for (ele = BMO_iter_new(&iter, op.slots_out, "geom_inner.out", BM_EDGE | BM_VERT); ele; ele = BMO_iter_step(&iter)) {
-			BM_elem_select_set(bm, ele, true);
-
-			if (ele->head.htype == BM_VERT) {
-				BMEdge *e;
-				BMIter eiter;
-
-				BM_ITER_ELEM (e, &eiter, ele, BM_EDGES_OF_VERT) {
-					if (!BM_elem_flag_test(e, BM_ELEM_SELECT) &&
-					     BM_elem_flag_test(e->v1, BM_ELEM_SELECT) &&
-					     BM_elem_flag_test(e->v2, BM_ELEM_SELECT))
-					{
-						BM_edge_select_set(bm, e, true);
-					}
-					else if (BM_elem_flag_test(e, BM_ELEM_SELECT) &&
-					         (!BM_elem_flag_test(e->v1, BM_ELEM_SELECT) ||
-					          !BM_elem_flag_test(e->v2, BM_ELEM_SELECT)))
-					{
-						BM_edge_select_set(bm, e, false);
-					}
-				}
-			}
+		for (ele = BMO_iter_new(&iter, op.slots_out, "geom_inner.out", BM_EDGE); ele; ele = BMO_iter_step(&iter)) {
+			BM_edge_select_set(bm, (BMEdge *)ele, true);
 		}
 	}
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c	2013-04-26 14:43:38 UTC (rev 56317)
+++ trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c	2013-04-26 15:05:19 UTC (rev 56318)
@@ -299,8 +299,12 @@
 			/* tessface is already re-recalculated */
 			EDBM_update_generic(em, false, true);
 
+			/* we cant slide multiple edges in vertex select mode */
+			if ((cuts > 1) && (em->selectmode & SCE_SELECT_VERTEX)) {
+				/* dont flush vertex selection when we have multiple cuts, otherwise we can't slide */
+			}
 			/* force edge slide to edge select mode in in face select mode */
-			if (EDBM_selectmode_disable(lcd->vc.scene, em, SCE_SELECT_FACE, SCE_SELECT_EDGE)) {
+			else if (EDBM_selectmode_disable(lcd->vc.scene, em, SCE_SELECT_FACE, SCE_SELECT_EDGE)) {
 				/* pass, the change will flush selection */
 			}
 			else {




More information about the Bf-blender-cvs mailing list