Implement Region.GetContourCopies

This commit is contained in:
borovec zdenek 2024-09-04 14:36:34 +02:00
parent 6744f5e967
commit 75d12d6a5a
3 changed files with 21 additions and 22 deletions

View file

@ -111,7 +111,12 @@ namespace Boprs
BooleanOperation bopr = new BooleanOperation(subject, clip, type); BooleanOperation bopr = new BooleanOperation(subject, clip, type);
bopr.Result.Draw(); List <Contour> contours = bopr.Result.GetContourCopies();
foreach (Contour contour in contours)
{
contour.Draw();
}
} }
} }
} }

View file

@ -20,17 +20,17 @@ namespace Boprs
/// <summary> /// <summary>
/// Simple closed polygon. /// Simple closed polygon.
/// </summary> /// </summary>
public class Contour public class Contour : ICloneable
{ {
/// <summary> public object Clone()
/// Depth of the contour within the region. {
/// </summary> return new Contour() { Vertices = new List<Point2d>(Vertices) };
internal int ContourDepth { get; set; } }
/// <summary> /// <summary>
/// Vertices of the contour. /// Vertices of the contour.
/// </summary> /// </summary>
public List<Point2d> Vertices { get; } public List<Point2d> Vertices { get; private set; }
/// <summary> /// <summary>
/// Are the vertices of the contour arranged in clockwise manner? /// Are the vertices of the contour arranged in clockwise manner?
@ -70,7 +70,6 @@ namespace Boprs
/// </summary> /// </summary>
public Contour() public Contour()
{ {
ContourDepth = 0;
Vertices = new List<Point2d>(); Vertices = new List<Point2d>();
} }

View file

@ -173,13 +173,11 @@ namespace Boprs
SweepVertex acVx = vertices[i]; SweepVertex acVx = vertices[i];
bool shouldBeCW = !acVx.Edge.TransitionInside; bool shouldBeCW = !acVx.Edge.TransitionInside;
Point2d target = acVx.Point;
// Traverse connected edges, and mark taversed vertices as processed, // Traverse connected edges, and mark taversed vertices as processed,
// until we loop back to the first discovered vertex on the contour. // until we loop back to the first discovered vertex on the contour.
int pos = i; int pos = i;
processed[i] = true; processed[i] = true;
Point2d target = acVx.Point;
contour.Vertices.Add(vertices[pos].Point); contour.Vertices.Add(vertices[pos].Point);
acVx.Edge.ParentContour = contour; acVx.Edge.ParentContour = contour;
while (!Utils.DoubleEquals(vertices[pos].OtherVertex().Point.GetDistanceTo(target), 0)) while (!Utils.DoubleEquals(vertices[pos].OtherVertex().Point.GetDistanceTo(target), 0))
@ -226,7 +224,14 @@ namespace Boprs
/// <returns>List of copies of the regions contours.</returns> /// <returns>List of copies of the regions contours.</returns>
public List<Contour> GetContourCopies() public List<Contour> GetContourCopies()
{ {
throw new NotImplementedException(); List<Contour> copies = new List<Contour>();
foreach (Contour contour in Contours)
{
copies.Add((Contour)contour.Clone());
}
return copies;
} }
/// <summary> /// <summary>
@ -253,15 +258,5 @@ namespace Boprs
return region; return region;
} }
#if DEBUG
internal void Draw()
{
foreach (Contour contour in Contours)
{
contour.Draw();
}
}
#endif
} }
} }