/// <summary> /// Gets the in plane flat. /// </summary> /// <param name="startFace">The start face.</param> /// <returns>Flat.</returns> private static Flat GetInPlaneFlat(PolygonalFace startFace) { var flat = new Flat(new List<PolygonalFace>(new[] { startFace })); var visitedFaces = new HashSet<PolygonalFace>(startFace.AdjacentFaces); visitedFaces.Add(startFace); var stack = new Stack<PolygonalFace>(visitedFaces); while (stack.Any()) { var face = stack.Pop(); if (!flat.IsNewMemberOf(face)) continue; flat.UpdateWith(face); foreach (var adjacentFace in face.AdjacentFaces) if (!visitedFaces.Contains(adjacentFace)) { visitedFaces.Add(adjacentFace); stack.Push(adjacentFace); } } return flat; }