예제 #1
0
        private void DrawGraph(Graphics g, Pen p, DataBlock db, int channel)
        {
            float yy = 0;
             float xx = 0;
             int i = 0;
             int i0 = (int)Math.Floor( lerp(0, db.GetChannelLength(), 0, db.GetTotalTime(), MinXD) );
             int i1 = (int)Math.Ceiling( lerp(0, db.GetChannelLength(), 0, db.GetTotalTime(), MaxXD) )+1;
             if (i1 > db.GetChannelLength())
             {
            i1 = db.GetChannelLength();
             }

             if (db.m_Annotations != null)
             {
             for (int an = 0; an < db.m_Annotations.Length; an++)
             {
                 float time = db.GetTime(db.m_Annotations[an]);
                 float x = ValueXToRect(time);
                 g.DrawLine(Pens.Green, x, 0, x, ValueYToRect(5));
             }
             }

             try
             {
            for (i = i0; i < i1; i++)
            {
               int rawvolt = db.GetVoltage(channel, i);

               float time = db.GetTime(i);

               float x = ValueXToRect(time);
               float y = ValueYToRect(rawvolt);

               if (i > 0)
               {
                  g.DrawLine(p, xx, yy, x, y);

                  if (showValueTicks)
                  {
                     g.DrawLine(p, x, y-2, x, y+2);
                     g.DrawLine(p, x - 2, y, x + 2, y);
                  }

               }

               yy = y;
               xx = x;
            }
             }
             catch
             {
            #if DEBUG
            Console.WriteLine("{0} {1} {2}", db, m_Bounds, i);
            #endif
             }

             //Cursor.Hide();
             if (m_mouse != null)
             {
            DrawCross(g, Pens.Blue, m_mouse.X, m_mouse.Y);
             }

             {
            float t = (db.m_triggerPos * db.GetTotalTime()) / (float)db.GetChannelLength();
            float x = ValueXToRect(t);
            g.DrawLine(Pens.Green, x, m_Bounds.Y, x, m_Bounds.Y + m_Bounds.Height);
             }

             Point pp = new Point();
             pp.X = 0;
             pp.Y = 32;

            if (m_mouse != null)
            {
            float time = RectToValueX(m_mouse.X);
            float voltage = RectToValueY(m_mouse.Y);

            float voltageI = (voltage > 255 ? 255 : (voltage < 0 ? 0 : (int)voltage));
            float voltageV = voltageI * 5 / 255;

            string info = string.Format("{0} ({1}, {2}/255, {3:0.###}v)", db.m_sample, ToEngineeringNotation(time), (int)voltageI, voltageV);
            g.DrawString(info, parent.Font, Brushes.White, pp);
            pp.Y += 16;

            info = string.Format("({0}s/div, {1}Ks/s)", ToEngineeringNotation(DivX), db.m_sampleRate / 1000);
            g.DrawString(info, parent.Font, Brushes.White, pp);
            pp.Y += 16;
            }

             if (Selected())
             {
            if ((m_selectT0 < db.GetTotalTime()) && (m_selectT1 < db.GetTotalTime()))
            {
               g.DrawString(string.Format("({0}, {1}) - ({2}, {3})", ToEngineeringNotation(m_selectT0), db.GetVoltage(0, m_selectT0), ToEngineeringNotation(m_selectT1), db.GetVoltage(0, m_selectT1)), parent.Font, Brushes.White, pp);
               pp.Y += 16;

               g.DrawString(string.Format("ΔVoltage = {0}", db.GetVoltage(0, m_selectT1) - db.GetVoltage(0, m_selectT0)), parent.Font, Brushes.White, pp);
               pp.Y += 16;
            }

            string time = string.Format("ΔTime = {0}", ToEngineeringNotation(m_selectT1 - m_selectT0));
            if (m_selectT1 - m_selectT0 > 0)
            {
               time += string.Format(", {0} Hz", (int)(1.0f / (m_selectT1 - m_selectT0)));
            }
            g.DrawString(time, parent.Font, Brushes.White, pp);
            pp.Y += 16;
             }
        }