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:
authorPhilipp Oeser <info@graphics-engineer.com>2018-05-04 11:31:16 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2018-05-04 11:32:35 +0300
commit52aa1f3c6c1c5b8a12db5165da1a29e5b7b04c0f (patch)
tree2253de3179d0cec46c9aa6feb3c81e2b10a0071e /source/blender
parentbf52d20e62798579b490581adcfa8ea4d4082993 (diff)
parent288d7794d4c6836e1322d5ed943c4fbd4b0b0e54 (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c24
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;