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
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
-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
-rw-r--r--source/blender/src/editobject.c9
-rwxr-xr-xsource/blender/src/transform_conversions.c2
5 files changed, 14 insertions, 29 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;
}
diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c
index e82e0e6ebba..704d6c301e2 100644
--- a/source/blender/src/editobject.c
+++ b/source/blender/src/editobject.c
@@ -2191,13 +2191,12 @@ void convertmenu(void)
me->mat= MEM_dupallocN(oldme->mat);
for(a=0; a<ob1->totcol; a++) id_us_plus((ID *)me->mat[a]);
}
-
+
dm= mesh_create_derived_no_deform(ob, NULL);
dlm= dm->convertToDispListMesh(dm);
- dm->release(dm);
-
displistmesh_to_mesh(dlm, ob1->data);
displistmesh_free(dlm);
+ dm->release(dm);
}
else if(ob->type==OB_FONT) {
if(nr==1) {
@@ -2297,14 +2296,14 @@ void convertmenu(void)
free_and_unlink_base(basedel);
basedel = NULL;
}
-
+
countall();
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWBUTSEDIT, 0);
BIF_undo_push("Convert Object");
- DAG_scene_flush_update(G.scene);
+ DAG_scene_sort(G.scene);
}
/* Change subdivision properties of mesh object ob, if
diff --git a/source/blender/src/transform_conversions.c b/source/blender/src/transform_conversions.c
index 4126a61bf45..013e0d51bba 100755
--- a/source/blender/src/transform_conversions.c
+++ b/source/blender/src/transform_conversions.c
@@ -1412,7 +1412,7 @@ void special_aftertrans_update(short cancelled)
ob= base->object;
/* reset soft body object */
- if(ob->softflag & OB_SB_ENABLE) sbObjectReset(ob);
+ if(ob->softflag & OB_SB_ENABLE) sbObjectReset(ob, NULL);
/* Set autokey if necessary */
if ((G.flags & G_RECORDKEYS) && (!cancelled) && (base->flag & SELECT)){