private void RecalculateTimeScale() { //Lets do the calculation for all of the possible time scales and see which one fits bets if(_bAutomaticTimeScale) { int iSize = (this.Orientation == enumOrientation.orHorizontal) ? Width : Height; int iOptimumScale = iSize/10; double dblZoomFactor = CalculateZoomFactor(iSize, enumTimeScale.MilliSeconds); int iMilliScale = DefaultScale(dblZoomFactor) / DefaultMajorInterval(); int iMilliDiff = Math.Abs(iOptimumScale - iMilliScale); dblZoomFactor = CalculateZoomFactor(iSize, enumTimeScale.Seconds); int iSecScale = DefaultScale(dblZoomFactor) / DefaultMajorInterval(); int iSecDiff = Math.Abs(iOptimumScale - iSecScale); dblZoomFactor = CalculateZoomFactor(iSize, enumTimeScale.Minutes); int iMinScale = DefaultScale(dblZoomFactor) / DefaultMajorInterval(); int iMinDiff = Math.Abs(iOptimumScale - iMinScale); dblZoomFactor = CalculateZoomFactor(iSize, enumTimeScale.Hours); int iHourScale = DefaultScale(dblZoomFactor) / DefaultMajorInterval(); int iHourDiff = Math.Abs(iOptimumScale - iHourScale); if( (iSecDiff < iMilliDiff) && (iSecDiff < iMinDiff) && (iSecDiff < iHourDiff) ) _TimeScale = enumTimeScale.Seconds; else if( (iMinDiff < iMilliDiff) && (iMinDiff < iSecDiff) && (iMinDiff < iHourDiff) ) _TimeScale = enumTimeScale.Minutes; else if( (iHourDiff < iMilliDiff) && (iHourDiff < iSecDiff) && (iHourDiff < iMinDiff) ) _TimeScale = enumTimeScale.Hours; else _TimeScale = enumTimeScale.MilliSeconds; RecalculateZoom(); RecalculateDivisions(); } }
private string GetTimeScaleAbbreviation(enumTimeScale timeScale) { string strText=""; switch(timeScale) { case enumTimeScale.MilliSeconds: strText = "(ms)"; break; case enumTimeScale.Seconds: strText = "(s)"; break; case enumTimeScale.Minutes: strText = "(m)"; break; case enumTimeScale.Hours: strText = "(h)"; break; } return strText; }
private double CalculateZoomFactor(int iSize, enumTimeScale timeScale) { double dblZoomFactor = ((float) iSize / (float) ((float) (_lEndMillisecond - _lStartMillisecond)/GetMillisecondScale(timeScale))); if(dblZoomFactor > 10000) dblZoomFactor = 10000; if(dblZoomFactor < 0.00001) dblZoomFactor = 0.00001; return dblZoomFactor; }
private int GetMillisecondScale(enumTimeScale timeScale) { int iScale = 1; switch(timeScale) { case enumTimeScale.MilliSeconds: iScale = 1; break; case enumTimeScale.Seconds: iScale = 1000; break; case enumTimeScale.Minutes: iScale = 60000; break; case enumTimeScale.Hours: iScale = 3600000; break; } return iScale; }