[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