diff options
-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 | ||||
-rw-r--r-- | source/blender/src/editobject.c | 9 | ||||
-rwxr-xr-x | source/blender/src/transform_conversions.c | 2 |
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)){ |