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;
 }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to