forked from bartvdbraak/blender
Added a copy function for multires; duplicating a mesh with multires now works properly.
This commit is contained in:
parent
e3b72755cc
commit
ef389028b9
@ -270,6 +270,9 @@ Mesh *copy_mesh(Mesh *me)
|
||||
id_lib_extern((ID*)tface->tpage);
|
||||
}
|
||||
|
||||
if(me->mr)
|
||||
men->mr= multires_copy(me->mr);
|
||||
|
||||
men->mselect= NULL;
|
||||
|
||||
men->bb= MEM_dupallocN(men->bb);
|
||||
|
@ -34,12 +34,14 @@ struct uiBlock;
|
||||
struct Object;
|
||||
struct Mesh;
|
||||
struct MultiresLevel;
|
||||
struct Multires;
|
||||
|
||||
void multires_draw_interface(struct uiBlock *block, unsigned short cx, unsigned short cy);
|
||||
void multires_disp_map(void *, void*);
|
||||
|
||||
void multires_make(void *ob, void *me);
|
||||
void multires_delete(void *ob, void *me);
|
||||
struct Multires *multires_copy(struct Multires *orig);
|
||||
void multires_free(Mesh *me);
|
||||
void multires_free_level(MultiresLevel *lvl);
|
||||
void multires_del_lower(void *ob, void *me);
|
||||
|
@ -579,6 +579,47 @@ void multires_delete(void *ob, void *me_v)
|
||||
BIF_undo_push("Delete multires");
|
||||
}
|
||||
|
||||
MultiresLevel *multires_level_copy(MultiresLevel *orig)
|
||||
{
|
||||
if(orig) {
|
||||
MultiresLevel *lvl= MEM_dupallocN(orig);
|
||||
|
||||
lvl->verts= MEM_dupallocN(orig->verts);
|
||||
lvl->faces= MEM_dupallocN(orig->faces);
|
||||
lvl->texcolfaces= MEM_dupallocN(orig->texcolfaces);
|
||||
lvl->edges= MEM_dupallocN(orig->edges);
|
||||
lvl->vert_edge_map= lvl->vert_face_map= NULL;
|
||||
multires_calc_level_maps(lvl);
|
||||
|
||||
return lvl;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Multires *multires_copy(Multires *orig)
|
||||
{
|
||||
if(orig) {
|
||||
Multires *mr= MEM_dupallocN(orig);
|
||||
MultiresLevel *lvlorig;
|
||||
|
||||
mr->levels.first= mr->levels.last= NULL;
|
||||
|
||||
for(lvlorig= orig->levels.first; lvlorig; lvlorig= lvlorig->next)
|
||||
BLI_addtail(&mr->levels, multires_level_copy(lvlorig));
|
||||
|
||||
if(mr->dverts && mr->levels.first) {
|
||||
MultiresLevel *lvl= mr->levels.first;
|
||||
mr->dverts= MEM_mallocN(sizeof(MDeformVert)*lvl->totvert, "MDeformVert");
|
||||
copy_dverts(mr->dverts, orig->dverts, lvl->totvert);
|
||||
}
|
||||
else
|
||||
mr->dverts= NULL;
|
||||
|
||||
return mr;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void multires_free(Mesh *me)
|
||||
{
|
||||
if(me->mr) {
|
||||
|
Loading…
Reference in New Issue
Block a user