[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56579] trunk/blender/source/blender: mesh dissolve vertices: option to split off corners of surrounding faces, makes the result more localized to the area around the vertex.

Campbell Barton ideasman42 at gmail.com
Wed May 8 16:01:39 CEST 2013


Revision: 56579
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56579
Author:   campbellbarton
Date:     2013-05-08 14:01:38 +0000 (Wed, 08 May 2013)
Log Message:
-----------
mesh dissolve vertices: option to split off corners of surrounding faces, makes the result more localized to the area around the vertex.

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

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-05-08 13:48:57 UTC (rev 56578)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-05-08 14:01:38 UTC (rev 56579)
@@ -842,6 +842,7 @@
 	"dissolve_verts",
 	/* slots_in */
 	{{"verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}},
+	 {"use_face_split", BMO_OP_SLOT_BOOL},
 	 {{'\0'}},
 	},
 	{{{'\0'}}},  /* no output */

Modified: trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c	2013-05-08 13:48:57 UTC (rev 56578)
+++ trunk/blender/source/blender/bmesh/operators/bmo_dissolve.c	2013-05-08 14:01:38 UTC (rev 56579)
@@ -359,10 +359,32 @@
 	BMIter iter, fiter;
 	BMVert *v;
 	BMFace *f;
-	/* int i; */
 
+	const bool use_face_split = BMO_slot_bool_get(op->slots_in, "use_face_split");
+
+
 	BMO_slot_buffer_flag_enable(bm, op->slots_in, "verts", BM_VERT, VERT_MARK);
 	
+	if (use_face_split) {
+		BMIter liter;
+		BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+			if (BMO_elem_flag_test(bm, v, VERT_MARK)) {
+				if (BM_vert_edge_count(v) > 2) {
+					BMLoop *l;
+					BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) {
+						if (l->f->len > 3) {
+							if (BMO_elem_flag_test(bm, l->next->v, VERT_MARK) == 0 &&
+								BMO_elem_flag_test(bm, l->prev->v, VERT_MARK) == 0)
+							{
+								BM_face_split(bm, l->f, l->next->v, l->prev->v, NULL, NULL, true);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
 	for (v = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); v; v = BM_iter_step(&iter)) {
 		if (BMO_elem_flag_test(bm, v, VERT_MARK)) {
 			/* check if it's a two-valence ver */

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-05-08 13:48:57 UTC (rev 56578)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-05-08 14:01:38 UTC (rev 56579)
@@ -2803,7 +2803,9 @@
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BKE_editmesh_from_object(obedit);
 
-	if (!EDBM_op_callf(em, op, "dissolve_verts verts=%hv", BM_ELEM_SELECT))
+	const bool use_face_split = RNA_boolean_get(op->ptr, "use_face_split");
+
+	if (!EDBM_op_callf(em, op, "dissolve_verts verts=%hv use_face_split=%b", BM_ELEM_SELECT, use_face_split))
 		return OPERATOR_CANCELLED;
 
 	EDBM_update_generic(em, true, true);
@@ -2824,6 +2826,9 @@
 
 	/* flags */
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+	RNA_def_boolean(ot->srna, "use_face_split", 0, "Face Split",
+	                "Split off face corners to maintain surrounding geometry");
 }
 
 static int edbm_dissolve_edges_exec(bContext *C, wmOperator *op)




More information about the Bf-blender-cvs mailing list