[Bf-blender-cvs] [1925b9b] master: Particle: Add option to duplicate settings together with particle system itself

Sergey Sharybin noreply at git.blender.org
Fri Sep 23 15:33:54 CEST 2016


Commit: 1925b9b2fac4e637cc2e0e2053e25059c5098664
Author: Sergey Sharybin
Date:   Fri Sep 23 15:33:07 2016 +0200
Branches: master
https://developer.blender.org/rB1925b9b2fac4e637cc2e0e2053e25059c5098664

Particle: Add option to duplicate settings together with particle system itself

This way it's possible to copy combed hair, use it as a basis for another
particle system to do some awesome artistic stuff.

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

M	source/blender/editors/physics/particle_object.c

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

diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index 545042e..895d791 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -993,7 +993,13 @@ static void remove_particle_systems_from_object(Object *ob_to)
 }
 
 /* single_psys_from is optional, if NULL all psys of ob_from are copied */
-static bool copy_particle_systems_to_object(Scene *scene, Object *ob_from, ParticleSystem *single_psys_from, Object *ob_to, int space)
+static bool copy_particle_systems_to_object(Main *bmain,
+                                            Scene *scene,
+                                            Object *ob_from,
+                                            ParticleSystem *single_psys_from,
+                                            Object *ob_to,
+                                            int space,
+                                            bool duplicate_settings)
 {
 	ModifierData *md;
 	ParticleSystem *psys_start = NULL, *psys, *psys_from;
@@ -1070,6 +1076,11 @@ static bool copy_particle_systems_to_object(Scene *scene, Object *ob_from, Parti
 		
 		if (psys_from->edit)
 			copy_particle_edit(scene, ob_to, psys, psys_from);
+
+		if (duplicate_settings) {
+			id_us_min(psys->part);
+			psys->part = BKE_particlesettings_copy(bmain, psys->part);
+		}
 	}
 	MEM_freeN(tmp_psys);
 	
@@ -1131,6 +1142,7 @@ static int copy_particle_systems_exec(bContext *C, wmOperator *op)
 	const int space = RNA_enum_get(op->ptr, "space");
 	const bool remove_target_particles = RNA_boolean_get(op->ptr, "remove_target_particles");
 	const bool use_active = RNA_boolean_get(op->ptr, "use_active");
+	Main *bmain = CTX_data_main(C);
 	Scene *scene = CTX_data_scene(C);
 	Object *ob_from = ED_object_active_context(C);
 	ParticleSystem *psys_from = use_active ? CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data : NULL;
@@ -1146,7 +1158,7 @@ static int copy_particle_systems_exec(bContext *C, wmOperator *op)
 				remove_particle_systems_from_object(ob_to);
 				changed = true;
 			}
-			if (copy_particle_systems_to_object(scene, ob_from, psys_from, ob_to, space))
+			if (copy_particle_systems_to_object(bmain, scene, ob_from, psys_from, ob_to, space, false))
 				changed = true;
 			else
 				fail++;
@@ -1201,12 +1213,14 @@ static int duplicate_particle_systems_poll(bContext *C)
 	return true;
 }
 
-static int duplicate_particle_systems_exec(bContext *C, wmOperator *UNUSED(op))
+static int duplicate_particle_systems_exec(bContext *C, wmOperator *op)
 {
+	const bool duplicate_settings = RNA_boolean_get(op->ptr, "use_duplicate_settings");
 	Scene *scene = CTX_data_scene(C);
 	Object *ob = ED_object_active_context(C);
 	ParticleSystem *psys = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data;
-	copy_particle_systems_to_object(scene, ob, psys, ob, PAR_COPY_SPACE_OBJECT);
+	copy_particle_systems_to_object(CTX_data_main(C), scene, ob, psys, ob,
+	                                PAR_COPY_SPACE_OBJECT, duplicate_settings);
 	return OPERATOR_FINISHED;
 }
 
@@ -1221,4 +1235,7 @@ void PARTICLE_OT_duplicate_particle_system(wmOperatorType *ot)
 
 	/* flags */
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+	RNA_def_boolean(ot->srna, "use_duplicate_settings", false, "Duplicate Settings",
+	                "Duplicate settings as well, so new particle system uses own settings");
 }




More information about the Bf-blender-cvs mailing list