Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/modifiers/intern/MOD_solidify.c')
-rw-r--r--source/blender/modifiers/intern/MOD_solidify.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c
index 1b7b724835c..afe6da8b38a 100644
--- a/source/blender/modifiers/intern/MOD_solidify.c
+++ b/source/blender/modifiers/intern/MOD_solidify.c
@@ -48,6 +48,7 @@
#include "MOD_modifiertypes.h"
+#include "MOD_util.h"
#include "MEM_guardedalloc.h"
@@ -231,16 +232,17 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
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= NULL, *dv= NULL;
+ MDeformVert *dvert, *dv= NULL;
const int defgrp_invert = ((smd->flag & MOD_SOLIDIFY_VGROUP_INV) != 0);
- const int defgrp_index= defgroup_name_index(ob, smd->defgrp_name);
+ int defgrp_index;
- if (defgrp_index >= 0)
- dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
+ modifier_get_vgroup(ob, dm, smd->defgrp_name, &dvert, &defgrp_index);
orig_mface = dm->getFaceArray(dm);
orig_medge = dm->getEdgeArray(dm);
@@ -391,8 +393,9 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
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 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
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 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* 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;
}
}
}
@@ -689,5 +699,6 @@ ModifierTypeInfo modifierType_Solidify = {
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
/* foreachObjectLink */ NULL,
- /* foreachIDLink */ NULL
+ /* foreachIDLink */ NULL,
+ /* foreachTexLink */ NULL,
};