private IEnumerable<Triangle> GetMeshTriangles(TriangleNet.Mesh mesh) { List<Vector3> vertices = new List<Vector3>(); foreach (var vertex in mesh.Vertices) { vertices.Add(TransformTo3D(new IntPoint((long)vertex.X, (long)vertex.Y))); } foreach (var triangle in mesh.Triangles) { yield return new Triangle(vertices[triangle.P0], vertices[triangle.P1], vertices[triangle.P2]); } }
public static List<Point> GetTriangleAsPoints(ref TriangleNet.Data.Triangle triangle) { Vertex v1 = triangle.GetVertex(0); Vertex v2 = triangle.GetVertex(1); Vertex v3 = triangle.GetVertex(2); List<Point> points = new List<Point>(); points.Add(new Point(v1.X, v1.Y, v1.Attributes[0])); points.Add(new Point(v2.X, v2.Y, v2.Attributes[0])); points.Add(new Point(v3.X, v3.Y, v3.Attributes[0])); return points; }
public static bool Contains(ref TriangleNet.Data.Triangle triangle, double x, double y) { Vertex v1 = triangle.GetVertex(0); Vertex v2 = triangle.GetVertex(1); Vertex v3 = triangle.GetVertex(2); Vertex pt = new Vertex(x, y); bool b1, b2, b3; b1 = Sign(ref pt, ref v1, ref v2) < 0.0f; b2 = Sign(ref pt, ref v2, ref v3) < 0.0f; b3 = Sign(ref pt, ref v3, ref v1) < 0.0f; return ((b1 == b2) && (b2 == b3)); }
public static Polygon GetPolygon(ref TriangleNet.Data.Triangle triangle) { List<Coordinate> coords = new List<Coordinate>(); Vertex v1 = triangle.GetVertex(0); coords.Add(new Coordinate(v1.X, v1.Y)); v1 = triangle.GetVertex(1); coords.Add(new Coordinate(v1.X, v1.Y)); v1 = triangle.GetVertex(2); coords.Add(new Coordinate(v1.X, v1.Y)); return new Polygon(coords); }
List<Vertex> IndexVertices(TriangleNet.Data.Triangle triangle, Dictionary<int, int> indexDict, ref int highestIndex, out int[] newIndices) { var newVertices = new List<Vertex>(); newIndices = new int[3]; if (indexDict.ContainsKey(triangle.P0)) { newIndices[0] = indexDict[triangle.P0]; } else { TriangleNet.Data.Vertex vertex0 = triangle.GetVertex(0); newVertices.Add(new Vertex((float)vertex0.X, (float)vertex0.Y)); indexDict.Add(vertex0.ID, highestIndex); newIndices[0] = highestIndex; highestIndex++; } if (indexDict.ContainsKey(triangle.P1)) { newIndices[1] = indexDict[triangle.P1]; } else { TriangleNet.Data.Vertex vertex1 = triangle.GetVertex(1); newVertices.Add(new Vertex((float)vertex1.X, (float)vertex1.Y)); indexDict.Add(vertex1.ID, highestIndex); newIndices[1] = highestIndex; highestIndex++; } if (indexDict.ContainsKey(triangle.P2)) { newIndices[2] = indexDict[triangle.P2]; } else { TriangleNet.Data.Vertex vertex2 = triangle.GetVertex(2); newVertices.Add(new Vertex((float)vertex2.X, (float)vertex2.Y)); indexDict.Add(vertex2.ID, highestIndex); newIndices[2] = highestIndex; highestIndex++; } return newVertices; }