[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40919] trunk/blender/source/blender/ editors/mesh/mesh_navmesh.c: create navmesh operator would crash on non-mesh objects, add type check and report if no mesh objects are selected.
Campbell Barton
ideasman42 at gmail.com
Tue Oct 11 00:06:08 CEST 2011
Revision: 40919
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40919
Author: campbellbarton
Date: 2011-10-10 22:06:07 +0000 (Mon, 10 Oct 2011)
Log Message:
-----------
create navmesh operator would crash on non-mesh objects, add type check and report if no mesh objects are selected.
Modified Paths:
--------------
trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
Modified: trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_navmesh.c 2011-10-10 21:15:11 UTC (rev 40918)
+++ trunk/blender/source/blender/editors/mesh/mesh_navmesh.c 2011-10-10 22:06:07 UTC (rev 40919)
@@ -424,35 +424,46 @@
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;
- MEM_freeN(verts);
- MEM_freeN(tris);
+ int nverts= 0, ntris= 0;
+ int *tris= 0;
+ float *verts= NULL;
+ 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;
}
More information about the Bf-blender-cvs
mailing list