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-24 22:16:40 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-07-24 22:16:40 +0400
commit13e6257ddfe525eddaf2aef31a8dbf1c2f51762f (patch)
tree6fc81232ebbe7308ebd679063dd1de3b0b0e751d /source/blender/blenkernel
parentaefd9e462fe784d45ff6c646a89c32d100f76762 (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.h2
-rw-r--r--source/blender/blenkernel/intern/displist.c24
-rw-r--r--source/blender/blenkernel/intern/softbody.c6
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;
}