public void HalfEdgeGraphFromLines() { Name = nameof(HalfEdgeGraphFromLines); // not in order, but clockwise-wound var lines = new List <Line> { new Line((0, 0), (10, 0)), new Line((10, 10), (5, 15)), new Line((10, 0), (10, 10)), new Line((0, 10), (0, 0)), new Line((5, 15), (0, 10)), }; var heg = HalfEdgeGraph2d.Construct(lines); var polygons = heg.Polygonize(); Assert.Single(polygons); Model.AddElement(polygons[0]); }
public void HalfEdgeGraphFromLinesBothWays() { Name = nameof(HalfEdgeGraphFromLinesBothWays); // not in order and inconsistently wound var lines = new List <Line> { new Line((0, 0), (10, 0)), new Line((10, 10), (5, 15)), new Line((10, 0), (10, 10)), new Line((0, 0), (0, 10)), new Line((0, 10), (5, 15)), }; var heg = HalfEdgeGraph2d.Construct(lines, true); var polygons = heg.Polygonize(); Assert.Equal(2, polygons.Count); Assert.Single(polygons.Where(p => p.Normal().Dot(Vector3.ZAxis) > 0)); }
public void PolygonCleanupIssue() { Name = nameof(PolygonCleanupIssue); var rect = Polygon.Rectangle(10, 10); var splitters = Polygon.Rectangle(4, 15).Segments().Select(s => s.ToPolyline(1)); Model.AddElements(rect); var heg = HalfEdgeGraph2d.Construct(new[] { rect }, splitters); var polygons = heg.Polygonize(); Assert.Equal(3, polygons.Count); Assert.True(polygons.All(p => p.Segments().Count() == 4), "All polygons should be simple rectangles"); var rand = new Random(); foreach (var s in polygons) { Model.AddElement(new ModelCurve(s, rand.NextMaterial(), new Transform(0, 0, rand.NextDouble()))); } }