[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13818] trunk/blender/source/blender/ blenkernel/intern/particle_system.c:

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Feb 22 17:31:10 CET 2008


Revision: 13818
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13818
Author:   blendix
Date:     2008-02-22 17:31:10 +0100 (Fri, 22 Feb 2008)

Log Message:
-----------

Bugfix: effectors in dupligroups didn't work, if the particle didn't
specify a group of effectors. Now it goes into groups recursively to
find effectors.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle_system.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-02-22 15:09:24 UTC (rev 13817)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-02-22 16:31:10 UTC (rev 13818)
@@ -2403,29 +2403,43 @@
 				
 	}
 }
+
+static void psys_init_effectors_recurs(Object *ob, Object *obsrc, ParticleSystem *psys, ListBase *listb, int level)
+{
+	Group *group;
+	GroupObject *go;
+	unsigned int layer= obsrc->lay;
+
+	if(level>MAX_DUPLI_RECUR) return;
+
+	if(ob->lay & layer) {
+		if(ob->pd || ob->particlesystem.first)
+			add_to_effectors(listb, ob, obsrc, psys);
+
+		if(ob->dup_group) {
+			group= ob->dup_group;
+			for(go= group->gobject.first; go; go= go->next)
+				psys_init_effectors_recurs(go->ob, obsrc, psys, listb, level+1);
+		}
+	}
+}
+
 void psys_init_effectors(Object *obsrc, Group *group, ParticleSystem *psys)
 {
-	ListBase *listb=&psys->effectors;
+	ListBase *listb= &psys->effectors;
 	Base *base;
-	unsigned int layer= obsrc->lay;
 
 	listb->first=listb->last=0;
 	
 	if(group) {
 		GroupObject *go;
 		
-		for(go= group->gobject.first; go; go= go->next) {
-			if( (go->ob->lay & layer) && (go->ob->pd || go->ob->particlesystem.first)) {
-				add_to_effectors(listb, go->ob, obsrc, psys);
-			}
-		}
+		for(go= group->gobject.first; go; go= go->next)
+			psys_init_effectors_recurs(go->ob, obsrc, psys, listb, 0);
 	}
 	else {
-		for(base = G.scene->base.first; base; base= base->next) {
-			if( (base->lay & layer) && (base->object->pd || base->object->particlesystem.first)) {
-				add_to_effectors(listb, base->object, obsrc, psys);
-			}
-		}
+		for(base = G.scene->base.first; base; base= base->next)
+			psys_init_effectors_recurs(base->object, obsrc, psys, listb, 0);
 	}
 }
 





More information about the Bf-blender-cvs mailing list