[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48654] branches/soc-2012-sushi: Add volume preservation flag in UI

Alexander Pinzon apinzonf at gmail.com
Thu Jul 5 18:22:02 CEST 2012


Revision: 48654
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48654
Author:   apinzonf
Date:     2012-07-05 16:22:01 +0000 (Thu, 05 Jul 2012)
Log Message:
-----------
Add volume preservation flag in UI

Modified Paths:
--------------
    branches/soc-2012-sushi/release/scripts/startup/bl_ui/properties_data_modifier.py
    branches/soc-2012-sushi/source/blender/bmesh/intern/bmesh_opdefines.c
    branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c
    branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c
    branches/soc-2012-sushi/source/blender/makesdna/DNA_modifier_types.h
    branches/soc-2012-sushi/source/blender/makesrna/intern/rna_modifier.c
    branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c

Modified: branches/soc-2012-sushi/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- branches/soc-2012-sushi/release/scripts/startup/bl_ui/properties_data_modifier.py	2012-07-05 15:23:39 UTC (rev 48653)
+++ branches/soc-2012-sushi/release/scripts/startup/bl_ui/properties_data_modifier.py	2012-07-05 16:22:01 UTC (rev 48654)
@@ -317,11 +317,13 @@
         layout.prop(md, "lamb")
         layout.prop(md, "lambdaborder")
         layout.prop(md, "minarea")
-        layout.label(text="Axis:")
         row = layout.row()
+        row.label(text="Axis: ")
         row.prop(md, "use_x")
         row.prop(md, "use_y")
         row.prop(md, "use_z")
+        row = layout.row()
+        row.prop(md, "volume_preservation")
         layout.label(text="Vertex Group:")
         layout.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
 

Modified: branches/soc-2012-sushi/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/soc-2012-sushi/source/blender/bmesh/intern/bmesh_opdefines.c	2012-07-05 15:23:39 UTC (rev 48653)
+++ branches/soc-2012-sushi/source/blender/bmesh/intern/bmesh_opdefines.c	2012-07-05 16:22:01 UTC (rev 48654)
@@ -125,6 +125,7 @@
 	 {BMO_OP_SLOT_BOOL, "use_y"}, //Smooth object along Y axis
 	 {BMO_OP_SLOT_BOOL, "use_z"}, //Smooth object along Z axis
 	 {BMO_OP_SLOT_MAPPING, "vertex_group"}, // Vertex group with weights for every vertice.
+	 {BMO_OP_SLOT_BOOL, "volume_preservation"}, //Apply volume preservation after smooth
 	{0} /* null-terminating sentinel */,
 	},
 	bmo_smooth_laplacian_vert_exec,

Modified: branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c
===================================================================
--- branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c	2012-07-05 15:23:39 UTC (rev 48653)
+++ branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c	2012-07-05 16:22:01 UTC (rev 48654)
@@ -476,7 +476,7 @@
 {
 	int i;
 	int m_vertex_id;
-	int usex, usey, usez;
+	int usex, usey, usez, volumepreservation;
 	float lambda, lambda_border;
 	float vini, vend;
 	float w;
@@ -498,6 +498,7 @@
 	usex = BMO_slot_bool_get(op, "use_x");
 	usey = BMO_slot_bool_get(op, "use_y");
 	usez = BMO_slot_bool_get(op, "use_z");
+	volumepreservation = BMO_slot_bool_get(op, "volume_preservation");
 
 
 	nlNewContext();
@@ -549,7 +550,9 @@
 	nlEnd(NL_SYSTEM);
 
 	if (nlSolveAdvanced(NULL, NL_TRUE) ) {
-		vini = compute_volume(bm, op);
+		if(volumepreservation){
+			vini = compute_volume(bm, op);
+		}
 		BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) {
 			m_vertex_id = BM_elem_index_get(v);
 			if (usex) {
@@ -562,8 +565,10 @@
 				v->co[2] =  nlGetVariable(2, m_vertex_id);
 			}
 		}
-		vend = compute_volume(bm, op);
-		volume_preservation(bm, op, vini, vend, usex, usey, usez);
+		if(volumepreservation){
+			vend = compute_volume(bm, op);
+			volume_preservation(bm, op, vini, vend, usex, usey, usez);
+		}
 	}
 		
 	delete_laplacian_system(sys);

Modified: branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c	2012-07-05 15:23:39 UTC (rev 48653)
+++ branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c	2012-07-05 16:22:01 UTC (rev 48654)
@@ -1600,7 +1600,7 @@
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BMEdit_FromObject(obedit);
 	ModifierData *md;
-	int usex = TRUE, usey = TRUE, usez = TRUE;
+	int usex = TRUE, usey = TRUE, usez = TRUE, volume_preservation = TRUE;
 	int i, repeat;
 	float lambda = 0.1f;
 	float lambda_border = 0.1f;
@@ -1630,13 +1630,14 @@
 	usex = RNA_boolean_get(op->ptr, "use_x");
 	usey = RNA_boolean_get(op->ptr, "use_y");
 	usez = RNA_boolean_get(op->ptr, "use_z");
