[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13286] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Jan 18 15:30:26 CET 2008


Revision: 13286
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13286
Author:   blendix
Date:     2008-01-18 15:30:26 +0100 (Fri, 18 Jan 2008)

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

Bugfix: particle settings didn't automatically link in associated
objects or groups.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/render/intern/source/convertblender.c

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2008-01-18 12:20:28 UTC (rev 13285)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2008-01-18 14:30:26 UTC (rev 13286)
@@ -2223,6 +2223,9 @@
 					 * since object_duplilist does dupliparticles before that */
 					dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
 					dm->release(dm);
+
+					for(psys=ob->particlesystem.first; psys; psys=psys->next)
+						psys_get_modifier(ob, psys)->flag &= ~eParticleSystemFlag_psys_updated;
 				}
 			}
 		}

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2008-01-18 12:20:28 UTC (rev 13285)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2008-01-18 14:30:26 UTC (rev 13286)
@@ -7529,6 +7529,14 @@
 	}
 }
 
+static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSettings *part)
+{
+	expand_doit(fd, mainvar, part->dup_ob);
+	expand_doit(fd, mainvar, part->dup_group);
+	expand_doit(fd, mainvar, part->eff_group);
+	expand_doit(fd, mainvar, part->bb_ob);
+}
+
 static void expand_ipo(FileData *fd, Main *mainvar, Ipo *ipo)
 {
 	IpoCurve *icu;
@@ -8121,6 +8129,8 @@
 					case ID_IP:
 						expand_ipo(fd, mainvar, (Ipo *)id);
 						break;
+					case ID_PA:
+						expand_particlesettings(fd, mainvar, (ParticleSettings *)id);
 					}
 
 					doit= 1;

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-18 12:20:28 UTC (rev 13285)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-18 14:30:26 UTC (rev 13286)
@@ -4147,16 +4147,31 @@
 	Group *group;
 	GroupObject *go;
 	ParticleSystem *psys;
+	DerivedMesh *dm;
 
 	if(level >= MAX_DUPLI_RECUR)
 		return;
 	
 	if(ob->transflag & OB_DUPLIPARTS) {
-		for(psys=ob->particlesystem.first; psys; psys=psys->next)
-			if(enable)
-				psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy);
-			else
-				psys_render_restore(ob, psys);
+		for(psys=ob->particlesystem.first; psys; psys=psys->next) {
+			if(ELEM(psys->part->draw_as, PART_DRAW_OB, PART_DRAW_GR)) {
+				if(enable)
+					psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy);
+				else
+					psys_render_restore(ob, psys);
+			}
+		}
+
+		if(level == 0 && enable) {
+			/* this is to make sure we get render level duplis in groups:
+			* the derivedmesh must be created before init_render_mesh,
+			* since object_duplilist does dupliparticles before that */
+			dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+			dm->release(dm);
+
+			for(psys=ob->particlesystem.first; psys; psys=psys->next)
+				psys_get_modifier(ob, psys)->flag &= ~eParticleSystemFlag_psys_updated;
+		}
 	}
 
 	if(ob->dup_group==NULL) return;
@@ -4186,7 +4201,7 @@
 
 	for(SETLOOPER(re->scene, base)) {
 		ob= base->object;
-		
+
 		/* if the object has been restricted from rendering in the outliner, ignore it */
 		if(ob->restrictflag & OB_RESTRICT_RENDER) continue;
 
@@ -4216,7 +4231,7 @@
 
 					if(obd->restrictflag & OB_RESTRICT_RENDER)
 						continue;
-					
+
 					if(obd->type==OB_MBALL)
 						continue;
 





More information about the Bf-blender-cvs mailing list