[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12591] branches/particles/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Nov 14 23:14:20 CET 2007


Revision: 12591
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12591
Author:   blendix
Date:     2007-11-14 23:14:20 +0100 (Wed, 14 Nov 2007)

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

Particle Branch
===============

- Rearragned the particle mode panel and added 'select' and
  'particle' menus in particle mode.
- Replaced the 'deform_only' variable that was being passed in
  the particle code, by storing it in the derivedmesh itself.
  (fixes particles dissappearing in some cases)
- Made density vertex group work again.
- Added more checks in particle edit tools to prevent some
  crashes when the particle system is not editable.

Modified Paths:
--------------
    branches/particles/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/particles/source/blender/blenkernel/BKE_modifier.h
    branches/particles/source/blender/blenkernel/BKE_particle.h
    branches/particles/source/blender/blenkernel/intern/DerivedMesh.c
    branches/particles/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/particles/source/blender/blenkernel/intern/modifier.c
    branches/particles/source/blender/blenkernel/intern/particle.c
    branches/particles/source/blender/blenkernel/intern/particle_system.c
    branches/particles/source/blender/blenkernel/intern/softbody.c
    branches/particles/source/blender/blenlib/intern/arithb.c
    branches/particles/source/blender/include/BIF_editparticle.h
    branches/particles/source/blender/render/intern/source/convertblender.c
    branches/particles/source/blender/src/buttons_editing.c
    branches/particles/source/blender/src/drawview.c
    branches/particles/source/blender/src/editobject.c
    branches/particles/source/blender/src/editparticle.c
    branches/particles/source/blender/src/header_view3d.c
    branches/particles/source/blender/src/space.c
    branches/particles/source/blender/src/transform_conversions.c

Modified: branches/particles/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_DerivedMesh.h	2007-11-14 21:26:22 UTC (rev 12590)
+++ branches/particles/source/blender/blenkernel/BKE_DerivedMesh.h	2007-11-14 22:14:20 UTC (rev 12591)
@@ -70,6 +70,7 @@
 	CustomData vertData, edgeData, faceData;
 	int numVertData, numEdgeData, numFaceData;
 	int needsFree; /* checked on ->release, is set to 0 for cached results */
+	int deformedOnly; /* set by modifier stack if only deformed from original */
 
 	/* Misc. Queries */
 

Modified: branches/particles/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_modifier.h	2007-11-14 21:26:22 UTC (rev 12590)
+++ branches/particles/source/blender/blenkernel/BKE_modifier.h	2007-11-14 22:14:20 UTC (rev 12591)
@@ -288,7 +288,6 @@
 struct Object *modifiers_isDeformedByLattice(struct Object *ob);
 int           modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
 int           modifiers_isDeformed(struct Object *ob);
-int           modifiers_isDeformedOnly(struct Object *ob);
 
 int           modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
 

Modified: branches/particles/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_particle.h	2007-11-14 21:26:22 UTC (rev 12590)
+++ branches/particles/source/blender/blenkernel/BKE_particle.h	2007-11-14 22:14:20 UTC (rev 12591)
@@ -191,7 +191,7 @@
 
 void copy_particle_key(struct ParticleKey *to, struct ParticleKey *from, int time);
 
-void psys_particle_on_emitter(int deform_only, struct ParticleSystemModifierData *psmd, int distr, int index, int index_dmcache, float *fuv, float *vec, float *nor, float *utan, float *vtan);
+void psys_particle_on_emitter(struct ParticleSystemModifierData *psmd, int distr, int index, int index_dmcache, float *fuv, float *vec, float *nor, float *utan, float *vtan);
 struct ParticleSystemModifierData *psys_get_modifier(struct Object *ob, struct ParticleSystem *psys);
 
 struct ParticleSettings *psys_new_settings(char *name, struct Main *main);
@@ -227,8 +227,8 @@
 //void psys_face_mat(struct DerivedMesh *dm, struct ParticleData *pa, float mat[][4]);
 void psys_vec_rot_to_face(struct DerivedMesh *dm, struct ParticleData *pa, float *vec);
 //void psys_vec_rot_from_face(struct DerivedMesh *dm, struct ParticleData *pa, float *vec);
