コード例 #1
0
        public static UrbanChallenge.Common.Shapes.Polygon PolygonIntersection(UrbanChallenge.Common.Shapes.Polygon polygon, UrbanChallenge.Common.Shapes.Polygon eePolygon)
        {
            GpcWrapper.Polygon one   = ToGpcPolygon(polygon);
            GpcWrapper.Polygon two   = ToGpcPolygon(eePolygon);
            GpcWrapper.Polygon final = GpcWrapper.GpcWrapper.Clip(GpcWrapper.GpcOperation.Intersection, one, two);

            return(ToShapePolygon(final));
        }
コード例 #2
0
        public static UrbanChallenge.Common.Shapes.Polygon ToShapePolygon(GpcWrapper.Polygon input)
        {
            PointF[]           polyPoints = input.ToGraphicsPath().PathPoints;
            List <Coordinates> polyCoords = new List <Coordinates>();

            for (int i = 0; i < polyPoints.Length; i++)
            {
                polyCoords.Add(DrawingUtility.ToCoord(polyPoints[i]));
            }

            return(new UrbanChallenge.Common.Shapes.Polygon(polyCoords));
        }
コード例 #3
0
        /// <summary>
        /// Takes union of a list of polygons
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        public static UrbanChallenge.Common.Shapes.Polygon PolygonUnion(
            List <UrbanChallenge.Common.Shapes.Polygon> inputs)
        {
            GpcWrapper.Polygon final = null;

            foreach (UrbanChallenge.Common.Shapes.Polygon i in inputs)
            {
                if (final == null)
                {
                    final = ToGpcPolygon(i);
                }
                else
                {
                    final = GpcWrapper.GpcWrapper.Clip(GpcWrapper.GpcOperation.Union, ToGpcPolygon(i), final);
                }
            }

            return(ToShapePolygon(final));
        }
コード例 #4
0
        void panel_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            GraphicsPath p = new GraphicsPath();

            // draw A
            p.AddString("A", fontFamily, 0, 250, new System.Drawing.Point(0, 0), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, p);
            e.Graphics.DrawPath(new System.Drawing.Pen(System.Drawing.Color.Black, 2.0F), p);
            // draw B
            p.AddString("B", fontFamily, 0, 250, new System.Drawing.Point(0, 250), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, p);
            e.Graphics.DrawPath(new System.Drawing.Pen(System.Drawing.Color.Black, 2.0F), p);

            // create polygonA
            p = new GraphicsPath();
            p.AddString("A", fontFamily, 0, 250, new System.Drawing.Point(0, 0), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            GpcWrapper.Polygon polygonA = new GpcWrapper.Polygon(p);

            // create polygonB
            p = new GraphicsPath();
            p.AddString("B", fontFamily, 0, 250, new System.Drawing.Point(0, 0), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            GpcWrapper.Polygon polygonB = new GpcWrapper.Polygon(p);

            // Save and Load
            polygonA.Save("A.plg", true);
            GpcWrapper.Polygon loadedPolygon = GpcWrapper.Polygon.FromFile("A.plg", true);
            polygonB.Save("B.plg", true);
            GpcWrapper.Polygon loadedPolygon2 = GpcWrapper.Polygon.FromFile("B.plg", true);

            // create Tristrip
            GpcWrapper.Tristrip tristrip  = loadedPolygon.ToTristrip();
            GpcWrapper.Tristrip tristrip2 = loadedPolygon2.ToTristrip();
            for (int i = 0; i < tristrip.NofStrips; i++)
            {
                GpcWrapper.VertexList           vertexList = tristrip.Strip[i];
                GraphicsPath                    path       = vertexList.TristripToGraphicsPath();
                System.Drawing.Drawing2D.Matrix m          = new System.Drawing.Drawing2D.Matrix();
                m.Translate(600, 0);
                path.Transform(m);
                e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, path);
                e.Graphics.DrawPath(Pens.Black, path);
            }
            for (int i = 0; i < tristrip2.NofStrips; i++)
            {
                GpcWrapper.VertexList           vertexList = tristrip2.Strip[i];
                GraphicsPath                    path       = vertexList.TristripToGraphicsPath();
                System.Drawing.Drawing2D.Matrix m          = new System.Drawing.Drawing2D.Matrix();
                m.Translate(600, 250);
                path.Transform(m);
                e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, path);
                e.Graphics.DrawPath(Pens.Black, path);
            }
            PointF[] upperLeftCorner = new PointF[] { new PointF(200, 0), new PointF(200, 250), new PointF(400, 0), new PointF(400, 250) };

            int position = 0;
            int iName    = 0;

            foreach (GpcWrapper.GpcOperation operation in Enum.GetValues(typeof(GpcWrapper.GpcOperation)))
            {
                iName++;
                GpcWrapper.Polygon polygon = polygonA.Clip(operation, polygonB);
                polygon.Save(iName.ToString() + ".plg", true);
                GraphicsPath path = polygon.ToGraphicsPath();
                System.Drawing.Drawing2D.Matrix m = new System.Drawing.Drawing2D.Matrix();
                m.Translate(upperLeftCorner[position].X, upperLeftCorner[position].Y);
                path.Transform(m);
                e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, path);
                e.Graphics.DrawPath(Pens.Black, path);
                position++;
            }
        }
