[Bf-blender-cvs] [5d009982b15] fluid-mantaflow: Mantaflow: Fixed issues raised in part 9 of the review (D3858)

Sebastián Barschkis noreply at git.blender.org
Wed Dec 11 16:00:55 CET 2019


Commit: 5d009982b1518f253baf97df008eac8700e009bb
Author: Sebastián Barschkis
Date:   Wed Dec 11 16:00:46 2019 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rB5d009982b1518f253baf97df008eac8700e009bb

Mantaflow: Fixed issues raised in part 9 of the review (D3858)

===================================================================

M	source/blender/blenkernel/BKE_manta.h
M	source/blender/blenkernel/intern/manta.c
M	source/blender/makesrna/intern/rna_manta.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_manta.h b/source/blender/blenkernel/BKE_manta.h
index cc1c8e8f896..78f0394503b 100644
--- a/source/blender/blenkernel/BKE_manta.h
+++ b/source/blender/blenkernel/BKE_manta.h
@@ -58,4 +58,7 @@ void BKE_manta_cache_free(struct MantaDomainSettings *mds, struct Object *ob, in
 float BKE_manta_get_velocity_at(struct Object *ob, float position[3], float velocity[3]);
 int BKE_manta_get_data_flags(struct MantaDomainSettings *mds);
 
+void BKE_manta_create_particle_system(struct Main *bmain, struct Object *ob, const char *pset_name, const char *parts_name, const char *psys_name, const int psys_type);
+void BKE_manta_delete_particle_system(struct Object *ob, const int particle_type);
+
 #endif /* __BKE_MANTA_H__ */
diff --git a/source/blender/blenkernel/intern/manta.c b/source/blender/blenkernel/intern/manta.c
index f0bfce569e8..6a445e4c155 100644
--- a/source/blender/blenkernel/intern/manta.c
+++ b/source/blender/blenkernel/intern/manta.c
@@ -4709,3 +4709,50 @@ int BKE_manta_get_data_flags(MantaDomainSettings *mds)
 
   return flags;
 }
+
+void BKE_manta_create_particle_system(struct Main *bmain, struct Object *ob, const char *pset_name, const char *parts_name, const char *psys_name, const int psys_type)
+{
+  ParticleSystem *psys;
+  ParticleSettings *part;
+  ParticleSystemModifierData *pmmd;
+
+  /* add particle system */
+  part = BKE_particlesettings_add(bmain, pset_name);
+  psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
+
+  part->type = psys_type;
+  part->totpart = 0;
+  part->draw_size = 0.05f;  // make fluid particles more subtle in viewport
+  part->draw_col = PART_DRAW_COL_VEL;
+  psys->part = part;
+  psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
+  BLI_strncpy(psys->name, parts_name, sizeof(psys->name));
+  BLI_addtail(&ob->particlesystem, psys);
+
+  /* add modifier */
+  pmmd = (ParticleSystemModifierData *)modifier_new(eModifierType_ParticleSystem);
+  BLI_strncpy(pmmd->modifier.name, psys_name, sizeof(pmmd->modifier.name));
+  pmmd->psys = psys;
+  BLI_addtail(&ob->modifiers, pmmd);
+  modifier_unique_name(&ob->modifiers, (ModifierData *)pmmd);
+}
+
+void BKE_manta_delete_particle_system(struct Object *ob, const int particle_type)
+{
+  ParticleSystemModifierData *pmmd;
+  ParticleSystem *psys, *next_psys;
+
+  for (psys = ob->particlesystem.first; psys; psys = next_psys) {
+    next_psys = psys->next;
+    if (psys->part->type & particle_type) {
+      /* clear modifier */
+      pmmd = psys_get_modifier(ob, psys);
+      BLI_remlink(&ob->modifiers, pmmd);
+      modifier_free((ModifierData *)pmmd);
+
+      /* clear particle system */
+      BLI_remlink(&ob->particlesystem, psys);
+      psys_free(ob, psys);
+    }
+  }
+}
diff --git a/source/blender/makesrna/intern/rna_manta.c b/source/blender/makesrna/intern/rna_manta.c
index 9ed25ede9cb..45a608bff2d 100644
--- a/source/blender/makesrna/intern/rna_manta.c
+++ b/source/blender/makesrna/intern/rna_manta.c
@@ -114,50 +114,13 @@ static void rna_Manta_parts_create(Main *bmain,
                                    int psys_type)
 {
   Object *ob = (Object *)ptr->owner_id;
-  ParticleSystemModifierData *pmmd;
-  ParticleSystem *psys;
-  ParticleSettings *part;
-
-  /* add particle system */
-  part = BKE_particlesettings_add(bmain, pset_name);
-  psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
-
-  part->type = psys_type;
-  part->totpart = 0;
-  part->draw_size = 0.05f;  // make fluid particles more subtle in viewport
-  part->draw_col = PART_DRAW_COL_VEL;
-  psys->part = part;
-  psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
-  BLI_strncpy(psys->name, parts_name, sizeof(psys->name));
-  BLI_addtail(&ob->particlesystem, psys);
-
-  /* add modifier */
-  pmmd = (ParticleSystemModifierData *)modifier_new(eModifierType_ParticleSystem);
-  BLI_strncpy(pmmd->modifier.name, psys_name, sizeof(pmmd->modifier.name));
-  pmmd->psys = psys;
-  BLI_addtail(&ob->modifiers, pmmd);
-  modifier_unique_name(&ob->modifiers, (ModifierData *)pmmd);
+  BKE_manta_create_particle_system(bmain, ob, pset_name, parts_name, psys_name, psys_type);
 }
 
 static void rna_Manta_parts_delete(PointerRNA *ptr, int ptype)
 {
   Object *ob = (Object *)ptr->owner_id;
-  ParticleSystemModifierData *pmmd;
-  ParticleSystem *psys, *next_psys;
-
-  for (psys = ob->particlesystem.first; psys; psys = next_psys) {
-    next_psys = psys->next;
-    if (psys->part->type == ptype) {
-      /* clear modifier */
-      pmmd = psys_get_modifier(ob, psys);
-      BLI_remlink(&ob->modifiers, pmmd);
-      modifier_free((ModifierData *)pmmd);
-
-      /* clear particle system */
-      BLI_remlink(&ob->particlesystem, psys);
-      psys_free(ob, psys);
-    }
-  }
+  BKE_manta_delete_particle_system(ob, ptype);
 }
 
 static bool rna_Manta_parts_exists(PointerRNA *ptr, int ptype)
