[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39385] trunk/blender: fix [#28225] Solidify Modifier creates wrong results when vertex group is attached

Campbell Barton ideasman42 at gmail.com
Sun Aug 14 08:43:58 CEST 2011


Revision: 39385
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39385
Author:   campbellbarton
Date:     2011-08-14 06:43:58 +0000 (Sun, 14 Aug 2011)
Log Message:
-----------
fix [#28225] Solidify Modifier creates wrong results when vertex group is attached

infact this is not really a bug, irrespective zero vertex group weights gave overlapping geometry which isn't useful, add an option to set the thickness factor for zero weighted verts.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py
    trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
    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_solidify.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py	2011-08-14 05:52:13 UTC (rev 39384)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py	2011-08-14 06:43:58 UTC (rev 39385)
@@ -73,7 +73,7 @@
         ob = context.object
         mesh = context.mesh
         space = context.space_data
-
+        layout.prop(context.scene.tool_settings, "mesh_select_mode", index=0, text="Vertex")
         if ob:
             layout.template_ID(ob, "data")
         elif mesh:

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2011-08-14 05:52:13 UTC (rev 39384)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2011-08-14 06:43:58 UTC (rev 39385)
@@ -577,13 +577,13 @@
         sub = col.column()
         sub.active = bool(md.vertex_group)
         sub.prop(md, "invert_vertex_group", text="Invert")
+        sub.prop(md, "thickness_vertex_group", text="Factor")
 
         col.prop(md, "use_even_offset")
         col.prop(md, "use_quality_normals")
         col.prop(md, "use_rim")
 
         sub = col.column()
-        sub.label()
         row = sub.split(align=True, percentage=0.4)
         row.prop(md, "material_offset", text="")
         row = row.row()

Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2011-08-14 05:52:13 UTC (rev 39384)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2011-08-14 06:43:58 UTC (rev 39385)
@@ -712,16 +712,16 @@
 typedef struct SolidifyModifierData {
 	ModifierData modifier;
 
-	char defgrp_name[32];		/* name of vertex group to use */
+	char defgrp_name[32];	/* name of vertex group to use */
 	float offset;			/* new surface offset level*/
 	float offset_fac;		/* midpoint of the offset  */
+	float offset_fac_vg;	/* factor for the minimum weight to use when vgroups are used, avoids 0.0 weights giving duplicate geometry */
 	float crease_inner;
 	float crease_outer;
 	float crease_rim;
 	int flag;
 	short mat_ofs;
 	short mat_ofs_rim;
-	int pad;
 } SolidifyModifierData;
 
 #define MOD_SOLIDIFY_RIM			(1<<0)

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2011-08-14 05:52:13 UTC (rev 39384)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2011-08-14 06:43:58 UTC (rev 39385)
@@ -2265,6 +2265,13 @@
 	RNA_def_property_ui_text(prop, "Thickness", "Thickness of the shell");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
+	prop= RNA_def_property(srna, "thickness_vertex_group", PROP_FLOAT, PROP_FACTOR);
+	RNA_def_property_float_sdna(prop, NULL, "offset_fac_vg");
+	RNA_def_property_range(prop, 0.0, 1.0);
+	RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
+	RNA_def_property_ui_text(prop, "Vertex Group Factor", "Thickness factor to use for zero vertex group influence");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
 	prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_FACTOR);
 	RNA_def_property_float_sdna(prop, NULL, "offset_fac");
 	RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2011-08-14 05:52:13 UTC (rev 39384)
+++ trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2011-08-14 06:43:58 UTC (rev 39385)
@@ -232,8 +232,10 @@
 
 	float (*vert_nors)[3]= NULL;
 
-	float const ofs_orig=				- (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
-	float const ofs_new= smd->offset	- (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
+	const float ofs_orig=				- (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
+	const float ofs_new= smd->offset	- (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
+	const float offset_fac_vg= smd->offset_fac_vg;
+	const float offset_fac_vg_inv= 1.0f - smd->offset_fac_vg;
 
 	/* weights */
 	MDeformVert *dvert, *dv= NULL;
@@ -391,8 +393,9 @@
 			dv= dvert;
 			for(i=0; i<numVerts; i++, mv++) {
 				if(dv) {
-					if(defgrp_invert)	scalar_short_vgroup = scalar_short * (1.0f - defvert_find_weight(dv, defgrp_index));
-					else				scalar_short_vgroup = scalar_short * defvert_find_weight(dv, defgrp_index);
+					if(defgrp_invert)	scalar_short_vgroup = 1.0f - defvert_find_weight(dv, defgrp_index);
+					else				scalar_short_vgroup = defvert_find_weight(dv, defgrp_index);
+					scalar_short_vgroup= (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) * scalar_short;
 					dv++;
 				}
 				VECADDFAC(mv->co, mv->co, mv->no, scalar_short_vgroup);
@@ -405,8 +408,9 @@
 			dv= dvert;
 			for(i=0; i<numVerts; i++, mv++) {
 				if(dv) {
-					if(defgrp_invert)	scalar_short_vgroup = scalar_short * (1.0f - defvert_find_weight(dv, defgrp_index));
-					else				scalar_short_vgroup = scalar_short * defvert_find_weight(dv, defgrp_index);
+					if(defgrp_invert)	scalar_short_vgroup = 1.0f - defvert_find_weight(dv, defgrp_index);
+					else				scalar_short_vgroup = defvert_find_weight(dv, defgrp_index);
+					scalar_short_vgroup= (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) * scalar_short;
 					dv++;
 				}
 				VECADDFAC(mv->co, mv->co, mv->no, scalar_short_vgroup);
@@ -466,15 +470,21 @@
 
 		/* vertex group support */
 		if(dvert) {
+			float scalar;
+
 			dv= dvert;
 			if(defgrp_invert) {
 				for(i=0; i<numVerts; i++, dv++) {
-					vert_angles[i] *= (1.0f - defvert_find_weight(dv, defgrp_index));
+					scalar= 1.0f - defvert_find_weight(dv, defgrp_index);
+					scalar= offset_fac_vg + (scalar * offset_fac_vg_inv);
+					vert_angles[i] *= scalar;
 				}
 			}
 			else {
 				for(i=0; i<numVerts; i++, dv++) {
-					vert_angles[i] *= defvert_find_weight(dv, defgrp_index);
+					scalar= defvert_find_weight(dv, defgrp_index);
+					scalar= offset_fac_vg + (scalar * offset_fac_vg_inv);
+					vert_angles[i] *= scalar;
 				}
 			}
 		}




More information about the Bf-blender-cvs mailing list