[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