[Bf-blender-cvs] [f9308a585ec] master: Fix particle system duplication duplicates all systems

Philipp Oeser noreply at git.blender.org
Wed Jul 28 15:08:12 CEST 2021


Commit: f9308a585ecdd1d9e287caa8e0643347784c17e2
Author: Philipp Oeser
Date:   Mon Jul 26 21:38:37 2021 +0200
Branches: master
https://developer.blender.org/rBf9308a585ecdd1d9e287caa8e0643347784c17e2

Fix particle system duplication duplicates all systems

Followup to rB3834dc2f7b38 (where getting the proper particle system was
fixed for the Adjust Last Operation panel in the Properties Editor). But
since this operator can also be called from the 3DView, get a current
particle system there as well.

Without this, _all_ particle systems would be copied when executing from
the 3DView (which was never really intended [operator description uses
singular] -- it just happens to use `copy_particle_systems_to_object`
internally as well -- same as the `Copy Active/All to Selected Objects`
operators)).

ref. T83317

Maniphest Tasks: T83317

Differential Revision: https://developer.blender.org/D12033

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

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 387d10d538b..2668846284d 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -1331,7 +1331,12 @@ 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);
+  /* Context pointer is only valid in the Properties Editor. */
   ParticleSystem *psys = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data;
+  if (psys == NULL) {
+    psys = psys_get_current(ob);
+  }
+
   copy_particle_systems_to_object(
       C, scene, ob, psys, ob, PAR_COPY_SPACE_OBJECT, duplicate_settings);
   return OPERATOR_FINISHED;



More information about the Bf-blender-cvs mailing list