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;
+                                                       }
+                                               }
                                        }
                                }
                        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to