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

Brecht Van Lommel brechtvanlommel at pandora.be
Sun Dec 2 16:54:55 CET 2007


Revision: 12759
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12759
Author:   blendix
Date:     2007-12-02 16:54:54 +0100 (Sun, 02 Dec 2007)

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

Particles
=========

Bugfix for crash with disabling the particles system and saving/loading
files, the way it detected if the mesh had changed could not work correct.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesdna/DNA_modifier_types.h

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-12-02 14:48:24 UTC (rev 12758)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-12-02 15:54:54 UTC (rev 12759)
@@ -5088,7 +5088,7 @@
 	DerivedMesh *dm = derivedData;
 	ParticleSystemModifierData *psmd= (ParticleSystemModifierData*) md;
 	ParticleSystem * psys=0;
-	int totvert=0,totedge=0,totface=0,needsFree=0;
+	int needsFree=0;
 
 	if(ob->particlesystem.first)
 		psys=psmd->psys;
@@ -5137,9 +5137,6 @@
 
 	/* clear old dm */
 	if(psmd->dm){
-		totvert=psmd->dm->getNumVerts(psmd->dm);
-		totedge=psmd->dm->getNumEdges(psmd->dm);
-		totface=psmd->dm->getNumFaces(psmd->dm);
 		psmd->dm->needsFree = 1;
 		psmd->dm->release(psmd->dm);
 	}
@@ -5157,17 +5154,18 @@
 	psmd->dm->needsFree = 0;
 
 	/* report change in mesh structure */
-	if(psmd->dm->getNumVerts(psmd->dm)!=totvert ||
-	   psmd->dm->getNumEdges(psmd->dm)!=totedge ||
-	   psmd->dm->getNumFaces(psmd->dm)!=totface){
+	if(psmd->dm->getNumVerts(psmd->dm)!=psmd->totdmvert ||
+	   psmd->dm->getNumEdges(psmd->dm)!=psmd->totdmedge ||
+	   psmd->dm->getNumFaces(psmd->dm)!=psmd->totdmface){
 		/* in file read dm hasn't really changed but just wasn't saved in file */
-		if(psmd->flag & eParticleSystemFlag_Loaded)
-			psmd->flag &= ~eParticleSystemFlag_Loaded;
-		else{
-			psys->recalc |= PSYS_RECALC_HAIR;
-			psys->recalc |= PSYS_DISTR;
-			psmd->flag |= eParticleSystemFlag_DM_changed;
-		}
+
+		psys->recalc |= PSYS_RECALC_HAIR;
+		psys->recalc |= PSYS_DISTR;
+		psmd->flag |= eParticleSystemFlag_DM_changed;
+
+		psmd->totdmvert= psmd->dm->getNumVerts(psmd->dm);
+		psmd->totdmedge= psmd->dm->getNumEdges(psmd->dm);
+		psmd->totdmface= psmd->dm->getNumFaces(psmd->dm);
 	}
 
 	if(psys){
@@ -7206,4 +7204,5 @@
 		}
 	}
 	return 0;
-}
\ No newline at end of file
+}
+

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-02 14:48:24 UTC (rev 12758)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-02 15:54:54 UTC (rev 12759)
@@ -2979,7 +2979,6 @@
 
 			psmd->dm=0;
 			psmd->psys=newdataadr(fd, psmd->psys);
-			psmd->flag |= eParticleSystemFlag_Loaded;
 			psmd->flag &= ~eParticleSystemFlag_psys_updated;
 		} else if (md->type==eModifierType_Explode) {
 			ExplodeModifierData *psmd = (ExplodeModifierData*) md;

Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2007-12-02 14:48:24 UTC (rev 12758)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2007-12-02 15:54:54 UTC (rev 12759)
@@ -401,7 +401,8 @@
 	ModifierData modifier;
 	struct ParticleSystem *psys;
 	struct DerivedMesh *dm;
-	short flag, rt[3];
+	int totdmvert, totdmedge, totdmface;
+	short flag, rt;
 } ParticleSystemModifierData;
 
 typedef enum {





More information about the Bf-blender-cvs mailing list