Beispiel #1
0
 private void UpdateSeriesListColors()
 {
     foreach (ListViewItem seriesItem in lvFieldList.Items)
     {
         ILineGraphSeries series = (ILineGraphSeries)seriesItem.Tag;
         seriesItem.ForeColor = series.Color;
     }
 }
 public void DisplayMarginEditor(ILineGraphSeries series)
 {
     if (EditMargins(new List <ILineGraphSeries>()
     {
         series
     }))
     {
         SeriesCollectionChanged();
     }
 }
        public virtual void UpdateSeries(ILineGraphSeries series)
        {
            if (SeriesList[series.FieldIndex] != null)
            {
                SeriesList[series.FieldIndex].PropertyChanged -= LineGraphSeries_PropertyChanged;
            }

            SeriesList[series.FieldIndex] = series;

            series.PropertyChanged += LineGraphSeries_PropertyChanged;

            OnPropertyChanged(nameof(SeriesList));
        }
Beispiel #4
0
        private void AddSeriesToList(ILineGraphSeries series)
        {
            var lvi = new ListViewItem(series.Key)
            {
                BackColor = Color.Black,
                ForeColor = series.Color,
                Tag       = series
            };

            lvi.UseItemStyleForSubItems = false;

            lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "", lvi.ForeColor, lvi.BackColor, lvi.Font)); // value
            lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "", lvi.ForeColor, lvi.BackColor, lvi.Font)); // warning
            lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "", lvi.ForeColor, lvi.BackColor, lvi.Font)); // lap min
            lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "", lvi.ForeColor, lvi.BackColor, lvi.Font)); // lap max
            lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "", lvi.ForeColor, lvi.BackColor, lvi.Font)); // lap avg

            lvFieldList.Items.Add(lvi);
        }
        /// <summary>
        /// A series in the series list fired a property changed event
        /// </summary>
        /// <param name="series">The series that changed</param>
        private void SeriesChanged(ILineGraphSeries series)
        {
            try
            {
                SuspendLayout();

                UpdateVisibleColumns(Model.SummaryFlags);

                UpdateSeriesListValues(_selectedFrameIdx);

                UpdateAxisPanelSize();
            }
            catch (Exception ex)
            {
                ExceptionHandler(ex);
            }
            finally
            {
                ResumeLayout(true);
            }
        }
        public static ILineGraphSeries GetSeries(string key)
        {
            ILineGraphSeries series = null;

            switch (key)
            {
            case ("Telemetry.RPM"):
            {
                series = new RpmLineGraphSeries();
                break;
            }

            case ("Telemetry.Throttle"):
            {
                series = new ThrottleLineGraphSeries();
                break;
            }

            case ("Telemetry.SteeringWheelAngle"):
            {
                series = new SteeringLineGraphSeries();
                break;
            }

            case ("Telemetry.Brake"):
            {
                series = new BrakeLineGraphSeries();
                break;
            }

            case ("Telemetry.Speed"):
            {
                series = new SpeedLineGraphSeries();
                break;
            }
            }

            return(series);
        }
        protected virtual void AddSeries(FieldDisplayInfo displayInfo)
        {
            ILineGraphSeries series = LineGraphSeriesFactory.GetSeries(displayInfo.Key);

            if (series == null)
            {
                series = LineGraphSeriesFactory.GetGenericSeries(
                    displayInfo.Key,
                    displayInfo.Name,
                    displayInfo.GetColor(),
                    displayInfo.Thickness,
                    displayInfo.Format,
                    displayInfo.GetUnit(),
                    (int)displayInfo.RangeMin,
                    (int)displayInfo.RangeMax);
            }

            series.SummaryColumnFlags = _graph.Model.SummaryFlags;

            _graph.DisplaySeriesEditor(series);

            _graph.Model.SeriesCollection.Add(series);
        }
        public virtual int AddSeries(ILineGraphSeries series)
        {
            try
            {
                series.FieldIndex = _seriesCount++;

                SeriesList[series.FieldIndex] = series;

                series.PropertyChanged += LineGraphSeries_PropertyChanged;

                OnPropertyChanged(nameof(SeriesList));

                return(series.FieldIndex);
            }
            catch (IndexOutOfRangeException ex)
            {
                throw new Exception("Internal arrays have not been initialized", ex);
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Adds a single series to the list view
        /// </summary>
        /// <param name="series">The ILineGraphSeries to add</param>
        private void AddSeriesToList(ILineGraphSeries series)
        {
            var lvi = new ListViewItem(series.Name)
            {
                BackColor = Color.Black,
                ForeColor = Color.White,
                Tag       = series
            };

            lvi.UseItemStyleForSubItems = false;

            var enumValues = Enum.GetValues(typeof(FieldListColumns));
            var enumLength = enumValues.GetLength(0);

            for (int i = 1; i < enumLength - 1; i++)
            {
                lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "", series.Color, Color.Black, lvi.Font));
            }

            // units in white
            var unitsSubItem = lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, series.Unit, Color.White, Color.Black, lvi.Font));

            lvFieldList.Items.Add(lvi);
        }