-void psys_mat_hair_to_object(struct DerivedMesh *dm, int deform_only, short from, struct ParticleData *pa, float hairmat[][4]);
-void psys_mat_hair_to_global(struct Object *ob, struct DerivedMesh *dm, int deform_only, short from, struct ParticleData *pa, float hairmat[][4]);
+void psys_mat_hair_to_object(struct DerivedMesh *dm, short from, struct ParticleData *pa, float hairmat[][4]);
+void psys_mat_hair_to_global(struct Object *ob, struct DerivedMesh *dm, short from, struct ParticleData *pa, float hairmat[][4]);
 
 struct KDTreeNode *alloc_kdtree(int nodes);
 struct KDTreeNode *copy_kdtree(struct KDTreeNode *from);
@@ -244,11 +244,11 @@
 void psys_get_from_key(struct ParticleKey *key, float *loc, float *vel, float *rot, float *time);
 
 int psys_intersect_dm(struct Object *ob, struct DerivedMesh *dm, float *vert_cos, float *co1, float* co2, float *min_d, int *min_face, float *min_uv, float *face_minmax, float *pa_minmax, float radius, float *ipoint);
-void psys_particle_on_dm(struct DerivedMesh *dm, int deform_only, int from, int index, int index_dmcache, float *fuv, float *vec, float *nor, float *utan, float *vtan);
+void psys_particle_on_dm(struct DerivedMesh *dm, int from, int index, int index_dmcache, float *fuv, float *vec, float *nor, float *utan, float *vtan);
 
 /* particle_system.c */
 void initialize_particle(struct ParticleData *pa, int p, struct Object *ob, struct ParticleSystem *psys, struct ParticleSystemModifierData *psmd);
-void reset_particle(struct ParticleData *pa, struct ParticleSystem *psys, struct ParticleSystemModifierData *psmd, struct Object *ob, int deform_only, float dtime, float cfra, float *vg_vel, float *vg_tan, float *vg_rot);
+void reset_particle(struct ParticleData *pa, struct ParticleSystem *psys, struct ParticleSystemModifierData *psmd, struct Object *ob, float dtime, float cfra, float *vg_vel, float *vg_tan, float *vg_rot);
 
 int psys_particle_dm_face_lookup(struct DerivedMesh *dm, int index, float *fuv, struct LinkNode *node);
 

Modified: branches/particles/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/DerivedMesh.c	2007-11-14 21:26:22 UTC (rev 12590)
+++ branches/particles/source/blender/blenkernel/intern/DerivedMesh.c	2007-11-14 22:14:20 UTC (rev 12591)
@@ -2006,10 +2006,9 @@
 			/* set the DerivedMesh to only copy needed data */
 			DM_set_only_copy(dm, (CustomDataMask)curr->link);
 			
-			/* TODO PARTICLE - this is probably a bad place to add the layer, find a new place to do this */
-			if (modifiers_isParticleEnabled(ob) && (CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))==0) {
-				CustomData_add_layer(&dm->faceData, CD_ORIGSPACE, CD_DEFAULT, NULL, dm->getNumFaces(dm));
-			}
+			if(((CustomDataMask)curr->link) & CD_MASK_ORIGSPACE)
+				if(!CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))
+					CustomData_add_layer(&dm->faceData, CD_ORIGSPACE, CD_DEFAULT, NULL, dm->getNumFaces(dm));
 			
 			ndm = mti->applyModifier(md, ob, dm, useRenderParams, !inputVertexCos);
 
@@ -2189,10 +2188,9 @@
 			/* set the DerivedMesh to only copy needed data */
 			DM_set_only_copy(dm, (CustomDataMask)curr->link);
 
-			/* TODO PARTICLE - this is probably a bad place to add the layer, find a new place to do this */
-			if (modifiers_isParticleEnabled(ob) && (CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))==0) {
-				CustomData_add_layer(&dm->faceData, CD_ORIGSPACE, CD_DEFAULT, NULL, dm->getNumFaces(dm));
-			}
+			if(((CustomDataMask)curr->link) & CD_MASK_ORIGSPACE)
+				if(!CustomData_has_layer(&dm->faceData, CD_ORIGSPACE))
+					CustomData_add_layer(&dm->faceData, CD_ORIGSPACE, CD_DEFAULT, NULL, dm->getNumFaces(dm));
 			
 			ndm = mti->applyModifierEM(md, ob, em, dm);
 
