Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2005-07-17 21:41:03 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-07-17 21:41:03 +0400
commit726aea881ceea5a675f77d290b50c645a6e97ba7 (patch)
treed61265a9fedac86061eaa56ae56a04e72987b280 /source/blender/blenkernel/intern/deform.c
parentfdaf1c6eac741fedced835298f04d40c6974d19c (diff)
- convert mesh_modifier to return deformed verts instead of
leaving in a DL_VERTS type displist (and modifying mesh) - removed DL_VERTS displist type (woot woot) - makeDispListMesh now puts deformed verts in object->derivedDeform - switch over other system parts to new deformed vert storage, still kinda hacky and maybe some inconsistencies... will be sorted out soon enough. - moved build_particle_system to makeDispListMesh... this may have adverse side effects, needs to be sorted out with depgraph system
Diffstat (limited to 'source/blender/blenkernel/intern/deform.c')
-rw-r--r--source/blender/blenkernel/intern/deform.c91
1 files changed, 31 insertions, 60 deletions
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index bfe0b81ddb4..cb2d54ed5ba 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -227,16 +227,14 @@ void hook_object_deform(Object *ob, int index, float *vec)
}
-/* modifiers: hooks, deform, softbody
- mode=='s' is start, 'e' is end , 'a' is apply
-*/
-
-int mesh_modifier(Object *ob, char mode)
+void mesh_modifier(Object *ob, MVert **mvert_r)
{
- static MVert *mvert=NULL;
+ MVert *origMVert=NULL;
Mesh *me= ob->data;
MVert *mv;
int a, done=0;
+
+ *mvert_r = NULL;
do_mesh_key(me);
@@ -246,70 +244,43 @@ int mesh_modifier(Object *ob, char mode)
else if(ob->parent && ob->parent->type==OB_LATTICE);
else if(ob->parent && ob->partype==PARSKEL);
else if(ob->softflag & OB_SB_ENABLE);
- else return 0;
+ else return;
- if(me->totvert==0) return 0;
+ if(me->totvert==0) return;
- if(mode=='s') { // "start"
- /* copy */
- mvert= MEM_dupallocN(me->mvert);
+ origMVert= MEM_dupallocN(me->mvert);
- /* hooks */
- if(ob->hooks.first) {
- done= 1;
-
- /* NULL signals initialize */
- hook_object_deform(ob, 0, NULL);
-
- for(a=0, mv= me->mvert; a<me->totvert; a++, mv++) {
- hook_object_deform(ob, a, mv->co);
- }
+ /* hooks */
+ if(ob->hooks.first) {
+ done= 1;
+
+ /* NULL signals initialize */
+ hook_object_deform(ob, 0, NULL);
+
+ for(a=0, mv= me->mvert; a<me->totvert; a++, mv++) {
+ hook_object_deform(ob, a, mv->co);
}
+ }
- if(ob->effect.first) done |= object_wave(ob);
+ if(ob->effect.first) done |= object_wave(ob);
- if((ob->softflag & OB_SB_ENABLE) && !(ob->softflag & OB_SB_POSTDEF)) {
- done= 1;
- sbObjectStep(ob, (float)G.scene->r.cfra);
- }
+ if((ob->softflag & OB_SB_ENABLE) && !(ob->softflag & OB_SB_POSTDEF)) {
+ done= 1;
+ sbObjectStep(ob, (float)G.scene->r.cfra);
+ }
- /* object_deform: output for mesh is in mesh->mvert */
- done |= object_deform(ob);
+ /* object_deform: output for mesh is in mesh->mvert */
+ done |= object_deform(ob);
- if((ob->softflag & OB_SB_ENABLE) && (ob->softflag & OB_SB_POSTDEF)) {
- done= 1;
- sbObjectStep(ob, (float)G.scene->r.cfra);
- }
-
- /* put deformed vertices in dl->verts, optional subsurf will replace that */
- if(done) {
- DispList *dl= find_displist_create(&ob->disp, DL_VERTS); // removed after switchover
- float *fp;
-
- if(dl->verts) MEM_freeN(dl->verts);
- if(dl->nors) MEM_freeN(dl->nors);
- dl->nr= me->totvert;
- if(dl->nr) {
-
- /* make disp array */
- dl->verts= fp= MEM_mallocN(3*sizeof(float)*me->totvert, "deform1");
- mv= me->mvert;
- for(a=0; a<me->totvert; a++, mv++, fp+=3) {
- VECCOPY(fp, mv->co);
- }
- }
- }
-
+ if((ob->softflag & OB_SB_ENABLE) && (ob->softflag & OB_SB_POSTDEF)) {
+ done= 1;
+ sbObjectStep(ob, (float)G.scene->r.cfra);
}
- else if(mode=='e') { // end
- if(mvert) {
- if(me->mvert) MEM_freeN(me->mvert);
- me->mvert= mvert;
- mvert= NULL;
- }
+
+ if (done) {
+ *mvert_r = me->mvert;
+ me->mvert = origMVert;
}
-
- return done;
}
int curve_modifier(Object *ob, char mode)