예제 #1
0
 public Point(double x, double y)
 {
     X        = x;
     Y        = y;
     Quadrant = x == 0 || y == 0 ? CartesianQuadrant.None :
                x > 0 ? y > 0 ? CartesianQuadrant.I : CartesianQuadrant.IV :
                y > 0 ? CartesianQuadrant.II : CartesianQuadrant.III;
 }
        public void GetQuadrant_PassCoordinate_ReturnQuadrant(int x, int y, CartesianQuadrant expectedQuadrant)
        {
            // Arrange
            var coordinateSystem = new CartesianCoordinateSystem();

            // Act
            var quadrant = coordinateSystem.GetQuadrant(x, y);

            // Assert
            quadrant.Should().Be(expectedQuadrant);
        }
예제 #3
0
        private void DrawJobRange(Graphics g, Size s, float zoom)
        {
            //RectangleF frame = new RectangleF(-s.Width / zoom, -s.Height / zoom, s.Width / zoom, s.Height / zoom);

            SizeF wSize = new SizeF(s.Width / zoom, s.Height / zoom);

            //draw cartesian plane
            using (Pen pen = GetPen(ColorScheme.PreviewText))
            {
                pen.ScaleTransform(1 / zoom, 1 / zoom);
                g.DrawLine(pen, -wSize.Width, 0.0f, wSize.Width, 0.0f);
                g.DrawLine(pen, 0, -wSize.Height, 0, wSize.Height);
            }

            //draw job range
            if (mRange.DrawingRange.ValidRange)
            {
                using (Pen pen = GetPen(ColorScheme.PreviewJobRange))
                {
                    pen.DashStyle   = DashStyle.Dash;
                    pen.DashPattern = new float[] { 1.0f / zoom, 2.0f / zoom };                     //pen.DashPattern = new float[] { 1f / zoom, 2f / zoom};
                    pen.ScaleTransform(1.0f / zoom, 1.0f / zoom);

                    g.DrawLine(pen, -wSize.Width, (float)mRange.DrawingRange.Y.Min, wSize.Width, (float)mRange.DrawingRange.Y.Min);
                    g.DrawLine(pen, -wSize.Width, (float)mRange.DrawingRange.Y.Max, wSize.Width, (float)mRange.DrawingRange.Y.Max);
                    g.DrawLine(pen, (float)mRange.DrawingRange.X.Min, -wSize.Height, (float)mRange.DrawingRange.X.Min, wSize.Height);
                    g.DrawLine(pen, (float)mRange.DrawingRange.X.Max, -wSize.Height, (float)mRange.DrawingRange.X.Max, wSize.Height);

                    CartesianQuadrant q = Quadrant;
                    bool right          = q == CartesianQuadrant.I || q == CartesianQuadrant.IV;
                    bool top            = q == CartesianQuadrant.I || q == CartesianQuadrant.II;

                    string format = "0";
                    if (mRange.DrawingRange.Width < 50 && mRange.DrawingRange.Height < 50)
                    {
                        format = "0.0";
                    }

                    DrawString(g, zoom, 0, mRange.DrawingRange.Y.Min, mRange.DrawingRange.Y.Min.ToString(format), false, true, !right, false);
                    DrawString(g, zoom, 0, mRange.DrawingRange.Y.Max, mRange.DrawingRange.Y.Max.ToString(format), false, true, !right, false);
                    DrawString(g, zoom, mRange.DrawingRange.X.Min, 0, mRange.DrawingRange.X.Min.ToString(format), true, false, false, top);
                    DrawString(g, zoom, mRange.DrawingRange.X.Max, 0, mRange.DrawingRange.X.Max.ToString(format), true, false, false, top);
                }
            }
        }
