[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