Esempio n. 1
0
 /// <summary>
 /// Constructs a rectangle shape for GPC from the given
 /// bounds.
 /// </summary>
 public static IPoly CreateRectangle(RectangleF bounds)
 {
     IPoly rectangle = new PolyDefault();
     rectangle.Add(bounds.Left, bounds.Top);
     rectangle.Add(bounds.Right, bounds.Top);
     rectangle.Add(bounds.Right, bounds.Bottom);
     rectangle.Add(bounds.Left, bounds.Bottom);
     return rectangle;
 }
Esempio n. 2
0
        public void testAreaSquare()
        {
            IPoly p = new PolyDefault();
            p.Add( 0.0, 0.0 );
            p.Add( 2.0, 0.0 );
            p.Add( 2.0, 2.0 );
            p.Add( 0.0, 2.0 );

            Assert.IsTrue( 4.0 == p.GetArea() );
        }
Esempio n. 3
0
        /**
         * Test the getting the area of a triangle
         */
        [Test] public void testAreaTriangle()
        {
            IPoly p = new PolyDefault();

            p.Add(0.0, 0.0);
            p.Add(2.0, 0.0);
            p.Add(2.0, 2.0);

            Assert.IsTrue(2.0 == p.GetArea());
        }
Esempio n. 4
0
        public void testAreaNonConvex()
        {
            IPoly p = new PolyDefault();
            p.Add( 0.0, 0.0 );
            p.Add( 0.0, 8.0 );
            p.Add( 6.0, 4.0 );
            p.Add( 4.0, 2.0 );
            p.Add( 2.0, 4.0 );

            Assert.IsTrue( 20.0 == p.GetArea() );
        }
Esempio n. 5
0
        /**
         * Test the getting the area of a non-convex polygon
         */
        [Test] public void testAreaNonConvex()
        {
            IPoly p = new PolyDefault();

            p.Add(0.0, 0.0);
            p.Add(0.0, 8.0);
            p.Add(6.0, 4.0);
            p.Add(4.0, 2.0);
            p.Add(2.0, 4.0);

            Assert.IsTrue(20.0 == p.GetArea());
        }
Esempio n. 6
0
        public void TestIntersectionEmptySet()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 1.0, 0.0 );
            p1.Add( 1.0, 1.0 );
            p1.Add( 0.0, 1.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 0.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 3.0 );

            IPoly empty = Clipper.Intersection( p1, p2 );
            Assert.IsTrue( empty.IsEmpty() );
        }
Esempio n. 7
0
        /**
         * Test the equality operator when polys with different number of points
         */
        [Test] public void testEqualDifferentNumPoints()
        {
            IPoly p1a = new PolyDefault();

            p1a.Add(0.0, 0.0);
            p1a.Add(4.0, 0.0);

            IPoly p1b = new PolyDefault();

            p1b.Add(0.0, 0.0);
            p1b.Add(4.0, 0.0);
            p1b.Add(4.0, 4.0);
            p1b.Add(0.0, 4.0);

            Assert.IsTrue(!p1a.Equals(p1b));
            Assert.IsTrue(!p1b.Equals(p1a));
        }
Esempio n. 8
0
        /**
         * Test the equality operator when same points but not it same order
         */
        [Test] public void testEqualBadOrder()
        {
            IPoly p1a = new PolyDefault();

            p1a.Add(0.0, 0.0);
            p1a.Add(4.0, 0.0);
            p1a.Add(4.0, 4.0);
            p1a.Add(0.0, 4.0);

            IPoly p1b = new PolyDefault();

            p1b.Add(0.0, 0.0);
            p1b.Add(0.0, 4.0);
            p1b.Add(4.0, 0.0);
            p1b.Add(4.0, 4.0);

            Assert.IsTrue(!p1a.Equals(p1b));
            Assert.IsTrue(!p1b.Equals(p1a));
        }
