[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