Exemplo n.º 1
0
        public void AutoScaleHorizontal()
        {
            PointD min = PointD.Empty;
            PointD max = PointD.Empty;

            foreach (Trace t in DataSource.Traces)
            {
                min.KeepMinimum(t.Minimum);
                max.KeepMaximum(t.Maximum);
            }

            double distance = max.X - min.X;

            if (distance == 0)
            {
                Settings.HorScale  = 1;
                Settings.HorOffset = -min.X;
                return;
            }

            double div        = distance / ((double)Settings.HorizontalDivisions);
            double multiplier = 1f;

            while (div > 10)
            {
                multiplier *= 10;
                div        /= 10;
            }

            while (div < 0.5)
            {
                multiplier /= 10;
                div        *= 10;
            }


            if (div <= 1)
            {
                Settings.HorScale = (double)(1 * multiplier);
            }
            else if (div <= 2)
            {
                Settings.HorScale = (double)(2 * multiplier);
            }
            else if (div <= 5)
            {
                Settings.HorScale = (double)(5 * multiplier);
            }
            else
            {
                Settings.HorScale = (double)(10 * multiplier);
            }

            Settings.HorOffset = -(double)(min.X);
        }
Exemplo n.º 2
0
        public void AutoScaleHorizontalTime()
        {
            PointD min = PointD.Empty;
            PointD max = PointD.Empty;

            foreach (Trace t in DataSource.Traces)
            {
                min.KeepMinimum(t.Minimum);
                max.KeepMaximum(t.Maximum);
            }


            DateTime start = new DateTime((long)min.X);
            DateTime end   = new DateTime((long)max.X);
            TimeSpan span  = end - start;

            if (span.TotalDays >= Settings.HorizontalDivisions)
            {
                Settings.HorScale = Math.Ceiling(span.TotalDays / Settings.HorizontalDivisions) * TimeSpan.TicksPerDay;
                start.AddMilliseconds(-start.Millisecond);
                start.AddSeconds(-start.Second);
                start.AddMinutes(-start.Minute);
                start.AddHours(-start.Hour);
            }
            else if (span.TotalHours >= Settings.HorizontalDivisions)
            {
                Settings.HorScale = Math.Ceiling(span.TotalHours / Settings.HorizontalDivisions) * TimeSpan.TicksPerHour;
                start.AddMilliseconds(-start.Millisecond);
                start.AddSeconds(-start.Second);
                start.AddMinutes(-start.Minute);
            }
            else if (span.TotalMinutes >= Settings.HorizontalDivisions)
            {
                Settings.HorScale = Math.Ceiling(span.TotalMinutes / Settings.HorizontalDivisions) * TimeSpan.TicksPerMinute;
                start.AddMilliseconds(-start.Millisecond);
                start.AddSeconds(-start.Second);
            }
            else if (span.TotalSeconds >= Settings.HorizontalDivisions)
            {
                Settings.HorScale = Math.Ceiling(span.TotalSeconds / Settings.HorizontalDivisions) * TimeSpan.TicksPerSecond;
                start.AddMilliseconds(-start.Millisecond);
                start.AddSeconds(-start.Second);
            }
            else
            {
                Settings.HorScale = Math.Ceiling(span.TotalMilliseconds / Settings.HorizontalDivisions) * TimeSpan.TicksPerMillisecond;
                start.AddMilliseconds(-start.Millisecond);
            }
            Settings.HorOffset = -start.Ticks;
        }
Exemplo n.º 3
0
        public void AutoScaleHorizontalTime(TimeSpan scale)
        {
            PointD min = PointD.Empty;
            PointD max = PointD.Empty;

            foreach (Trace t in DataSource.Traces)
            {
                min.KeepMinimum(t.Minimum);
                max.KeepMaximum(t.Maximum);
            }

            Settings.HorScale  = scale.Ticks;
            Settings.HorOffset = -min.X;
        }
