[Bf-blender-cvs] [e9e41421a64] fluid-mantaflow: added function in smoke rna to register FLIP particle system
Sebastián Barschkis
noreply at git.blender.org
Fri Jun 9 00:58:54 CEST 2017
Commit: e9e41421a64c5d6ade8da112d2f2c252101780d4
Author: Sebastián Barschkis
Date: Thu Jun 8 23:38:11 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBe9e41421a64c5d6ade8da112d2f2c252101780d4
added function in smoke rna to register FLIP particle system
when flip particle file format is toggled, a new particle gets registered. toggling meshes releases the particle system
===================================================================
M source/blender/makesrna/intern/rna_smoke.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index aea7cb545b3..4ea2933f487 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -82,6 +82,59 @@ static void rna_Smoke_resetCache(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
+static void rna_Smoke_update_file_format(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Object *ob = (Object *)ptr->id.data;
+ SmokeModifierData *smd;
+ ParticleSystemModifierData *psmd;
+ ParticleSystem *psys, *next_psys;
+ ParticleSettings *part;
+
+ smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
+
+ /* remove fluidsim particle system */
+ if (smd && smd->domain && smd->domain->cache_file_format == PTCACHE_FILE_PARTICLE) {
+ for (psys = ob->particlesystem.first; psys; psys = psys->next)
+ if (psys->part->type == PART_MANTA)
+ break;
+
+ if (ob->type == OB_MESH && !psys) {
+ /* add particle system */
+ part = psys_new_settings("ParticleSettings", bmain);
+ psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
+
+ part->type = PART_MANTA;
+ psys->part = part;
+ psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
+ BLI_strncpy(psys->name, "FlipParticles", sizeof(psys->name));
+ BLI_addtail(&ob->particlesystem, psys);
+
+ /* add modifier */
+ psmd = (ParticleSystemModifierData *)modifier_new(eModifierType_ParticleSystem);
+ BLI_strncpy(psmd->modifier.name, "FLIPParticleSystem", sizeof(psmd->modifier.name));
+ psmd->psys = psys;
+ BLI_addtail(&ob->modifiers, psmd);
+ modifier_unique_name(&ob->modifiers, (ModifierData *)psmd);
+ }
+ }
+ else {
+ for (psys = ob->particlesystem.first; psys; psys = next_psys) {
+ next_psys = psys->next;
+ if (psys->part->type == PART_MANTA) {
+ /* clear modifier */
+ psmd = psys_get_modifier(ob, psys);
+ BLI_remlink(&ob->modifiers, psmd);
+ modifier_free((ModifierData *)psmd);
+
+ /* clear particle system */
+ BLI_remlink(&ob->particlesystem, psys);
+ psys_free(ob, psys);
+ }
+ }
+ }
+ rna_Smoke_resetCache(bmain, scene, ptr);
+}
+
static void rna_Smoke_cachetype_set(struct PointerRNA *ptr, int value)
{
SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
@@ -940,7 +993,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_enum_items(prop, cache_file_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_Smoke_cachetype_set", "rna_Smoke_cachetype_itemf");
RNA_def_property_ui_text(prop, "File Format", "Select the file format to be used for caching");
- RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_resetCache");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_update_file_format");
/* mantaflow variables */
prop = RNA_def_property(srna, "manta_filepath", PROP_STRING, PROP_FILEPATH);
More information about the Bf-blender-cvs
mailing list