[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31059] branches/soc-2010-nicks/source/ blender/editors/util/navmesh_conversion.cpp: added test for correctness of navigation polygon: check if all triangles are involved in polygon formation
Nick Samarin
nicks1987 at bigmir.net
Thu Aug 5 09:27:29 CEST 2010
Revision: 31059
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31059
Author: nicks
Date: 2010-08-05 09:27:28 +0200 (Thu, 05 Aug 2010)
Log Message:
-----------
added test for correctness of navigation polygon: check if all triangles are involved in polygon formation
Modified Paths:
--------------
branches/soc-2010-nicks/source/blender/editors/util/navmesh_conversion.cpp
Modified: branches/soc-2010-nicks/source/blender/editors/util/navmesh_conversion.cpp
===================================================================
--- branches/soc-2010-nicks/source/blender/editors/util/navmesh_conversion.cpp 2010-08-05 05:04:00 UTC (rev 31058)
+++ branches/soc-2010-nicks/source/blender/editors/util/navmesh_conversion.cpp 2010-08-05 07:27:28 UTC (rev 31059)
@@ -156,9 +156,13 @@
//search border
int btri = -1;
int bedge = -1;
- for (int j=0; j<dmeshes[polyidx*4+3] && btri==-1;j++)
+ int dtrisNum = dmeshes[polyidx*4+3];
+ int dtrisBase = dmeshes[polyidx*4+2];
+ unsigned char *traversedTris = new unsigned char[dtrisNum];
+ memset(traversedTris, 0, dtrisNum*sizeof(unsigned char));
+ for (int j=0; j<dtrisNum && btri==-1;j++)
{
- int curpolytri = dmeshes[polyidx*4+2]+j;
+ int curpolytri = dtrisBase+j;
for (int k=0; k<3; k++)
{
unsigned short neighbortri = dtris[curpolytri*3*2+3+k];
@@ -177,9 +181,9 @@
}
newPoly[nv++] = dtris[btri*3*2+bedge];
-
int tri = btri;
int edge = (bedge+1)%3;
+ traversedTris[tri-dtrisBase] = 1;
while (tri!=btri || edge!=bedge)
{
int neighbortri = dtris[tri*3*2+3+edge];
@@ -217,6 +221,7 @@
}
tri = neighbortri;
edge = (twinedge+1)%3;
+ traversedTris[tri-dtrisBase] = 1;
}
}
@@ -236,8 +241,15 @@
delete adjustedPoly;
nv = adjustedNv;
- if (nv<=vertsPerPoly)
+ bool allTraversed = true;
+ for (size_t i=0; i<(size_t)dtrisNum; i++)
{
+ if (traversedTris[i]==0)
+ allTraversed = false;
+ }
+
+ if (nv<=vertsPerPoly && allTraversed)
+ {
for (int i=0; i<nv; i++)
{
polys[polyidx*vertsPerPoly*2+i] = newPoly[i];
More information about the Bf-blender-cvs
mailing list