[Bf-blender-cvs] [0211fc8] particles_refactor: Automatically set the object transflag for nparticle duplis, like current particles (but actual code is in nparticle to stay out of object code as much as possible).

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:06:58 CEST 2014


Commit: 0211fc88f9ed53944188e01239fbf6b67e4aca2f
Author: Lukas Tönne
Date:   Fri Jan 3 12:22:42 2014 +0100
https://developer.blender.org/rB0211fc88f9ed53944188e01239fbf6b67e4aca2f

Automatically set the object transflag for nparticle duplis, like
current particles (but actual code is in nparticle to stay out of object
code as much as possible).

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

M	source/blender/blenkernel/BKE_nparticle.h
M	source/blender/blenkernel/intern/nparticle.c
M	source/blender/blenkernel/intern/object.c

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

diff --git a/source/blender/blenkernel/BKE_nparticle.h b/source/blender/blenkernel/BKE_nparticle.h
index f26cd5f..9a84917 100644
--- a/source/blender/blenkernel/BKE_nparticle.h
+++ b/source/blender/blenkernel/BKE_nparticle.h
@@ -32,6 +32,7 @@
 #include "BLI_sys_types.h"
 #include "BLI_utildefines.h"
 
+struct Object;
 struct NParticleSystem;
 struct NParticleAttribute;
 struct NParticleState;
@@ -119,4 +120,7 @@ struct NParticleDisplay *BKE_nparticle_display_add_dupli(struct NParticleSystem
 struct NParticleDisplay *BKE_nparticle_display_copy(struct NParticleSystem *psys, struct NParticleDisplay *display);
 void BKE_nparticle_display_free(struct NParticleSystem *psys, struct NParticleDisplay *display);
 
+/* update object transflag for nparticle duplis */
+void BKE_nparticle_update_object_dupli_flags(struct Object *ob, struct NParticleSystem *psys);
+
 #endif /* BKE_NPARTICLE_H */
diff --git a/source/blender/blenkernel/intern/nparticle.c b/source/blender/blenkernel/intern/nparticle.c
index 877d38e..1ef6bae 100644
--- a/source/blender/blenkernel/intern/nparticle.c
+++ b/source/blender/blenkernel/intern/nparticle.c
@@ -644,3 +644,13 @@ void BKE_nparticle_display_free(NParticleSystem *psys, NParticleDisplay *display
 	
 	MEM_freeN(display);
 }
+
+void BKE_nparticle_update_object_dupli_flags(Object *ob, NParticleSystem *psys)
+{
+	NParticleDisplay *display;
+	ob->transflag &= ~OB_DUPLI_NPARTICLE;
+	for (display = psys->display.first; display; display = display->next) {
+		if (display->type == PAR_DISPLAY_DUPLI)
+			ob->transflag |= OB_DUPLI_NPARTICLE;
+	}
+}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 7ce46e8..913ad4e 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -99,6 +99,7 @@
 #include "BKE_mball.h"
 #include "BKE_modifier.h"
 #include "BKE_node.h"
+#include "BKE_nparticle.h"
 #include "BKE_object.h"
 #include "BKE_paint.h"
 #include "BKE_particle.h"
@@ -2893,6 +2894,7 @@ void BKE_object_handle_update_ex(EvaluationContext *eval_ctx,
 			AnimData *adt = BKE_animdata_from_id(data_id);
 			Key *key;
 			float ctime = BKE_scene_frame_get(scene);
+			ModifierData *md;
 			
 			if (G.debug & G_DEBUG_DEPSGRAPH)
 				printf("recalcdata %s\n", ob->id.name + 2);
@@ -3022,7 +3024,15 @@ void BKE_object_handle_update_ex(EvaluationContext *eval_ctx,
 						psys_get_modifier(ob, psys)->flag &= ~eParticleSystemFlag_psys_updated;
 				}
 			}
-			
+
+			/* nparticles */
+			for (md = ob->modifiers.first; md; md = md->next) {
+				if (md->type == eModifierType_NParticleSystem) {
+					NParticleSystemModifierData *pmd = (NParticleSystemModifierData*)md;
+					BKE_nparticle_update_object_dupli_flags(ob, pmd->psys);
+				}
+			}
+
 			/* quick cache removed */
 		}




More information about the Bf-blender-cvs mailing list