/// <summary> /// Returns true if vertex lies on the edge of triangle mesh /// </summary> /// <param name="vertex"></param> /// <returns></returns> public static bool IsOnEdge(Vector3 vertex, SceneBrep scene) { bool onEdge = false; var handle = scene.GetVertex(vertex); List <int> trianglePtr = new List <int>(); // get triangles for (int i = 0; i < scene.vertexPtr.Count; i++) { if (scene.vertexPtr[i] == handle) { if (i % 3 == 0) { trianglePtr.Add(i / 3); } else if (i % 3 == 1) { trianglePtr.Add((i - 1) / 3); } else if (i % 3 == 2) { trianglePtr.Add((i - 2) / 3); } } } // is triangle on edge? foreach (var ptr in trianglePtr) { // get handle of corners of triangle var c1 = Scene3D.SceneBrep.tCorner(ptr); var c2 = c1 + 1; var c3 = c1 + 2; if (scene.cOpposite(c1) == -1) { onEdge = true; } else if (scene.cOpposite(c2) == -1) { onEdge = true; } else if (scene.cOpposite(c3) == -1) { onEdge = true; } } return(onEdge); }