Index: src/Deltares.DSoilModel.Forms/DrawingCPT.cs =================================================================== diff -u -r590 -r606 --- src/Deltares.DSoilModel.Forms/DrawingCPT.cs (.../DrawingCPT.cs) (revision 590) +++ src/Deltares.DSoilModel.Forms/DrawingCPT.cs (.../DrawingCPT.cs) (revision 606) @@ -282,8 +282,10 @@ var lightGray = Color.FromArgb(128, 245, 245, 245); var darkGray = Color.FromArgb(128, 230, 230, 230); - var darkerGray = Color.FromArgb(128, 211, 211, 211); - + var qcColor = Color.DarkRed; + var frictionColor = Color.Black; + var waterColor = Color.Blue; + var topLeft = info.Projection.ConvertToScreen(new Point2D(Left, Top)); var bottomRight = info.Projection.ConvertToScreen(new Point2D(Right, Bottom)); var clipRect = new Rectangle(topLeft.X - 1, topLeft.Y, bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y); @@ -301,72 +303,22 @@ info.Graphics.SetClip(clipRect); // axes for qc = 1, 2, 3, etc - if (qcMax > 0) + if (qcMax > 0 && ShowAxes) { - // find a nice interval - double interval = qcMax/3.0; - double exponent = (int) Math.Floor(Math.Log10(interval)); - double mantissa = interval/Math.Pow(10, exponent); - mantissa = (mantissa > 5.0) ? 5.0 : (mantissa > 2.0) ? 2.0 : 1.0; - interval = Math.Floor(mantissa)*Math.Pow(10, exponent); - interval = Math.Max(1, interval); - using (var font = new Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Pixel)) - { - var stringFormat = new StringFormat(); - stringFormat.Alignment = StringAlignment.Far; - var grayPen = new Pen(darkerGray); - var redBrush = new SolidBrush(Color.DarkRed); - var scaleStep = Math.Max(Math.Round(qcMax/10), 1); - for (int su = 0; su < qcMax; su += (int) interval) - { - var xp = Left + su*width/qcMax; - var p1 = info.Projection.ConvertToScreen(new Point2D(xp, Top)); - var p2 = info.Projection.ConvertToScreen(new Point2D(xp, Bottom)); - if (su < qcMax) - { - info.Graphics.DrawLine(grayPen, p1, p2); - } - stringFormat.LineAlignment = StringAlignment.Near; - info.Graphics.DrawString(su.ToString(), font, redBrush, p1, stringFormat); - stringFormat.LineAlignment = StringAlignment.Far; - info.Graphics.DrawString(su.ToString(), font, redBrush, p2, stringFormat); - } - } + plotAxis(waterPressureMax, info, waterColor, 1); + plotAxis(frictionMax, info, frictionColor, 2); + plotAxis(qcMax, info, qcColor, 7); } - //// axes for qc = 10, 20 - //if (ShowAxes) - //{ - // using (var font = new Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Pixel)) - // { - // var stringFormat = new StringFormat(); - // stringFormat.Alignment = StringAlignment.Far; - // var grayPen = new Pen(darkerGray); - // var redBrush = new SolidBrush(Color.DarkRed); - - // for (double qc = 10; qc <= qcMax; qc += 10) - // { - // var xp = (float)(this.Left + qc * width / qcMax); - // var p1 = info.Projection.ConvertToScreen(new PointF(xp, (float)Top)); - // var p2 = info.Projection.ConvertToScreen(new PointF(xp, (float)Bottom)); - // if (qc < qcMax) info.Graphics.DrawLine(grayPen, p1, p2); - // stringFormat.LineAlignment = StringAlignment.Near; - // info.Graphics.DrawString(qc.ToString(), font, redBrush, p1, stringFormat); - // stringFormat.LineAlignment = StringAlignment.Far; - // info.Graphics.DrawString(qc.ToString(), font, redBrush, p2, stringFormat); - // } - // } - //} - - // friction is black + // plot friction var points = new List(); if (frictionPoints.Count > 0) { foreach (var point in frictionPoints) { points.Add(info.Projection.ConvertToScreen(new Point2D(Left + point.X*width/frictionMax, point.Z + zLocal))); } - info.Graphics.DrawLines(new Pen(Color.Black), points.ToArray()); + info.Graphics.DrawLines(new Pen(frictionColor), points.ToArray()); } // qc is red @@ -377,7 +329,7 @@ { points.Add(info.Projection.ConvertToScreen(new Point2D(Left + point.X*width/qcMax, point.Z + zLocal))); } - info.Graphics.DrawLines(new Pen(Color.DarkRed), points.ToArray()); + info.Graphics.DrawLines(new Pen(qcColor), points.ToArray()); } // water pressure is blue @@ -388,7 +340,7 @@ { points.Add(info.Projection.ConvertToScreen(new Point2D(Left + point.X*width/waterPressureMax, point.Z + zLocal))); } - info.Graphics.DrawLines(new Pen(Color.Blue), points.ToArray()); + info.Graphics.DrawLines(new Pen(waterColor), points.ToArray()); } info.Graphics.ResetClip(); } @@ -398,6 +350,44 @@ } } + private void plotAxis(double rangeMax, GraphicsInfo info, Color color, int options) + { + // find a nice interval + double interval = rangeMax / 3.0; + double exponent = (int) Math.Floor(Math.Log10(interval)); + double mantissa = interval/Math.Pow(10, exponent); + mantissa = (mantissa > 5.0) ? 5.0 : (mantissa > 2.0) ? 2.0 : 1.0; + interval = Math.Floor(mantissa)*Math.Pow(10, exponent); + interval = Math.Max(0.1, interval); + using (var font = new Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Pixel)) + { + var stringFormat = new StringFormat(); + stringFormat.Alignment = StringAlignment.Far; + var grayPen = new Pen(Color.FromArgb(128, 211, 211, 211)); + var colorBrush = new SolidBrush(color); + for (double su = 0; su < rangeMax; su += interval) + { + var xp = Left + su * width / rangeMax; + var p1 = info.Projection.ConvertToScreen(new Point2D(xp, Top)); + var p2 = info.Projection.ConvertToScreen(new Point2D(xp, Bottom)); + if (su < rangeMax && ((options & 4) != 0)) + { + info.Graphics.DrawLine(grayPen, p1, p2); + } + if ((options & 1) != 0) + { + stringFormat.LineAlignment = StringAlignment.Near; + info.Graphics.DrawString(su.ToString(), font, colorBrush, p1, stringFormat); + } + if ((options & 2) != 0) + { + stringFormat.LineAlignment = StringAlignment.Far; + info.Graphics.DrawString(su.ToString(), font, colorBrush, p2, stringFormat); + } + } + } + + } /// /// Draws the label. ///