예제 #1
0
        public override void ApplyTransformation(System.Drawing.Drawing2D.Matrix transform)
        {
            transform.Reset();
            if (leftX != rightX)
            {
                if (left2Right)
                {
                    curX += CHANGE_VALUES;
                    if (curX >= rightX)
                    {
                        curX       = rightX;
                        left2Right = false;
                        repeatCount++;
                    }
                }
                else
                {
                    curX -= CHANGE_VALUES;
                    if (curX <= leftX)
                    {
                        curX       = leftX;
                        left2Right = true;
                    }
                }
            }

            transform.Shear(curX, 0);
            offset = pivotY * curX;
            transform.Translate(-offset, 0);
        }
예제 #2
0
        public void loadImage()
        {
            Font fnt = new Font("Consolas", 22, FontStyle.Regular);
            Size s   = TextRenderer.MeasureText(rtb_Text.Text, fnt);

            Bitmap bmp = new Bitmap(s.Width + 100, s.Height + 100);

            System.Drawing.Drawing2D.Matrix matr = new System.Drawing.Drawing2D.Matrix();
            matr.Shear(-0.5f, 0.3f);

            string str = matr.Elements[0].ToString().PadLeft(4, ' ') + " - " + matr.Elements[1] + "\r\n" + matr.Elements[2].ToString().PadLeft(4, ' ') + " - " + matr.Elements[3] + "\r\n" + matr.Elements[4].ToString().PadLeft(4, ' ') + " - " + matr.Elements[5];


            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.Transform = matr;
                g.DrawString(rtb_Text.Text, fnt, Brushes.Yellow, new Point(bmp.Width / 2, 50), new StringFormat()
                {
                    Alignment = StringAlignment.Center
                });
            }

            label1.Text = str;

            panel1.BackgroundImage = bmp;
        }
예제 #3
0
 /// <summary> Shears the current transformation matrix by the given
 /// amount.
 ///
 /// </summary>
 /// <param name="x">x coordinate of the shear factor
 /// </param>
 /// <param name="y">y coordinate of the shear factor
 /// </param>
 public virtual void shear(double x, double y)
 {
     System.Drawing.Drawing2D.Matrix temp_Matrix;
     temp_Matrix = new System.Drawing.Drawing2D.Matrix();
     temp_Matrix.Shear((float)x, (float)y);
     transform(temp_Matrix);
 }
예제 #4
0
            public void TestAffineTransform2D()
            {
                //Setup some affine transformation
                System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix();
                matrix.RotateAt(30, new System.Drawing.PointF(0, 0));
                matrix.Translate(-20, -20, System.Drawing.Drawing2D.MatrixOrder.Append);
                matrix.Shear(0.95f, -0.2f, System.Drawing.Drawing2D.MatrixOrder.Append);

                //Create some random sample data
                CreatingData cd = new CreatingData();
                SharpMap.Data.FeatureDataTable fdt1 =
                cd.CreatePointFeatureDataTableFromArrays(GetRandomOrdinates(80, -180, 180),
                                                         GetRandomOrdinates(80, -90, 90), null);

                //Clone random sample data and apply affine transformation on it
                SharpMap.Data.FeatureDataTable fdt2 = TransformedFeatureDataTable(matrix, fdt1);

                //Get affine transformation with LeastSquaresTransform
                SharpMap.Utilities.LeastSquaresTransform lst = new SharpMap.Utilities.LeastSquaresTransform();

                //Add at least three corresponding points
                lst.AddInputOutputPoint(
                ((SharpMap.Data.FeatureDataRow)fdt1.Rows[0]).Geometry as SharpMap.Geometries.Point,
                ((SharpMap.Data.FeatureDataRow)fdt2.Rows[0]).Geometry as SharpMap.Geometries.Point);

                lst.AddInputOutputPoint(
                ((SharpMap.Data.FeatureDataRow)fdt1.Rows[39]).Geometry as SharpMap.Geometries.Point,
                ((SharpMap.Data.FeatureDataRow)fdt2.Rows[39]).Geometry as SharpMap.Geometries.Point);

                lst.AddInputOutputPoint(
                ((SharpMap.Data.FeatureDataRow)fdt1.Rows[79]).Geometry as SharpMap.Geometries.Point,
                ((SharpMap.Data.FeatureDataRow)fdt2.Rows[79]).Geometry as SharpMap.Geometries.Point);

                /*
                //Get affine transformation calculates mean points to improve accuaracy
                //Unfortunately the result is not very good, so, since I know better I manually set these
                //mean points.
                lst.SetMeanPoints(new SharpMap.Geometries.Point(0, 0),
                              new SharpMap.Geometries.Point(matrix.OffsetX, matrix.OffsetY));
                 */

                //Create Affine
                AffineCoordinateTransformation2D at2 = new AffineCoordinateTransformation2D(lst.GetAffineTransformation());

                //Create Map
                SharpMap.Map map = new SharpMap.Map(new System.Drawing.Size(720, 360));

                //Add not transformed layer
                map.Layers.Add(new SharpMap.Layers.VectorLayer("L1",
                                                           new SharpMap.Data.Providers.GeometryFeatureProvider(fdt1)));
                ((SharpMap.Layers.VectorLayer) map.Layers[0]).Style.Symbol =
                new System.Drawing.Bitmap(@"..\..\..\DemoWinForm\Resources\flag.png");

                //Add transformed layer
                map.Layers.Add(new SharpMap.Layers.VectorLayer("L2",
                                                           new SharpMap.Data.Providers.GeometryFeatureProvider(fdt2)));
                ((SharpMap.Layers.VectorLayer) map.Layers[1]).Style.Symbol =
                new System.Drawing.Bitmap(@"..\..\..\DemoWinForm\Resources\women.png");

                //Render map
                map.ZoomToExtents();

                //Get map and save to file
                var bmp = (System.Drawing.Bitmap)map.GetMap();
                bmp.Save("affinetransform1.bmp");

                //we want to reverse the previously applied transformation.
                ((SharpMap.Layers.VectorLayer) map.Layers[1]).CoordinateTransformation = (AffineCoordinateTransformation2D)at2.Inverse();

                //Render map
                map.ZoomToExtents();

                //Get map and save to file
                bmp = (System.Drawing.Bitmap)map.GetMap();
                bmp.Save("affinetransform2.bmp");
                //Hopefully women cover flags ;-).
            }
