[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44380] trunk/blender/source/blender: bmesh split tool (Ykey), was only splitting off faces, unlike EditMesh which could also split edges.

Campbell Barton ideasman42 at gmail.com
Thu Feb 23 17:00:59 CET 2012


Revision: 44380
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44380
Author:   campbellbarton
Date:     2012-02-23 16:00:53 +0000 (Thu, 23 Feb 2012)
Log Message:
-----------
bmesh split tool (Ykey), was only splitting off faces, unlike EditMesh which could also split edges.
make this behavior optional and default to off (match EditMesh).

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
    trunk/blender/source/blender/editors/mesh/bmesh_tools.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2012-02-23 15:47:18 UTC (rev 44379)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2012-02-23 16:00:53 UTC (rev 44380)
@@ -738,6 +738,7 @@
 	 {BMO_OP_SLOT_MAPPING, "boundarymap"},
 	 {BMO_OP_SLOT_MAPPING, "isovertmap"},
 	 {BMO_OP_SLOT_PNT, "dest"}, /* destination bmesh, if NULL will use current on */
+	 {BMO_OP_SLOT_BOOL, "use_only_faces"}, /* when enabled. dont duplicate loose verts/edges */
 	 {0} /* null-terminating sentine */},
 	splitop_exec,
 	0

Modified: trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_dupe.c	2012-02-23 15:47:18 UTC (rev 44379)
+++ trunk/blender/source/blender/bmesh/operators/bmo_dupe.c	2012-02-23 16:00:53 UTC (rev 44380)
@@ -379,11 +379,7 @@
 	BMOperator *splitop = op;
 	BMOperator dupeop;
 	BMOperator delop;
-	BMVert *v;
-	BMEdge *e;
-	BMFace *f;
-	BMIter iter, iter2;
-	int found;
+	const short use_only_faces = BMO_slot_bool_get(op, "use_only_faces");
 
 	/* initialize our sub-operator */
 	BMO_op_init(bm, &dupeop, "dupe");
@@ -394,30 +390,38 @@
 	
 	BMO_slot_buffer_flag_enable(bm, splitop, "geom", SPLIT_INPUT, BM_ALL);
 
-	/* make sure to remove edges and verts we don't need */
-	for (e = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); e; e = BM_iter_step(&iter)) {
-		found = 0;
-		f = BM_iter_new(&iter2, bm, BM_FACES_OF_EDGE, e);
-		for ( ; f; f = BM_iter_step(&iter2)) {
-			if (!BMO_elem_flag_test(bm, f, SPLIT_INPUT)) {
-				found = 1;
-				break;
+	if (use_only_faces) {
+		BMVert *v;
+		BMEdge *e;
+		BMFace *f;
+		BMIter iter, iter2;
+		int found;
+
+		/* make sure to remove edges and verts we don't need */
+		for (e = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); e; e = BM_iter_step(&iter)) {
+			found = 0;
+			f = BM_iter_new(&iter2, bm, BM_FACES_OF_EDGE, e);
+			for ( ; f; f = BM_iter_step(&iter2)) {
+				if (!BMO_elem_flag_test(bm, f, SPLIT_INPUT)) {
+					found = 1;
+					break;
+				}
 			}
+			if (!found) BMO_elem_flag_enable(bm, e, SPLIT_INPUT);
 		}
-		if (!found) BMO_elem_flag_enable(bm, e, SPLIT_INPUT);
-	}
-	
-	for (v = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); v; v = BM_iter_step(&iter)) {
-		found = 0;
-		e = BM_iter_new(&iter2, bm, BM_EDGES_OF_VERT, v);
-		for ( ; e; e = BM_iter_step(&iter2)) {
-			if (!BMO_elem_flag_test(bm, e, SPLIT_INPUT)) {
-				found = 1;
-				break;
+
+		for (v = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); v; v = BM_iter_step(&iter)) {
+			found = 0;
+			e = BM_iter_new(&iter2, bm, BM_EDGES_OF_VERT, v);
+			for ( ; e; e = BM_iter_step(&iter2)) {
+				if (!BMO_elem_flag_test(bm, e, SPLIT_INPUT)) {
+					found = 1;
+					break;
+				}
 			}
+			if (!found) BMO_elem_flag_enable(bm, v, SPLIT_INPUT);
+
 		}
-		if (!found) BMO_elem_flag_enable(bm, v, SPLIT_INPUT);
-
 	}
 
 	/* connect outputs of dupe to delete, exluding keep geometr */

Modified: trunk/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/bmesh_tools.c	2012-02-23 15:47:18 UTC (rev 44379)
+++ trunk/blender/source/blender/editors/mesh/bmesh_tools.c	2012-02-23 16:00:53 UTC (rev 44380)
@@ -3627,7 +3627,7 @@
 	BMEditMesh *em = ((Mesh *)ob->data)->edit_btmesh;
 	BMOperator bmop;
 
-	EDBM_InitOpf(em, &bmop, op, "split geom=%hvef", BM_ELEM_SELECT);
+	EDBM_InitOpf(em, &bmop, op, "split geom=%hvef use_only_faces=%b", BM_ELEM_SELECT, FALSE);
 	BMO_op_exec(em->bm, &bmop);
 	BM_mesh_elem_flag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT);
 	BMO_slot_buffer_hflag_enable(em->bm, &bmop, "geomout", BM_ELEM_SELECT, BM_ALL, TRUE);




More information about the Bf-blender-cvs mailing list