Exemplo n.º 4
0
        public void FitHorizontalInXDivs(int divs)
        {
            PointD min = PointD.Empty;
            PointD max = PointD.Empty;

            foreach (Trace t in DataSource.Traces)
            {
                min.KeepMinimum(t.Minimum);
                max.KeepMaximum(t.Maximum);
            }

            double distance = max.X - min.X;

            if (distance == 0)
            {
                Settings.HorScale  = 1;
                Settings.HorOffset = -min.X;
                return;
            }

            Settings.HorScale  = (double)distance / (double)divs;
            Settings.HorOffset = -(double)(min.X);
        }
Exemplo n.º 5
0
        private void DrawData(Graphics g)
        {
            if (DataSource == null)
            {
                g.DrawString("No datasource bound", DefaultFont, Brushes.White, new Point(this.Width / 2 - 50, this.Height / 2));
            }
            else
            {
                int    errNo          = 0;
                Brush  errBrush       = new SolidBrush(Color.Red);
                double pxPerUnits_hor = viewPort.Width / (Settings.HorizontalDivisions * Settings.HorScale);
                var    sortedTraces   = from trace in DataSource.Traces
                                        orderby trace.Layer descending
                                        select trace;

                PointD min = PointD.Empty;
                PointD max = PointD.Empty;

                foreach (Trace t in sortedTraces.Where(t => t.Visible))
                {
                    min.KeepMinimum(t.Minimum);
                    max.KeepMaximum(t.Maximum);
                }

                double xLeft  = Settings.HorOffset;
                double xRight = ((viewPort.Width) / pxPerUnits_hor) - Settings.HorOffset;

                //Loop through traces
                foreach (Trace trace in sortedTraces)
                {
                    double pxPerUnits_ver = viewPort.Height / (Settings.VerticalDivisions * trace.Scale);

                    Func <PointD, Point> convert = (p) => new Point(
                        (int)((p.X + Settings.HorOffset) * pxPerUnits_hor) + viewPort.X,
                        (int)(zeroPos - (p.Y + trace.Offset) * pxPerUnits_ver));
                    try
                    {
                        trace.Draw(g, viewPort, convert, min.X, max.X, xLeft, xRight, Settings.Font);
                    }
                    catch (Exception ex)
                    {
                        g.DrawString(ex.Message, Settings.Font, errBrush, new Point(0, (errNo++) * Settings.Font.Height));
                    }
                }

                try
                {
                    foreach (Marker marker in dataSource.Markers)
                    {
                        if (marker is LinkedMarker lm)
                        {
                            double pxPerUnits_ver        = viewPort.Height / (Settings.VerticalDivisions * lm.Trace.Scale);
                            Func <PointD, Point> convert = (p) => new Point(
                                (int)((p.X + Settings.HorOffset) * pxPerUnits_hor) + viewPort.X,
                                (int)(zeroPos - (p.Y + lm.Trace.Offset) * pxPerUnits_ver));

                            marker.Draw(g, viewPort, convert, Settings.Font);
                        }
                        else if (marker is FreeMarker fm)
                        {
                            double pxPerUnits_ver        = viewPort.Height / (Settings.VerticalDivisions * 1);
                            Func <PointD, Point> convert = (p) => new Point(
                                (int)((p.X + Settings.HorOffset) * pxPerUnits_hor) + viewPort.X,
                                (int)(zeroPos - (p.Y + 0) * pxPerUnits_ver));

                            marker.Draw(g, viewPort, convert, Settings.Font);
                        }
                    }
                }
                catch (Exception ex)
                {
                    g.DrawString(ex.Message, Settings.Font, errBrush, new Point(0, (errNo++) * Settings.Font.Height));
                }

                try
                {
                    foreach (IScopeDrawable drawable in dataSource.Drawables)
                    {
                        Func <PointD, Point> convert = (p) => new Point((int)((p.X + Settings.HorOffset) * pxPerUnits_hor), (int)(viewPort.Height / 2 - p.Y));
                        drawable.Draw(g, convert);
                    }
                }
                catch (Exception ex)
                {
                    g.DrawString(ex.Message, Settings.Font, errBrush, new Point(0, (errNo++) * Settings.Font.Height));
                }
            }
        }