Esempio n. 9
0
        /**
         * Test the equality operator when same but different order
         */
        [Test] public void testEqualDifferentOrder()
        {
            IPoly p1a = new PolyDefault();

            p1a.Add(0.0, 0.0);
            p1a.Add(4.0, 0.0);
            p1a.Add(4.0, 4.0);
            p1a.Add(0.0, 4.0);

            IPoly p1b = new PolyDefault();

            p1b.Add(0.0, 4.0);
            p1b.Add(0.0, 0.0);
            p1b.Add(4.0, 0.0);
            p1b.Add(4.0, 4.0);

            Assert.IsTrue(p1a != p1b);
            Assert.AreEqual(p1a, p1b);
            Assert.AreEqual(p1b, p1a);
        }
        /// <summary>
        /// Creates a polygon from the given list of points.
        /// </summary>
        private IPoly CreatePolygon(IList<PointF> points)
        {
            // Create the polygon
            PolyDefault pd = new PolyDefault();

            // Go through the points
            foreach (PointF p in points)
                pd.Add(p.X, p.Y);

            // Return the results
            return pd;
        }
Esempio n. 11
0
        /**
         * Test the getting the area of a polygon with a hole
         */
        [Test] public void testAreaWithHole()
        {
            IPoly p1 = new PolyDefault();

            p1.Add(0.0, 0.0);
            p1.Add(4.0, 0.0);
            p1.Add(4.0, 4.0);
            p1.Add(0.0, 4.0);

            IPoly p2 = new PolyDefault(true);

            p2.Add(1.0, 1.0);
            p2.Add(3.0, 1.0);
            p2.Add(3.0, 3.0);
            p2.Add(1.0, 3.0);

            IPoly p = new PolyDefault();

            p.Add(p1);
            p.Add(p2);

            Assert.IsTrue(12.0 == p.GetArea());
        }
Esempio n. 12
0
        /// <summary>
        /// Creates a standard circle with some point that
        /// approximates a circle.
        /// </summary>
        public static IPoly CreateCircle(
			PointF point,
			float radius)
        {
            // Create the polygon
            PolyDefault poly = new PolyDefault();

            // Create the points by just going in a circle
            int points = 32;
            double angle = 0;

            for (int i = 0; i < points; i++)
            {
                poly.Add(new PointF(
                        point.X + (float) Math.Cos(angle) * radius,
                        point.Y + (float) Math.Sin(angle) * radius));
                angle += Constants.PI2 / points;
            }

            // Return the results
            return poly;
        }
Esempio n. 13
0
        public void TestIntersectionPolyVOverlaps()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 1.0, 0.0 );
            p1.Add( 5.0, 0.0 );
            p1.Add( 5.0, 5.0 );
            p1.Add( 3.0, 3.0 );
            p1.Add( 1.0, 5.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 2.0 );
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 6.0, 2.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 1.0, 1.0 );
            exp.Add( 2.0, 0.0 );
            exp.Add( 3.0, 1.0 );
            exp.Add( 4.0, 0.0 );
            exp.Add( 5.0, 1.0 );
            exp.Add( 5.0, 3.0 );
            exp.Add( 4.0, 4.0 );
            exp.Add( 3.0, 3.0 );
            exp.Add( 2.0, 4.0 );
            exp.Add( 1.0, 3.0 );

            PolyDefault result = (PolyDefault)Clipper.Intersection( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 14
0
        public void TestIntersectionRectangleHole()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 1.0 );
            p1.Add( 4.0, 1.0 );
            p1.Add( 4.0, 5.0 );
            p1.Add( 0.0, 5.0 );

            IPoly p2 = new PolyDefault(true);
            p2.Add( 1.0, 2.0 );
            p2.Add( 3.0, 2.0 );
            p2.Add( 3.0, 4.0 );
            p2.Add( 1.0, 4.0 );

            IPoly p12 = new PolyDefault();
            p12.Add( p1 );
            p12.Add( p2 );

            IPoly p3 = new PolyDefault();
            p3.Add( 2.0, 0.0 );
            p3.Add( 6.0, 0.0 );
            p3.Add( 6.0, 6.0 );
            p3.Add( 2.0, 6.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 2.0, 1.0 );
            exp.Add( 4.0, 1.0 );
            exp.Add( 4.0, 5.0 );
            exp.Add( 2.0, 5.0 );
            exp.Add( 2.0, 4.0 );
            exp.Add( 3.0, 4.0 );
            exp.Add( 3.0, 2.0 );
            exp.Add( 2.0, 2.0 );

            PolyDefault result = (PolyDefault)Clipper.Intersection( p12, p3 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 15
0
        public void TestUnionTwoEqual()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 4.0, 0.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 0.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 0.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 0.0, 4.0 );

            PolyDefault result = (PolyDefault)Clipper.Union( p1, p2 );
            //      result.print();
            Assert.AreEqual( p1, result );
        }
