diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2018-05-04 11:31:16 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2018-05-04 11:32:35 +0300 |
commit | 52aa1f3c6c1c5b8a12db5165da1a29e5b7b04c0f (patch) | |
tree | 2253de3179d0cec46c9aa6feb3c81e2b10a0071e /source/blender | |
parent | bf52d20e62798579b490581adcfa8ea4d4082993 (diff) | |
parent | 288d7794d4c6836e1322d5ed943c4fbd4b0b0e54 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/modifiers/intern/MOD_particleinstance.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c index 56f6fa57b51..b93e567fe56 100644 --- a/source/blender/modifiers/intern/MOD_particleinstance.c +++ b/source/blender/modifiers/intern/MOD_particleinstance.c @@ -213,8 +213,8 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c MPoly *mpoly, *orig_mpoly; MLoop *mloop, *orig_mloop; MVert *mvert, *orig_mvert; - int totvert, totpoly, totloop /* , totedge */; - int maxvert, maxpoly, maxloop, part_end = 0, part_start; + int totvert, totpoly, totloop , totedge; + int maxvert, maxpoly, maxloop, maxedge, part_end = 0, part_start; int k, p, p_skip; short track = ctx->object->trackflag % 3, trackneg, axis = pimd->axis; float max_co = 0.0, min_co = 0.0, temp_co[3]; @@ -294,12 +294,13 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c totvert = dm->getNumVerts(dm); totpoly = dm->getNumPolys(dm); totloop = dm->getNumLoops(dm); - /* totedge = dm->getNumEdges(dm); */ /* UNUSED */ + totedge = dm->getNumEdges(dm); /* count particles */ maxvert = 0; maxpoly = 0; maxloop = 0; + maxedge = 0; for (p = part_start; p < part_end; p++) { if (particle_skip(pimd, psys, p)) @@ -308,6 +309,7 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c maxvert += totvert; maxpoly += totpoly; maxloop += totloop; + maxedge += totedge; } psys->lattice_deform_data = psys_create_lattice_deform_data(&sim); @@ -320,11 +322,10 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c max_co = max[track]; } - result = CDDM_from_template(dm, maxvert, 0, 0, maxloop, maxpoly); + result = CDDM_from_template(dm, maxvert, maxedge, 0, maxloop, maxpoly); mvert = result->getVertArray(result); orig_mvert = dm->getVertArray(dm); - mpoly = result->getPolyArray(result); orig_mpoly = dm->getPolyArray(dm); mloop = result->getLoopArray(result); @@ -471,8 +472,17 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c mul_m4_v3(spacemat, mv->co); } + /* create edges and adjust edge vertex indices*/ + DM_copy_edge_data(dm, result, 0, p_skip * totedge, totedge); + MEdge *me = CDDM_get_edges(result) + p_skip * totedge; + for (k = 0; k < totedge; k++, me++) { + me->v1 += p_skip * totvert; + me->v2 += p_skip * totvert; + } + /* create polys and loops */ for (k = 0; k < totpoly; k++) { + MPoly *inMP = orig_mpoly + k; MPoly *mp = mpoly + p_skip * totpoly + k; @@ -488,6 +498,7 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c DM_copy_loop_data(dm, result, inMP->loopstart, mp->loopstart, j); for (; j; j--, ml++, inML++) { ml->v = inML->v + (p_skip * totvert); + ml->e = inML->e + (p_skip * totedge); const int ml_index = (ml - mloop); if (mloopcols_index != NULL) { const int part_index = vert_part_index[ml->v]; @@ -500,12 +511,9 @@ static DerivedMesh *applyModifier(ModifierData *md, const ModifierEvalContext *c } } } - p_skip++; } - CDDM_calc_edges(result); - if (psys->lattice_deform_data) { end_latt_deform(psys->lattice_deform_data); psys->lattice_deform_data = NULL; |