[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59412] trunk/blender/source/blender/bmesh : add dissolve option to triangle fill operator, running dissolve after scanfill isn' t so simple because of errors if one edge can't merge.

Campbell Barton ideasman42 at gmail.com
Fri Aug 23 13:10:47 CEST 2013


Revision: 59412
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59412
Author:   campbellbarton
Date:     2013-08-23 11:10:46 +0000 (Fri, 23 Aug 2013)
Log Message:
-----------
add dissolve option to triangle fill operator, running dissolve after scanfill isn't so simple because of errors if one edge can't merge.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    trunk/blender/source/blender/bmesh/operators/bmo_triangulate.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-08-23 10:19:58 UTC (rev 59411)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2013-08-23 11:10:46 UTC (rev 59412)
@@ -1597,6 +1597,7 @@
 	"triangle_fill",
 	/* slots_in */
 	{{"use_beauty", BMO_OP_SLOT_BOOL},
+	 {"use_dissolve", BMO_OP_SLOT_BOOL},  /* dissolve resulting faces */
 	 {"edges", BMO_OP_SLOT_ELEMENT_BUF, {BM_EDGE}},    /* input edges */
 	 {"normal", BMO_OP_SLOT_VEC},  /* optionally pass the fill normal to use */
 	 {{'\0'}},

Modified: trunk/blender/source/blender/bmesh/operators/bmo_triangulate.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_triangulate.c	2013-08-23 10:19:58 UTC (rev 59411)
+++ trunk/blender/source/blender/bmesh/operators/bmo_triangulate.c	2013-08-23 11:10:46 UTC (rev 59412)
@@ -59,6 +59,7 @@
 void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op)
 {
 	const bool use_beauty = BMO_slot_bool_get(op->slots_in, "use_beauty");
+	const bool use_dissolve = BMO_slot_bool_get(op->slots_in, "use_dissolve");
 	BMOIter siter;
 	BMEdge *e;
 	ScanFillContext sf_ctx;
@@ -133,4 +134,22 @@
 	}
 	
 	BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "geom.out", BM_EDGE | BM_FACE, ELE_NEW);
+
+	if (use_dissolve) {
+		BMO_ITER (e, &siter, op->slots_out, "geom.out", BM_EDGE) {
+			BMFace *f_new;
+			f_new = BM_faces_join_pair(bm, e->l->f,
+			                           e->l->radial_next->f, e,
+			                           false); /* join faces */
+			if (f_new) {
+				BMO_elem_flag_enable(bm, f_new, ELE_NEW);
+				BM_edge_kill(bm, e);
+			}
+			else {
+				BMO_error_clear(bm);
+			}
+		}
+
+		BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "geom.out", BM_EDGE | BM_FACE, ELE_NEW);
+	}
 }




More information about the Bf-blender-cvs mailing list