Esempio n. 16
0
        public void TestXorTwoEqual()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 4.0, 0.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 0.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 0.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 0.0, 4.0 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.IsTrue( result.IsEmpty() );
        }
Esempio n. 17
0
        public void TestUnionPolyOneOnTopOfTwo()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 1.0, 4.0 );
            p1.Add( 5.0, 4.0 );
            p1.Add( 5.0, 9.0 );
            p1.Add( 3.0, 7.0 );
            p1.Add( 1.0, 9.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 2.0 );
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 6.0, 2.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 4.0 );

            IPoly exp1 = new PolyDefault();
            exp1.Add( 0.0, 2.0 );
            exp1.Add( 2.0, 0.0 );
            exp1.Add( 3.0, 1.0 );
            exp1.Add( 4.0, 0.0 );
            exp1.Add( 6.0, 2.0 );
            exp1.Add( 4.0, 4.0 );
            exp1.Add( 5.0, 4.0 );
            exp1.Add( 5.0, 9.0 );
            exp1.Add( 3.0, 7.0 );
            exp1.Add( 1.0, 9.0 );
            exp1.Add( 1.0, 4.0 );
            exp1.Add( 2.0, 4.0 );

            IPoly exp2 = new PolyDefault(true);
            exp2.Add( 4.0, 4.0 );
            exp2.Add( 3.0, 3.0 );
            exp2.Add( 2.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add( exp1 );
            exp.Add( exp2 );

            PolyDefault result = (PolyDefault)Clipper.Union( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 18
0
        public void TestUnionPolyTwoSidesOneVertex()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 1.0, 3.0 );
            p1.Add( 5.0, 3.0 );
            p1.Add( 5.0, 8.0 );
            p1.Add( 3.0, 6.0 );
            p1.Add( 1.0, 8.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 2.0 );
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 6.0, 2.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 0.0, 2.0 );
            exp.Add( 2.0, 0.0 );
            exp.Add( 3.0, 1.0 );
            exp.Add( 4.0, 0.0 );
            exp.Add( 6.0, 2.0 );
            exp.Add( 5.0, 3.0 );
            exp.Add( 5.0, 8.0 );
            exp.Add( 3.0, 6.0 );
            exp.Add( 1.0, 8.0 );
            exp.Add( 1.0, 3.0 );

            PolyDefault result = (PolyDefault)Clipper.Union( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 19
0
        public void TestXorRectInterCorner4()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 2.0, 2.0 );
            p1.Add( 4.0, 2.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 2.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 1.0, 3.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 3.0, 5.0 );
            p2.Add( 1.0, 5.0 );

            // ------------------------------------------------------------------------------------------
            // --- I expected this to give two non-hole inner polygons but it gave one with a hole    ---
            // --- if you look at it, they are equivalent.  Don't have time to figure out difference. ---
            // ------------------------------------------------------------------------------------------

            IPoly exp1 = new PolyDefault(true);
            exp1.Add( 3.0, 3.0 );
            exp1.Add( 2.0, 3.0 );
            exp1.Add( 2.0, 4.0 );
            exp1.Add( 3.0, 4.0 );

            IPoly exp2 = new PolyDefault();
            exp2.Add( 1.0, 3.0 );
            exp2.Add( 2.0, 3.0 );
            exp2.Add( 2.0, 2.0 );
            exp2.Add( 4.0, 2.0 );
            exp2.Add( 4.0, 4.0 );
            exp2.Add( 3.0, 4.0 );
            exp2.Add( 3.0, 5.0 );
            exp2.Add( 1.0, 5.0 );

            IPoly exp = new PolyDefault();
            exp.Add( exp2 );
            exp.Add( exp1 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 20
0
        /**
         * Test the getting the area of a self-intersecting polygon
         */
        [Test] public void testSelfIntersecting()
        {
            IPoly p = new PolyDefault();

            p.Add(6.0, 6.0);
            p.Add(2.0, 6.0);
            p.Add(2.0, 5.0);
            p.Add(4.0, 5.0);
            p.Add(4.0, 1.0);
            p.Add(2.0, 1.0);
            p.Add(2.0, 2.0);
            p.Add(1.0, 2.0);
            p.Add(1.0, 4.0);
            p.Add(2.0, 4.0);
            p.Add(2.0, 2.0);
            p.Add(3.0, 2.0);
            p.Add(3.0, 4.0);
            p.Add(2.0, 4.0);
            p.Add(2.0, 5.0);
            p.Add(0.0, 5.0);
            p.Add(0.0, 1.0);
            p.Add(2.0, 1.0);
            p.Add(2.0, 0.0);
            p.Add(6.0, 0.0);

            Assert.IsTrue(24.0 == p.GetArea());
        }
Esempio n. 21
0
        public void TestUnionRectCorner4()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 4.0, 0.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 0.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 3.0 );
            p2.Add( 1.0, 3.0 );
            p2.Add( 1.0, 4.0 );
            p2.Add( 0.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 0.0, 0.0 );
            exp.Add( 4.0, 0.0 );
            exp.Add( 4.0, 4.0 );
            exp.Add( 0.0, 4.0 );
            exp.Add( 0.0, 3.0 ); // !!! KNOWN BUG - EXTRA POINT BUT SHAPE IS CORRECT

            PolyDefault result = (PolyDefault)Clipper.Union( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 22
0
        public void TestIntersectionPolyFourSides()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 1.0, 0.5 );
            p1.Add( 5.0, 0.5 );
            p1.Add( 5.0, 6.0 );
            p1.Add( 3.0, 4.0 );
            p1.Add( 1.0, 6.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 2.0 );
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 6.0, 2.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 1.0, 1.0 );
            exp.Add( 1.5, 0.5 );
            exp.Add( 2.5, 0.5 );
            exp.Add( 3.0, 1.0 );
            exp.Add( 3.5, 0.5 );
            exp.Add( 4.5, 0.5 );
            exp.Add( 5.0, 1.0 );
            exp.Add( 5.0, 3.0 );
            exp.Add( 4.0, 4.0 );
            exp.Add( 3.0, 3.0 );
            exp.Add( 2.0, 4.0 );
            exp.Add( 1.0, 3.0 );

            IPoly result = Clipper.Intersection( p1, p2 );
            Assert.AreEqual( exp, result );
        }
