From 7b7196e3adea4cd5a818d0653f85b363418079c3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 16 Mar 2014 21:55:30 +1100 Subject: [PATCH] Code cleanup: modifier_skin_customdata_ensure was a bad level call --- source/blender/blenkernel/BKE_mesh.h | 1 + source/blender/blenkernel/BKE_modifier.h | 1 - source/blender/blenkernel/intern/mesh.c | 37 +++++++++++++++++++ source/blender/blenkernel/intern/object.c | 2 +- .../blender/editors/object/object_modifier.c | 37 +------------------ .../bad_level_call_stubs/stubs.c | 3 -- 6 files changed, 41 insertions(+), 40 deletions(-) diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 25fd95176b2..9c57b7c9a71 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -90,6 +90,7 @@ struct Mesh *BKE_mesh_add(struct Main *bmain, const char *name); struct Mesh *BKE_mesh_copy_ex(struct Main *bmain, struct Mesh *me); struct Mesh *BKE_mesh_copy(struct Mesh *me); void BKE_mesh_update_customdata_pointers(struct Mesh *me, const bool do_ensure_tess_cd); +void BKE_mesh_ensure_skin_customdata(struct Mesh *me); void BKE_mesh_make_local(struct Mesh *me); void BKE_mesh_boundbox_calc(struct Mesh *me, float r_loc[3], float r_size[3]); diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h index 2d47cf307f7..3b2bafa799f 100644 --- a/source/blender/blenkernel/BKE_modifier.h +++ b/source/blender/blenkernel/BKE_modifier.h @@ -359,7 +359,6 @@ bool modifiers_usesArmature(struct Object *ob, struct bArmature *arm); bool modifiers_isCorrectableDeformed(struct Scene *scene, struct Object *ob); void modifier_freeTemporaryData(struct ModifierData *md); bool modifiers_isPreview(struct Object *ob); -void modifier_skin_customdata_ensure(struct Object *ob); typedef struct CDMaskLink { struct CDMaskLink *next; diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 838f93e5222..b7ebd5c013d 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -337,6 +337,43 @@ static void mesh_ensure_tessellation_customdata(Mesh *me) } } +void BKE_mesh_ensure_skin_customdata(Mesh *me) +{ + BMesh *bm = me->edit_btmesh ? me->edit_btmesh->bm : NULL; + MVertSkin *vs; + + if (bm) { + if (!CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) { + BMVert *v; + BMIter iter; + + BM_data_layer_add(bm, &bm->vdata, CD_MVERT_SKIN); + + /* Mark an arbitrary vertex as root */ + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { + vs = CustomData_bmesh_get(&bm->vdata, v->head.data, + CD_MVERT_SKIN); + vs->flag |= MVERT_SKIN_ROOT; + break; + } + } + } + else { + if (!CustomData_has_layer(&me->vdata, CD_MVERT_SKIN)) { + vs = CustomData_add_layer(&me->vdata, + CD_MVERT_SKIN, + CD_DEFAULT, + NULL, + me->totvert); + + /* Mark an arbitrary vertex as root */ + if (vs) { + vs->flag |= MVERT_SKIN_ROOT; + } + } + } +} + /* this ensures grouped customdata (e.g. mtexpoly and mloopuv and mtface, or * mloopcol and mcol) have the same relative active/render/clone/mask indices. * diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 0970af46a6b..de9dd011e04 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -273,7 +273,7 @@ void BKE_object_link_modifiers(struct Object *ob_dst, struct Object *ob_src) if (md->type == eModifierType_Skin) { /* ensure skin-node customdata exists */ - modifier_skin_customdata_ensure(ob_dst); + BKE_mesh_ensure_skin_customdata(ob_dst->data); } nmd = modifier_new(md->type); diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 013a6c78a15..327e840a873 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -166,7 +166,7 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc } else if (type == eModifierType_Skin) { /* ensure skin-node customdata exists */ - modifier_skin_customdata_ensure(ob); + BKE_mesh_ensure_skin_customdata(ob->data); } } @@ -1431,39 +1431,6 @@ void OBJECT_OT_multires_base_apply(wmOperatorType *ot) /************************** skin modifier ***********************/ -void modifier_skin_customdata_ensure(Object *ob) -{ - Mesh *me = ob->data; - BMesh *bm = me->edit_btmesh ? me->edit_btmesh->bm : NULL; - MVertSkin *vs; - - if (bm && !CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) { - BMVert *v; - BMIter iter; - - BM_data_layer_add(bm, &bm->vdata, CD_MVERT_SKIN); - - /* Mark an arbitrary vertex as root */ - BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { - vs = CustomData_bmesh_get(&bm->vdata, v->head.data, - CD_MVERT_SKIN); - vs->flag |= MVERT_SKIN_ROOT; - break; - } - } - else if (!CustomData_has_layer(&me->vdata, CD_MVERT_SKIN)) { - vs = CustomData_add_layer(&me->vdata, - CD_MVERT_SKIN, - CD_DEFAULT, - NULL, - me->totvert); - - /* Mark an arbitrary vertex as root */ - if (vs) - vs->flag |= MVERT_SKIN_ROOT; - } -} - static void modifier_skin_customdata_delete(Object *ob) { Mesh *me = ob->data; @@ -1520,7 +1487,7 @@ static int skin_root_mark_exec(bContext *C, wmOperator *UNUSED(op)) visited = BLI_ghash_ptr_new("skin_root_mark_exec visited"); - modifier_skin_customdata_ensure(ob); + BKE_mesh_ensure_skin_customdata(ob->data); BM_ITER_MESH (bm_vert, &bm_iter, bm, BM_VERTS_OF_MESH) { if (!BLI_ghash_lookup(visited, bm_vert) && diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 055036158d6..806fa596f59 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -236,9 +236,6 @@ void RE_free_sample_material(struct Material *mat) RET_NONE void RE_sample_material_color(struct Material *mat, float color[3], float *alpha, const float volume_co[3], const float surface_co[3], int face_index, short hit_quad, struct DerivedMesh *orcoDm, struct Object *ob) RET_NONE -/* skin modifier*/ -void modifier_skin_customdata_ensure(struct Object *ob) RET_NONE - /* nodes */ struct Render *RE_GetRender(const char *name) RET_NULL float RE_lamp_get_data(struct ShadeInput *shi, struct Object *lamp_obj, float col[4], float lv[3], float *dist, float shadow[4]) RET_ZERO