[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40595] trunk/blender: navmesh: solve bad level calls to edit mesh functions

Sergey Sharybin g.ulairi at gmail.com
Tue Sep 27 11:09:52 CEST 2011


Revision: 40595
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40595
Author:   nazgul
Date:     2011-09-27 09:09:52 +0000 (Tue, 27 Sep 2011)
Log Message:
-----------
navmesh: solve bad level calls to edit mesh functions

Move navmesh operators from editors/object to editors/mesh

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
    trunk/blender/release/scripts/startup/bl_ui/properties_game.py
    trunk/blender/source/blender/editors/mesh/CMakeLists.txt
    trunk/blender/source/blender/editors/mesh/SConscript
    trunk/blender/source/blender/editors/mesh/mesh_intern.h
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    trunk/blender/source/blender/editors/object/CMakeLists.txt
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_ops.c

Added Paths:
-----------
    trunk/blender/source/blender/editors/mesh/mesh_navmesh.c

Removed Paths:
-------------
    trunk/blender/source/blender/editors/object/object_navmesh.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2011-09-27 09:09:43 UTC (rev 40594)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2011-09-27 09:09:52 UTC (rev 40595)
@@ -380,8 +380,8 @@
         col.prop(md, "mirror_object", text="")
 
     def NAVMESH(self, layout, ob, md):
-        layout.operator("object.assign_navpolygon")
-        layout.operator("object.assign_new_navpolygon")
+        layout.operator("mesh.assign_navpolygon")
+        layout.operator("mesh.assign_new_navpolygon")
 
     def MULTIRES(self, layout, ob, md):
         layout.row().prop(md, "subdivision_type", expand=True)

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_game.py	2011-09-27 09:09:43 UTC (rev 40594)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_game.py	2011-09-27 09:09:52 UTC (rev 40595)
@@ -412,7 +412,7 @@
 
         rd = context.scene.game_settings.recast_data
 
-        layout.operator("object.create_navmesh", text='Build navigation mesh')
+        layout.operator("mesh.create_navmesh", text='Build navigation mesh')
 
         col = layout.column()
         col.label(text="Rasterization:")

Modified: trunk/blender/source/blender/editors/mesh/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/editors/mesh/CMakeLists.txt	2011-09-27 09:09:43 UTC (rev 40594)
+++ trunk/blender/source/blender/editors/mesh/CMakeLists.txt	2011-09-27 09:09:52 UTC (rev 40595)
@@ -52,4 +52,16 @@
 	mesh_intern.h
 )
 
+if(WITH_GAMEENGINE)
+	add_definitions(-DWITH_GAMEENGINE)
+
+	list(APPEND INC
+		../../../../extern/recastnavigation
+	)
+
+	list(APPEND SRC
+		mesh_navmesh.c
+	)
+endif()
+
 blender_add_lib(bf_editor_mesh "${SRC}" "${INC}" "${INC_SYS}")

Modified: trunk/blender/source/blender/editors/mesh/SConscript
===================================================================
--- trunk/blender/source/blender/editors/mesh/SConscript	2011-09-27 09:09:43 UTC (rev 40594)
+++ trunk/blender/source/blender/editors/mesh/SConscript	2011-09-27 09:09:52 UTC (rev 40595)
@@ -15,4 +15,10 @@
 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
     incs += ' ' + env['BF_PTHREADS_INC']
 
+if env['WITH_BF_GAMEENGINE']:
+    incs += ' #/extern/recastnavigation'
+    defs.append('WITH_GAMEENGINE')
+else:
+    sources.remove('mesh_navmesh.c')
+
 env.BlenderLib ( 'bf_editors_mesh', sources, Split(incs), [], libtype=['core'], priority=[45] )

Modified: trunk/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_intern.h	2011-09-27 09:09:43 UTC (rev 40594)
+++ trunk/blender/source/blender/editors/mesh/mesh_intern.h	2011-09-27 09:09:52 UTC (rev 40595)
@@ -40,6 +40,7 @@
 struct bContext;
 struct wmOperatorType;
 struct wmOperator;
+struct ViewContext;
 
 /* ******************** editface.c */
 
