[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