[Bf-blender-cvs] [47056f2b3a4] fluid-mantaflow: refactoring in rna particle setup

Sebastián Barschkis noreply at git.blender.org
Wed Jul 5 19:14:17 CEST 2017


Commit: 47056f2b3a4ffd2c302e3bf7474764b208686948
Author: Sebastián Barschkis
Date:   Wed Jul 5 19:13:37 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB47056f2b3a4ffd2c302e3bf7474764b208686948

refactoring in rna particle setup

made particle system creation / deletion more modular. this will be helpful when adding floats and tracer particles.

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

M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/dynamicpaint.c
M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/makesdna/DNA_particle_types.h
M	source/blender/makesdna/DNA_smoke_types.h
M	source/blender/makesrna/intern/rna_particle.c
M	source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index dee198c0d97..313a0c3c436 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -360,15 +360,13 @@ class PHYSICS_PT_smoke_particles(PhysicButtonsPanel, Panel):
 
         col = split.column()
         col.enabled = not domain.point_cache.is_baked
-        col.label(text="Type:")
         col.prop(domain, "use_flip_particles", text="FLIP")
-        col.prop(domain, "use_drop_particles", text="Secondary")
+        col.prop(domain, "use_drop_particles", text="Drop")
         #col.prop(domain, "use_float_particles", text="Floats")
         #col.prop(domain, "use_tracer_particles", text="Tracer")
 
         col = split.column()
         col.enabled = not domain.point_cache.is_baked
