コード例 #1
0
        public void UnionSquareWithHoleWithOtherSquare()
        {
            var expected = new List <List <PointD> >
            {
                new List <PointD>
                {
                    new PointD(0, 0),
                    new PointD(6, 0),
                    new PointD(6, 3),
                    new PointD(9, 3),
                    new PointD(9, 9),
                    new PointD(3, 9),
                    new PointD(3, 6),
                    new PointD(0, 6),
                },
                new List <PointD>
                {
                    new PointD(2, 2),
                    new PointD(2, 4),
                    new PointD(3, 4),
                    new PointD(3, 3),
                    new PointD(4, 3),
                    new PointD(4, 2),
                }
            };

            _clipper.Execute();

            var actual = _clipper.GetSolution();

            AssertPolygonsAreSame(expected, actual);
        }
コード例 #2
0
        public List <Polygon> Union(Polygon a, Polygon b)
        {
            var subject  = _adapter.GetPaths(a);
            var clipping = _adapter.GetPaths(b);

            _clipper.SetSubject(subject);
            _clipper.SetClipping(clipping);

            _clipper.Execute();
            return(new List <Polygon>()
            {
                _adapter.GetPolygon(_clipper.GetSolution())
            });
        }
コード例 #3
0
        public void UnionTwoOtherUnconvexPolygonWithoutHolesWhenSolutionHasHole()
        {
            var subject = new List <List <PointD> >
            {
                new List <PointD>()
                {
                    new PointD(0, 3),
                    new PointD(3, 0),
                    new PointD(1, 3),
                    new PointD(3, 6),
                }
            };

            var clipping = new List <List <PointD> >
            {
                new List <PointD>()
                {
                    new PointD(3, 0),
                    new PointD(6, 3),
                    new PointD(3, 6),
                    new PointD(5, 3),
                }
            };

            var expected = new List <List <PointD> >
            {
                new List <PointD>
                {
                    new PointD(0, 3),
                    new PointD(3, 0),
                    new PointD(6, 3),
                    new PointD(3, 6),
                },
                new List <PointD>
                {
                    new PointD(1, 3),
                    new PointD(3, 6),
                    new PointD(5, 3),
                    new PointD(3, 0),
                }
            };

            _clipper = new Clipper(subject, clipping);
            _clipper.Execute();

            var actual = _clipper.GetSolution();

            AssertPolygonsAreSame(expected, actual);
        }
コード例 #4
0
        public void UnionTwoSquares()
        {
            var subject = new List <List <PointD> >
            {
                new List <PointD>
                {
                    new PointD(4, 4),
                    new PointD(0, 4),
                    new PointD(0, 0),
                    new PointD(4, 0),
                }
            };

            var clipping = new List <List <PointD> >
            {
                new List <PointD>
                {
                    new PointD(6, 6),
                    new PointD(2, 6),
                    new PointD(2, 2),
                    new PointD(6, 2),
                }
            };

            var expected = new List <List <PointD> >
            {
                new List <PointD>
                {
                    new PointD(0, 0),
                    new PointD(4, 0),
                    new PointD(4, 2),
                    new PointD(6, 2),
                    new PointD(6, 6),
                    new PointD(2, 6),
                    new PointD(2, 4),
                    new PointD(0, 4),
                }
            };

            _clipper = new Clipper(subject, clipping);
            _clipper.Execute();

            var actual = _clipper.GetSolution();

            AssertPolygonsAreSame(expected, actual);
        }
コード例 #5
0
        public void UnionSolutionIsSameAfterReplacingSubjectAndClipping()
        {
            var subject = new List <List <PointD> >
            {
                new List <PointD>()
                {
                    new PointD(0, 3),
                    new PointD(3, 0),
                    new PointD(1, 3),
                    new PointD(3, 6),
                }
            };

            var clipping = new List <List <PointD> >
            {
                new List <PointD>()
                {
                    new PointD(3, 0),
                    new PointD(6, 3),
                    new PointD(3, 6),
                    new PointD(5, 3),
                }
            };

            _clipper = new Clipper(subject, clipping);
            _clipper.Execute();

            var expected = _clipper.GetSolution();

            _clipper = new Clipper(clipping, subject);
            _clipper.Execute();

            var actual = _clipper.GetSolution();

            AssertPolygonsAreSame(expected, actual);
        }
コード例 #6
0
        public void UnionTwoSquaresWithSquareHoles()
        {
            var subject = new List <List <PointD> >
            {
                new List <PointD>()
                {
                    new PointD(9, 9),
                    new PointD(0, 9),
                    new PointD(0, 0),
                    new PointD(9, 0),
                },

                new List <PointD>()
                {
                    new PointD(1, 1),
                    new PointD(1, 8),
                    new PointD(8, 8),
                    new PointD(8, 1),
                }
            };

            var clipping = new List <List <PointD> >
            {
                new List <PointD>()
                {
                    new PointD(4, 4),
                    new PointD(14, 4),
                    new PointD(14, 14),
                    new PointD(4, 14),
                },

                new List <PointD>()
                {
                    new PointD(5, 5),
                    new PointD(5, 13),
                    new PointD(13, 13),
                    new PointD(13, 5),
                }
            };

            var expected = new List <List <PointD> >
            {
                new List <PointD>
                {
                    new PointD(0, 0),
                    new PointD(9, 0),
                    new PointD(9, 4),
                    new PointD(14, 4),
                    new PointD(14, 14),
                    new PointD(4, 14),
                    new PointD(4, 9),
                    new PointD(0, 9),
                },
                new List <PointD>
                {
                    new PointD(1, 1),
                    new PointD(1, 8),
                    new PointD(4, 8),
                    new PointD(4, 4),
                    new PointD(8, 4),
                    new PointD(8, 1),
                },
                new List <PointD>
                {
                    new PointD(5, 5),
                    new PointD(5, 8),
                    new PointD(8, 8),
                    new PointD(8, 5),
                },
                new List <PointD>
                {
                    new PointD(5, 9),
                    new PointD(5, 13),
                    new PointD(13, 13),
                    new PointD(13, 5),
                    new PointD(9, 5),
                    new PointD(9, 9),
                },
            };

            _clipper = new Clipper(subject, clipping);
            _clipper.Execute();

            var actual = _clipper.GetSolution();

            AssertPolygonsAreSame(expected, actual);
        }