[Bf-blender-cvs] [65bc59a56d0] master: Fix T66340: Missing particles in Grid and Volume distribution.
mano-wii
noreply at git.blender.org
Tue Jul 2 16:45:43 CEST 2019
Commit: 65bc59a56d0b5c2e012daf84de834fac2909cfc2
Author: mano-wii
Date: Tue Jul 2 11:44:24 2019 -0300
Branches: master
https://developer.blender.org/rB65bc59a56d0b5c2e012daf84de834fac2909cfc2
Fix T66340: Missing particles in Grid and Volume distribution.
This solution only alleviates the problem.
===================================================================
M source/blender/blenkernel/intern/particle_distribute.c
===================================================================
diff --git a/source/blender/blenkernel/intern/particle_distribute.c b/source/blender/blenkernel/intern/particle_distribute.c
index 070c3c7a566..96030b7361d 100644
--- a/source/blender/blenkernel/intern/particle_distribute.c
+++ b/source/blender/blenkernel/intern/particle_distribute.c
@@ -232,6 +232,9 @@ static void distribute_grid(Mesh *mesh, ParticleSystem *psys)
/* lets intersect the faces */
for (i = 0; i < totface; i++, mface++) {
+ ParticleData *pa1 = NULL, *pa2 = NULL;
+ bool isect1 = false, isect2 = false;
+
copy_v3_v3(v1, mvert[mface->v1].co);
copy_v3_v3(v2, mvert[mface->v2].co);
copy_v3_v3(v3, mvert[mface->v3].co);
@@ -239,24 +242,37 @@ static void distribute_grid(Mesh *mesh, ParticleSystem *psys)
bool intersects_tri = isect_ray_tri_watertight_v3(
co1, &isect_precalc, v1, v2, v3, &lambda, NULL);
if (intersects_tri) {
- if (from == PART_FROM_FACE) {
- (pa + (int)(lambda * size[a]) * a0mul)->flag &= ~PARS_UNEXIST;
- }
- else { /* store number of intersections */
- (pa + (int)(lambda * size[a]) * a0mul)->hair_index++;
- }
+ pa1 = (pa + (int)(lambda * size[a]) * a0mul);
+ isect1 = true;
}
if (mface->v4 && (!intersects_tri || from == PART_FROM_VOLUME)) {
copy_v3_v3(v4, mvert[mface->v4].co);
if (isect_ray_tri_watertight_v3(co1, &isect_precalc, v1, v3, v4, &lambda, NULL)) {
- if (from == PART_FROM_FACE) {
- (pa + (int)(lambda * size[a]) * a0mul)->flag &= ~PARS_UNEXIST;
- }
- else {
- (pa + (int)(lambda * size[a]) * a0mul)->hair_index++;
- }
+ pa2 = (pa + (int)(lambda * size[a]) * a0mul);
+ isect2 = true;
+ }
+ }
+
+ if (pa1 == pa2) {
+ isect1 |= isect2;
+ }
+ else if (isect2) {
+ if (from == PART_FROM_FACE) {
+ pa2->flag &= ~PARS_UNEXIST;
+ }
+ else { /* store number of intersections */
+ pa2->hair_index++;
+ }
+ }
+
+ if (isect1) {
+ if (from == PART_FROM_FACE) {
+ pa1->flag &= ~PARS_UNEXIST;
+ }
+ else { /* store number of intersections */
+ pa1->hair_index++;
}
}
}
More information about the Bf-blender-cvs
mailing list