/// <summary> /// Function: FindTickMarks() /// Author: Don England /// Last Modified: 19-Feb-2013 /// Purpose: This function is meant to find the tickType used /// for generating tickMarkInterval which combine to produce /// a tickOffset for computing visible tick marks /// Usage: Call when ever the visible range has been modified /// </summary> void FindTickMarks() { // Find the Current Visible Range visibleRange = visibleTimeEnd - visibleTimeStart; double typeRange = visibleRange.TotalDays; if (typeRange > (365.25 * numberOfTickMarks)) { //use years myTickType = tickType.years; for (int k = 0; k < (totalRange.Days / 365.25); k++) { if (typeRange / (365.25 * k) <= numberOfTickMarks) { totalTimeStart.AddYears(1); } } } else if (typeRange > (30.5 * numberOfTickMarks)) { //use months myTickType = tickType.months; } else if (typeRange > numberOfTickMarks) { //use days myTickType = tickType.days; } else { typeRange = visibleRange.TotalMinutes; if (typeRange > (60 * numberOfTickMarks)) { //use hours myTickType = tickType.hours; } else if (typeRange > numberOfTickMarks) { //use minutes myTickType = tickType.minutes; } else { //use seconds myTickType = tickType.seconds; } } FindTickMarkInterval(); }
private void drawTick(int pos, tickType _tickType) { int wd = this.Size.Width; int ht = this.Size.Height; //Rulers: // horizontal: ruler1 = top, ruler2 = bottom // vertical: ruler1 = right, ruler2 = left int lineLenght = 0; Font ft = new Font("Arial", 20, GraphicsUnit.Pixel); switch (_tickType) { case tickType.century: lineLenght = 15; ft = new Font("Arial", 20, GraphicsUnit.Pixel); break; case tickType.quint: lineLenght = 12; ft = new Font("Arial", 12, GraphicsUnit.Pixel); break; case tickType.decade: lineLenght = 5; ft = new Font("Arial", 8, GraphicsUnit.Pixel); break; default: lineLenght = 3; break; } Graphics g = this.CreateGraphics(); Rectangle ruler1 = new Rectangle(); Rectangle ruler2 = new Rectangle(); Point textPoint1 = new Point(); Point textPoint2 = new Point(); int adjPost = pos; if (adjPost > 100 && adjPost % 100 != 0) { adjPost -= (adjPost - (adjPost % 100)); } SizeF stringSize = g.MeasureString(adjPost.ToString("#"), ft); if (IAmVertical) { ruler1 = new Rectangle(wd - lineLenght, pos, lineLenght, 0); ruler2 = new Rectangle(0, pos, lineLenght, 0); textPoint1 = new Point((int)(wd - lineLenght - stringSize.Width - 2), (int)Math.Floor(pos - (stringSize.Height / 2))); textPoint2 = new Point((int)(lineLenght + 2), (int)Math.Floor(pos - (stringSize.Height / 2))); } else { ruler1 = new Rectangle(pos, 0, 0, lineLenght); ruler2 = new Rectangle(pos, ht - lineLenght, 0, lineLenght); textPoint1 = new Point((int)Math.Floor(pos - (stringSize.Width / 2)), (int)(lineLenght + 2)); textPoint2 = new Point((int)Math.Floor(pos - (stringSize.Width / 2)), (int)(ht - lineLenght - 2 - stringSize.Height)); } Pen pen = new Pen(Color.Black); SolidBrush drawBrush = new SolidBrush(Color.Black); g.DrawLine(pen, ruler1.X, ruler1.Y, ruler1.X + ruler1.Width, ruler1.Y + ruler1.Height); g.DrawLine(pen, ruler2.X, ruler2.Y, ruler2.X + ruler2.Width, ruler2.Y + ruler2.Height); if (_tickType != tickType.fifth) { g.DrawString(adjPost.ToString("#"), ft, drawBrush, textPoint1); g.DrawString(adjPost.ToString("#"), ft, drawBrush, textPoint2); } g.Dispose(); }
/// <summary> /// Function: FindTickMarks() /// Author: Don England /// Last Modified: 19-Feb-2013 /// Purpose: This function is meant to find the tickType used /// for generating tickMarkInterval which combine to produce /// a tickOffset for computing visible tick marks /// Usage: Call when ever the visible range has been modified /// </summary> void FindTickMarks() { // Find the Current Visible Range visibleRange = visibleTimeEnd - visibleTimeStart; double typeRange = visibleRange.TotalDays; if( typeRange > (365.25*numberOfTickMarks)){ //use years myTickType = tickType.years; for( int k = 0; k < (totalRange.Days/365.25); k++){ if(typeRange/(365.25*k) <= numberOfTickMarks) totalTimeStart.AddYears(1); } }else if( typeRange > (30.5*numberOfTickMarks)){ //use months myTickType = tickType.months; }else if( typeRange > numberOfTickMarks){ //use days myTickType = tickType.days; }else{ typeRange = visibleRange.TotalMinutes; if( typeRange > (60 * numberOfTickMarks)){ //use hours myTickType = tickType.hours; }else if( typeRange > numberOfTickMarks){ //use minutes myTickType = tickType.minutes; } else{ //use seconds myTickType = tickType.seconds; } } FindTickMarkInterval(); }