void CreateTriangle(TileNode a, TileNode b, TileNode c) { _triangles.Add(a.VertexIndex); _triangles.Add(b.VertexIndex); _triangles.Add(c.VertexIndex); TileTriangle triangle = new TileTriangle(a.VertexIndex, b.VertexIndex, c.VertexIndex); AddTriangleToDictionary(triangle.VertexIndexA, triangle); AddTriangleToDictionary(triangle.VertexIndexB, triangle); AddTriangleToDictionary(triangle.VertexIndexC, triangle); }
void AddTriangleToDictionary(int vertexIndexKey, TileTriangle triangle) { if (_triangleDictionary.ContainsKey(vertexIndexKey)) { _triangleDictionary[vertexIndexKey].Add(triangle); } else { List <TileTriangle> triangleList = new List <TileTriangle>(); triangleList.Add(triangle); _triangleDictionary.Add(vertexIndexKey, triangleList); } }
int GetConnectedOutlineVertex(int vertexIndex) { List <TileTriangle> trianglesContainingVertex = _triangleDictionary[vertexIndex]; for (int i = 0; i < trianglesContainingVertex.Count; i++) { TileTriangle triangle = trianglesContainingVertex[i]; for (int j = 0; j < 3; j++) { int vertexB = triangle[j]; if (vertexB != vertexIndex && !_checkedVertices.Contains(vertexB)) { if (IsOutlineEdge(vertexIndex, vertexB)) { return(vertexB); } } } } return(-1); }