Esempio n. 23
0
        public void TestXorPolyVOverlaps()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 1.0, 0.0 );
            p1.Add( 5.0, 0.0 );
            p1.Add( 5.0, 5.0 );
            p1.Add( 3.0, 3.0 );
            p1.Add( 1.0, 5.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 2.0 );
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 6.0, 2.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 4.0 );

            IPoly exp1 = new PolyDefault();
            exp1.Add( 5.0, 5.0 );
            exp1.Add( 4.0, 4.0 );
            exp1.Add( 5.0, 3.0 );

            IPoly exp2 = new PolyDefault();
            exp2.Add( 1.0, 5.0 );
            exp2.Add( 1.0, 3.0 );
            exp2.Add( 2.0, 4.0 );

            IPoly exp3 = new PolyDefault();
            exp3.Add( 5.0, 3.0 );
            exp3.Add( 5.0, 1.0 );
            exp3.Add( 6.0, 2.0 );

            IPoly exp4 = new PolyDefault();
            exp4.Add( 1.0, 3.0 );
            exp4.Add( 0.0, 2.0 );
            exp4.Add( 1.0, 1.0 );

            IPoly exp5 = new PolyDefault();
            exp5.Add( 5.0, 1.0 );
            exp5.Add( 4.0, 0.0 );
            exp5.Add( 5.0, 0.0 );

            IPoly exp6 = new PolyDefault();
            exp6.Add( 3.0, 1.0 );
            exp6.Add( 2.0, 0.0 );
            exp6.Add( 4.0, 0.0 );

            IPoly exp7 = new PolyDefault();
            exp7.Add( 1.0, 1.0 );
            exp7.Add( 1.0, 0.0 );
            exp7.Add( 2.0, 0.0 );

            IPoly exp = new PolyDefault();
            exp.Add( exp1 );
            exp.Add( exp2 );
            exp.Add( exp3 );
            exp.Add( exp4 );
            exp.Add( exp5 );
            exp.Add( exp6 );
            exp.Add( exp7 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 24
0
        public void TestXorPolyTwoSidesAndLowerVertex()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 1.0, 1.0 );
            p1.Add( 5.0, 1.0 );
            p1.Add( 5.0, 6.0 );
            p1.Add( 3.0, 4.0 );
            p1.Add( 1.0, 6.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 2.0 );
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 6.0, 2.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 4.0 );

            IPoly exp1 = new PolyDefault();
            exp1.Add( 5.0, 6.0 );
            exp1.Add( 3.0, 4.0 );
            exp1.Add( 1.0, 6.0 );
            exp1.Add( 1.0, 3.0 );
            exp1.Add( 2.0, 4.0 );
            exp1.Add( 3.0, 3.0 );
            exp1.Add( 4.0, 4.0 );
            exp1.Add( 5.0, 3.0 );

            IPoly exp2 = new PolyDefault();
            exp2.Add( 5.0, 3.0 );
            exp2.Add( 5.0, 1.0 );
            exp2.Add( 3.0, 1.0 );
            exp2.Add( 4.0, 0.0 );
            exp2.Add( 6.0, 2.0 );

            IPoly exp3 = new PolyDefault();
            exp3.Add( 1.0, 3.0 );
            exp3.Add( 0.0, 2.0 );
            exp3.Add( 2.0, 0.0 );
            exp3.Add( 3.0, 1.0 );
            exp3.Add( 1.0, 1.0 );

            IPoly exp = new PolyDefault();
            exp.Add( exp1 );
            exp.Add( exp2 );
            exp.Add( exp3 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 25
0
        public void TestIntersectionPolyOneOnTopOfTwo()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 1.0, 4.0 );
            p1.Add( 5.0, 4.0 );
            p1.Add( 5.0, 9.0 );
            p1.Add( 3.0, 7.0 );
            p1.Add( 1.0, 9.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 2.0 );
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 6.0, 2.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 4.0 );

            IPoly result = Clipper.Intersection( p1, p2 );
            Assert.IsTrue( result.IsEmpty() );
        }