@@ -64,7 +65,7 @@
 extern struct EditFace *addfacelist(EditMesh *em, struct EditVert *v1, struct EditVert *v2, struct EditVert *v3, struct EditVert *v4, struct EditFace *example, struct EditFace *exampleEdges);
 extern struct EditEdge *findedgelist(EditMesh *em, struct EditVert *v1, struct EditVert *v2);
 
-void em_setup_viewcontext(struct bContext *C, ViewContext *vc);
+void em_setup_viewcontext(struct bContext *C, struct ViewContext *vc);
 
 void MESH_OT_separate(struct wmOperatorType *ot);
 
@@ -169,7 +170,7 @@
 void MESH_OT_select_nth(struct wmOperatorType *ot);
 
 
-extern EditEdge *findnearestedge(ViewContext *vc, int *dist);
+extern EditEdge *findnearestedge(struct ViewContext *vc, int *dist);
 void editmesh_select_by_material(EditMesh *em, int index);
 void EM_recalc_normal_direction(EditMesh *em, int inside, int select);	/* makes faces righthand turning */
 void EM_select_more(EditMesh *em);
@@ -185,7 +186,7 @@
  * 		if 0, unselected vertice are given the bias
  * strict: if 1, the vertice corresponding to the sel parameter are ignored and not just biased 
  */
-extern EditVert *findnearestvert(ViewContext *vc, int *dist, short sel, short strict);
+extern EditVert *findnearestvert(struct ViewContext *vc, int *dist, short sel, short strict);
 
 
 /* ******************* editmesh_tools.c */
@@ -256,5 +257,10 @@
 void MESH_OT_edgering_select(struct wmOperatorType *ot);
 void MESH_OT_loopcut(struct wmOperatorType *ot);
 
+/* ******************* mesh_navmesh.c */
+void MESH_OT_create_navmesh(struct wmOperatorType *ot);
+void MESH_OT_assign_navpolygon(struct wmOperatorType *ot);
+void MESH_OT_assign_new_navpolygon(struct wmOperatorType *ot);
+
 #endif // MESH_INTERN_H
 

