diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-10-11 02:06:07 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-10-11 02:06:07 +0400 |
commit | e8bcccae33cc9df93b7ab25a51326962fc9e8bf4 (patch) | |
tree | 1b862d14863b099b93a3ddc7a9a5d464bdad5ed4 /source/blender/editors | |
parent | 9cabc57a62e8db17edd09839d7ae200239fb3618 (diff) |
create navmesh operator would crash on non-mesh objects, add type check and report if no mesh objects are selected.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/mesh/mesh_navmesh.c | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index 4ae1cdeed02..bd5f4b5fe68 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -424,34 +424,45 @@ static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, return obedit; } -static int create_navmesh_exec(bContext *C, wmOperator *UNUSED(op)) +static int create_navmesh_exec(bContext *C, wmOperator *op) { Scene* scene= CTX_data_scene(C); - int nverts= 0, ntris= 0; - float *verts= NULL; - int *tris= 0; - struct recast_polyMesh *pmesh= NULL; - struct recast_polyMeshDetail *dmesh= NULL; LinkNode* obs= NULL; Base* navmeshBase= NULL; CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { - if(base->object->body_type==OB_BODY_TYPE_NAVMESH) { - if(!navmeshBase || base == scene->basact) - navmeshBase= base; + if (base->object->type == OB_MESH) { + if (base->object->body_type==OB_BODY_TYPE_NAVMESH) { + if (!navmeshBase || base == scene->basact) { + navmeshBase= base; + } + } + else { + BLI_linklist_append(&obs, (void*)base->object); + } } - else - BLI_linklist_append(&obs, (void*)base->object); } CTX_DATA_END; - createVertsTrisData(C, obs, &nverts, &verts, &ntris, &tris); - BLI_linklist_free(obs, NULL); - buildNavMesh(&scene->gm.recastData, nverts, verts, ntris, tris, &pmesh, &dmesh); - createRepresentation(C, pmesh, dmesh, navmeshBase); + if (obs) { + struct recast_polyMesh *pmesh= NULL; + struct recast_polyMeshDetail *dmesh= NULL; + + int nverts= 0, ntris= 0; + int *tris= 0; + float *verts= NULL; - MEM_freeN(verts); - MEM_freeN(tris); + createVertsTrisData(C, obs, &nverts, &verts, &ntris, &tris); + BLI_linklist_free(obs, NULL); + buildNavMesh(&scene->gm.recastData, nverts, verts, ntris, tris, &pmesh, &dmesh); + createRepresentation(C, pmesh, dmesh, navmeshBase); + + MEM_freeN(verts); + MEM_freeN(tris); + } + else { + BKE_report(op->reports, RPT_ERROR, "No mesh objects found"); + } return OPERATOR_FINISHED; } |