public override void DrawSlices(Graphics g, double From, double To) { RectangleF r = g.ClipBounds; if (r.Width == 0 || r.Height == 0) { return; } PointF[] stp = new PointF[2]; stp[0].X = 0; stp[1].X = -r.Width; FTransformer.GTransformation.TransformPoints(stp); FStart = -stp[0].X / FTransformer.GTimeScale; FEnd = -stp[1].X / FTransformer.GTimeScale; int visibleSeconds = (int)(r.Width / FTransformer.GTimeScale); int firstSecond = (int)Math.Ceiling(-FStart); double startOffset = -(firstSecond + FStart) * FTransformer.GTimeScale; //pixel per second: pps float pps = r.Width / visibleSeconds; Pen pen = new Pen(Color.Gray); float s; int m, ss; string tt; int pixPerBar = 60; double visibleTime = r.Width / FTransformer.GTimeScale; int secPerBar = Math.Max(1, (int)(visibleTime / (r.Width / pixPerBar))); int maxBars = (int)r.Width / pixPerBar; float x; Font f = new Font("Verdana", 7); SolidBrush sb = new SolidBrush(Color.Gray); int t = 0; do { x = (float)(startOffset + t * secPerBar * FTransformer.GTimeScale); g.DrawLine(pen, x, 0, x, r.Height); s = -firstSecond + t * secPerBar; m = (int)s / 60; ss = (int)(s % 60); tt = m.ToString() + ":" + ss.ToString("d2"); g.DrawString(tt, f, sb, x, 5); t++; }while (x < r.Width); t = 0; do { x = (float)(startOffset + t * secPerBar / 10.0 * FTransformer.GTimeScale); g.DrawLine(pen, x, r.Height, x, r.Height - r.Height / 6); t++; }while (x < r.Width); //draw time triangles float time; for (int i = 0; i < FTimer.TimeCount; i++) { time = FTransformer.TransformPoint(new PointF((float)FTimer.GetTime(i), 0)).X; g.DrawLine(new Pen(Color.Black), time, 0, time, Height); PointF[] tri = new PointF[3]; tri[0] = new PointF(time, 7); tri[1] = new PointF(time - 4, 0); tri[2] = new PointF(time + 4, 0); g.FillPolygon(new SolidBrush(Color.Black), tri); } }
public float GetDurationAsX() { return(FTransformer.TransformPoint(new PointF((float)FEnd, 0)).X - GetTimeAsX()); }