diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-08-01 19:04:10 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-08-01 19:04:10 +0400 |
commit | 45801286a5c740ac03af7c9c7f59b59663ef9066 (patch) | |
tree | 148f0f8f71b1d3590f635a47fe477380dc52e7e1 | |
parent | cad86091725db3631cfd36fa85eabdafe756fd15 (diff) |
fix some more crashes when running skin operators on a mesh with no skin layer
-rw-r--r-- | source/blender/editors/object/object_modifier.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index be69d4ca9ea..81639d05d6a 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -1518,8 +1518,8 @@ static void skin_root_clear(BMesh *bm, BMVert *bm_vert, GHash *visited) static int skin_root_mark_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = CTX_data_edit_object(C); - Mesh *me = ob->data; - BMesh *bm = me->edit_btmesh->bm; + BMEditMesh *em = BMEdit_FromObject(ob); + BMesh *bm = em->bm; BMVert *bm_vert; BMIter bm_iter; GHash *visited; @@ -1574,12 +1574,16 @@ typedef enum { static int skin_loose_mark_clear_exec(bContext *C, wmOperator *op) { Object *ob = CTX_data_edit_object(C); - Mesh *me = ob->data; - BMesh *bm = me->edit_btmesh->bm; + BMEditMesh *em = BMEdit_FromObject(ob); + BMesh *bm = em->bm; BMVert *bm_vert; BMIter bm_iter; SkinLooseAction action = RNA_enum_get(op->ptr, "action"); + if (!CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) { + return OPERATOR_CANCELLED; + } + BM_ITER_MESH (bm_vert, &bm_iter, bm, BM_VERTS_OF_MESH) { if (bm_vert->head.hflag & BM_ELEM_SELECT) { MVertSkin *vs = CustomData_bmesh_get(&bm->vdata, @@ -1628,11 +1632,15 @@ void OBJECT_OT_skin_loose_mark_clear(wmOperatorType *ot) static int skin_radii_equalize_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = CTX_data_edit_object(C); - Mesh *me = ob->data; - BMesh *bm = me->edit_btmesh->bm; + BMEditMesh *em = BMEdit_FromObject(ob); + BMesh *bm = em->bm; BMVert *bm_vert; BMIter bm_iter; + if (!CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) { + return OPERATOR_CANCELLED; + } + BM_ITER_MESH (bm_vert, &bm_iter, bm, BM_VERTS_OF_MESH) { if (bm_vert->head.hflag & BM_ELEM_SELECT) { MVertSkin *vs = CustomData_bmesh_get(&bm->vdata, |