Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 public float GetDurationAsX()
 {
     return(FTransformer.TransformPoint(new PointF((float)FEnd, 0)).X - GetTimeAsX());
 }