-        col.label(text="")
         sub = col.column()
         sub.active = domain.use_drop_particles
         sub.label()
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 22692750a45..98470c92b88 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -5847,7 +5847,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
 					/* Particle brush: */
 					if (brush->collision == MOD_DPAINT_COL_PSYS) {
 						if (brush->psys && brush->psys->part &&
-						    ELEM(brush->psys->part->type, PART_EMITTER, PART_FLUID, PART_MANTA_FLIP, PART_MANTA_SND) &&
+						    ELEM(brush->psys->part->type, PART_EMITTER, PART_FLUID, PART_MANTA_FLIP, PART_MANTA_DROP) &&
 						    psys_check_enabled(brushObj, brush->psys, G.is_rendering))
 						{
 							/* Paint a particle system */
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 49a6b36d779..76c32273985 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -549,7 +549,7 @@ static void initialize_particle_texture(ParticleSimulationData *sim, ParticleDat
 	case PART_FLUID:
 		break;
 	case PART_MANTA_FLIP:
-	case PART_MANTA_SND:
+	case PART_MANTA_DROP:
 		break;
 	}
 }
@@ -3778,7 +3778,7 @@ static void particles_manta_step(ParticleSimulationData *sim, int UNUSED(cfra),
 
 			if (part->type == PART_MANTA_FLIP)
 				totpart = liquid_get_num_flip_particles(sds->fluid);
-			if (part->type == PART_MANTA_SND)
+			if (part->type == PART_MANTA_DROP)
 				totpart = liquid_get_num_snd_particles(sds->fluid);
 
 			// Sanity check: no particle files present yet
@@ -4405,7 +4405,7 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys, cons
 			break;
 		}
 		case PART_MANTA_FLIP:
-		case PART_MANTA_SND:
+		case PART_MANTA_DROP:
 		{
 			particles_manta_step(&sim, (int)cfra, use_render_params);
 			break;
diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h
index 7d4647ea172..338806368b7 100644
--- a/source/blender/makesdna/DNA_particle_types.h
+++ b/source/blender/makesdna/DNA_particle_types.h
@@ -357,7 +357,7 @@ typedef enum eParticleDrawFlag {
 #define PART_HAIR			2
 #define PART_FLUID			3
 #define PART_MANTA_FLIP		4
-#define PART_MANTA_SND		5
+#define PART_MANTA_DROP		5
 
 /* part->flag */
 #define PART_REACT_STA_END	1
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index 17899b0c359..43172078933 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -300,8 +300,9 @@ typedef struct SmokeDomainSettings {
 #define MOD_SMOKE_FLOW_TEXTURE_MAP_UV 1
 
 /* particle types */
-#define MOD_SMOKE_PARTICLE_FLIP (1<<0)
-#define MOD_SMOKE_PARTICLE_SND (1<<1)
+#define MOD_SMOKE_PARTICLE_NONE (1<<0)
+#define MOD_SMOKE_PARTICLE_FLIP (1<<1)
+#define MOD_SMOKE_PARTICLE_DROP (1<<2)
 
 /* flags */
 #define MOD_SMOKE_FLOW_ABSOLUTE (1<<1) /*old style emission*/
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c
index 81e876e7924..62e816be33c 100644
--- a/source/blender/makesrna/intern/rna_particle.c
+++ b/source/blender/makesrna/intern/rna_particle.c
@@ -885,7 +885,7 @@ static int rna_PartSettings_is_manta_get(PointerRNA *ptr)
 {
 	ParticleSettings *part = (ParticleSettings *)ptr->data;
 
-	return (part->type == PART_MANTA_FLIP) || (part->type == PART_MANTA_SND);
+	return (part->type == PART_MANTA_FLIP) || (part->type == PART_MANTA_DROP);
 }
 
 static void rna_ParticleSettings_use_clump_curve_update(Main *bmain, Scene *scene, PointerRNA *ptr)
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 50f79a3ce5d..d97ad6c5dff 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -107,140 +107,114 @@ static void rna_Smoke_viewport_set(struct PointerRNA *ptr, int value)
 	}
 }
 
-static void rna_Smoke_flip_parts_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_parts_create(PointerRNA *ptr, char *pset_name, char* parts_name, char* psys_name, int psys_type)
 {
 	Object *ob = (Object *)ptr->id.data;
-	SmokeModifierData *smd;
 	ParticleSystemModifierData *psmd;
-	ParticleSystem *psys, *next_psys;
+	ParticleSystem *psys;
 	ParticleSettings *part;
 
-	smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
+	/* add particle system */
+	part = psys_new_settings(pset_name, NULL);
+	psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
+
+	part->type = psys_type;
+	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 */
+	psmd = (ParticleSystemModifierData *)modifier_new(eModifierType_ParticleSystem);
+	BLI_strncpy(psmd->modifier.name, psys_name, sizeof(psmd->modifier.name));
+	psmd->psys = psys;
+	BLI_addtail(&ob->modifiers, psmd);
+	modifier_unique_name(&ob->modifiers, (ModifierData *)psmd);
+}
 
-	/* remove fluidsim particle system */
-	if (value && smd && smd->domain) {
-		for (psys = ob->particlesystem.first; psys; psys = psys->next)
-			if (psys->part->type == PART_MANTA_FLIP)
-				break;
-
-		if (ob->type == OB_MESH && !psys) {
-			/* add particle system */
-			part = psys_new_settings("FlipParticleSettings", NULL);
-			psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
-
-			part->type = PART_MANTA_FLIP;
-			psys->part = part;
-			psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
-			BLI_strncpy(psys->name, "FLIP Particles", sizeof(psys->name));
-			BLI_addtail(&ob->particlesystem, psys);
-
-			/* add modifier */
-			psmd = (ParticleSystemModifierData *)modifier_new(eModifierType_ParticleSystem);
-			BLI_strncpy(psmd->modifier.name, "FLIP Particle System", sizeof(psmd->modifier.name));
-			psmd->psys = psys;
-			BLI_addtail(&ob->modifiers, psmd);
-			modifier_unique_name(&ob->modifiers, (ModifierData *)psmd);
-		}
-		/* wire mode more convenient for particles */
-		ob->dt = OB_WIRE;
-	}
-	else {
-		for (psys = ob->particlesystem.first; psys; psys = next_psys) {
-			next_psys = psys->next;
-			if (psys->part->type == PART_MANTA_FLIP) {
-				/* 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);
-			}
+static void rna_Smoke_parts_delete(PointerRNA *ptr, int ptype)
+{
+	Object *ob = (Object *)ptr->id.data;
+	ParticleSystemModifierData *psmd;
+	ParticleSystem *psys, *next_psys;
+
+	for (psys = ob->particlesystem.first; psys; psys = next_psys) {
+		next_psys = psys->next;
+		if (psys && psys->part && psys->part->type == ptype) {
+			/* 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);
 		}
-		/* solid mode more convenient for meshes (only set if snd parts not enabled) */
-		if (!(smd->domain->particle_type & MOD_SMOKE_PARTICLE_FLIP)) ob->dt = OB_SOLID;
 	}
+}
 
-	if (value == 1) {
-		smd->domain->particle_type |= MOD_SMOKE_PARTICLE_FLIP;
+static bool rna_Smoke_parts_exists(PointerRNA *ptr, int ptype)
+{
+	Object *ob = (Object *)ptr->id.data;
+	ParticleSystem *psys;
+
+	for (psys = ob->particlesystem.first; psys; psys = psys->next) {
+		if (psys->part->type == ptype) return true;
 	}
-	else {
-		/* Clear old caches. */
-		PTCacheID id;
-		BKE_ptcache_id_from_smoke(&id, ob, smd);
-		BKE_ptcache_id_clear(&id, PTCACHE_CLEAR_ALL, 0);
+	return false;
+}
 
-		smd->domain->particle_type &= ~MOD_SMOKE_PARTICLE_FLIP;
+static void rna_Smoke_draw_type_update(Main *UNUSED(bmain), Scene *UNUSED(scene), struct PointerRNA *ptr)
+{
+	Object *ob = (Object *)ptr->id.data;
+	SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
+
+	/* Solid mode more convenient for meshes if no parts present */
+	if (settings->particle_type & MOD_SMOKE_PARTICLE_NONE) {
+		ob->dt = OB_SOLID;
+	} else {
+		ob->dt = OB_WIRE;
 	}
 }
 
-static void rna_Smoke_snd_parts_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_flip_parts_set(struct PointerRNA *ptr, int value)
 {
 	Object *ob = (Object *)ptr->id.data;
 	SmokeModifierData *smd;
-	ParticleSystemModifierData *psmd;
-	ParticleSystem *psys, *next_psys;
-	ParticleSettings *part;
-
 	smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
+	bool exists = rna_Smoke_parts_exists(ptr, PART_MANTA_FLIP);
 
-	/* remove fluidsim particle system */
-	if (value && smd && smd->domain) {
-		for (psys = ob->particlesystem.first; psys; psys = psys->next)
-			if (psys->part->type == PART_MANTA_SND)
-				break;
-
-		if (ob->type == OB_MESH && !psys) {
-			/* add particle system */
-			part = psys_new_settings("SecondaryParticleSettings", NULL);
-			psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
-
-			part->type = P

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list