예제 #4
0
        private void ScaleAndPosition(Graphics g, Size s, ProgramRange.XYRange scaleRange, float zoom)
        {
            g.ResetTransform();
            float             margin = 10;
            CartesianQuadrant q      = Quadrant;

            if (q == CartesianQuadrant.Unknown || q == CartesianQuadrant.I)
            {
                //Scale and invert Y
                g.ScaleTransform(zoom, -zoom, MatrixOrder.Append);
                //Translate to position bottom-left
                g.TranslateTransform(margin, s.Height - margin, MatrixOrder.Append);
            }
            else if (q == CartesianQuadrant.II)
            {
                //Scale and invert Y
                g.ScaleTransform(zoom, -zoom, MatrixOrder.Append);
                //Translate to position bottom-left
                g.TranslateTransform(s.Width - margin, s.Height - margin, MatrixOrder.Append);
            }
            else if (q == CartesianQuadrant.III)
            {
                //Scale and invert Y
                g.ScaleTransform(zoom, -zoom, MatrixOrder.Append);
                //Translate to position bottom-left
                g.TranslateTransform(s.Width - margin, margin, MatrixOrder.Append);
            }
            else if (q == CartesianQuadrant.IV)
            {
                //Scale and invert Y
                g.ScaleTransform(zoom, -zoom, MatrixOrder.Append);
                //Translate to position bottom-left
                g.TranslateTransform(margin, margin, MatrixOrder.Append);
            }
            else
            {
                //Translate to center of gravity of the image
                g.TranslateTransform(-scaleRange.Center.X, -scaleRange.Center.Y, MatrixOrder.Append);
                //Scale and invert Y
                g.ScaleTransform(zoom, -zoom, MatrixOrder.Append);
                //Translate to center over the drawing area.
                g.TranslateTransform(s.Width / 2, s.Height / 2, MatrixOrder.Append);
            }
        }
 /// <summary>
 /// Spiral quadrant data constructor
 /// </summary>
 /// <param name="minX">Left most point on a boundary</param>
 /// <param name="minY">Bottom most point on a bounary</param>
 /// <param name="lengthX">Length from minX to extend</param>
 /// <param name="lengthY">Length from minY to extend</param>
 /// <param name="quadrants">Quadrant or quadrants this instance represents</param>
 /// <param name="divisions"></param>
 public SpiralQuadrantData(
     int minX,
     int minY,
     int lengthX,
     int lengthY,
     CartesianQuadrant quadrants,
     IList<SpiralGradientDivision> divisions)
     : base(minX, minY, lengthX, lengthY, quadrants)
 {
     _divisions = new List<SpiralGradientDivision>(divisions);
 }
 /// <summary>
 /// Radial quadrant data constructor
 /// </summary>
 /// <param name="minX">Left most point on a boundary</param>
 /// <param name="minY">Bottom most point on a bounary</param>
 /// <param name="lengthX">Length from minX to extend</param>
 /// <param name="lengthY">Length from minY to extend</param>
 /// <param name="ratioX">x in ratio of x:y</param>
 /// <param name="ratioY">y in ratio of x:y</param>
 /// <param name="quadrants">Quadrant or quadrants this instance represents</param>
 /// <param name="divisions"></param>
 public RadialQuadrantData(
     int minX, 
     int minY, 
     int lengthX, 
     int lengthY, 
     float ratioX, 
     float ratioY, 
     CartesianQuadrant quadrants, 
     IList<RadialGradientDivision> divisions)
     : base(minX, minY, lengthX, lengthY, quadrants)
 {
     RatioX = ratioX;
     RatioY = ratioY;
     _divisions = new List<RadialGradientDivision>(divisions);
 }
