[Bf-blender-cvs] [150b57c7f9c] fluid-mantaflow: fix for particle system crash

Sebastián Barschkis noreply at git.blender.org
Wed Aug 1 17:44:23 CEST 2018


Commit: 150b57c7f9c34f56ae4e95e4a2b7f9db728b169c
Author: Sebastián Barschkis
Date:   Wed Aug 1 17:44:16 2018 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB150b57c7f9c34f56ae4e95e4a2b7f9db728b169c

fix for particle system crash

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

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 538decb7a4a..6544313fe7d 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -108,7 +108,7 @@ static void rna_Smoke_viewport_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)
+static void rna_Smoke_parts_create(Main *bmain, PointerRNA *ptr, char *pset_name, char* parts_name, char* psys_name, int psys_type)
 {
 	Object *ob = (Object *)ptr->id.data;
 	ParticleSystemModifierData *psmd;
@@ -116,7 +116,7 @@ static void rna_Smoke_parts_create(PointerRNA *ptr, char *pset_name, char* parts
 	ParticleSettings *part;
 
 	/* add particle system */
-	part = BKE_particlesettings_add(NULL, pset_name);
+	part = BKE_particlesettings_add(bmain, pset_name);
 	psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
 
 	part->type = psys_type;
@@ -179,16 +179,15 @@ static void rna_Smoke_draw_type_update(Main *UNUSED(bmain), Scene *UNUSED(scene)
 	}
 }
 
-static void rna_Smoke_flip_parts_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_flip_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Object *ob = (Object *)ptr->id.data;
 	SmokeModifierData *smd;
 	smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
 	bool exists = rna_Smoke_parts_exists(ptr, PART_MANTA_FLIP);
 
-	if (value) {
-		if (ob->type == OB_MESH && !exists)
-			rna_Smoke_parts_create(ptr, "FlipParticleSettings", "FLIP Particles", "FLIP Particle System", PART_MANTA_FLIP);
+	if (ob->type == OB_MESH && !exists) {
+		rna_Smoke_parts_create(bmain, ptr, "FlipParticleSettings", "FLIP Particles", "FLIP Particle System", PART_MANTA_FLIP);
 		smd->domain->particle_type |= MOD_SMOKE_PARTICLE_FLIP;
 	}
 	else {
@@ -200,16 +199,15 @@ static void rna_Smoke_flip_parts_set(struct PointerRNA *ptr, int value)
 	rna_Smoke_draw_type_update(NULL, NULL, ptr);
 }
 
-static void rna_Smoke_drop_parts_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_drop_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Object *ob = (Object *)ptr->id.data;
 	SmokeModifierData *smd;
 	smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
 	bool exists = rna_Smoke_parts_exists(ptr, PART_MANTA_DROP);
 
-	if (value) {
-		if (ob->type == OB_MESH && !exists)
-			rna_Smoke_parts_create(ptr, "DropParticleSettings", "Drop Particles", "Drop Particle System", PART_MANTA_DROP);
+	if (ob->type == OB_MESH && !exists) {
+		rna_Smoke_parts_create(bmain, ptr, "DropParticleSettings", "Drop Particles", "Drop Particle System", PART_MANTA_DROP);
 		smd->domain->particle_type |= MOD_SMOKE_PARTICLE_DROP;
 	}
 	else {
@@ -221,16 +219,15 @@ static void rna_Smoke_drop_parts_set(struct PointerRNA *ptr, int value)
 	rna_Smoke_draw_type_update(NULL, NULL, ptr);
 }
 
-static void rna_Smoke_bubble_parts_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_bubble_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Object *ob = (Object *)ptr->id.data;
 	SmokeModifierData *smd;
 	smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
 	bool exists = rna_Smoke_parts_exists(ptr, PART_MANTA_BUBBLE);
 
-	if (value) {
-		if (ob->type == OB_MESH && !exists)
-		rna_Smoke_parts_create(ptr, "BubbleParticleSettings", "Bubble Particles", "Bubble Particle System", PART_MANTA_BUBBLE);
+	if (ob->type == OB_MESH && !exists) {
+		rna_Smoke_parts_create(bmain, ptr, "BubbleParticleSettings", "Bubble Particles", "Bubble Particle System", PART_MANTA_BUBBLE);
 		smd->domain->particle_type |= MOD_SMOKE_PARTICLE_BUBBLE;
 	}
 	else {
@@ -242,16 +239,15 @@ static void rna_Smoke_bubble_parts_set(struct PointerRNA *ptr, int value)
 	rna_Smoke_draw_type_update(NULL, NULL, ptr);
 }
 
-static void rna_Smoke_float_parts_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_float_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Object *ob = (Object *)ptr->id.data;
 	SmokeModifierData *smd;
 	smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
 	bool exists = rna_Smoke_parts_exists(ptr, PART_MANTA_FLOAT);
 
-	if (value) {
-		if (ob->type == OB_MESH && !exists)
-		rna_Smoke_parts_create(ptr, "FloatParticleSettings", "Float Particles", "Float Particle System", PART_MANTA_FLOAT);
+	if (ob->type == OB_MESH && !exists) {
+		rna_Smoke_parts_create(bmain, ptr, "FloatParticleSettings", "Float Particles", "Float Particle System", PART_MANTA_FLOAT);
 		smd->domain->particle_type |= MOD_SMOKE_PARTICLE_FLOAT;
 	}
 	else {
@@ -263,16 +259,15 @@ static void rna_Smoke_float_parts_set(struct PointerRNA *ptr, int value)
 	rna_Smoke_draw_type_update(NULL, NULL, ptr);
 }
 
-static void rna_Smoke_tracer_parts_set(struct PointerRNA *ptr, int value)
+static void rna_Smoke_tracer_parts_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Object *ob = (Object *)ptr->id.data;
 	SmokeModifierData *smd;
 	smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
 	bool exists = rna_Smoke_parts_exists(ptr, PART_MANTA_TRACER);
 
-	if (value) {
-		if (ob->type == OB_MESH && !exists)
-		rna_Smoke_parts_create(ptr, "TracerParticleSettings", "Tracer Particles", "Tracer Particle System", PART_MANTA_TRACER);
+	if (ob->type == OB_MESH && !exists) {
+		rna_Smoke_parts_create(bmain, ptr, "TracerParticleSettings", "Tracer Particles", "Tracer Particle System", PART_MANTA_TRACER);
 		smd->domain->particle_type |= MOD_SMOKE_PARTICLE_TRACER;
 	}
 	else {
@@ -1574,38 +1569,33 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
 
 	prop = RNA_def_property(srna, "use_flip_particles", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "particle_type", MOD_SMOKE_PARTICLE_FLIP);
-	RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_flip_parts_set");
 	RNA_def_property_ui_text(prop, "FLIP", "Create FLIP particle system");
 	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+	RNA_def_property_update(prop, 0, "rna_Smoke_flip_parts_update");
 
 	prop = RNA_def_property(srna, "use_drop_particles", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "particle_type", MOD_SMOKE_PARTICLE_DROP);
-	RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_drop_parts_set");
 	RNA_def_property_ui_text(prop, "Drop", "Create drop particle system");
 	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+	RNA_def_property_update(prop, 0, "rna_Smoke_drop_parts_update");
 
 	prop = RNA_def_property(srna, "use_bubble_particles", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "particle_type", MOD_SMOKE_PARTICLE_BUBBLE);
-	RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_bubble_parts_set");
 	RNA_def_property_ui_text(prop, "Drop", "Create bubble particle system");
 	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+	RNA_def_property_update(prop, 0, "rna_Smoke_bubble_parts_update");
 
 	prop = RNA_def_property(srna, "use_floater_particles", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "particle_type", MOD_SMOKE_PARTICLE_FLOAT);
-	RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_float_parts_set");
 	RNA_def_property_ui_text(prop, "Float", "Create float particle system");
 	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+	RNA_def_property_update(prop, 0, "rna_Smoke_float_parts_update");
 
 	prop = RNA_def_property(srna, "use_tracer_particles", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "particle_type", MOD_SMOKE_PARTICLE_TRACER);
-	RNA_def_property_boolean_funcs(prop, NULL, "rna_Smoke_tracer_parts_set");
 	RNA_def_property_ui_text(prop, "Tracer", "Create tracer particle system");
 	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+	RNA_def_property_update(prop, 0, "rna_Smoke_tracer_parts_update");
 
 	prop = RNA_def_property(srna, "particle_droplet_threshold", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_range(prop, 0.0, 1000.0);



More information about the Bf-blender-cvs mailing list