== Multires ==

Fixed bug #5815, Multires mesh UVs get lost (or crashes!) when adding additional UV layers

* Switching to Face Select mode adds a UV layer automatically, was missing code there to add the layer to multires as well
* Adding/Deleting a customdata layer on a multires mesh should update the multires data first
This commit is contained in:
2007-01-30 23:07:57 +00:00
parent 3ab085a5b6
commit 9ce5dd4cc4
2 changed files with 15 additions and 3 deletions

View File

@@ -90,6 +90,7 @@
#include "mydevice.h" #include "mydevice.h"
#include "blendef.h" #include "blendef.h"
#include "butspace.h" #include "butspace.h"
#include "multires.h"
#include "BSE_trans_types.h" #include "BSE_trans_types.h"
@@ -610,9 +611,16 @@ void default_uv(float uv[][2], float size)
void make_tfaces(Mesh *me) void make_tfaces(Mesh *me)
{ {
if(!me->mtface) if(!me->mtface) {
me->mtface= CustomData_add_layer(&me->fdata, CD_MTFACE, CD_DEFAULT, if(me->mr) {
NULL, me->totface); multires_add_layer(me, &me->mr->fdata, CD_MTFACE,
CustomData_number_of_layers(&me->fdata, CD_MTFACE));
}
else {
me->mtface= CustomData_add_layer(&me->fdata, CD_MTFACE, CD_DEFAULT,
NULL, me->totface);
}
}
} }
void reveal_tface() void reveal_tface()

View File

@@ -346,6 +346,8 @@ void multires_delete_layer(Mesh *me, CustomData *cd, const int type, int n)
if(me && me->mr && cd) { if(me && me->mr && cd) {
MultiresLevel *lvl1= me->mr->levels.first; MultiresLevel *lvl1= me->mr->levels.first;
multires_update_levels(me);
CustomData_set_layer_active(cd, type, n); CustomData_set_layer_active(cd, type, n);
CustomData_free_layer_active(cd, type, lvl1->totface); CustomData_free_layer_active(cd, type, lvl1->totface);
@@ -357,6 +359,8 @@ MultiresLevel *current_level(Multires *mr);
void multires_add_layer(Mesh *me, CustomData *cd, const int type, const int n) void multires_add_layer(Mesh *me, CustomData *cd, const int type, const int n)
{ {
if(me && me->mr && cd) { if(me && me->mr && cd) {
multires_update_levels(me);
if(CustomData_has_layer(cd, type)) if(CustomData_has_layer(cd, type))
CustomData_add_layer(cd, type, CD_DUPLICATE, CustomData_get_layer(cd, type), CustomData_add_layer(cd, type, CD_DUPLICATE, CustomData_get_layer(cd, type),
current_level(me->mr)->totface); current_level(me->mr)->totface);