[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51523] trunk/blender: add option for decimate-collapse to keep triangulated geometry ( normally quads stay as quads when not collapsed).

Campbell Barton ideasman42 at gmail.com
Tue Oct 23 07:30:13 CEST 2012


Revision: 51523
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51523
Author:   campbellbarton
Date:     2012-10-23 05:30:10 +0000 (Tue, 23 Oct 2012)
Log Message:
-----------
add option for decimate-collapse to keep triangulated geometry (normally quads stay as quads when not collapsed).

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
    trunk/blender/source/blender/bmesh/intern/bmesh_decimate.h
    trunk/blender/source/blender/bmesh/intern/bmesh_decimate_collapse.c
    trunk/blender/source/blender/makesdna/DNA_modifier_types.h
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/blender/modifiers/intern/MOD_decimate.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2012-10-23 05:20:02 UTC (rev 51522)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2012-10-23 05:30:10 UTC (rev 51523)
@@ -220,6 +220,7 @@
             row = layout.row()
             row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
             row.prop(md, "invert_vertex_group")
+            layout.prop(md, "use_triangulate")
         elif decimate_type == 'UNSUBDIV':
             layout.prop(md, "iterations")
         else:  # decimate_type == 'DISSOLVE':

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_decimate.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_decimate.h	2012-10-23 05:20:02 UTC (rev 51522)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_decimate.h	2012-10-23 05:30:10 UTC (rev 51523)
@@ -27,7 +27,7 @@
  *  \ingroup bmesh
  */
 
-void BM_mesh_decimate_collapse(BMesh *bm, const float factor, float *vweights);
+void BM_mesh_decimate_collapse(BMesh *bm, const float factor, float *vweights, const int do_triangulate);
 
 void BM_mesh_decimate_unsubdivide_ex(BMesh *bm, const int iterations, const int tag_only);
 void BM_mesh_decimate_unsubdivide(BMesh *bm, const int iterations);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_decimate_collapse.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_decimate_collapse.c	2012-10-23 05:20:02 UTC (rev 51522)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_decimate_collapse.c	2012-10-23 05:30:10 UTC (rev 51523)
@@ -855,7 +855,7 @@
  * \param vertex_weights Optional array of vertex  aligned weights [0 - 1],
  *        a vertex group is the usual source for this.
  */
-void BM_mesh_decimate_collapse(BMesh *bm, const float factor, float *vweights)
+void BM_mesh_decimate_collapse(BMesh *bm, const float factor, float *vweights, const int do_triangulate)
 {
 	Heap *eheap;             /* edge heap */
 	HeapNode **eheap_table;  /* edge index aligned table pointing to the eheap */
@@ -913,10 +913,12 @@
 
 
 #ifdef USE_TRIANGULATE
-	/* its possible we only had triangles, skip this step in that case */
-	if (LIKELY(use_triangulate)) {
-		/* temp convert quads to triangles */
-		bm_decim_triangulate_end(bm);
+	if (do_triangulate == FALSE) {
+		/* its possible we only had triangles, skip this step in that case */
+		if (LIKELY(use_triangulate)) {
+			/* temp convert quads to triangles */
+			bm_decim_triangulate_end(bm);
+		}
 	}
 #endif
 

Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2012-10-23 05:20:02 UTC (rev 51522)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2012-10-23 05:30:10 UTC (rev 51523)
@@ -374,7 +374,8 @@
 } DecimateModifierData;
 
 enum {
-	MOD_DECIM_FLAG_INVERT_VGROUP = (1 << 0)
+	MOD_DECIM_FLAG_INVERT_VGROUP = (1 << 0),
+	MOD_DECIM_FLAG_TRIANGULATE   = (1 << 1)   /* for collapse only. dont convert tri pairs back to quads */
 };
 
 enum {

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2012-10-23 05:20:02 UTC (rev 51522)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2012-10-23 05:30:10 UTC (rev 51523)
@@ -1166,6 +1166,11 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_DECIM_FLAG_INVERT_VGROUP);
 	RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "use_triangulate", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_DECIM_FLAG_TRIANGULATE);
+	RNA_def_property_ui_text(prop, "Triangulate", "Keep triangulated faces resulting from decimation");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 	/* end collapse-only option */
 
 	/* all modes use this */

Modified: trunk/blender/source/blender/modifiers/intern/MOD_decimate.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_decimate.c	2012-10-23 05:20:02 UTC (rev 51522)
+++ trunk/blender/source/blender/modifiers/intern/MOD_decimate.c	2012-10-23 05:30:10 UTC (rev 51523)
@@ -100,6 +100,8 @@
 	BMEditMesh *em;
 	BMesh *bm;
 
+	const int do_triangulate = (dmd->flag & MOD_DECIM_FLAG_TRIANGULATE) != 0;
+
 	float *vweights = NULL;
 
 #ifdef USE_TIMEIT
@@ -146,7 +148,7 @@
 
 	switch (dmd->mode) {
 		case MOD_DECIM_MODE_COLLAPSE:
-			BM_mesh_decimate_collapse(bm, dmd->percent, vweights);
+			BM_mesh_decimate_collapse(bm, dmd->percent, vweights, do_triangulate);
 			break;
 		case MOD_DECIM_MODE_UNSUBDIV:
 			BM_mesh_decimate_unsubdivide(bm, dmd->iter);




More information about the Bf-blender-cvs mailing list