forked from bartvdbraak/blender
Fix T51523: Lattice modifier affecting particles even when disabled
Particles were ignoring the lattice modifier visibility, and "influence" property.
This commit is contained in:
parent
1fb3075803
commit
56422ff6c3
@ -253,11 +253,16 @@ struct LatticeDeformData *psys_create_lattice_deform_data(ParticleSimulationData
|
|||||||
if (psys_in_edit_mode(sim->scene, sim->psys) == 0) {
|
if (psys_in_edit_mode(sim->scene, sim->psys) == 0) {
|
||||||
Object *lattice = NULL;
|
Object *lattice = NULL;
|
||||||
ModifierData *md = (ModifierData *)psys_get_modifier(sim->ob, sim->psys);
|
ModifierData *md = (ModifierData *)psys_get_modifier(sim->ob, sim->psys);
|
||||||
|
int mode = G.is_rendering ? eModifierMode_Render : eModifierMode_Realtime;
|
||||||
|
|
||||||
for (; md; md = md->next) {
|
for (; md; md = md->next) {
|
||||||
if (md->type == eModifierType_Lattice) {
|
if (md->type == eModifierType_Lattice) {
|
||||||
|
if (md->mode & mode) {
|
||||||
LatticeModifierData *lmd = (LatticeModifierData *)md;
|
LatticeModifierData *lmd = (LatticeModifierData *)md;
|
||||||
lattice = lmd->object;
|
lattice = lmd->object;
|
||||||
|
sim->psys->lattice_strength = lmd->strength;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2706,7 +2711,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_re
|
|||||||
/* lattices have to be calculated separately to avoid mixups between effector calculations */
|
/* lattices have to be calculated separately to avoid mixups between effector calculations */
|
||||||
if (psys->lattice_deform_data) {
|
if (psys->lattice_deform_data) {
|
||||||
for (k = 0, ca = cache[p]; k <= segments; k++, ca++)
|
for (k = 0, ca = cache[p]; k <= segments; k++, ca++)
|
||||||
calc_latt_deform(psys->lattice_deform_data, ca->co, 1.0f);
|
calc_latt_deform(psys->lattice_deform_data, ca->co, psys->lattice_strength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3748,7 +3753,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey *
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (psys->lattice_deform_data && edit == 0)
|
if (psys->lattice_deform_data && edit == 0)
|
||||||
calc_latt_deform(psys->lattice_deform_data, state->co, 1.0f);
|
calc_latt_deform(psys->lattice_deform_data, state->co, psys->lattice_strength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3987,7 +3992,7 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta
|
|||||||
do_child_modifiers(NULL, sim, NULL, key1->co, key1->vel, key1->rot, par_orco, cpa, cpa->fuv, mat, state, t);
|
do_child_modifiers(NULL, sim, NULL, key1->co, key1->vel, key1->rot, par_orco, cpa, cpa->fuv, mat, state, t);
|
||||||
|
|
||||||
if (psys->lattice_deform_data)
|
if (psys->lattice_deform_data)
|
||||||
calc_latt_deform(psys->lattice_deform_data, state->co, 1.0f);
|
calc_latt_deform(psys->lattice_deform_data, state->co, psys->lattice_strength);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (pa->state.time == cfra || ELEM(part->phystype, PART_PHYS_NO, PART_PHYS_KEYED))
|
if (pa->state.time == cfra || ELEM(part->phystype, PART_PHYS_NO, PART_PHYS_KEYED))
|
||||||
@ -4046,7 +4051,7 @@ int psys_get_particle_state(ParticleSimulationData *sim, int p, ParticleKey *sta
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sim->psys->lattice_deform_data)
|
if (sim->psys->lattice_deform_data)
|
||||||
calc_latt_deform(sim->psys->lattice_deform_data, state->co, 1.0f);
|
calc_latt_deform(sim->psys->lattice_deform_data, state->co, psys->lattice_strength);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -4293,7 +4298,7 @@ void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys)
|
|||||||
hkey = pa->hair;
|
hkey = pa->hair;
|
||||||
for (h = 0; h < pa->totkey; h++, hkey++) {
|
for (h = 0; h < pa->totkey; h++, hkey++) {
|
||||||
mul_m4_v3(hairmat, hkey->co);
|
mul_m4_v3(hairmat, hkey->co);
|
||||||
calc_latt_deform(psys->lattice_deform_data, hkey->co, 1.0f);
|
calc_latt_deform(psys->lattice_deform_data, hkey->co, psys->lattice_strength);
|
||||||
mul_m4_v3(imat, hkey->co);
|
mul_m4_v3(imat, hkey->co);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,7 +323,7 @@ typedef struct ParticleSystem {
|
|||||||
struct ParticleDrawData *pdd;
|
struct ParticleDrawData *pdd;
|
||||||
|
|
||||||
float dt_frac; /* current time step, as a fraction of a frame */
|
float dt_frac; /* current time step, as a fraction of a frame */
|
||||||
float _pad; /* spare capacity */
|
float lattice_strength; /* influence of the lattice modifier */
|
||||||
} ParticleSystem;
|
} ParticleSystem;
|
||||||
|
|
||||||
typedef enum eParticleDrawFlag {
|
typedef enum eParticleDrawFlag {
|
||||||
|
Loading…
Reference in New Issue
Block a user