diff options
Diffstat (limited to 'source/blender/editors/physics')
-rw-r--r-- | source/blender/editors/physics/particle_edit.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 7abd6f4c8ef..f25679986a5 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -414,18 +414,18 @@ static void PE_set_view3d_data(bContext *C, PEData *data) } } -static void PE_create_shape_tree(PEData *data, Object *shapeob) +static bool PE_create_shape_tree(PEData *data, Object *shapeob) { DerivedMesh *dm = shapeob->derivedFinal; memset(&data->shape_bvh, 0, sizeof(data->shape_bvh)); if (!dm) { - return; + return false; } DM_ensure_tessface(dm); - bvhtree_from_mesh_faces(&data->shape_bvh, dm, 0.0f, 4, 8); + return bvhtree_from_mesh_faces(&data->shape_bvh, dm, 0.0f, 4, 8); } static void PE_free_shape_tree(PEData *data) @@ -4059,11 +4059,12 @@ void PARTICLE_OT_brush_edit(wmOperatorType *ot) static int shape_cut_poll(bContext *C) { if (PE_hair_poll(C)) { - Scene *scene= CTX_data_scene(C); - ParticleEditSettings *pset= PE_settings(scene); + Scene *scene = CTX_data_scene(C); + ParticleEditSettings *pset = PE_settings(scene); - if (pset->shape_object) + if (pset->shape_object && (pset->shape_object->type == OB_MESH)) { return true; + } } return false; @@ -4179,7 +4180,10 @@ static int shape_cut_exec(bContext *C, wmOperator *UNUSED(op)) int removed; PE_set_data(C, &data); - PE_create_shape_tree(&data, shapeob); + if (!PE_create_shape_tree(&data, shapeob)) { + /* shapeob may not have faces... */ + return OPERATOR_CANCELLED; + } if (selected) foreach_selected_point(&data, shape_cut); |