Esempio n. 26
0
        public void TestIntersectionRectInterCorner3()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 2.0, 2.0 );
            p1.Add( 4.0, 2.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 2.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 3.0, 3.0 );
            p2.Add( 5.0, 3.0 );
            p2.Add( 5.0, 5.0 );
            p2.Add( 3.0, 5.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 3.0, 3.0 );
            exp.Add( 4.0, 3.0 );
            exp.Add( 4.0, 4.0 );
            exp.Add( 3.0, 4.0 );

            IPoly result = Clipper.Intersection( p1, p2 );
            Assert.AreEqual( exp, result );
        }
Esempio n. 27
0
        public void TestXorRectInterSide4()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 1.0 );
            p1.Add( 4.0, 1.0 );
            p1.Add( 4.0, 5.0 );
            p1.Add( 0.0, 5.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( -1.0, 2.0 );
            p2.Add(  1.0, 2.0 );
            p2.Add(  1.0, 4.0 );
            p2.Add( -1.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add(  4.0, 5.0 );
            exp.Add(  0.0, 5.0 );
            exp.Add(  0.0, 4.0 );
            exp.Add(  1.0, 4.0 );
            exp.Add(  1.0, 2.0 );
            exp.Add(  0.0, 2.0 );
            exp.Add(  0.0, 4.0 );
            exp.Add( -1.0, 4.0 );
            exp.Add( -1.0, 2.0 );
            exp.Add(  0.0, 2.0 );
            exp.Add(  0.0, 1.0 );
            exp.Add(  4.0, 1.0 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 28
0
        public void TestIntersectionRectInterSide4()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 1.0 );
            p1.Add( 4.0, 1.0 );
            p1.Add( 4.0, 5.0 );
            p1.Add( 0.0, 5.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( -1.0, 2.0 );
            p2.Add(  1.0, 2.0 );
            p2.Add(  1.0, 4.0 );
            p2.Add( -1.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 0.0, 2.0 );
            exp.Add( 1.0, 2.0 );
            exp.Add( 1.0, 4.0 );
            exp.Add( 0.0, 4.0 );

            IPoly result = Clipper.Intersection( p1, p2 );
            Assert.AreEqual( exp, result );
        }
Esempio n. 29
0
        public void TestXorSeparate()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 1.0, 0.0 );
            p1.Add( 1.0, 1.0 );
            p1.Add( 0.0, 1.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 2.0, 0.0 );
            p2.Add( 3.0, 0.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 3.0 );

            IPoly exp = new PolyDefault();
            exp.Add( p2 );
            exp.Add( p1 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //      result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 30
0
        public void TestIntersectionTwoEqual()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 4.0, 0.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 0.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 0.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 0.0, 4.0 );

            IPoly result = Clipper.Intersection( p1, p2 );
            Assert.AreEqual( p1, result );
        }
