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); }
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); } } }
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); }
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); } } } }
/// <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; }