[Bf-blender-cvs] [db8726dfd53] master: Mantaflow [Part 9]: Updated rna smoke code
Sebastián Barschkis
noreply at git.blender.org
Mon Dec 16 16:35:06 CET 2019
Commit: db8726dfd53fdae3439990bf2af4708aa29621f3
Author: Sebastián Barschkis
Date: Mon Dec 16 15:48:16 2019 +0100
Branches: master
https://developer.blender.org/rBdb8726dfd53fdae3439990bf2af4708aa29621f3
Mantaflow [Part 9]: Updated rna smoke code
All new simulation parameters need to be registered in the RNA. Especially for liquids a lot of new ones need to be added.
Reviewed By: sergey
Maniphest Tasks: T59995
Differential Revision: https://developer.blender.org/D3858
===================================================================
A source/blender/makesrna/intern/rna_fluid.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_fluid.c b/source/blender/makesrna/intern/rna_fluid.c
new file mode 100644
index 00000000000..d02b7eea05f
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_fluid.c
@@ -0,0 +1,2537 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** \file
+ * \ingroup RNA
+ */
+
+#include <stdlib.h>
+#include <limits.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_path_util.h"
+#include "BLI_sys_types.h"
+
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "rna_internal.h"
+
+#include "BKE_modifier.h"
+#include "BKE_fluid.h"
+#include "BKE_pointcache.h"
+
+#include "DNA_modifier_types.h"
+#include "DNA_object_force_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_fluid_types.h"
+#include "DNA_particle_types.h"
+
+#include "WM_types.h"
+#include "WM_api.h"
+
+#ifdef RNA_RUNTIME
+
+# include "BLI_math.h"
+# include "BLI_threads.h"
+
+# include "BKE_colorband.h"
+# include "BKE_context.h"
+# include "BKE_particle.h"
+
+# include "DEG_depsgraph.h"
+# include "DEG_depsgraph_build.h"
+
+# include "manta_fluid_API.h"
+
+static void rna_Fluid_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+
+ // Needed for liquid domain objects
+ Object *ob = (Object *)ptr->owner_id;
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
+}
+
+static void rna_Fluid_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ rna_Fluid_update(bmain, scene, ptr);
+ DEG_relations_tag_update(bmain);
+}
+
+static void rna_Fluid_resetCache(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
+{
+ FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
+ if (settings->mmd && settings->mmd->domain) {
+ settings->mmd->domain->cache_flag |= (FLUID_DOMAIN_OUTDATED_DATA |
+ FLUID_DOMAIN_OUTDATED_NOISE |
+ FLUID_DOMAIN_OUTDATED_MESH |
+ FLUID_DOMAIN_OUTDATED_PARTICLES);
+ scene->r.cfra = settings->cache_frame_start;
+ }
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+}
+static void rna_Fluid_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
+
+ fluidModifier_reset(settings->mmd);
+ rna_Fluid_resetCache(bmain, scene, ptr);
+
+ rna_Fluid_update(bmain, scene, ptr);
+}
+
+static void rna_Fluid_reset_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
+
+ fluidModifier_reset(settings->mmd);
+
+ if (settings->mmd && settings->mmd->domain)
+ settings->mmd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED;
+
+ rna_Fluid_dependency_update(bmain, scene, ptr);
+}
+
+static void rna_Fluid_parts_create(Main *bmain,
+ PointerRNA *ptr,
+ const char *pset_name,
+ const char *parts_name,
+ const char *psys_name,
+ int psys_type)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ BKE_fluid_create_particle_system(bmain, ob, pset_name, parts_name, psys_name, psys_type);
+}
+
+static void rna_Fluid_parts_delete(PointerRNA *ptr, int ptype)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ BKE_fluid_delete_particle_system(ob, ptype);
+}
+
+static bool rna_Fluid_parts_exists(PointerRNA *ptr, int ptype)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ ParticleSystem *psys;
+
+ for (psys = ob->particlesystem.first; psys; psys = psys->next) {
+ if (psys->part->type == ptype)
+ return true;
+ }
+ return false;
+}
+
+static void rna_Fluid_draw_type_update(Main *UNUSED(bmain),
+ Scene *UNUSED(scene),
+ struct PointerRNA *ptr)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data;
+
+ /* Wireframe mode more convenient when particles present */
+ if (settings->particle_type == 0) {
+ ob->dt = OB_SOLID;
+ }
+ else {
+ ob->dt = OB_WIRE;
+ }
+}
+
+static void rna_Fluid_flip_parts_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ FluidModifierData *mmd;
+ mmd = (FluidModifierData *)modifiers_findByType(ob, eModifierType_Fluid);
+ bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_FLIP);
+
+ if (ob->type == OB_MESH && !exists) {
+ rna_Fluid_parts_create(bmain,
+ ptr,
+ "FlipParticleSettings",
+ "FLIP Particles",
+ "FLIP Particle System",
+ PART_FLUID_FLIP);
+ mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FLIP;
+ }
+ 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);
+}
+
+static void rna_Fluid_spray_parts_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ FluidModifierData *mmd;
+ mmd = (FluidModifierData *)modifiers_findByType(ob, eModifierType_Fluid);
+ bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_SPRAY);
+
+ if (ob->type == OB_MESH && !exists) {
+ rna_Fluid_parts_create(bmain,
+ ptr,
+ "SprayParticleSettings",
+ "Spray Particles",
+ "Spray Particle System",
+ PART_FLUID_SPRAY);
+ mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
+ }
+ 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)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ FluidModifierData *mmd;
+ mmd = (FluidModifierData *)modifiers_findByType(ob, eModifierType_Fluid);
+ bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_BUBBLE);
+
+ if (ob->type == OB_MESH && !exists) {
+ rna_Fluid_parts_create(bmain,
+ ptr,
+ "BubbleParticleSettings",
+ "Bubble Particles",
+ "Bubble Particle System",
+ PART_FLUID_BUBBLE);
+ mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
+ }
+ 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)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ FluidModifierData *mmd;
+ mmd = (FluidModifierData *)modifiers_findByType(ob, eModifierType_Fluid);
+ bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_FOAM);
+
+ if (ob->type == OB_MESH && !exists) {
+ rna_Fluid_parts_create(bmain,
+ ptr,
+ "FoamParticleSettings",
+ "Foam Particles",
+ "Foam Particle System",
+ PART_FLUID_FOAM);
+ mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
+ }
+ 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)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ FluidModifierData *mmd;
+ mmd = (FluidModifierData *)modifiers_findByType(ob, eModifierType_Fluid);
+ bool exists = rna_Fluid_parts_exists(ptr, PART_FLUID_TRACER);
+
+ if (ob->type == OB_MESH && !exists) {
+ rna_Fluid_parts_create(bmain,
+ ptr,
+ "TracerParticleSettings",
+ "Tracer Particles",
+ "Tracer Particle System",
+ PART_FLUID_TRACER);
+ mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_TRACER;
+ }
+ 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)
+{
+ Object *ob = (Object *)ptr->owner_id;
+ FluidModifierData *mmd;
+ 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));
+
+ // re-add each particle type if enabled
+ if ((mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) != 0) {
+ rn
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list