@@ -325,9 +288,6 @@ static void rna_Manta_combined_export_update(Main *bmain, Scene *scene, PointerR
   mmd = (MantaModifierData *)modifiers_findByType(ob, eModifierType_Manta);
 
   if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_OFF) {
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_FOAM | PART_MANTA_BUBBLE));
     rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM | PART_MANTA_BUBBLE));
 
     // re-add each particle type if enabled
@@ -343,17 +303,14 @@ static void rna_Manta_combined_export_update(Main *bmain, Scene *scene, PointerR
   }
   else if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM) {
     if (ob->type == OB_MESH && !rna_Manta_parts_exists(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM)))
+
+      rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM));
       rna_Manta_parts_create(bmain,
                              ptr,
                              "SprayFoamParticleSettings",
                              "Spray + Foam Particles",
                              "Spray + Foam Particle System",
                              (PART_MANTA_SPRAY | PART_MANTA_FOAM));
-    rna_Manta_parts_delete(ptr, PART_MANTA_SPRAY);
-    rna_Manta_parts_delete(ptr, PART_MANTA_FOAM);
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_FOAM | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM | PART_MANTA_BUBBLE));
 
     mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
     mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
@@ -366,17 +323,14 @@ static void rna_Manta_combined_export_update(Main *bmain, Scene *scene, PointerR
   else if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_SPRAY_BUBBLE) {
     if (ob->type == OB_MESH &&
         !rna_Manta_parts_exists(ptr, (PART_MANTA_SPRAY | PART_MANTA_BUBBLE)))
+
+      rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_BUBBLE));
       rna_Manta_parts_create(bmain,
                              ptr,
                              "SprayBubbleParticleSettings",
                              "Spray + Bubble Particles",
                              "Spray + Bubble Particle System",
                              (PART_MANTA_SPRAY | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, PART_MANTA_SPRAY);
-    rna_Manta_parts_delete(ptr, PART_MANTA_BUBBLE);
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_FOAM | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM | PART_MANTA_BUBBLE));
 
     mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
     mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
@@ -388,17 +342,14 @@ static void rna_Manta_combined_export_update(Main *bmain, Scene *scene, PointerR
   }
   else if (mmd->domain->sndparticle_combined_export == SNDPARTICLE_COMBINED_EXPORT_FOAM_BUBBLE) {
     if (ob->type == OB_MESH && !rna_Manta_parts_exists(ptr, (PART_MANTA_FOAM | PART_MANTA_BUBBLE)))
+
+      rna_Manta_parts_delete(ptr, (PART_MANTA_FOAM | PART_MANTA_BUBBLE));
       rna_Manta_parts_create(bmain,
                              ptr,
                              "FoamBubbleParticleSettings",
                              "Foam + Bubble Particles",
                              "Foam + Bubble Particle System",
                              (PART_MANTA_FOAM | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, PART_MANTA_FOAM);
-    rna_Manta_parts_delete(ptr, PART_MANTA_BUBBLE);
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM | PART_MANTA_BUBBLE));
 
     mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_FOAM;
     mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_BUBBLE;
@@ -412,18 +363,14 @@ static void rna_Manta_combined_export_update(Main *bmain, Scene *scene, PointerR
            SNDPARTICLE_COMBINED_EXPORT_SPRAY_FOAM_BUBBLE) {
     if (ob->type == OB_MESH &&
         !rna_Manta_parts_exists(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM | PART_MANTA_BUBBLE)))
+
+      rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM | PART_MANTA_BUBBLE));
       rna_Manta_parts_create(bmain,
                              ptr,
                              "SprayFoamBubbleParticleSettings",
                              "Spray + Foam + Bubble Particles",
                              "Spray + Foam + Bubble Particle System",
                              (PART_MANTA_SPRAY | PART_MANTA_FOAM | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, PART_MANTA_SPRAY);
-    rna_Manta_parts_delete(ptr, PART_MANTA_FOAM);
-    rna_Manta_parts_delete(ptr, PART_MANTA_BUBBLE);
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_FOAM));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_SPRAY | PART_MANTA_BUBBLE));
-    rna_Manta_parts_delete(ptr, (PART_MANTA_FOAM | PART_MANTA_BUBBLE));
 
     mmd->domain->particle_type |= FLUID_DOMAIN_PARTICLE_SPRAY;
     mmd->domain->par

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list