+	volume_preservation = RNA_boolean_get(op->ptr, "volume_preservation");
 	if (!repeat)
 		repeat = 1;
 	
 	for (i = 0; i < repeat; i++) {
 		if (!EDBM_op_callf(em, op,
-		                   "smooth_laplacian_vert verts=%hv lambda=%f lambda_border=%f min_area=%f use_x=%b use_y=%b use_z=%b",
-		                   BM_ELEM_SELECT, lambda, lambda_border, min_area, usex, usey, usez))
+		                   "smooth_laplacian_vert verts=%hv lambda=%f lambda_border=%f min_area=%f use_x=%b use_y=%b use_z=%b volume_preservation=%b",
+		                   BM_ELEM_SELECT, lambda, lambda_border, min_area, usex, usey, usez, volume_preservation))
 		{
 			return OPERATOR_CANCELLED;
 		}
@@ -1678,6 +1679,7 @@
 	RNA_def_boolean(ot->srna, "use_x", 1, "Smooth X Axis", "Smooth object along	X axis");
 	RNA_def_boolean(ot->srna, "use_y", 1, "Smooth Y Axis", "Smooth object along	Y axis");
 	RNA_def_boolean(ot->srna, "use_z", 1, "Smooth Z Axis", "Smooth object along	Z axis");
+	RNA_def_boolean(ot->srna, "volume_preservation", 1, "Volume Preservation", "Apply volume preservation after smooth");
 
 }
 

Modified: branches/soc-2012-sushi/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- branches/soc-2012-sushi/source/blender/makesdna/DNA_modifier_types.h	2012-07-05 15:23:39 UTC (rev 48653)
+++ branches/soc-2012-sushi/source/blender/makesdna/DNA_modifier_types.h	2012-07-05 16:22:01 UTC (rev 48654)
@@ -1098,6 +1098,7 @@
 #define MOD_LAPLACIANSMOOTH_X (1<<1)
 #define MOD_LAPLACIANSMOOTH_Y (1<<2)
 #define MOD_LAPLACIANSMOOTH_Z (1<<3)
+#define MOD_LAPLACIANSMOOTH_VOLUME_PRESERVATION (1<<4)
 
 typedef struct LaplacianSmoothModifierData {
 	ModifierData modifier;

Modified: branches/soc-2012-sushi/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- branches/soc-2012-sushi/source/blender/makesrna/intern/rna_modifier.c	2012-07-05 15:23:39 UTC (rev 48653)
+++ branches/soc-2012-sushi/source/blender/makesrna/intern/rna_modifier.c	2012-07-05 16:22:01 UTC (rev 48654)
@@ -1776,6 +1776,11 @@
 	RNA_def_property_ui_text(prop, "Z", "Smooth object along Z axis");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
+	prop = RNA_def_property(srna, "volume_preservation", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_LAPLACIANSMOOTH_VOLUME_PRESERVATION);
+	RNA_def_property_ui_text(prop, "Volume Preservation", "Apply volume preservation after smooth");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
 	prop = RNA_def_property(srna, "lamb", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_sdna(prop, NULL, "lambda");
 	RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);

Modified: branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c
===================================================================
--- branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c	2012-07-05 15:23:39 UTC (rev 48653)
+++ branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c	2012-07-05 16:22:01 UTC (rev 48654)
@@ -200,7 +200,7 @@
 	smd->lambda_border = 0.00005f;
 	smd->min_area = 0.00001f;
 	smd->repeat = 1;
-	smd->flag = MOD_LAPLACIANSMOOTH_X | MOD_LAPLACIANSMOOTH_Y | MOD_LAPLACIANSMOOTH_Z;
+	smd->flag = MOD_LAPLACIANSMOOTH_X | MOD_LAPLACIANSMOOTH_Y | MOD_LAPLACIANSMOOTH_Z | MOD_LAPLACIANSMOOTH_VOLUME_PRESERVATION;
 	smd->defgrp_name[0] = '\0';
 }
 
@@ -579,7 +579,9 @@
 
 		if (nlSolveAdvanced(NULL, NL_TRUE)) {
 			float vini, vend;
-			vini = compute_volume(vertexCos, sys->mfaces, sys->numFaces);
+			if (smd->flag & MOD_LAPLACIANSMOOTH_VOLUME_PRESERVATION) {
+				vini = compute_volume(vertexCos, sys->mfaces, sys->numFaces);
+			}
 			for (i = 0; i < numVerts; i++) {
 				if (smd->flag & MOD_LAPLACIANSMOOTH_X) {
 					vertexCos[i][0] = nlGetVariable(0, i);
@@ -591,8 +593,10 @@
 					vertexCos[i][2] = nlGetVariable(2, i);
 				}
 			}
-			vend = compute_volume(vertexCos, sys->mfaces, sys->numFaces);
-			volume_preservation(vertexCos, numVerts, vini, vend, smd->flag);
+			if (smd->flag & MOD_LAPLACIANSMOOTH_VOLUME_PRESERVATION) {
+				vend = compute_volume(vertexCos, sys->mfaces, sys->numFaces);
+				volume_preservation(vertexCos, numVerts, vini, vend, smd->flag);
+			}
 		}
 		nlDeleteContext(sys->context);
 		sys->context = NULL;




More information about the Bf-blender-cvs mailing list