[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27897] trunk/blender: svn merge https:// svn.blender.org/svnroot/bf-blender/branches/render25 -r27867:27871

Campbell Barton ideasman42 at gmail.com
Wed Mar 31 09:28:25 CEST 2010


Revision: 27897
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27897
Author:   campbellbarton
Date:     2010-03-31 09:28:23 +0200 (Wed, 31 Mar 2010)

Log Message:
-----------
svn merge https://svn.blender.org/svnroot/bf-blender/branches/render25 -r27867:27871

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_data_modifier.py
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/makesdna/DNA_modifier_types.h
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c

Modified: trunk/blender/release/scripts/ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_data_modifier.py	2010-03-31 07:22:18 UTC (rev 27896)
+++ trunk/blender/release/scripts/ui/properties_data_modifier.py	2010-03-31 07:28:23 UTC (rev 27897)
@@ -625,11 +625,13 @@
         layout.label(text="See Soft Body panel.")
 
     def SOLIDIFY(self, layout, ob, md, wide_ui):
-        layout.prop(md, "offset")
 
         split = layout.split()
 
         col = split.column()
+        col.prop(md, "thickness")
+        col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
+
         col.label(text="Crease:")
         col.prop(md, "edge_crease_inner", text="Inner")
         col.prop(md, "edge_crease_outer", text="Outer")
@@ -637,7 +639,15 @@
 
         if wide_ui:
             col = split.column()
-            col.label()
+
+        col.prop(md, "offset")
+        colsub = col.column()
+        colsub.active = (md.vertex_group is not "")
+        colsub.prop(md, "invert", text="Invert")
+
+        if wide_ui:
+            col.label(text="")
+
         col.prop(md, "use_rim")
         col.prop(md, "use_even_offset")
         col.prop(md, "use_quality_normals")

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2010-03-31 07:22:18 UTC (rev 27896)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2010-03-31 07:28:23 UTC (rev 27897)
@@ -5718,6 +5718,7 @@
 	SolidifyModifierData *smd = (SolidifyModifierData*) md;
 	SolidifyModifierData *tsmd = (SolidifyModifierData*) target;
 	tsmd->offset = smd->offset;
+	tsmd->offset_fac = smd->offset_fac;
 	tsmd->crease_inner = smd->crease_inner;
 	tsmd->crease_outer = smd->crease_outer;
 	tsmd->crease_rim = smd->crease_rim;
@@ -5755,6 +5756,19 @@
 
 	float (*vert_nors)[3]= NULL;
 
+	float ofs_orig=				- (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
+	float ofs_new= smd->offset	- (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
+
+	/* weights */
+	MDeformVert *dvert= NULL, *dv= NULL;
+	int defgrp_index= -1;
+	int defgrp_invert = ((smd->flag & MOD_SOLIDIFY_VGROUP_INV) != 0);
+
+	defgrp_index= defgroup_name_index(ob, smd->defgrp_name);
+
+	if (defgrp_index >= 0)
+		dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
+
 	orig_mface = dm->getFaceArray(dm);
 	orig_medge = dm->getEdgeArray(dm);
 	orig_mvert = dm->getVertArray(dm);
@@ -5888,16 +5902,38 @@
 
 	if((smd->flag & MOD_SOLIDIFY_EVEN) == 0) {
 		/* no even thickness, very simple */
-		float scalar_short = smd->offset / 32767.0f;
+		float scalar_short;
+		float scalar_short_vgroup;
 
-		if(smd->offset < 0.0f)	mv= mvert+numVerts;
-		else					mv= mvert;
 
-		for(i=0; i<numVerts; i++, mv++) {
-			mv->co[0] += mv->no[0] * scalar_short;
-			mv->co[1] += mv->no[1] * scalar_short;
-			mv->co[2] += mv->no[2] * scalar_short;
+		if(ofs_new != 0.0f) {
+			scalar_short= scalar_short_vgroup= ofs_new / 32767.0f;
+			mv= mvert + ((ofs_new >= ofs_orig) ? 0 : numVerts);
+			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);
+					dv++;
+				}
+				VECADDFAC(mv->co, mv->co, mv->no, scalar_short_vgroup);
+			}
 		}
+
+		if(ofs_orig != 0.0f) {
+			scalar_short= scalar_short_vgroup= ofs_orig / 32767.0f;
+			mv= mvert + ((ofs_new >= ofs_orig) ? numVerts : 0); /* same as above but swapped, intentional use of 'ofs_new' */
+			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);
+					dv++;
+				}
+				VECADDFAC(mv->co, mv->co, mv->no, scalar_short_vgroup);
+			}
+		}
+
 	}
 	else {
 		/* make a face normal layer if not present */
@@ -5949,15 +5985,41 @@
 			}
 		}
 
