/// <summary> /// For given vertex handler return points that are incident to it /// Sets boundary as true if given vertex lies on the edge of the mesh /// </summary> public static List <int> GetPolygonVerticesAndDelete(int vertexIndex, ref bool boundary, SceneBrep scene) { List <int> polygon = new List <int>(); List <int> trianglePointers = new List <int>(); int add1 = 0; int add2 = 0; for (int i = 0; i < scene.vertexPtr.Count; i++) { // found triangle such that one corner is selected vertex if (scene.vertexPtr[i] == vertexIndex) { // if it's main triangle handle if (i % 3 == 0) { // get the remaining triangle corners add1 = i + 1; add2 = i + 2; // get triangle handle trianglePointers.Add(i); } else if (i % 3 == 1) { add1 = i - 1; add2 = i + 1; trianglePointers.Add(i - 1); } else if (i % 3 == 2) { add2 = i - 1; add1 = i - 2; trianglePointers.Add(i - 2); } if (!polygon.Contains(scene.vertexPtr[add1])) { polygon.Add(scene.vertexPtr[add1]); } if (!polygon.Contains(scene.vertexPtr[add2])) { polygon.Add(scene.vertexPtr[add2]); } } } // CCW order of points in polygon ReorderPoints(ref polygon, trianglePointers, vertexIndex, scene.vertexPtr, ref boundary); trianglePointers.ForEach(x => scene.FreeTriangleSpace(x)); return(polygon); }