internal static void BuildTriangles(NativeArray <float2> vertices, int vertexCount, NativeArray <int> indices, int indexCount, ref NativeArray <UTriangle> triangles, ref int triangleCount, ref float maxArea) { // Check if there are invalid triangles or segments. for (int i = 0; i < indexCount; i += 3) { UTriangle tri = new UTriangle(); var i0 = indices[i + 0]; var i1 = indices[i + 1]; var i2 = indices[i + 2]; tri.va = vertices[i0]; tri.vb = vertices[i1]; tri.vc = vertices[i2]; tri.c = UTess.CircumCircle(tri); tri.area = UTess.TriangleArea(tri.va, tri.vb, tri.vc); maxArea = math.max(tri.area, maxArea); triangles[triangleCount++] = tri; } }
internal static void BuildTrianglesAndEdges(NativeArray <float2> vertices, int vertexCount, NativeArray <int> indices, int indexCount, ref NativeArray <UTriangle> triangles, ref int triangleCount, ref NativeArray <int4> delaEdges, ref int delaEdgeCount, ref float maxArea) { // Check if there are invalid triangles or segments. for (int i = 0; i < indexCount; i += 3) { UTriangle tri = new UTriangle(); var i0 = indices[i + 0]; var i1 = indices[i + 1]; var i2 = indices[i + 2]; tri.va = vertices[i0]; tri.vb = vertices[i1]; tri.vc = vertices[i2]; tri.c = UTess.CircumCircle(tri); tri.area = UTess.TriangleArea(tri.va, tri.vb, tri.vc); maxArea = math.max(tri.area, maxArea); tri.indices = new int3(i0, i1, i2); // Outputs. delaEdges[delaEdgeCount++] = new int4(math.min(i0, i1), math.max(i0, i1), triangleCount, -1); delaEdges[delaEdgeCount++] = new int4(math.min(i1, i2), math.max(i1, i2), triangleCount, -1); delaEdges[delaEdgeCount++] = new int4(math.min(i2, i0), math.max(i2, i0), triangleCount, -1); triangles[triangleCount++] = tri; } }