[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