[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29083] trunk/blender/source/blender/ blenkernel/intern/anim.c: Disable using own emitter object (self) as dupliobject/group for particles, fixes bugs:
Janne Karhu
jhkarh at gmail.com
Sun May 30 18:09:16 CEST 2010
Revision: 29083
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29083
Author: jhk
Date: 2010-05-30 18:09:16 +0200 (Sun, 30 May 2010)
Log Message:
-----------
Disable using own emitter object (self) as dupliobject/group for particles, fixes bugs:
[#21994] hair particle system with dupli object set to particle system object itself results in 100% cpu usage
[#22023] [Rev 28117]Can't bake particles?
[#22065] in a particle system, setting the emitter as the dupli object crashes blender after pressing alt+a to animate
Revision Links:
--------------
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28117
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/anim.c
Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c 2010-05-30 15:55:16 UTC (rev 29082)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c 2010-05-30 16:09:16 UTC (rev 29083)
@@ -1188,12 +1188,22 @@
BLI_srandom(31415926 + psys->seed);
lay= scene->lay;
- if((psys->renderdata || part->draw_as==PART_DRAW_REND) &&
- ((part->ren_as == PART_DRAW_OB && part->dup_ob) ||
- (part->ren_as == PART_DRAW_GR && part->dup_group && part->dup_group->gobject.first))) {
+ if((psys->renderdata || part->draw_as==PART_DRAW_REND) && ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) {
- psys_check_group_weights(part);
+ /* first check for loops (particle system object used as dupli object) */
+ if(part->ren_as == PART_DRAW_OB) {
+ if(ELEM(part->dup_ob, NULL, par))
+ return;
+ }
+ else { /*PART_DRAW_GR */
+ if(part->dup_group == NULL || part->dup_group->gobject.first == NULL)
+ return;
+ for(go=part->dup_group->gobject.first; go; go=go->next)
+ if(go->ob == par)
+ return;
+ }
+
/* if we have a hair particle system, use the path cache */
if(part->type == PART_HAIR) {
if(psys->flag & PSYS_HAIR_DONE)
@@ -1206,6 +1216,8 @@
totpart = psys->totcached;
}
+ psys_check_group_weights(part);
+
psys->lattice = psys_get_lattice(&sim);
/* gather list of objects or single object */
More information about the Bf-blender-cvs
mailing list