static DMDrawOption draw_em_tf_mapped__set_draw(void *userData, int index) { drawEMTFMapped_userData *data = userData; BMEditMesh *em = data->em; BMFace *efa; if (UNLIKELY(index >= em->bm->totface)) return DM_DRAW_OPTION_NORMAL; efa = EDBM_face_at_index(em, index); if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) { return DM_DRAW_OPTION_SKIP; } else { MTFace mtf = {{{0}}}; int matnr = efa->mat_nr; if (data->has_mtface) { MTexPoly *tpoly = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); ME_MTEXFACE_CPY(&mtf, tpoly); } return draw_tface__set_draw_legacy(data->has_mtface ? &mtf : NULL, data->has_mcol, matnr); } }
static int tex_mat_set_face_editmesh_cb(void *userData, int index) { /* editmode face hiding */ TexMatCallback *data = (TexMatCallback *)userData; Mesh *me = (Mesh *)data->me; BMFace *efa = EDBM_face_at_index(me->edit_btmesh, index); return !BM_elem_flag_test(efa, BM_ELEM_HIDDEN); }
static void mesh_foreachScreenFace__mapFunc(void *userData, int index, const float cent[3], const float UNUSED(no[3])) { foreachScreenFace_userData *data = userData; BMFace *efa = EDBM_face_at_index(data->vc.em, index); if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) { float screen_co[2]; if (ED_view3d_project_float_object(data->vc.ar, cent, screen_co, data->clip_flag) == V3D_PROJ_RET_OK) { data->func(data->userData, efa, screen_co, index); } } }
static int tex_mat_set_face_editmesh_cb(void *userData, int index) { /* editmode face hiding */ TexMatCallback *data = (TexMatCallback *)userData; Mesh *me = (Mesh *)data->me; BMEditMesh *em = me->edit_btmesh; BMFace *efa; if (UNLIKELY(index >= em->bm->totface)) return DM_DRAW_OPTION_NORMAL; efa = EDBM_face_at_index(em, index); return !BM_elem_flag_test(efa, BM_ELEM_HIDDEN); }