diff options
author | Daniel Dunbar <daniel@zuster.org> | 2005-07-24 22:16:40 +0400 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2005-07-24 22:16:40 +0400 |
commit | 13e6257ddfe525eddaf2aef31a8dbf1c2f51762f (patch) | |
tree | 6fc81232ebbe7308ebd679063dd1de3b0b0e751d /source/blender/blenkernel | |
parent | aefd9e462fe784d45ff6c646a89c32d100f76762 (diff) |
- switch displistmesh_to_mesh to just dupalloc the mface's
- added verteCos argument to sbObjectReset, lack of this was
causing softbody objects to not be initialized with deform
- made convert-to-mesh option call DAG_scene_sort, prevents
crashes due to obsolete object pointer
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_softbody.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 24 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/softbody.c | 6 |
3 files changed, 9 insertions, 23 deletions
diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h index af764b149be..f47cb1b51e3 100644 --- a/source/blender/blenkernel/BKE_softbody.h +++ b/source/blender/blenkernel/BKE_softbody.h @@ -65,7 +65,7 @@ extern void sbObjectStep(struct Object *ob, float framnr, float (*vertexCos)[ extern void sbObjectToSoftbody(struct Object *ob, float (*vertexCos)[3]); /* resets all motion and time */ -extern void sbObjectReset(struct Object *ob); +extern void sbObjectReset(struct Object *ob, float (*vertexCos)[3]); #endif diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 19783978383..15c16db3142 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -139,9 +139,6 @@ DispListMesh *displistmesh_copy(DispListMesh *odlm) void displistmesh_to_mesh(DispListMesh *dlm, Mesh *me) { - MFace *mfaces; - int i; - if (dlm->totvert>MESH_MAX_VERTS) { error("Too many vertices"); } else { @@ -149,27 +146,16 @@ void displistmesh_to_mesh(DispListMesh *dlm, Mesh *me) me->totvert= dlm->totvert; me->mvert= MEM_dupallocN(dlm->mvert); - me->mface= mfaces= MEM_mallocN(sizeof(*mfaces)*me->totface, "me->mface"); - me->tface= MEM_dupallocN(dlm->tface); - me->mcol= MEM_dupallocN(dlm->mcol); + me->mface= MEM_dupallocN(dlm->mface); + if (dlm->tface) + me->tface= MEM_dupallocN(dlm->tface); + if (dlm->mcol) + me->mcol= MEM_dupallocN(dlm->mcol); if(dlm->medge) { me->totedge= dlm->totedge; me->medge= MEM_dupallocN(dlm->medge); } - - for (i=0; i<me->totface; i++) { - MFace *mf= &mfaces[i]; - MFace *oldmf= &dlm->mface[i]; - - mf->v1= oldmf->v1; - mf->v2= oldmf->v2; - mf->v3= oldmf->v3; - mf->v4= oldmf->v4; - mf->flag= oldmf->flag; - mf->mat_nr= oldmf->mat_nr; - mf->edcode= ME_V1V2|ME_V2V3|ME_V3V4|ME_V4V1; - } } } diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index 2868b348f8d..6f39f4fe058 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -1188,7 +1188,7 @@ void sbObjectToSoftbody(Object *ob, float (*vertexCos)[3]) } /* reset all motion */ -void sbObjectReset(Object *ob) +void sbObjectReset(Object *ob, float (*vertexCos)[3]) { SoftBody *sb= ob->soft; BodyPoint *bp; @@ -1199,7 +1199,7 @@ void sbObjectReset(Object *ob) sb->ctime= bsystem_time(ob, NULL, (float)G.scene->r.cfra, 0.0); - object_update_softbody(ob, NULL); + object_update_softbody(ob, vertexCos); for(a=sb->totpoint, bp= sb->bpoint; a>0; a--, bp++) { // origS is previous timestep @@ -1259,7 +1259,7 @@ void sbObjectStep(Object *ob, float framenr, float (*vertexCos)[3]) dtime= ctime - sb->ctime; // bail out for negative or for large steps if(dtime<0.0 || dtime >= 9.9*G.scene->r.framelen) { // G.scene->r.framelen corrects for frame-mapping, so this is actually 10 frames for UI - sbObjectReset(ob); + sbObjectReset(ob, vertexCos); return; } |