[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41878] trunk/blender/source/blender: fix [#29272] Dynamic Paint crashes on duplicating a particle system

Campbell Barton ideasman42 at gmail.com
Tue Nov 15 14:45:24 CET 2011


Revision: 41878
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41878
Author:   campbellbarton
Date:     2011-11-15 13:45:24 +0000 (Tue, 15 Nov 2011)
Log Message:
-----------
fix [#29272] Dynamic Paint crashes on duplicating a particle system
smoke had this same bug too

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/makesdna/DNA_particle_types.h

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2011-11-15 12:32:58 UTC (rev 41877)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2011-11-15 13:45:24 UTC (rev 41878)
@@ -50,6 +50,7 @@
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_sequence_types.h"
+#include "DNA_smoke_types.h"
 #include "DNA_sound_types.h"
 #include "DNA_space_types.h"
 #include "DNA_view3d_types.h"
@@ -961,7 +962,6 @@
 
 void copy_object_particlesystems(Object *obn, Object *ob)
 {
-	ParticleSystemModifierData *psmd;
 	ParticleSystem *psys, *npsys;
 	ModifierData *md;
 
@@ -974,10 +974,28 @@
 		/* need to update particle modifiers too */
 		for(md=obn->modifiers.first; md; md=md->next) {
 			if(md->type==eModifierType_ParticleSystem) {
-				psmd= (ParticleSystemModifierData*)md;
+				ParticleSystemModifierData *psmd= (ParticleSystemModifierData*)md;
 				if(psmd->psys==psys)
 					psmd->psys= npsys;
 			}
+			else if(md->type==eModifierType_DynamicPaint) {
+				DynamicPaintModifierData *pmd= (DynamicPaintModifierData*)md;
+				if (pmd->brush) {
+					if(pmd->brush->psys==psys) {
+						pmd->brush->psys= npsys;
+					}
+				}
+			}
+			else if (md->type==eModifierType_Smoke) {
+				SmokeModifierData *smd = (SmokeModifierData*) md;
+
+				if(smd->type==MOD_SMOKE_TYPE_FLOW) {
+					if (smd->flow) {
+						if (smd->flow->psys == psys)
+							smd->flow->psys= npsys;
+					}
+				}
+			}
 		}
 	}
 }

Modified: trunk/blender/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_particle_types.h	2011-11-15 12:32:58 UTC (rev 41877)
+++ trunk/blender/source/blender/makesdna/DNA_particle_types.h	2011-11-15 13:45:24 UTC (rev 41878)
@@ -233,7 +233,10 @@
 	struct PartDeflect *pd2;
 } ParticleSettings;
 
-typedef struct ParticleSystem{				/* note, make sure all (runtime) are NULL's in copy_particlesystem */
+typedef struct ParticleSystem
+{	/* note1: make sure all (runtime) are NULL's in 'copy_particlesystem' XXX, this function is no more! - need to invstigate */
+	/* note2: make sure any uses of this struct in DNA are accounted for in 'copy_object_particlesystems' */
+
 	struct ParticleSystem *next, *prev;
 
 	ParticleSettings *part;					/* particle settings */




More information about the Bf-blender-cvs mailing list