Esempio n. 31
0
        public void TestXortRectInterCorner3()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 2.0, 2.0 );
            p1.Add( 4.0, 2.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 2.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 3.0, 3.0 );
            p2.Add( 5.0, 3.0 );
            p2.Add( 5.0, 5.0 );
            p2.Add( 3.0, 5.0 );

            IPoly exp1 = new PolyDefault();
            exp1.Add( 2.0, 2.0 );
            exp1.Add( 4.0, 2.0 );
            exp1.Add( 4.0, 3.0 );
            exp1.Add( 3.0, 3.0 );
            exp1.Add( 3.0, 4.0 );
            exp1.Add( 2.0, 4.0 );

            IPoly exp2 = new PolyDefault();
            exp2.Add( 4.0, 3.0 );
            exp2.Add( 5.0, 3.0 );
            exp2.Add( 5.0, 5.0 );
            exp2.Add( 3.0, 5.0 );
            exp2.Add( 3.0, 4.0 );
            exp2.Add( 4.0, 4.0 );

            IPoly exp = new PolyDefault();
            exp.Add( exp2 );
            exp.Add( exp1 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 32
0
        public void TestIntersectionOneContainsTwo()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 4.0, 0.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 0.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 2.0, 1.0 );
            p2.Add( 3.0, 1.0 );
            p2.Add( 3.0, 3.0 );
            p2.Add( 2.0, 3.0 );

            PolyDefault result = (PolyDefault) Clipper.Intersection( p1, p2 );
            //result.Print();
            Assert.AreEqual(p2, result);
        }
