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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user