Beispiel #10
0
 public void AddSeries(ILineGraphSeries series)
 {
     AddSeriesToList(series);
     UpdateSeriesListDisplay();
 }
        private Bitmap GetGraphBitmap()
        {
            Bitmap bitmap = _graphBitmap;

            try
            {
                Size size = GetGraphSize();

                if (bitmap != null && bitmap.Size == size)
                {
                    return(bitmap);
                }

                bitmap = new Bitmap(
                    size.Width,
                    size.Height,
                    pixelFormat);

                using (Graphics g = Graphics.FromImage(bitmap))
                {
                    g.SmoothingMode = smoothingMode;

                    g.Clear(Color.Black);

                    Bitmap backgroundBitmap = GetGraphBackgroundBitmap();

                    g.DrawImage(backgroundBitmap, 0, 0);

                    int frameCount = TelemetryData.GetLapFrameCount(_selectedLapIdx);

                    if (frameCount > 0)
                    {
                        float frameSpacing = (float)graphPanel.Width / (float)frameCount;

                        int seriesCount = Model.SeriesCollection.Count();

                        ILineGraphSeries[] seriesArray = new ILineGraphSeries[seriesCount];
                        IEnumerable <TelemetryValues>[] telemetryValuesArray = new IEnumerable <TelemetryValues> [seriesCount];
                        Pen[]          seriesPens      = new Pen[seriesCount];
                        PointF[]       seriesLastPoint = new PointF[seriesCount];
                        GraphicsPath[] graphicsPaths   = new GraphicsPath[seriesCount];
                        float[][]      fieldLapValues  = new float[seriesCount][];

                        for (int s = 0; s < seriesCount; s++)
                        {
                            var lapFieldValues = TelemetryData.GetLapFieldValues(_selectedLapIdx, s);
                            telemetryValuesArray[s] = lapFieldValues;

                            fieldLapValues[s] = lapFieldValues.Select(v => v.Value.Value).ToArray();

                            ILineGraphSeries series = Model.SeriesCollection.ToArray()[s];
                            series.SeriesMapper.GraphicsSize = size;
                            seriesArray[s] = series;

                            Pen seriesPen = new Pen(series.Color, series.AxisBaseLineThickness);
                            seriesPens[s] = seriesPen;

                            seriesLastPoint[s] = PointF.Empty;

                            graphicsPaths[s] = new GraphicsPath();
                        }

                        for (int x = 0; x < frameCount; x++)
                        {
                            float frameX = x * frameSpacing;

                            float frameY = 0;

                            for (int s = 0; s < seriesCount; s++)
                            {
                                float seriesFrameValue = fieldLapValues[s][x];

                                if (seriesArray[s].InvertRange)
                                {
                                    frameY = seriesArray[s].SeriesMapper.MapValueInverted(seriesFrameValue);
                                }
                                else
                                {
                                    frameY = seriesArray[s].SeriesMapper.MapValue(seriesFrameValue);
                                }

                                if (seriesLastPoint[s] == PointF.Empty)
                                {
                                    seriesLastPoint[s] = new PointF(frameX, frameY);
                                }

                                graphicsPaths[s].AddLine(seriesLastPoint[s], new PointF(frameX, frameY));

                                seriesLastPoint[s] = new PointF(frameX, frameY);
                            } // for (int s = 0; s < Model.SeriesCollection.Count(); s++)
                        }     // for (int x = 0; x < frameCount; x++)

                        for (int s = 0; s < seriesCount; s++)
                        {
                            g.DrawPath(seriesPens[s], graphicsPaths[s]);

                            if (seriesArray[s].ShowMinimumWarning)
                            {
                                float minWarningY = 0F;
                                if (seriesArray[s].InvertRange)
                                {
                                    minWarningY = seriesArray[s].SeriesMapper.MapValueInverted(seriesArray[s].MinWarning);
                                }
                                else
                                {
                                    minWarningY = seriesArray[s].SeriesMapper.MapValue(seriesArray[s].MinWarning);
                                }

                                seriesPens[s].DashStyle = DashStyle.DashDotDot;
                                g.DrawLine(seriesPens[s], new PointF(0, minWarningY), new PointF(graphPanel.Width, minWarningY));
                            }
                            if (seriesArray[s].ShowMaximumWarning)
                            {
                                float maxWarningY = 0F;
                                if (seriesArray[s].InvertRange)
                                {
                                    maxWarningY = seriesArray[s].SeriesMapper.MapValueInverted(seriesArray[s].MaxWarning);
                                }
                                else
                                {
                                    maxWarningY = seriesArray[s].SeriesMapper.MapValue(seriesArray[s].MaxWarning);
                                }

                                seriesPens[s].DashStyle = DashStyle.Dash;
                                g.DrawLine(seriesPens[s], new PointF(0, maxWarningY), new PointF(graphPanel.Width, maxWarningY));
                            }
                        }

                        for (int p = 0; p < seriesPens.Length; p++)
                        {
                            seriesPens[p].Dispose();
                        }
                    } // if (frameCount > 0)
                }     // using (Graphics g = Graphics.FromImage(bitmap))
            }         // try
            catch (Exception ex)
            {
                ExceptionHandler(ex);
            }

            _graphBitmap = bitmap;

            return(bitmap);
        }
        private int PaintAxis(Graphics g, Size size, ILineGraphSeries series, int offset)
        {
            int axisWidth  = 0;
            int axisMargin = 2;

            try
            {
                g.SmoothingMode = smoothingMode;

                var topY              = (size.Height * series.RangeStart) + series.Margins.Top;
                var bottomY           = (size.Height * series.RangeEnd) - series.Margins.Bottom;
                var verticalRange     = bottomY - topY;
                var valueRange        = series.Maximum - series.Minimum;
                var verticalAxisLineX = offset + (series.Position == YAxisPosition.Left ? size.Width - 2 : 0);

                using (Pen axisPen = new Pen(series.Color, series.AxisBaseLineThickness))
                {
                    var axisBaseLineStartPoint = new PointF(verticalAxisLineX, topY);
                    var axisBaseLineEndPoint   = new PointF(verticalAxisLineX, bottomY);

                    g.DrawLine(
                        axisPen,
                        axisBaseLineStartPoint,
                        axisBaseLineEndPoint);

                    // Get the label formatting info
                    SizeF        labelSize   = g.MeasureString(series.Maximum.ToString(series.Format), series.Font);
                    StringFormat labelFormat = new StringFormat()
                    {
                        Alignment = StringAlignment.Far
                    };

                    axisWidth = DefaultTickWidth + (int)labelSize.Width;

                    int labelHorizontalOffset = (int)(series.Position == YAxisPosition.Left ?
                                                      -(DefaultTickWidth + labelSize.Width) :
                                                      DefaultTickWidth + labelSize.Width);

                    var ticks = LineGraphHelper.MapTicks(series, verticalAxisLineX, topY, bottomY);

                    if (series.InvertRange)
                    {
                        foreach (Tick tick in ticks.AllTicks)
                        {
                            var startX = series.Position == YAxisPosition.Left ? verticalAxisLineX - DefaultTickWidth : verticalAxisLineX;
                            var endX   = series.Position == YAxisPosition.Left ? verticalAxisLineX : verticalAxisLineX + DefaultTickWidth;

                            g.DrawLine(axisPen, new PointF(startX, tick.Y), new PointF(endX, tick.Y));

                            if (tick.Label != null)
                            {
                                using (Brush labelBrush = new SolidBrush(series.Color))
                                {
                                    RectangleF labelRectangle = new RectangleF(
                                        tick.Label.X + labelHorizontalOffset,
                                        tick.Label.Y - (labelSize.Height / 2),
                                        labelSize.Width,
                                        labelSize.Height);

                                    g.DrawString(
                                        tick.Label.Text,
                                        series.Font,
                                        labelBrush,
                                        labelRectangle,
                                        labelFormat);
                                }
                            }
                        }
                    }
                    else
                    {
                        float invertedTickStartY = topY + bottomY;
                        foreach (Tick tick in ticks.AllTicks)
                        {
                            var startX = series.Position == YAxisPosition.Left ? verticalAxisLineX - DefaultTickWidth : verticalAxisLineX;
                            var endX   = series.Position == YAxisPosition.Left ? verticalAxisLineX : verticalAxisLineX + DefaultTickWidth;

                            PointF tickStartPoint = new PointF(startX, invertedTickStartY - tick.Y);
                            PointF tickEndPoint   = new PointF(endX, invertedTickStartY - tick.Y);

                            g.DrawLine(
                                axisPen,
                                tickStartPoint,
                                tickEndPoint);

                            if (tick.Label != null)
                            {
                                using (Brush labelBrush = new SolidBrush(series.Color))
                                {
                                    RectangleF labelRectangle = new RectangleF(
                                        tick.Label.X + labelHorizontalOffset,
                                        invertedTickStartY - tick.Label.Y - (labelSize.Height / 2),
                                        labelSize.Width,
                                        labelSize.Height);

                                    g.DrawString(
                                        tick.Label.Text,
                                        series.Font,
                                        labelBrush,
                                        labelRectangle,
                                        labelFormat);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionHandler(ex);
            }

            return(axisWidth + axisMargin);
        }