@@ -2372,7 +2370,7 @@
 
 	if(ob!=G.obedit) {
 		Object *obact = G.scene->basact?G.scene->basact->object:NULL;
-		int editing = (FACESEL_PAINT_TEST);
+		int editing = (FACESEL_PAINT_TEST)|(G.f & G_PARTICLEEDIT);
 		int needMapping = editing && (ob==obact);
 
 		if( (G.f & G_WEIGHTPAINT) && ob==obact ) {

Modified: branches/particles/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/cdderivedmesh.c	2007-11-14 21:26:22 UTC (rev 12590)
+++ branches/particles/source/blender/blenkernel/intern/cdderivedmesh.c	2007-11-14 22:14:20 UTC (rev 12591)
@@ -751,6 +751,7 @@
 	/* this does a referenced copy, the only new layers being ORIGINDEX */
 
 	DM_init(dm, mesh->totvert, mesh->totedge, mesh->totface);
+	dm->deformedOnly = 1;
 
 	CustomData_merge(&mesh->vdata, &dm->vertData, CD_MASK_MESH, CD_REFERENCE,
 	                 mesh->totvert);
@@ -798,6 +799,8 @@
 	MFace *mface = cddm->mface;
 	int i, *index;
 
+	dm->deformedOnly = 1;
+
 	CustomData_merge(&em->vdata, &dm->vertData, CD_MASK_DERIVEDMESH,
 	                 CD_CALLOC, dm->numVertData);
 	/* CustomData_merge(&em->edata, &dm->edgeData, CD_MASK_DERIVEDMESH,
@@ -889,6 +892,7 @@
 
 	/* this initializes dm, and copies all non mvert/medge/mface layers */
 	DM_from_template(dm, source, numVerts, numEdges, numFaces);
+	dm->deformedOnly = source->deformedOnly;
 
 	CustomData_copy_data(&source->vertData, &dm->vertData, 0, 0, numVerts);
 	CustomData_copy_data(&source->edgeData, &dm->edgeData, 0, 0, numEdges);

Modified: branches/particles/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/modifier.c	2007-11-14 21:26:22 UTC (rev 12590)
+++ branches/particles/source/blender/blenkernel/intern/modifier.c	2007-11-14 22:14:20 UTC (rev 12591)
@@ -4977,8 +4977,8 @@
 		}
 	}
 	
-	/* TODO - Particles only need this if they are after a non deform modifier, for now do it always
-	These should be calculated on the fly */
+	/* particles only need this if they are after a non deform modifier, and
+	 * the modifier stack will only create them in that case. */
 	dataMask |= CD_MASK_ORIGSPACE;
 	
 	return dataMask;
@@ -5377,7 +5377,7 @@
 	}
 	return 0.0;
 }
-static void explodeModifier_createFacepa(int deform_only, ExplodeModifierData *emd,
+static void explodeModifier_createFacepa(ExplodeModifierData *emd,
 										 ParticleSystemModifierData *psmd, DerivedMesh *dm)
 {
 	ParticleSystem *psys=psmd->psys;
@@ -5428,7 +5428,7 @@
 	/* make tree of emitter locations */
 	tree=alloc_kdtree(totpart);
 	for(p=0,pa=psys->particles,cur=tree; p<totpart; p++,pa++,cur++){
-		psys_particle_on_dm(dm,deform_only,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,cur->co,0,0,0);
+		psys_particle_on_dm(dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,cur->co,0,0,0);
 		cur->nbr=p;
 		if(p) insert_into_kdtree(tree,cur);
 	}
@@ -5948,7 +5948,6 @@
 	int *facepa=emd->facepa, *vertpa=0;
 	int totdup=0,totvert=0,totface=0,totpart=0;
 	int i, j, v, mindex=0;
-	int deform_only = modifiers_isDeformedOnly(ob);
 
 	totface= dm->getNumFaces(dm);
 	totvert= dm->getNumVerts(dm);
@@ -6001,7 +6000,7 @@
 	for(i=0, pa=pars; i<=totpart; i++, pa++){
 
 		if(i!=totpart){
-			psys_particle_on_emitter(deform_only, psmd,part->from,pa->num,-1,pa->fuv,loc0,nor,0,0);
+			psys_particle_on_emitter(psmd,part->from,pa->num,-1,pa->fuv,loc0,nor,0,0);
 			Mat4MulVecfl(ob->obmat,loc0);
 
 			state.time=cfra;
@@ -6188,7 +6187,7 @@
 			if(emd->flag & eExplodeFlag_CalcFaces)
 				emd->flag &= ~eExplodeFlag_CalcFaces;
 
-			explodeModifier_createFacepa(modifiers_isDeformedOnly(ob),emd,psmd,derivedData);
+			explodeModifier_createFacepa(emd,psmd,derivedData);
 		}
 
 		/* 2. create new mesh */
@@ -7169,21 +7168,6 @@
 	return 0;
 }
 
-/* checks we only have deform modifiers */
-int modifiers_isDeformedOnly(Object *ob)
-{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list