Esempio n. 33
0
        public void TestXorTwoContainsOne()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 2.0, 1.0 );
            p1.Add( 3.0, 1.0 );
            p1.Add( 3.0, 3.0 );
            p1.Add( 2.0, 3.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 0.0, 0.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 4.0, 4.0 );
            p2.Add( 0.0, 4.0 );

            // notice reverse order
            IPoly exp2 = new PolyDefault(true);
            exp2.Add( 3.0, 1.0 );
            exp2.Add( 2.0, 1.0 );
            exp2.Add( 2.0, 3.0 );
            exp2.Add( 3.0, 3.0 );

            IPoly exp = new PolyDefault();
            exp.Add( p2 );
            exp.Add( exp2 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 34
0
        public void TestXorRectangleHole()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 1.0 );
            p1.Add( 4.0, 1.0 );
            p1.Add( 4.0, 5.0 );
            p1.Add( 0.0, 5.0 );

            IPoly p2 = new PolyDefault(true);
            p2.Add( 1.0, 2.0 );
            p2.Add( 3.0, 2.0 );
            p2.Add( 3.0, 4.0 );
            p2.Add( 1.0, 4.0 );

            IPoly p12 = new PolyDefault();
            p12.Add( p1 );
            p12.Add( p2 );

            IPoly p3 = new PolyDefault();
            p3.Add( 2.0, 0.0 );
            p3.Add( 6.0, 0.0 );
            p3.Add( 6.0, 6.0 );
            p3.Add( 2.0, 6.0 );

            // -----------------------------------------------------------
            // --- This is not what I expected and it seems reasonable ---
            // --- However it could be wrong.                          ---
            // -----------------------------------------------------------
            // --- I computed the area of this poly and it came out to ---
            // --- be 24 which is what you would expect.               ---
            // -----------------------------------------------------------
            IPoly exp = new PolyDefault();
            exp.Add( 6.0, 6.0 );
            exp.Add( 2.0, 6.0 );
            exp.Add( 2.0, 5.0 );
            exp.Add( 4.0, 5.0 );
            exp.Add( 4.0, 1.0 );
            exp.Add( 2.0, 1.0 );
            exp.Add( 2.0, 2.0 );
            exp.Add( 1.0, 2.0 );
            exp.Add( 1.0, 4.0 );
            exp.Add( 2.0, 4.0 );
            exp.Add( 2.0, 2.0 );
            exp.Add( 3.0, 2.0 );
            exp.Add( 3.0, 4.0 );
            exp.Add( 2.0, 4.0 );
            exp.Add( 2.0, 5.0 );
            exp.Add( 0.0, 5.0 );
            exp.Add( 0.0, 1.0 );
            exp.Add( 2.0, 1.0 );
            exp.Add( 2.0, 0.0 );
            exp.Add( 6.0, 0.0 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p12, p3 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 35
0
        public void TestUnionRectInterSide3()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 1.0 );
            p1.Add( 4.0, 1.0 );
            p1.Add( 4.0, 5.0 );
            p1.Add( 0.0, 5.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 1.0, 4.0 );
            p2.Add( 3.0, 4.0 );
            p2.Add( 3.0, 6.0 );
            p2.Add( 1.0, 6.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 0.0, 1.0 );
            exp.Add( 4.0, 1.0 );
            exp.Add( 4.0, 5.0 );
            exp.Add( 3.0, 5.0 );
            exp.Add( 3.0, 6.0 );
            exp.Add( 1.0, 6.0 );
            exp.Add( 1.0, 5.0 );
            exp.Add( 0.0, 5.0 );

            PolyDefault result = (PolyDefault)Clipper.Union( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }
Esempio n. 36
0
        /// <summary>
        /// Creates a polygon-based shape around a single point of a
        /// random size. The radiusMultiplier is used to increase the
        /// size to ensure that it connects to another shape (if that
        /// is the requirement).
        /// </summary>
        public static IPoly CreateShape(
			Junction parent,
			PointF point,
			float radius)
        {
            // Figure out the size of the square, as a radius. On each
            // retry, we make it a bit bigger.
            radius *= parent.Random.NextSingle(0.5f, 1.5f);

            // Get a random angle
            int count = parent.Random.Next(3, 7);
            float angle = parent.Random.NextSingle(0, Constants.PI2);

            // Create the square we are mapping
            PolyDefault poly = new PolyDefault();

            for (int i = 0; i < count; i++)
            {
                poly.Add(new PointF(
                        point.X + (float) Math.Cos(angle) * radius,
                        point.Y + (float) Math.Sin(angle) * radius));
                angle += Constants.PI2 / count;
            }

            // Return the results
            return poly;
        }
Esempio n. 37
0
        public void TestXorRectCorner2()
        {
            IPoly p1 = new PolyDefault();
            p1.Add( 0.0, 0.0 );
            p1.Add( 4.0, 0.0 );
            p1.Add( 4.0, 4.0 );
            p1.Add( 0.0, 4.0 );

            IPoly p2 = new PolyDefault();
            p2.Add( 3.0, 0.0 );
            p2.Add( 4.0, 0.0 );
            p2.Add( 4.0, 1.0 );
            p2.Add( 3.0, 1.0 );

            IPoly exp = new PolyDefault();
            exp.Add( 0.0, 0.0 );
            exp.Add( 3.0, 0.0 );
            exp.Add( 3.0, 1.0 );
            exp.Add( 4.0, 1.0 );
            exp.Add( 4.0, 4.0 );
            exp.Add( 0.0, 4.0 );

            PolyDefault result = (PolyDefault)Clipper.Xor( p1, p2 );
            //result.print();
            Assert.AreEqual( exp, result );
        }