diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index dc30c7b5355..2e11711637a 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -178,6 +178,8 @@ void EDBM_free_backbuf(void); int EDBM_init_backbuf_border(struct ViewContext *vc, short xmin, short ymin, short xmax, short ymax); int EDBM_init_backbuf_circle(struct ViewContext *vc, short xs, short ys, short rads); +void EDBM_deselect_by_material(struct BMEditMesh *em, const short index, const short select); + void EDBM_select_swap(struct BMEditMesh *em); /* exported for UV */ void EDBM_set_actFace(struct BMEditMesh *em, struct BMFace *efa); diff --git a/source/blender/editors/mesh/bmesh_select.c b/source/blender/editors/mesh/bmesh_select.c index 885f9ef4553..8258f9f1a5b 100644 --- a/source/blender/editors/mesh/bmesh_select.c +++ b/source/blender/editors/mesh/bmesh_select.c @@ -1362,6 +1362,21 @@ void EDBM_convertsel(BMEditMesh *em, short oldmode, short selectmode) } +void EDBM_deselect_by_material(struct BMEditMesh *em, const short index, const short select) +{ + BMIter iter; + BMFace *efa; + + BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) { + if (BM_TestHFlag(efa, BM_HIDDEN)) + continue; + if(efa->mat_nr == index) { + BM_Select(em->bm, efa, select); + } + } +} + + void EDBM_select_swap(BMEditMesh *em) /* exported for UV */ { BMIter iter; diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 591cc477b8a..05c80d42ecf 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -225,15 +225,11 @@ static int material_slot_de_select(bContext *C, int select) return OPERATOR_CANCELLED; if(ob->type == OB_MESH) { -/*BMESH_TODO BMEditMesh *em= ((Mesh*)ob->data)->edit_btmesh; + if(em) { - if(select) - EM_select_by_material(em, ob->actcol-1); - else - EM_deselect_by_material(em, ob->actcol-1); + EDBM_deselect_by_material(em, ob->actcol-1, select); } -*/ } else if ELEM(ob->type, OB_CURVE, OB_SURF) { ListBase *nurbs= ED_curve_editnurbs((Curve*)ob->data);