[Bf-blender-cvs] [1151442204f] fracture_modifier: fix for randomized particle sizes
Martin Felke
noreply at git.blender.org
Sat Dec 30 01:29:06 CET 2017
Commit: 1151442204f262b4985fc2bdccb6761dac22dd26
Author: Martin Felke
Date: Sat Dec 30 01:28:43 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rB1151442204f262b4985fc2bdccb6761dac22dd26
fix for randomized particle sizes
was accessing wrong indexes after particles died
===================================================================
M source/blender/modifiers/intern/MOD_remesh.c
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c
index 65a0f9892cc..5806835fbc5 100644
--- a/source/blender/modifiers/intern/MOD_remesh.c
+++ b/source/blender/modifiers/intern/MOD_remesh.c
@@ -154,7 +154,7 @@ static void dualcon_add_quad(void *output_v, const int vert_indices[4])
output->curface++;
}
-static int get_particle_positions(RemeshModifierData *rmd, ParticleSystem *psys, float (**pos)[3])
+static int get_particle_positions_sizes(RemeshModifierData *rmd, ParticleSystem *psys, float (**pos)[3], float **size)
{
//take alive, for now
ParticleData *pa;
@@ -169,12 +169,16 @@ static int get_particle_positions(RemeshModifierData *rmd, ParticleSystem *psys,
if (j == 0) {
(*pos) = MEM_mallocN(sizeof(float) * 3, "part pos");
+ (*size) = MEM_mallocN(sizeof(float), "part size");
copy_v3_v3((*pos)[0], pa->state.co);
+ (*size)[0] = pa->size;
j++;
}
else {
(*pos) = MEM_reallocN((*pos), sizeof(float) * 3 * (j+1));
+ (*size) = MEM_reallocN((*size), sizeof(float) * (j+1));
copy_v3_v3((*pos)[j], pa->state.co);
+ (*size)[j] = pa->size;
j++;
}
}
@@ -222,7 +226,7 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, DerivedMesh* derived,
DerivedMesh *dm = NULL, *result = NULL;
MVert *mv = NULL, *mv2 = NULL;
float (*pos)[3] = NULL;
- float *psize = NULL;
+ float *size = NULL, *psize = NULL;
int i = 0, n = 0;
bool override_size = rmd->pflag & eRemeshFlag_Size;
@@ -233,7 +237,7 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, DerivedMesh* derived,
if (psys == NULL)
return derived;
- n = get_particle_positions(rmd, psys, &pos);
+ n = get_particle_positions_sizes(rmd, psys, &pos, &size);
dm = CDDM_new(n, 0, 0, 0, 0);
mv = dm->getVertArray(dm);
psize = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "psize");
@@ -241,7 +245,7 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, DerivedMesh* derived,
for (i = 0; i < n; i++)
{
copy_v3_v3(mv[i].co, pos[i]);
- psize[i] = psys->particles[i].size;
+ psize[i] = size[i];
}
result = BKE_repolygonize_dm(dm, rmd->thresh, rmd->basesize, rmd->wiresize, rmd->rendersize, render, override_size);
@@ -250,6 +254,9 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, DerivedMesh* derived,
if (pos)
MEM_freeN(pos);
+ if (size)
+ MEM_freeN(size);
+
return result;
}
else if ((rmd->input & MOD_REMESH_VERTICES) && ((rmd->input & MOD_REMESH_PARTICLES) == 0))
@@ -263,7 +270,7 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, DerivedMesh* derived,
n = 0;
if (psys)
- n = get_particle_positions(rmd, psys, &pos);
+ n = get_particle_positions_sizes(rmd, psys, &pos, &size);
dm = CDDM_new(n + derived->numVertData, 0, 0, 0, 0);
psize = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "psize");
@@ -274,7 +281,7 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, DerivedMesh* derived,
for (i = 0; i < n; i++)
{
copy_v3_v3(mv[i].co, pos[i]);
- psize[i] = psys->particles[i].size;
+ psize[i] = size[i];
}
for (i = n; i < n + derived->numVertData; i++)
@@ -289,6 +296,9 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, DerivedMesh* derived,
if (pos)
MEM_freeN(pos);
+ if (size)
+ MEM_freeN(size);
+
return result;
}
More information about the Bf-blender-cvs
mailing list