예제 #5
0
        public void TestAffineTransform2D()
        {
            //Setup some affine transformation
            System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix();
            matrix.RotateAt(30, new System.Drawing.PointF(0, 0));
            matrix.Translate(-20, -20, System.Drawing.Drawing2D.MatrixOrder.Append);
            matrix.Shear(0.95f, -0.2f, System.Drawing.Drawing2D.MatrixOrder.Append);
            
            //Create some random sample data
            SharpMap.Data.FeatureDataTable fdt1 =
                CreatingData.CreatePointFeatureDataTableFromArrays(GetRandomOrdinates(80, -180, 180),
                                                                   GetRandomOrdinates(80, -90, 90), null);

            //Clone random sample data and apply affine transformation on it
            SharpMap.Data.FeatureDataTable fdt2 = TransformedFeatureDataTable(matrix, fdt1);

            //Get affine transformation with LeastSquaresTransform
            SharpMap.Utilities.LeastSquaresTransform lst = new SharpMap.Utilities.LeastSquaresTransform();

            //Add at least three corresponding points
            lst.AddInputOutputPoint(
                ((SharpMap.Data.FeatureDataRow)fdt1.Rows[0]).Geometry.Coordinate,
                ((SharpMap.Data.FeatureDataRow)fdt2.Rows[0]).Geometry.Coordinate);

            lst.AddInputOutputPoint(
                ((SharpMap.Data.FeatureDataRow)fdt1.Rows[39]).Geometry.Coordinate,
                ((SharpMap.Data.FeatureDataRow)fdt2.Rows[39]).Geometry.Coordinate);

            lst.AddInputOutputPoint(
                ((SharpMap.Data.FeatureDataRow)fdt1.Rows[79]).Geometry.Coordinate,
                ((SharpMap.Data.FeatureDataRow)fdt2.Rows[79]).Geometry.Coordinate);

            /*
            //Get affine transformation calculates mean points to improve accuaracy
            //Unfortunately the result is not very good, so, since I know better I manually set these
            //mean points.
            lst.SetMeanPoints(new GeoAPI.Geometries.IPoint(0, 0), 
                              new GeoAPI.Geometries.IPoint(matrix.OffsetX, matrix.OffsetY));
             */

            //Create Affine
            AffineCoordinateTransformation2D at2 = new AffineCoordinateTransformation2D(lst.GetAffineTransformation());

            //Create Map
            SharpMap.Map map = new SharpMap.Map(new System.Drawing.Size(720, 360));

            //Add not transformed layer
            map.Layers.Add(new SharpMap.Layers.VectorLayer("L1",
                                                           new SharpMap.Data.Providers.GeometryFeatureProvider(fdt1)));
            ((SharpMap.Layers.VectorLayer) map.Layers[0]).Style.Symbol =
                new System.Drawing.Bitmap(@"..\..\..\DemoWinForm\Resources\flag.png");

            //Add transformed layer
            map.Layers.Add(new SharpMap.Layers.VectorLayer("L2",
                                                           new SharpMap.Data.Providers.GeometryFeatureProvider(fdt2)));
            ((SharpMap.Layers.VectorLayer) map.Layers[1]).Style.Symbol =
                new System.Drawing.Bitmap(@"..\..\..\DemoWinForm\Resources\women.png");

            //Render map
            map.ZoomToExtents();

            //Get map and save to file
            var bmp = (System.Drawing.Bitmap)map.GetMap();
            bmp.Save("affinetransform1.bmp");

            //we want to reverse the previously applied transformation.
            ((SharpMap.Layers.VectorLayer) map.Layers[1]).CoordinateTransformation = (AffineCoordinateTransformation2D)at2.Inverse();

            //Render map
            map.ZoomToExtents();

            //Get map and save to file
            bmp = (System.Drawing.Bitmap)map.GetMap();
            bmp.Save("affinetransform2.bmp");
            //Hopefully women cover flags ;-).

        }
예제 #6
0
 public void shear(float x, float y)
 {
     System.Drawing.Drawing2D.Matrix mx = new System.Drawing.Drawing2D.Matrix();
     mx.Shear(x, y);
     dg.MultiplyTransform(mx);
 }
예제 #7
0
 public void SetSkew(float skewX, float skewY)
 {
     _matrix.Shear(skewX, skewY);
 }