コード例 #5
0
        void panel_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            GraphicsPath p = new GraphicsPath();

            // draw A
            p.AddString("A", fontFamily, 0, 250, new System.Drawing.Point(0, 0), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, p);
            e.Graphics.DrawPath(new System.Drawing.Pen(System.Drawing.Color.Black, 2.0F), p);
            // draw B
            p.AddString("B", fontFamily, 0, 250, new System.Drawing.Point(0, 250), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, p);
            e.Graphics.DrawPath(new System.Drawing.Pen(System.Drawing.Color.Black, 2.0F), p);

            // create polygonA
            p = new GraphicsPath();
            p.AddString("A", fontFamily, 0, 250, new System.Drawing.Point(0, 0), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            GpcWrapper.Polygon polygonA = new GpcWrapper.Polygon(p);

            // create polygonB
            p = new GraphicsPath();
            p.AddString("B", fontFamily, 0, 250, new System.Drawing.Point(0, 0), new StringFormat());
            p.Flatten(new System.Drawing.Drawing2D.Matrix(), flatness);
            GpcWrapper.Polygon polygonB = new GpcWrapper.Polygon(p);

            // Save and Load
            //polygonA.Save("A.plg", true);
            //GpcWrapper.Polygon loadedPolygon = GpcWrapper.Polygon.FromFile("A.plg", true);

            // create Tristrip
            GpcWrapper.Tristrip tristrip = polygonA.ToTristrip();
            for (int i = 0; i < tristrip.NofStrips; i++)
            {
                GpcWrapper.VertexList           vertexList = tristrip.Strip[i];
                GraphicsPath                    path       = vertexList.TristripToGraphicsPath();
                System.Drawing.Drawing2D.Matrix m          = new System.Drawing.Drawing2D.Matrix();
                m.Translate(600, 0);
                path.Transform(m);
                e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, path);
                e.Graphics.DrawPath(Pens.Black, path);
            }

            PointF[] upperLeftCorner = new PointF[] { new PointF(200, 0), new PointF(200, 250), new PointF(400, 0), new PointF(400, 250) };

            int position = 0;

            foreach (GpcWrapper.GpcOperation operation in Enum.GetValues(typeof(GpcWrapper.GpcOperation)))
            {
                GpcWrapper.Polygon polygon        = polygonA.Clip(operation, polygonB);
                GraphicsPath       path           = polygon.ToGraphicsPath();
                System.Drawing.Drawing2D.Matrix m = new System.Drawing.Drawing2D.Matrix();
                m.Translate(upperLeftCorner[position].X, upperLeftCorner[position].Y);
                path.Transform(m);
                e.Graphics.FillPath(System.Drawing.Brushes.DarkGray, path);
                e.Graphics.DrawPath(Pens.Black, path);
                position++;
            }

            GpcWrapper.Polygon p1 = new GpcWrapper.Polygon();

            double[] x = { 0.6596, -2.3288, -2.3288, -2.0418, -2.7998, -2.8296, -2.8381, -2.8381, -1.2275 };
            double[] y = { 9.2627, 2.7955, 2.7955, 3.4165, 3.1377, 3.1593, 3.1236, 3.1236, 9.9151, 0.9210, 0.1850, 1.3099 };

            GpcWrapper.VertexList vl = new GpcWrapper.VertexList(x, y);
            p1.AddContour(vl, false);

            double[] x1 = { -3.1949, -3.5350, -3.2682 };
            double[] y1 = { 0.9210, 0.1850, 1.3099 };

            GpcWrapper.VertexList vl1 = new GpcWrapper.VertexList(x1, y1);
            p1.AddContour(vl1, false);

            GpcWrapper.Polygon p2 = new GpcWrapper.Polygon();

            GpcWrapper.VertexList vl2 = new GpcWrapper.VertexList(new double[] { -3.5600, -3.3829, -4.6015, -2.8381 }, new double[] { 2.8580, 1.9185, 2.4748, 3.1236 });
            p2.AddContour(vl2, false);

            GpcWrapper.VertexList vl3 = new GpcWrapper.VertexList(new double[] { -1.7619, -2.8207, -2.3672, -2.5190, -2.3288, -2.7998, -2.8223, -2.8223, -2.7998 }, new double[] { 2.3837, 1.7308, 2.0105, 2.3837, 2.7955, 3.1377, 3.1294, 3.1294, 3.1377 });
            p2.AddContour(vl3, false);

            var p3 = p1.Clip(GpcWrapper.GpcOperation.Difference, p2);
        }