Pathfinding.NavmeshCut.CalculateMeshContour C# (CSharp) Method

CalculateMeshContour() public method

public CalculateMeshContour ( ) : void
return void
		void CalculateMeshContour () {
			if (mesh == null) return;
			
			edges.Clear();
			pointers.Clear();
			
			Vector3[] verts = mesh.vertices;
			int[] tris = mesh.triangles;
			for (int i=0;i<tris.Length;i+=3) {
				
				// Make sure it is clockwise
				if ( Polygon.IsClockwise ( verts[tris[i+0]], verts[tris[i+1]], verts[tris[i+2]] ) ) {
					int tmp = tris[i+0];
					tris[i+0] = tris[i+2];
					tris[i+2] = tmp;
				}
				
				edges[new Pathfinding.Int2(tris[i+0],tris[i+1])] = i;
				edges[new Pathfinding.Int2(tris[i+1],tris[i+2])] = i;
				edges[new Pathfinding.Int2(tris[i+2],tris[i+0])] = i;
			}
			
			for (int i=0;i<tris.Length;i+=3) {
				for (int j=0;j<3;j++) {
					if (!edges.ContainsKey(new Pathfinding.Int2(tris[i+((j+1)%3)], tris[i+((j+0)%3)]))) {
						pointers[tris[i+((j+0)%3)]] = tris[i+((j+1)%3)];
					}
				}
			}
			
			List<Vector3[]> contourBuffer = new List<Vector3[]>();
			
			List<Vector3> buffer = Pathfinding.Util.ListPool<Vector3>.Claim();
			for (int i=0;i<verts.Length;i++) {
				if (pointers.ContainsKey(i)) {
					buffer.Clear();
					
					int s = i;
					do {
						int tmp = pointers[s];
						
						//This path has been taken before
						if (tmp == -1) break;
						
						pointers[s] = -1;
						buffer.Add (verts[s]);
						//Debug.Log ("From " + s + " to " + tmp);
						s = tmp;
						
						if (s == -1) {
							Debug.LogError ("Invalid Mesh '"  + mesh.name + " in " + gameObject.name);
							break;
						}
					} while (s != i);
					
					if (buffer.Count > 0) contourBuffer.Add (buffer.ToArray());
				}
			}
			
			
			Pathfinding.Util.ListPool<Vector3>.Release(buffer);
			contours = contourBuffer.ToArray();
		}