/** * \returns is_valid. */ bool BKE_mesh_validate_all_customdata( CustomData *vdata, CustomData *edata, CustomData *ldata, CustomData *pdata, const bool check_meshmask, const bool do_verbose, const bool do_fixes, bool *r_change) { bool is_valid = true; bool is_change_v, is_change_e, is_change_l, is_change_p; int tot_texpoly, tot_uvloop, tot_vcolloop; CustomDataMask mask = check_meshmask ? CD_MASK_MESH : 0; is_valid &= mesh_validate_customdata(vdata, mask, do_verbose, do_fixes, &is_change_v); is_valid &= mesh_validate_customdata(edata, mask, do_verbose, do_fixes, &is_change_e); is_valid &= mesh_validate_customdata(ldata, mask, do_verbose, do_fixes, &is_change_l); is_valid &= mesh_validate_customdata(pdata, mask, do_verbose, do_fixes, &is_change_p); tot_texpoly = CustomData_number_of_layers(pdata, CD_MTEXPOLY); tot_uvloop = CustomData_number_of_layers(ldata, CD_MLOOPUV); tot_vcolloop = CustomData_number_of_layers(ldata, CD_MLOOPCOL); if (tot_texpoly != tot_uvloop) { PRINT_ERR("\tCustomDataLayer mismatch, tot_texpoly(%d), tot_uvloop(%d)\n", tot_texpoly, tot_uvloop); } if (tot_texpoly > MAX_MTFACE) { PRINT_ERR("\tMore UV layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n", MAX_MTFACE, tot_texpoly - MAX_MTFACE); } if (tot_uvloop > MAX_MTFACE) { PRINT_ERR("\tMore UV layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n", MAX_MTFACE, tot_uvloop - MAX_MTFACE); } if (tot_vcolloop > MAX_MCOL) { PRINT_ERR("\tMore VCol layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n", MAX_MCOL, tot_vcolloop - MAX_MCOL); } /* check indices of clone/stencil */ if (do_fixes && CustomData_get_clone_layer(pdata, CD_MTEXPOLY) >= tot_texpoly) { CustomData_set_layer_clone(pdata, CD_MTEXPOLY, 0); is_change_p = true; } if (do_fixes && CustomData_get_clone_layer(ldata, CD_MLOOPUV) >= tot_uvloop) { CustomData_set_layer_clone(ldata, CD_MLOOPUV, 0); is_change_l = true; } if (do_fixes && CustomData_get_stencil_layer(pdata, CD_MTEXPOLY) >= tot_texpoly) { CustomData_set_layer_stencil(pdata, CD_MTEXPOLY, 0); is_change_p = true; } if (do_fixes && CustomData_get_stencil_layer(ldata, CD_MLOOPUV) >= tot_uvloop) { CustomData_set_layer_stencil(ldata, CD_MLOOPUV, 0); is_change_l = true; } *r_change = (is_change_v || is_change_e || is_change_l || is_change_p); return is_valid; }
void BKE_editmesh_update_linked_customdata(BMEditMesh *em) { BMesh *bm = em->bm; int act; if (CustomData_has_layer(&bm->pdata, CD_MTEXPOLY)) { act = CustomData_get_active_layer(&bm->pdata, CD_MTEXPOLY); CustomData_set_layer_active(&bm->ldata, CD_MLOOPUV, act); act = CustomData_get_render_layer(&bm->pdata, CD_MTEXPOLY); CustomData_set_layer_render(&bm->ldata, CD_MLOOPUV, act); act = CustomData_get_clone_layer(&bm->pdata, CD_MTEXPOLY); CustomData_set_layer_clone(&bm->ldata, CD_MLOOPUV, act); act = CustomData_get_stencil_layer(&bm->pdata, CD_MTEXPOLY); CustomData_set_layer_stencil(&bm->ldata, CD_MLOOPUV, act); } }