예제 #7
0
        private void DrawJobRange(Graphics g, Size s, float zoom)
        {
            //RectangleF frame = new RectangleF(-s.Width / zoom, -s.Height / zoom, s.Width / zoom, s.Height / zoom);

            SizeF wSize = new SizeF(s.Width / zoom, s.Height / zoom);

            //draw cartesian plane
            using (Pen pen = GetPen(ColorScheme.PreviewText))
            {
                pen.ScaleTransform(1 / zoom, 1 / zoom);
                g.DrawLine(pen, -wSize.Width, 0.0f, wSize.Width, 0.0f);
                g.DrawLine(pen, 0, -wSize.Height, 0, wSize.Height);
            }

            //draw job range
            if (mRange.DrawingRange.ValidRange)
            {
                using (Pen pen = GetPen(ColorScheme.PreviewJobRange))
                {
                    pen.DashStyle   = DashStyle.Dash;
                    pen.DashPattern = new float[] { 1.0f / zoom, 2.0f / zoom };                     //pen.DashPattern = new float[] { 1f / zoom, 2f / zoom};
                    pen.ScaleTransform(1.0f / zoom, 1.0f / zoom);

                    g.DrawLine(pen, -wSize.Width, (float)mRange.DrawingRange.Y.Min, wSize.Width, (float)mRange.DrawingRange.Y.Min);
                    g.DrawLine(pen, -wSize.Width, (float)mRange.DrawingRange.Y.Max, wSize.Width, (float)mRange.DrawingRange.Y.Max);
                    g.DrawLine(pen, (float)mRange.DrawingRange.X.Min, -wSize.Height, (float)mRange.DrawingRange.X.Min, wSize.Height);
                    g.DrawLine(pen, (float)mRange.DrawingRange.X.Max, -wSize.Height, (float)mRange.DrawingRange.X.Max, wSize.Height);

                    CartesianQuadrant q = Quadrant;
                    bool right          = q == CartesianQuadrant.I || q == CartesianQuadrant.IV;
                    bool top            = q == CartesianQuadrant.I || q == CartesianQuadrant.II;

                    string format = "0";
                    if (mRange.DrawingRange.Width < 50 && mRange.DrawingRange.Height < 50)
                    {
                        format = "0.0";
                    }

                    DrawString(g, zoom, 0, mRange.DrawingRange.Y.Min, mRange.DrawingRange.Y.Min.ToString(format), false, true, !right, false, ColorScheme.PreviewText);
                    DrawString(g, zoom, 0, mRange.DrawingRange.Y.Max, mRange.DrawingRange.Y.Max.ToString(format), false, true, !right, false, ColorScheme.PreviewText);
                    DrawString(g, zoom, mRange.DrawingRange.X.Min, 0, mRange.DrawingRange.X.Min.ToString(format), true, false, false, top, ColorScheme.PreviewText);
                    DrawString(g, zoom, mRange.DrawingRange.X.Max, 0, mRange.DrawingRange.X.Max.ToString(format), true, false, false, top, ColorScheme.PreviewText);
                }

                using (Pen pen = GetPen(ColorScheme.PreviewRuler))
                {
                    //pen.DashStyle = DashStyle.Dash;
                    //pen.DashPattern = new float[] { 1.0f / zoom, 2.0f / zoom }; //pen.DashPattern = new float[] { 1f / zoom, 2f / zoom};
                    pen.ScaleTransform(1.0f / zoom, 1.0f / zoom);
                    CartesianQuadrant q = Quadrant;
                    bool right          = q == CartesianQuadrant.I || q == CartesianQuadrant.IV;          //l'oggetto si trova a destra
                    bool top            = q == CartesianQuadrant.I || q == CartesianQuadrant.II;          //l'oggetto si trova in alto

                    string format = "0";
                    if (mRange.DrawingRange.Width < 50 && mRange.DrawingRange.Height < 50)
                    {
                        format = "0.0";
                    }

                    //scala orizzontale
                    Tools.RulerStepCalculator hscale = new Tools.RulerStepCalculator(-wSize.Width, wSize.Width, (int)(2 * s.Width / 100));

                    double h1 = (top ? -4.0 : 4.0) / zoom;
                    double h2 = 1.8 * h1;
                    double h3 = (top ? 1.0 : -1.0) / zoom;

                    for (float d = (float)hscale.FirstSmall; d < wSize.Width; d += (float)hscale.SmallStep)
                    {
                        g.DrawLine(pen, d, 0, d, (float)h1);
                    }

                    for (float d = (float)hscale.FirstBig; d < wSize.Width; d += (float)hscale.BigStep)
                    {
                        g.DrawLine(pen, d, 0, d, (float)h2);
                    }

                    for (float d = (float)hscale.FirstBig; d < wSize.Width; d += (float)hscale.BigStep)
                    {
                        DrawString(g, zoom, (decimal)d, (decimal)h3, d.ToString(format), false, false, !right, !top, ColorScheme.PreviewRuler);
                    }

                    //scala verticale

                    Tools.RulerStepCalculator vscale = new Tools.RulerStepCalculator(-wSize.Height, wSize.Height, (int)(2 * s.Height / 100));
                    double v1 = (right ? -4.0 : 4.0) / zoom;
                    double v2 = 1.8 * v1;
                    double v3 = (right ? 2.5 : 0) / zoom;

                    for (float d = (float)vscale.FirstSmall; d < wSize.Height; d += (float)vscale.SmallStep)
                    {
                        g.DrawLine(pen, 0, d, (float)v1, d);
                    }

                    for (float d = (float)vscale.FirstBig; d < wSize.Height; d += (float)vscale.BigStep)
                    {
                        g.DrawLine(pen, 0, d, (float)v2, d);
                    }

                    for (float d = (float)vscale.FirstBig; d < wSize.Height; d += (float)vscale.BigStep)
                    {
                        DrawString(g, zoom, (decimal)v3, (decimal)d, d.ToString(format), false, false, right, !top, ColorScheme.PreviewRuler, -90);
                    }
                }
            }
        }
예제 #8
0
 /// <summary>
 /// Quadrant data constructor
 /// </summary>
 /// <param name="minX">Left most point on a boundary</param>
 /// <param name="minY">Bottom most point on a bounary</param>
 /// <param name="lengthX">Length from minX to extend</param>
 /// <param name="lengthY">Length from minY to extend</param>
 /// <param name="quadrants">What quadrants will be represented by this instance</param>
 protected QuadrantData(int minX, int minY, int lengthX, int lengthY, CartesianQuadrant quadrants)
 {
     Bounds = new Rect(minX, minY, lengthX, lengthY);
     Quadrants = quadrants;
 }