Added saving/loading of multires deformedvert data. Also added a test_index_face check when reading editmode data for multires.

This commit is contained in:
2006-12-03 22:15:50 +00:00
parent dde6444d51
commit 4300af777c
3 changed files with 20 additions and 9 deletions

View File

@@ -2498,7 +2498,9 @@ static void direct_link_mesh(FileData *fd, Mesh *mesh)
if(mesh->mr) {
MultiresLevel *lvl;
link_list(fd, &mesh->mr->levels);
for(lvl= mesh->mr->levels.first; lvl; lvl= lvl->next) {
lvl= mesh->mr->levels.first;
direct_link_customdata(fd, &mesh->mr->vdata, lvl->totvert);
for(; lvl; lvl= lvl->next) {
lvl->verts= newdataadr(fd, lvl->verts);
lvl->faces= newdataadr(fd, lvl->faces);
lvl->edges= newdataadr(fd, lvl->edges);

View File

@@ -155,6 +155,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "BKE_bad_level_calls.h" // build_seqar (from WHILE_SEQ) free_oops error
#include "BKE_blender.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
#include "BKE_constraint.h"
#include "BKE_global.h" // for G
#include "BKE_library.h" // for set_listbasepointers
@@ -1172,7 +1173,10 @@ static void write_meshs(WriteData *wd, ListBase *idbase)
/* Multires data */
writestruct(wd, DATA, "Multires", 1, mesh->mr);
if(mesh->mr) {
for(lvl= mesh->mr->levels.first; lvl; lvl= lvl->next) {
lvl= mesh->mr->levels.first;
if(lvl)
write_customdata(wd, lvl->totvert, &mesh->mr->vdata);
for(; lvl; lvl= lvl->next) {
writestruct(wd, DATA, "MultiresLevel", 1, lvl);
writestruct(wd, DATA, "MVert", lvl->totvert, lvl->verts);
writestruct(wd, DATA, "MultiresFace", lvl->totface, lvl->faces);

View File

@@ -520,14 +520,19 @@ void multires_get_vert(MVert *out, EditVert *eve, MVert *m, int i)
void multires_get_face(MultiresFace *f, EditFace *efa, MFace *m)
{
if(efa) {
f->v[0]= efa->v1->tmp.l;
f->v[1]= efa->v2->tmp.l;
f->v[2]= efa->v3->tmp.l;
if(efa->v4) f->v[3]= efa->v4->tmp.l;
f->flag= efa->flag;
if(efa->f & 1) f->flag |= ME_FACE_SEL;
MFace tmp;
int j;
tmp.v1= efa->v1->tmp.l;
tmp.v2= efa->v2->tmp.l;
tmp.v3= efa->v3->tmp.l;
if(efa->v4) tmp.v4= efa->v4->tmp.l;
tmp.flag= efa->flag;
if(efa->f & 1) tmp.flag |= ME_FACE_SEL;
else f->flag &= ~ME_FACE_SEL;
if(efa->h) f->flag |= ME_HIDE;
if(efa->h) tmp.flag |= ME_HIDE;
test_index_face(&tmp, NULL, 0, efa->v4?4:3);
for(j=0; j<4; ++j) f->v[j]= (&tmp.v1)[j];
f->flag= tmp.flag;
} else {
f->v[0]= m->v1;
f->v[1]= m->v2;