[Bf-blender-cvs] [32e56f5] fracture_modifier: fix when using inner vertexgroup, weights of other vgroups on the same mesh were deleted by accident then
Martin Felke
noreply at git.blender.org
Tue Jan 3 00:12:54 CET 2017
Commit: 32e56f5d55be725c84fec772b6be51f37ad4df8f
Author: Martin Felke
Date: Tue Jan 3 00:12:18 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rB32e56f5d55be725c84fec772b6be51f37ad4df8f
fix when using inner vertexgroup, weights of other vgroups on the same mesh were deleted by accident then
===================================================================
M source/blender/modifiers/intern/MOD_fracture.c
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 56bbc16..d6d1f4b 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -2688,15 +2688,7 @@ static void fill_vgroup(FractureModifierData *rmd, DerivedMesh *dm, MDeformVert
dynamic = rmd->fracture_mode == MOD_FRACTURE_DYNAMIC;
fallback = rmd->frac_algorithm == MOD_FRACTURE_BOOLEAN_FRACTAL;
-
- //keep old behavior for non-dynamic...
- if (dvert != NULL && !dynamic) {
- CustomData_free_layers(&dm->vertData, CD_MDEFORMVERT, totvert);
- dvert = NULL;
- }
- else {
- dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
- }
+ dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
if (dvert == NULL)
{
@@ -2714,20 +2706,42 @@ static void fill_vgroup(FractureModifierData *rmd, DerivedMesh *dm, MDeformVert
for (j = 0; j < p->totloop; j++) {
MLoop *l;
MVert *v;
+ MDeformVert *dv;
int l_index = p->loopstart + j;
l = ml + l_index;
v = mv + l->v;
+ dv = dvert + l->v;
- if ((dvert+l->v)->dw == NULL)
+ if (dv->dw == NULL)
{
if ((v->flag & ME_VERT_TMP_TAG) && !fallback) {
- defvert_add_index_notest(dvert + l->v, inner_defgrp_index, 1.0f);
+ defvert_add_index_notest(dv, inner_defgrp_index, 1.0f);
}
else if ((p->mat_nr == mat_index-1) && fallback) {
- defvert_add_index_notest(dvert + l->v, inner_defgrp_index, 1.0f);
+ defvert_add_index_notest(dv, inner_defgrp_index, 1.0f);
}
else {
- defvert_add_index_notest(dvert + l->v, inner_defgrp_index, 0.0f);
+ defvert_add_index_notest(dv, inner_defgrp_index, 0.0f);
+ }
+ }
+ else
+ {
+ MDeformWeight *dw;
+ int w;
+
+ for (dw = dv->dw, w = 0; w < dv->totweight; dw++, w++)
+ {
+ if (dw->def_nr == inner_defgrp_index) {
+ if ((v->flag & ME_VERT_TMP_TAG) && !fallback) {
+ dw->weight = 1.0f;
+ }
+ else if ((p->mat_nr == mat_index-1) && fallback) {
+ dw->weight = 1.0f;
+ }
+ else {
+ dw->weight = 0.0f;
+ }
+ }
}
}
}
More information about the Bf-blender-cvs
mailing list