示例#1
0
        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]);
        }
示例#2
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));
        }
示例#3
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())));
            }
        }