[Bf-blender-cvs] [fe01430f74f] blender2.8: Particle edit: Make check to work within copy-on-write concept

Sergey Sharybin noreply at git.blender.org
Tue May 15 17:21:36 CEST 2018


Commit: fe01430f74f1440827c3055bd1025b33302afd7b
Author: Sergey Sharybin
Date:   Tue May 15 12:34:18 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBfe01430f74f1440827c3055bd1025b33302afd7b

Particle edit: Make check to work within copy-on-write concept

Not fully optimal, we can probably store pointer to original psys
similar to ID's orig_id.

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

M	source/blender/blenkernel/intern/particle.c

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

diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 37607de9c36..d740963cde8 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -291,14 +291,31 @@ void psys_enable_all(Object *ob)
 
 bool psys_in_edit_mode(Depsgraph *depsgraph, ParticleSystem *psys)
 {
-	ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
+	const ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph);
+	if (view_layer->basact == NULL) {
+		/* TODO(sergey): Needs double-check with multi-object edit. */
+		return false;
+	}
 	const bool use_render_params = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
-
-	return (view_layer->basact &&
-	        (view_layer->basact->object->mode & OB_MODE_PARTICLE_EDIT) &&
-	        psys == psys_get_current((view_layer->basact)->object) &&
-	        (psys->edit || psys->pointcache->edit) &&
-			!use_render_params);
+	const Object *object = view_layer->basact->object;
+	if (object->mode != OB_MODE_PARTICLE_EDIT) {
+		return false;
+	}
+	/* TODO(sergey): Find a faster way to switch to an original psys. */
+	/*const*/ Object *object_orig = DEG_get_original_object(view_layer->basact->object);
+	ParticleSystem *psys_orig = object_orig->particlesystem.first;
+	while (psys_orig != NULL) {
+		if (STREQ(psys_orig->name, psys->name)) {
+			break;
+		}
+		psys = psys->next;
+		psys_orig = psys_orig->next;
+	}
+	if (psys_orig != psys_get_current(object_orig)) {
+		return false;
+	}
+	return (psys_orig->edit || psys->pointcache->edit) &&
+	       (use_render_params == false);
 }
 
 bool psys_check_enabled(Object *ob, ParticleSystem *psys, const bool use_render_params)



More information about the Bf-blender-cvs mailing list