-		if(smd->offset < 0.0f)	mv= mvert+numVerts;
-		else					mv= mvert;
+		/* vertex group support */
+		if(dvert) {
+			dv= dvert;
+			if(defgrp_invert) {
+				for(i=0; i<numVerts; i++, dv++) {
+					vert_angles[i] *= (1.0f - defvert_find_weight(dv, defgrp_index));
+				}
+			}
+			else {
+				for(i=0; i<numVerts; i++, dv++) {
+					vert_angles[i] *= defvert_find_weight(dv, defgrp_index);
+				}
+			}
+		}
 
-		for(i=0; i<numVerts; i++, mv++) {
-			if(vert_accum[i]) { /* zero if unselected */
-				madd_v3_v3fl(mv->co, vert_nors[i], smd->offset * (vert_angles[i] / vert_accum[i]));
+		if(ofs_new) {
+			mv= mvert + ((ofs_new >= ofs_orig) ? 0 : numVerts);
+
+			for(i=0; i<numVerts; i++, mv++) {
+				if(vert_accum[i]) { /* zero if unselected */
+					madd_v3_v3fl(mv->co, vert_nors[i], ofs_new * (vert_angles[i] / vert_accum[i]));
+				}
 			}
 		}
 
+		if(ofs_orig) {
+			mv= mvert + ((ofs_new >= ofs_orig) ? numVerts : 0); /* same as above but swapped, intentional use of 'ofs_new' */
+
+			for(i=0; i<numVerts; i++, mv++) {
+				if(vert_accum[i]) { /* zero if unselected */
+					madd_v3_v3fl(mv->co, vert_nors[i], ofs_orig * (vert_angles[i] / vert_accum[i]));
+				}
+			}
+		}
+
 		MEM_freeN(vert_angles);
 	}
 
@@ -7943,10 +8005,11 @@
 		MDeformVert *dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
 		float val;
 		if(dvert){
-			for(i=0; i<totvert; i++){
+			int defgrp_index= emd->vgroup-1;
+			for(i=0; i<totvert; i++, dvert++){
 				val = BLI_frand();
 				val = (1.0f-emd->protect)*val + emd->protect*0.5f;
-				if(val < defvert_find_weight(dvert+i,emd->vgroup-1))
+				if(val < defvert_find_weight(dvert, defgrp_index))
 					vertpa[i] = -1;
 			}
 		}

Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2010-03-31 07:22:18 UTC (rev 27896)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2010-03-31 07:28:23 UTC (rev 27897)
@@ -683,6 +683,7 @@
 
 	char defgrp_name[32];		/* name of vertex group to use */
 	float offset;			/* new surface offset level*/
+	float offset_fac;		/* midpoint of the offset  */
 	float crease_inner;
 	float crease_outer;
 	float crease_rim;
@@ -692,6 +693,7 @@
 #define MOD_SOLIDIFY_RIM			(1<<0)
 #define MOD_SOLIDIFY_EVEN			(1<<1)
 #define MOD_SOLIDIFY_NORMAL_CALC	(1<<2)
+#define MOD_SOLIDIFY_VGROUP_INV		(1<<3)
 
 typedef struct ScrewModifierData {
 	ModifierData modifier;

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-03-31 07:22:18 UTC (rev 27896)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-03-31 07:28:23 UTC (rev 27897)
@@ -2040,13 +2040,20 @@
 	RNA_def_struct_sdna(srna, "SolidifyModifierData");
 	RNA_def_struct_ui_icon(srna, ICON_MOD_SOLIDIFY);
 
-	prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
+	prop= RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_DISTANCE);
 	RNA_def_property_float_sdna(prop, NULL, "offset");
 	RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
 	RNA_def_property_ui_range(prop, -10, 10, 0.1, 4);
 	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, "offset", PROP_FLOAT, PROP_DISTANCE);
+	RNA_def_property_float_sdna(prop, NULL, "offset_fac");
+	RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
+	RNA_def_property_ui_range(prop, -1, 1, 0.1, 4);
+	RNA_def_property_ui_text(prop, "Offset", "");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
 	prop= RNA_def_property(srna, "edge_crease_inner", PROP_FLOAT, PROP_FACTOR);
 	RNA_def_property_float_sdna(prop, NULL, "crease_inner");
 	RNA_def_property_range(prop, 0, 1);
@@ -2089,6 +2096,10 @@
 	RNA_def_property_ui_text(prop, "High Quality Normals", "Calculate normals which result in more even thickness (slow, disable when not needed)");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
+	prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_VGROUP_INV);
+	RNA_def_property_ui_text(prop, "Vertex Group Invert", "Invert the vertex group influence");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
 static void rna_def_modifier_screw(BlenderRNA *brna)





More information about the Bf-blender-cvs mailing list