Fixed secondary particle combined export functionality
The combined export was using the old flag format.
This commit is contained in:
parent
c7596cd820
commit
81b7f8efaf
Notes:
blender-bot
2023-02-14 06:54:28 +01:00
Referenced by issue #73265, Grease Pencil Delete Active Frame operator throws error to console when first frame Referenced by issue #73272, Fire + Smoke broken in Linux Referenced by issue #73252, Crash with links and Make proxy Referenced by issue #71075, Particle collisions aren't simulated before frame zero for negative frame simulations Referenced by issue #69870, Adaptive Domain causing 'twitches' in gas position when noise applied
|
@ -558,7 +558,11 @@ void AbcExporter::createParticleSystemsWriters(Object *ob, AbcTransformWriter *x
|
|||
else if (m_settings.export_particles &&
|
||||
(psys->part->type == PART_EMITTER || psys->part->type == PART_FLUID_FLIP ||
|
||||
psys->part->type == PART_FLUID_SPRAY || psys->part->type == PART_FLUID_BUBBLE ||
|
||||
psys->part->type == PART_FLUID_FOAM || psys->part->type == PART_FLUID_TRACER)) {
|
||||
psys->part->type == PART_FLUID_FOAM || psys->part->type == PART_FLUID_TRACER ||
|
||||
psys->part->type == PART_FLUID_SPRAYFOAM ||
|
||||
psys->part->type == PART_FLUID_SPRAYBUBBLE ||
|
||||
psys->part->type == PART_FLUID_FOAMBUBBLE ||
|
||||
psys->part->type == PART_FLUID_SPRAYFOAMBUBBLE)) {
|
||||
m_shapes.push_back(new AbcPointsWriter(ob, xform, m_shape_sampling_index, m_settings, psys));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6285,7 +6285,11 @@ static int dynamicPaint_doStep(Depsgraph *depsgraph,
|
|||
PART_FLUID_SPRAY,
|
||||
PART_FLUID_BUBBLE,
|
||||
PART_FLUID_FOAM,
|
||||
PART_FLUID_TRACER) &&
|
||||
PART_FLUID_TRACER,
|
||||
PART_FLUID_SPRAYFOAM,
|
||||
PART_FLUID_SPRAYBUBBLE,
|
||||
PART_FLUID_FOAMBUBBLE,
|
||||
PART_FLUID_SPRAYFOAMBUBBLE) &&
|
||||
psys_check_enabled(brushObj, brush->psys, for_render)) {
|
||||
/* Paint a particle system */
|
||||
dynamicPaint_paintParticles(surface, brush->psys, brush, timescale);
|
||||
|
|
|
@ -4205,7 +4205,7 @@ void BKE_fluid_particle_system_destroy(struct Object *ob, const int particle_typ
|
|||
|
||||
for (psys = ob->particlesystem.first; psys; psys = next_psys) {
|
||||
next_psys = psys->next;
|
||||
if (psys->part->type & particle_type) {
|
||||
if (psys->part->type == particle_type) {
|
||||
/* clear modifier */
|
||||
pmmd = psys_get_modifier(ob, psys);
|
||||
BLI_remlink(&ob->modifiers, pmmd);
|
||||
|
|
|
@ -4137,6 +4137,34 @@ static void cached_step(ParticleSimulationData *sim, float cfra, const bool use_
|
|||
}
|
||||
}
|
||||
|
||||
static bool particles_has_flip(short parttype)
|
||||
{
|
||||
return (parttype == PART_FLUID_FLIP);
|
||||
}
|
||||
|
||||
static bool particles_has_tracer(short parttype)
|
||||
{
|
||||
return (parttype == PART_FLUID_TRACER);
|
||||
}
|
||||
|
||||
static bool particles_has_spray(short parttype)
|
||||
{
|
||||
return ((parttype == PART_FLUID_SPRAY) || (parttype == PART_FLUID_SPRAYFOAM) ||
|
||||
(parttype == PART_FLUID_SPRAYFOAMBUBBLE));
|
||||
}
|
||||
|
||||
static bool particles_has_bubble(short parttype)
|
||||
{
|
||||
return ((parttype == PART_FLUID_BUBBLE) || (parttype == PART_FLUID_FOAMBUBBLE) ||
|
||||
(parttype == PART_FLUID_SPRAYFOAMBUBBLE));
|
||||
}
|
||||
|
||||
static bool particles_has_foam(short parttype)
|
||||
{
|
||||
return ((parttype == PART_FLUID_FOAM) || (parttype == PART_FLUID_SPRAYFOAM) ||
|
||||
(parttype == PART_FLUID_SPRAYFOAMBUBBLE));
|
||||
}
|
||||
|
||||
static void particles_fluid_step(ParticleSimulationData *sim,
|
||||
int cfra,
|
||||
const bool use_render_params)
|
||||
|
@ -4173,15 +4201,15 @@ static void particles_fluid_step(ParticleSimulationData *sim,
|
|||
float min[3], max[3], size[3], cell_size_scaled[3], max_size;
|
||||
|
||||
/* Sanity check: parts also enabled in fluid domain? */
|
||||
if ((part->type == PART_FLUID_FLIP &&
|
||||
if ((particles_has_flip(part->type) &&
|
||||
(mds->particle_type & FLUID_DOMAIN_PARTICLE_FLIP) == 0) ||
|
||||
(part->type == PART_FLUID_SPRAY &&
|
||||
(particles_has_spray(part->type) &&
|
||||
(mds->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) == 0) ||
|
||||
(part->type == PART_FLUID_BUBBLE &&
|
||||
(particles_has_bubble(part->type) &&
|
||||
(mds->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) == 0) ||
|
||||
(part->type == PART_FLUID_FOAM &&
|
||||
(particles_has_foam(part->type) &&
|
||||
(mds->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) == 0) ||
|
||||
(part->type == PART_FLUID_TRACER &&
|
||||
(particles_has_tracer(part->type) &&
|
||||
(mds->particle_type & FLUID_DOMAIN_PARTICLE_TRACER) == 0)) {
|
||||
BLI_snprintf(debugStrBuffer,
|
||||
sizeof(debugStrBuffer),
|
||||
|
@ -4194,23 +4222,23 @@ static void particles_fluid_step(ParticleSimulationData *sim,
|
|||
if (part->type == PART_FLUID_FLIP) {
|
||||
tottypepart = totpart = manta_liquid_get_num_flip_particles(mds->fluid);
|
||||
}
|
||||
if ((part->type == PART_FLUID_SPRAY) || (part->type == PART_FLUID_BUBBLE) ||
|
||||
(part->type == PART_FLUID_FOAM) || (part->type == PART_FLUID_TRACER)) {
|
||||
if (particles_has_spray(part->type) || particles_has_bubble(part->type) ||
|
||||
particles_has_foam(part->type) || particles_has_tracer(part->type)) {
|
||||
totpart = manta_liquid_get_num_snd_particles(mds->fluid);
|
||||
|
||||
/* tottypepart is the amount of particles of a snd particle type. */
|
||||
for (p = 0; p < totpart; p++) {
|
||||
flagActivePart = manta_liquid_get_snd_particle_flag_at(mds->fluid, p);
|
||||
if ((part->type & PART_FLUID_SPRAY) && (flagActivePart & PARTICLE_TYPE_SPRAY)) {
|
||||
if (particles_has_spray(part->type) && (flagActivePart & PARTICLE_TYPE_SPRAY)) {
|
||||
tottypepart++;
|
||||
}
|
||||
if ((part->type & PART_FLUID_BUBBLE) && (flagActivePart & PARTICLE_TYPE_BUBBLE)) {
|
||||
if (particles_has_bubble(part->type) && (flagActivePart & PARTICLE_TYPE_BUBBLE)) {
|
||||
tottypepart++;
|
||||
}
|
||||
if ((part->type & PART_FLUID_FOAM) && (flagActivePart & PARTICLE_TYPE_FOAM)) {
|
||||
if (particles_has_foam(part->type) && (flagActivePart & PARTICLE_TYPE_FOAM)) {
|
||||
tottypepart++;
|
||||
}
|
||||
if ((part->type & PART_FLUID_TRACER) && (flagActivePart & PARTICLE_TYPE_TRACER)) {
|
||||
if (particles_has_tracer(part->type) && (flagActivePart & PARTICLE_TYPE_TRACER)) {
|
||||
tottypepart++;
|
||||
}
|
||||
}
|
||||
|
@ -4261,8 +4289,8 @@ static void particles_fluid_step(ParticleSimulationData *sim,
|
|||
velY = manta_liquid_get_flip_particle_velocity_y_at(mds->fluid, p);
|
||||
velZ = manta_liquid_get_flip_particle_velocity_z_at(mds->fluid, p);
|
||||
}
|
||||
else if ((part->type == PART_FLUID_SPRAY) || (part->type == PART_FLUID_BUBBLE) ||
|
||||
(part->type == PART_FLUID_FOAM) || (part->type == PART_FLUID_TRACER)) {
|
||||
else if (particles_has_spray(part->type) || particles_has_bubble(part->type) ||
|
||||
particles_has_foam(part->type) || particles_has_tracer(part->type)) {
|
||||
flagActivePart = manta_liquid_get_snd_particle_flag_at(mds->fluid, p);
|
||||
|
||||
resX = (float)manta_liquid_get_particle_res_x(mds->fluid);
|
||||
|
@ -4292,16 +4320,16 @@ static void particles_fluid_step(ParticleSimulationData *sim,
|
|||
|
||||
/* Type of particle must match current particle system type
|
||||
* (only important for snd particles). */
|
||||
if ((flagActivePart & PARTICLE_TYPE_SPRAY) && (part->type & PART_FLUID_SPRAY) == 0) {
|
||||
if ((flagActivePart & PARTICLE_TYPE_SPRAY) && !particles_has_spray(part->type)) {
|
||||
continue;
|
||||
}
|
||||
if ((flagActivePart & PARTICLE_TYPE_BUBBLE) && (part->type & PART_FLUID_BUBBLE) == 0) {
|
||||
if ((flagActivePart & PARTICLE_TYPE_BUBBLE) && !particles_has_bubble(part->type)) {
|
||||
continue;
|
||||
}
|
||||
if ((flagActivePart & PARTICLE_TYPE_FOAM) && (part->type & PART_FLUID_FOAM) == 0) {
|
||||
if ((flagActivePart & PARTICLE_TYPE_FOAM) && !particles_has_foam(part->type)) {
|
||||
continue;
|
||||
}
|
||||
if ((flagActivePart & PARTICLE_TYPE_TRACER) && (part->type & PART_FLUID_TRACER) == 0) {
|
||||
if ((flagActivePart & PARTICLE_TYPE_TRACER) && !particles_has_tracer(part->type)) {
|
||||
continue;
|
||||
}
|
||||
# if 0
|
||||
|
@ -4844,9 +4872,9 @@ void particle_system_update(struct Depsgraph *depsgraph,
|
|||
hair_step(&sim, cfra, use_render_params);
|
||||
}
|
||||
}
|
||||
else if ((part->type == PART_FLUID_FLIP) || (part->type == PART_FLUID_SPRAY) ||
|
||||
(part->type == PART_FLUID_BUBBLE) || (part->type == PART_FLUID_FOAM) ||
|
||||
(part->type == PART_FLUID_TRACER)) {
|
||||
else if (particles_has_flip(part->type) || particles_has_spray(part->type) ||
|
||||
particles_has_bubble(part->type) || particles_has_foam(part->type) ||
|
||||
particles_has_tracer(part->type)) {
|
||||
particles_fluid_step(&sim, (int)cfra, use_render_params);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1822,7 +1822,9 @@ static int modifier_can_delete(ModifierData *md)
|
|||
short particle_type = ((ParticleSystemModifierData *)md)->psys->part->type;
|
||||
if (particle_type == PART_FLUID || particle_type == PART_FLUID_FLIP ||
|
||||
particle_type == PART_FLUID_FOAM || particle_type == PART_FLUID_SPRAY ||
|
||||
particle_type == PART_FLUID_BUBBLE || particle_type == PART_FLUID_TRACER) {
|
||||
particle_type == PART_FLUID_BUBBLE || particle_type == PART_FLUID_TRACER ||
|
||||
particle_type == PART_FLUID_SPRAYFOAM || particle_type == PART_FLUID_SPRAYBUBBLE ||
|
||||
particle_type == PART_FLUID_FOAMBUBBLE || particle_type == PART_FLUID_SPRAYFOAMBUBBLE) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -443,6 +443,10 @@ enum {
|
|||
PART_FLUID_BUBBLE = 6,
|
||||
PART_FLUID_FOAM = 7,
|
||||
PART_FLUID_TRACER = 8,
|
||||
PART_FLUID_SPRAYFOAM = 9,
|
||||
PART_FLUID_SPRAYBUBBLE = 10,
|
||||
PART_FLUID_FOAMBUBBLE = 11,
|
||||
PART_FLUID_SPRAYFOAMBUBBLE = 12,
|
||||
};
|
||||
|
||||
/* Mirroring Mantaflow particle types from particle.h (Mantaflow header). */
|
||||
|
|
|
@ -192,15 +192,13 @@ static void rna_Fluid_flip_parts_update(Main *bmain, Scene *scene, PointerRNA *p
|
|||
}
|
||||
else {
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FLIP);
|
||||
rna_Fluid_resetCache(bmain, scene, ptr);
|
||||
|
||||
mmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_FLIP;
|
||||
}
|
||||
rna_Fluid_draw_type_update(NULL, NULL, ptr);
|
||||
rna_Fluid_reset(bmain, scene, ptr);
|
||||
rna_Fluid_update(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
static void rna_Fluid_spray_parts_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Fluid_spray_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
Object *ob = (Object *)ptr->owner_id;
|
||||
FluidModifierData *mmd;
|
||||
|
@ -218,15 +216,12 @@ static void rna_Fluid_spray_parts_update(Main *bmain, Scene *scene, PointerRNA *
|
|||
}
|
||||
else {
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
||||
rna_Fluid_resetCache(bmain, scene, ptr);
|
||||
|
||||
mmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_SPRAY;
|
||||
}
|
||||
rna_Fluid_draw_type_update(NULL, NULL, ptr);
|
||||
rna_Fluid_reset(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
static void rna_Fluid_bubble_parts_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Fluid_bubble_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
Object *ob = (Object *)ptr->owner_id;
|
||||
FluidModifierData *mmd;
|
||||
|
@ -244,15 +239,12 @@ static void rna_Fluid_bubble_parts_update(Main *bmain, Scene *scene, PointerRNA
|
|||
}
|
||||
else {
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
||||
rna_Fluid_resetCache(bmain, scene, ptr);
|
||||
|
||||
mmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_BUBBLE;
|
||||
}
|
||||
rna_Fluid_draw_type_update(NULL, NULL, ptr);
|
||||
rna_Fluid_reset(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
static void rna_Fluid_foam_parts_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Fluid_foam_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
Object *ob = (Object *)ptr->owner_id;
|
||||
FluidModifierData *mmd;
|
||||
|
@ -270,15 +262,12 @@ static void rna_Fluid_foam_parts_update(Main *bmain, Scene *scene, PointerRNA *p
|
|||
}
|
||||
else {
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
||||
rna_Fluid_resetCache(bmain, scene, ptr);
|
||||
|
||||
mmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_FOAM;
|
||||
}
|
||||
rna_Fluid_draw_type_update(NULL, NULL, ptr);
|
||||
rna_Fluid_reset(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
static void rna_Fluid_tracer_parts_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Fluid_tracer_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
Object *ob = (Object *)ptr->owner_id;
|
||||
FluidModifierData *mmd;
|
||||
|
@ -296,12 +285,9 @@ static void rna_Fluid_tracer_parts_update(Main *bmain, Scene *scene, PointerRNA
|
|||
}
|
||||
else {
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_TRACER);
|
||||
rna_Fluid_resetCache(bmain, scene, ptr);
|
||||
|
||||
mmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_TRACER;
|
||||
}
|
||||
rna_Fluid_draw_type_update(NULL, NULL, ptr);
|
||||
rna_Fluid_reset(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
static void rna_Fluid_combined_export_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
@ -311,101 +297,131 @@ static void rna_Fluid_combined_export_update(Main *bmain, Scene *scene, PointerR
|
|||
mmd = (FluidModifierData *)modifiers_findByType(ob, eModifierType_Fluid);
|
||||
|
||||
if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_OFF) {
|
||||
rna_Fluid_parts_delete(ptr, (PART_FLUID_SPRAY | PART_FLUID_FOAM | PART_FLUID_BUBBLE));
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
||||
|
||||
// re-add each particle type if enabled
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) != 0) {
|
||||
bool exists_spray = rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAY);
|
||||
bool exists_foam = rna_Fluid_parts_exists(ptr, PART_FLUID_FOAM);
|
||||
bool exists_bubble = rna_Fluid_parts_exists(ptr, PART_FLUID_BUBBLE);
|
||||
|
||||
/* Re-add each particle type if enabled and no particle system exists for them anymore. */
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && !exists_spray) {
|
||||
rna_Fluid_spray_parts_update(bmain, scene, ptr);
|
||||
}
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) != 0) {
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) && !exists_foam) {
|
||||
rna_Fluid_foam_parts_update(bmain, scene, ptr);
|
||||
}
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) != 0) {
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) && !exists_bubble) {
|
||||
rna_Fluid_bubble_parts_update(bmain, scene, ptr);
|
||||
}
|
||||
}
|
||||
else if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM) {
|
||||
if (ob->type == OB_MESH &&
|
||||
!rna_Fluid_parts_exists(ptr, (PART_FLUID_SPRAY | PART_FLUID_FOAM))) {
|
||||
rna_Fluid_parts_delete(ptr, (PART_FLUID_SPRAY | PART_FLUID_FOAM));
|
||||
}
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"SprayFoamParticleSettings",
|
||||
"Spray + Foam Particles",
|
||||
"Spray + Foam Particle System",
|
||||
(PART_FLUID_SPRAY | PART_FLUID_FOAM));
|
||||
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAYFOAM)) {
|
||||
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"SprayFoamParticleSettings",
|
||||
"Spray + Foam Particles",
|
||||
"Spray + Foam Particle System",
|
||||
PART_FLUID_SPRAYFOAM);
|
||||
|
||||
// re-add bubbles if enabled
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) != 0) {
|
||||
rna_Fluid_bubble_parts_update(bmain, scene, ptr);
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
||||
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
||||
|
||||
/* Re-add spray if enabled and no particle system exists for it anymore. */
|
||||
bool exists_bubble = rna_Fluid_parts_exists(ptr, PART_FLUID_BUBBLE);
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) && !exists_bubble) {
|
||||
rna_Fluid_bubble_parts_update(bmain, scene, ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_SPRAY_BUBBLE) {
|
||||
if (ob->type == OB_MESH &&
|
||||
!rna_Fluid_parts_exists(ptr, (PART_FLUID_SPRAY | PART_FLUID_BUBBLE))) {
|
||||
rna_Fluid_parts_delete(ptr, (PART_FLUID_SPRAY | PART_FLUID_BUBBLE));
|
||||
}
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"SprayBubbleParticleSettings",
|
||||
"Spray + Bubble Particles",
|
||||
"Spray + Bubble Particle System",
|
||||
(PART_FLUID_SPRAY | PART_FLUID_BUBBLE));
|
||||
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAYBUBBLE)) {
|
||||
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"SprayBubbleParticleSettings",
|
||||
"Spray + Bubble Particles",
|
||||
"Spray + Bubble Particle System",
|
||||
PART_FLUID_SPRAYBUBBLE);
|
||||
|
||||
// re-add foam if enabled
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) != 0) {
|
||||
rna_Fluid_foam_parts_update(bmain, scene, ptr);
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
||||
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
||||
|
||||
/* Re-add foam if enabled and no particle system exists for it anymore. */
|
||||
bool exists_foam = rna_Fluid_parts_exists(ptr, PART_FLUID_FOAM);
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) && !exists_foam) {
|
||||
rna_Fluid_foam_parts_update(bmain, scene, ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_FOAM_BUBBLE) {
|
||||
if (ob->type == OB_MESH &&
|
||||
!rna_Fluid_parts_exists(ptr, (PART_FLUID_FOAM | PART_FLUID_BUBBLE))) {
|
||||
rna_Fluid_parts_delete(ptr, (PART_FLUID_FOAM | PART_FLUID_BUBBLE));
|
||||
}
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"FoamBubbleParticleSettings",
|
||||
"Foam + Bubble Particles",
|
||||
"Foam + Bubble Particle System",
|
||||
(PART_FLUID_FOAM | PART_FLUID_BUBBLE));
|
||||
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_FOAMBUBBLE)) {
|
||||
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"FoamBubbleParticleSettings",
|
||||
"Foam + Bubble Particles",
|
||||
"Foam + Bubble Particle System",
|
||||
PART_FLUID_FOAMBUBBLE);
|
||||
|
||||
// re-add spray if enabled
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) != 0) {
|
||||
rna_Fluid_spray_parts_update(bmain, scene, ptr);
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
||||
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAMBUBBLE);
|
||||
|
||||
/* Re-add foam if enabled and no particle system exists for it anymore. */
|
||||
bool exists_spray = rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAY);
|
||||
if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && !exists_spray) {
|
||||
rna_Fluid_spray_parts_update(bmain, scene, ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mmd->domain->sndparticle_combined_export ==
|
||||
SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM_BUBBLE) {
|
||||
if (ob->type == OB_MESH &&
|
||||
!rna_Fluid_parts_exists(ptr, (PART_FLUID_SPRAY | PART_FLUID_FOAM | PART_FLUID_BUBBLE))) {
|
||||
rna_Fluid_parts_delete(ptr, (PART_FLUID_SPRAY | PART_FLUID_FOAM | PART_FLUID_BUBBLE));
|
||||
}
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"SprayFoamBubbleParticleSettings",
|
||||
"Spray + Foam + Bubble Particles",
|
||||
"Spray + Foam + Bubble Particle System",
|
||||
(PART_FLUID_SPRAY | PART_FLUID_FOAM | PART_FLUID_BUBBLE));
|
||||
if (ob->type == OB_MESH && !rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAYFOAMBUBBLE)) {
|
||||
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
||||
rna_Fluid_parts_create(bmain,
|
||||
ptr,
|
||||
"SprayFoamBubbleParticleSettings",
|
||||
"Spray + Foam + Bubble Particles",
|
||||
"Spray + Foam + Bubble Particle System",
|
||||
PART_FLUID_SPRAYFOAMBUBBLE);
|
||||
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
|
||||
mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
|
||||
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAY);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAM);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_BUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYFOAM);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_SPRAYBUBBLE);
|
||||
rna_Fluid_parts_delete(ptr, PART_FLUID_FOAMBUBBLE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// sanity check, should not occur
|
||||
printf("ERROR: Unexpected combined export setting encountered!");
|
||||
}
|
||||
rna_Fluid_resetCache(bmain, scene, ptr);
|
||||
rna_Fluid_draw_type_update(NULL, NULL, ptr);
|
||||
}
|
||||
|
||||
|
@ -1542,7 +1558,7 @@ static void rna_def_fluid_domain_settings(BlenderRNA *brna)
|
|||
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_FLIP);
|
||||
RNA_def_property_ui_text(prop, "FLIP", "Create FLIP particle system");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_update(prop, 0, "rna_Fluid_flip_parts_update");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_flip_parts_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_fractions", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_USE_FRACTIONS);
|
||||
|
@ -1827,25 +1843,25 @@ static void rna_def_fluid_domain_settings(BlenderRNA *brna)
|
|||
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_SPRAY);
|
||||
RNA_def_property_ui_text(prop, "Spray", "Create spray particle system");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_update(prop, 0, "rna_Fluid_spray_parts_update");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_spray_parts_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_bubble_particles", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_BUBBLE);
|
||||
RNA_def_property_ui_text(prop, "Bubble", "Create bubble particle system");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_update(prop, 0, "rna_Fluid_bubble_parts_update");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_bubble_parts_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_foam_particles", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_FOAM);
|
||||
RNA_def_property_ui_text(prop, "Foam", "Create foam particle system");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_update(prop, 0, "rna_Fluid_foam_parts_update");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_foam_parts_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_tracer_particles", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "particle_type", FLUID_DOMAIN_PARTICLE_TRACER);
|
||||
RNA_def_property_ui_text(prop, "Tracer", "Create tracer particle system");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_update(prop, 0, "rna_Fluid_tracer_parts_update");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Fluid_tracer_parts_update");
|
||||
|
||||
/* fluid guiding options */
|
||||
|
||||
|
|
|
@ -964,7 +964,11 @@ static int rna_PartSettings_is_fluid_get(PointerRNA *ptr)
|
|||
PART_FLUID_FOAM,
|
||||
PART_FLUID_SPRAY,
|
||||
PART_FLUID_BUBBLE,
|
||||
PART_FLUID_TRACER));
|
||||
PART_FLUID_TRACER,
|
||||
PART_FLUID_SPRAYFOAM,
|
||||
PART_FLUID_SPRAYBUBBLE,
|
||||
PART_FLUID_FOAMBUBBLE,
|
||||
PART_FLUID_SPRAYFOAMBUBBLE));
|
||||
}
|
||||
|
||||
static void rna_ParticleSettings_use_clump_curve_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
|
Loading…
Reference in New Issue