Copied: trunk/blender/source/blender/editors/mesh/mesh_navmesh.c (from rev 40594, trunk/blender/source/blender/editors/object/object_navmesh.c)
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_navmesh.c	                        (rev 0)
+++ trunk/blender/source/blender/editors/mesh/mesh_navmesh.c	2011-09-27 09:09:52 UTC (rev 40595)
@@ -0,0 +1,674 @@
+/**
+* $Id$
+*
+* ***** BEGIN GPL LICENSE BLOCK *****
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software Foundation,
+* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+* The Original Code is Copyright (C) 2004 by Blender Foundation
+* All rights reserved.
+*
+* The Original Code is: all of this file.
+*
+* Contributor(s): none yet.
+*
+* ***** END GPL LICENSE BLOCK *****
+*/
+
+#include <math.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_modifier_types.h"
+#include "DNA_ID.h"
+
+#include "BKE_library.h"
+#include "BKE_depsgraph.h"
+#include "BKE_context.h"
+#include "BKE_main.h"
+#include "BKE_mesh.h"
+#include "BKE_modifier.h"
+#include "BKE_scene.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_cdderivedmesh.h"
+
+#include "BLI_editVert.h"
+#include "BLI_listbase.h"
+#include "BLI_utildefines.h"
+#include "BLI_math_vector.h"
+
+#include "ED_object.h"
+#include "ED_mesh.h"
+#include "ED_screen.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "mesh_intern.h"
+#include "recast-capi.h"
+
+static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float **verts_r, int *ntris_r, int **tris_r)
+{
+	MVert *mvert;
+	int nfaces = 0, *tri, i, curnverts, basenverts, curnfaces;
+	MFace *mface;
+	float co[3], wco[3];
+	Object *ob;
+	LinkNode *oblink, *dmlink;
+	DerivedMesh *dm;
+	Scene* scene = CTX_data_scene(C);
+	LinkNode* dms = NULL;
+
+	int nverts, ntris, *tris;
+	float *verts;
+
+	nverts = 0;
+	ntris = 0;
+	//calculate number of verts and tris
+	for (oblink = obs; oblink; oblink = oblink->next) 
+	{
+		ob = (Object*) oblink->link;	
+		dm = mesh_create_derived_no_virtual(scene, ob, NULL, CD_MASK_MESH);
+		BLI_linklist_append(&dms, (void*)dm);
+
+		nverts += dm->getNumVerts(dm);
+		nfaces = dm->getNumFaces(dm);
+		ntris += nfaces;
+
+		//resolve quad faces
+		mface = dm->getFaceArray(dm);
+		for (i=0; i<nfaces; i++)
+		{
+			MFace* mf = &mface[i];
+			if (mf->v4)
+				ntris+=1;
+		}
+	}
+
+	//create data
+	verts = MEM_mallocN(sizeof(float)*3*nverts, "createVertsTrisData verts");
+	tris = MEM_mallocN(sizeof(int)*3*ntris, "createVertsTrisData faces");
+
+	basenverts = 0;
+	tri = tris;
+	for (oblink = obs, dmlink = dms; oblink && dmlink; 
+			oblink = oblink->next, dmlink = dmlink->next)
+	{
+		ob = (Object*) oblink->link;
+		dm = (DerivedMesh*) dmlink->link;
+
+		curnverts = dm->getNumVerts(dm);
+		mvert = dm->getVertArray(dm);
+		//copy verts	
+		for (i=0; i<curnverts; i++)
+		{
+			MVert *v = &mvert[i];
+			copy_v3_v3(co, v->co);
+			mul_v3_m4v3(wco, ob->obmat, co);
+			verts[3*(basenverts+i)+0] = wco[0];
+			verts[3*(basenverts+i)+1] = wco[2];
+			verts[3*(basenverts+i)+2] = wco[1];
+		}
+
+		//create tris
+		curnfaces = dm->getNumFaces(dm);
+		mface = dm->getFaceArray(dm);
+		for (i=0; i<curnfaces; i++)
+		{
+			MFace* mf = &mface[i]; 
+			tri[0]= basenverts + mf->v1; tri[1]= basenverts + mf->v3;	tri[2]= basenverts + mf->v2; 
+			tri += 3;
+			if (mf->v4)
+			{
+				tri[0]= basenverts + mf->v1; tri[1]= basenverts + mf->v4; tri[2]= basenverts + mf->v3; 
+				tri += 3;
+			}
+		}
+		basenverts += curnverts;
+	}
+
+	//release derived mesh
+	for (dmlink = dms; dmlink; dmlink = dmlink->next)
+	{
+		dm = (DerivedMesh*) dmlink->link;
+		dm->release(dm);
+	}
+	BLI_linklist_free(dms, NULL);
+
+	*nverts_r= nverts;
+	*verts_r= verts;
+	*ntris_r= ntris;
+	*tris_r= tris;
+}
+
+static int buildNavMesh(const RecastData *recastParams, int nverts, float *verts, int ntris, int *tris,
+								 struct recast_polyMesh **pmesh, struct recast_polyMeshDetail **dmesh)
+{
+	float bmin[3], bmax[3];
+	struct recast_heightfield *solid;
+	unsigned char *triflags;
+	struct recast_compactHeightfield* chf;
+	struct recast_contourSet *cset;
+	int width, height, walkableHeight, walkableClimb, walkableRadius;
+	int minRegionSize, mergeRegionSize, maxEdgeLen;
+	float detailSampleDist, detailSampleMaxError;
+
+	recast_calcBounds(verts, nverts, bmin, bmax);
+
+	//
+	// Step 1. Initialize build config.
+	//
+	{
+/*
+		float cellsize = 0.3f;
+		float cellheight = 0.2f;
+		float agentmaxslope = M_PI/4;
+		float agentmaxclimb = 0.9f;
+		float agentheight = 2.0f;
+		float agentradius = 0.6f;
+		float edgemaxlen = 12.0f;
+		float edgemaxerror = 1.3f;
+		float regionminsize = 50.f;
+		float regionmergesize = 20.f;
+		int vertsperpoly = 6;
+		float detailsampledist = 6.0f;
+		float detailsamplemaxerror = 1.0f;
+		cfg.cs = cellsize;
+		cfg.ch = cellheight;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list