Example #1
0
 /// <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;
 }