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);
|
id_lib_extern((ID*)tface->tpage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(me->mr)
|
||||||
|
men->mr= multires_copy(me->mr);
|
||||||
|
|
||||||
men->mselect= NULL;
|
men->mselect= NULL;
|
||||||
|
|
||||||
men->bb= MEM_dupallocN(men->bb);
|
men->bb= MEM_dupallocN(men->bb);
|
||||||
|
@ -34,12 +34,14 @@ struct uiBlock;
|
|||||||
struct Object;
|
struct Object;
|
||||||
struct Mesh;
|
struct Mesh;
|
||||||
struct MultiresLevel;
|
struct MultiresLevel;
|
||||||
|
struct Multires;
|
||||||
|
|
||||||
void multires_draw_interface(struct uiBlock *block, unsigned short cx, unsigned short cy);
|
void multires_draw_interface(struct uiBlock *block, unsigned short cx, unsigned short cy);
|
||||||
void multires_disp_map(void *, void*);
|
void multires_disp_map(void *, void*);
|
||||||
|
|
||||||
void multires_make(void *ob, void *me);
|
void multires_make(void *ob, void *me);
|
||||||
void multires_delete(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(Mesh *me);
|
||||||
void multires_free_level(MultiresLevel *lvl);
|
void multires_free_level(MultiresLevel *lvl);
|
||||||
void multires_del_lower(void *ob, void *me);
|
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");
|
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)
|
void multires_free(Mesh *me)
|
||||||
{
|
{
|
||||||
if(me->mr) {
|
if(me->mr) {
|
||||||
|
Loading…
Reference in New Issue
Block a user