Code cleanup: modifier_skin_customdata_ensure was a bad level call
This commit is contained in:
parent
211f08d89b
commit
7b7196e3ad
|
@ -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]);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) &&
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue