Exemplo n.º 1
0
        private void PlotUnitKills(PlotModel m)
        {
            if (EmpiresUnitKills == null)
            {
                return;
            }

            AddXDatesAxis(m);

            LinearAxis citiesY = new LinearAxis();

            citiesY.Title    = Labels.KilledUnits;
            citiesY.Key      = "units_kills";
            citiesY.Position = AxisPosition.Right;
            m.Axes.Add(citiesY);

            long   lastKills  = -1;
            double killsValue = 0;

            foreach (var empire in EmpiresUnitKills.OrderBy(x => x.Key.UnitsKillsRank))
            {
                lastKills  = -1;
                killsValue = 0;
                OxyPlot.Series.StairStepSeries s = new OxyPlot.Series.StairStepSeries();
                s.XAxisKey = "x";
                s.YAxisKey = "units_kills";
                s.VerticalStrokeThickness = 0.2;
                s.MarkerType = MarkerType.None;
                s.Title      = string.Format("{0} ({1})", empire.Key.PlayerName, empire.Key.AlianceName);

                foreach (var hr in empire.Value.OrderBy(x => x.CreateDT.Value))
                {
                    if (DiffKillsScore)
                    {
                        if (lastKills < 0)
                        {
                            //pierwszy wynik, zaczynam od zera
                            lastKills  = hr.Score;
                            killsValue = 0;
                        }
                        else
                        {
                            killsValue = hr.Score - lastKills;
                            lastKills  = hr.Score;
                        }
                    }
                    else
                    {
                        killsValue = hr.Score;
                    }

                    s.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, killsValue));
                }

                m.Series.Add(s);
            }
        }
Exemplo n.º 2
0
        private void PlotOffRep(PlotModel m)
        {
            if (OffReputations == null)
            {
                return;
            }

            //miasta
            LinearAxis yAxis = new LinearAxis();

            yAxis.Title              = Labels.OffReputation;
            yAxis.Key                = "off_rep";
            yAxis.Position           = AxisPosition.Right;
            yAxis.MajorGridlineStyle = LineStyle.None;
            yAxis.MinorGridlineStyle = LineStyle.None;
            m.Axes.Add(yAxis);

            foreach (var empire in OffReputations.OrderBy(x => x.Key.OffReputation))
            {
                var s = new OxyPlot.Series.StairStepSeries();
                s.XAxisKey  = "x";
                s.YAxisKey  = "off_rep";
                s.LineStyle = LineStyle.Dash;
                //s.VerticalStrokeThickness = 0.2;

                s.MarkerType = MarkerType.Diamond;
                s.Title      = string.Format("A: {0} ({1})", empire.Key.PlayerName, empire.Key.AlianceName);

                DateTime?lastTime  = null;
                long     lastScore = 0;

                foreach (var hr in empire.Value.OrderBy(x => x.CreateDT.Value))
                {
                    s.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, hr.Score));
                    lastScore = hr.Score;
                    lastTime  = hr.CreateDT;
                }

                //sztucznie dodaję pomiar, żeb widać było poziomą kreskę
                if (lastTime.HasValue)
                {
                    s.Points.Add(DateTimeAxis.CreateDataPoint(lastTime.Value.AddHours(1), lastScore));
                }

                m.Series.Add(s);
            }
        }
Exemplo n.º 3
0
        private void PlotCities(PlotModel m)
        {
            if (Empires == null)
            {
                return;
            }

            AddXDatesAxis(m);

            //miasta
            LinearAxis citiesY = new LinearAxis();

            citiesY.Title              = Labels.Cities;
            citiesY.Key                = "cities";
            citiesY.Position           = AxisPosition.Right;
            citiesY.MajorGridlineStyle = LineStyle.None;
            citiesY.MinorGridlineStyle = LineStyle.None;
            m.Axes.Add(citiesY);

            foreach (var empire in Empires.OrderBy(x => x.Key.CitiesNo))
            {
                OxyPlot.Series.StairStepSeries citiesSerie = new OxyPlot.Series.StairStepSeries();
                citiesSerie.XAxisKey = "x";
                citiesSerie.YAxisKey = "cities";
                citiesSerie.VerticalStrokeThickness = 0.2;

                citiesSerie.MarkerType = MarkerType.None;
                citiesSerie.Title      = string.Format("{0} ({1})", empire.Key.PlayerName, empire.Key.AlianceName);

                foreach (var hr in empire.Value.OrderBy(x => x.CreateDT.Value))
                {
                    citiesSerie.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, hr.CitiesNo));
                }

                m.Series.Add(citiesSerie);
            }
        }
        private Series ConvertSeries(ChartSeriesViewModel series)
        {
            Series newSeries   = null;
            var    valueSeries = series.GetScaleForProperty(series.ValueMemberPath);
            var    labelSeries = series.GetScaleForProperty(series.LabelMemberPath);


            switch (series.SeriesType)
            {
            case (ChartSeriesType.Column):
            {
                newSeries = new ColumnSeries
                {
                    ValueField  = series.ValueMemberPath,
                    ItemsSource = series.DataSource.Data,
                    FillColor   = valueSeries.Color.ToOxyColor(),
                    StrokeColor = valueSeries.Color.ToOxyColor(),
                    YAxisKey    = valueSeries.Name,
                    XAxisKey    = labelSeries.Name,
                };

                break;
            }

            case (ChartSeriesType.Line):
            {
                newSeries = new LineSeries
                {
                    ItemsSource = series.DataSource.Data,
                    DataFieldX  = series.XMemberPath,
                    DataFieldY  = series.YMemberPath,
                    MarkerType  = MarkerType.Circle,
                    Color       = valueSeries.Color.ToOxyColor(),
                    MarkerFill  = valueSeries.Color.ToOxyColor(),
                    YAxisKey    = valueSeries.Name,
                    XAxisKey    = labelSeries.Name,
                };
                break;
            }

            case (ChartSeriesType.Spline):
            {
                newSeries = new LineSeries
                {
                    ItemsSource = series.DataSource.Data,
                    DataFieldX  = series.XMemberPath,
                    DataFieldY  = series.YMemberPath,
                    MarkerType  = MarkerType.Circle,
                    Color       = valueSeries.Color.ToOxyColor(),
                    MarkerFill  = valueSeries.Color.ToOxyColor(),
                    Smooth      = true,
                    YAxisKey    = valueSeries.Name,
                    XAxisKey    = labelSeries.Name,
                };
                break;
            }

            case (ChartSeriesType.Area):
            {
                newSeries = new AreaSeries
                {
                    ItemsSource = series.DataSource.Data,
                    DataFieldX  = series.XMemberPath,
                    DataFieldY  = series.YMemberPath,
                    Color       = valueSeries.Color.ToOxyColor(),
                    Fill        = valueSeries.Color.ToOxyColor(),
                    MarkerFill  = valueSeries.Color.ToOxyColor(),
                    YAxisKey    = valueSeries.Name,
                    XAxisKey    = labelSeries.Name,
                };
                break;
            }

            case (ChartSeriesType.SplineArea):
            {
                newSeries = new AreaSeries
                {
                    ItemsSource = series.DataSource.Data,
                    DataFieldX  = series.XMemberPath,
                    DataFieldY  = series.YMemberPath,
                    Color       = valueSeries.Color.ToOxyColor(),
                    Fill        = valueSeries.Color.ToOxyColor(),
                    MarkerFill  = valueSeries.Color.ToOxyColor(),
                    Smooth      = true,
                    YAxisKey    = valueSeries.Name,
                    XAxisKey    = labelSeries.Name,
                };
                break;
            }

            case (ChartSeriesType.Bubble):
            {
                newSeries = new ScatterSeries
                {
                    ItemsSource   = series.DataSource.Data,
                    DataFieldX    = series.XMemberPath,
                    DataFieldY    = series.YMemberPath,
                    DataFieldSize = series.RadiusMemberPath,
                    MarkerFill    = valueSeries.Color.ToOxyColor(),
                    MarkerType    = MarkerType.Circle,
                    YAxisKey      = valueSeries.Name,
                    XAxisKey      = labelSeries.Name,
                };
                break;
            }

            case (ChartSeriesType.StepLine):
            {
                newSeries = new StairStepSeries
                {
                    ItemsSource = series.DataSource.Data,
                    DataFieldX  = series.XMemberPath,
                    DataFieldY  = series.YMemberPath,
                    Color       = valueSeries.Color.ToOxyColor(),
                    YAxisKey    = valueSeries.Name,
                    XAxisKey    = labelSeries.Name,
                };
                break;
            }

            default:
            {
                return(null);
            }
            }

            newSeries.Title = series.Name;

            return(newSeries);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StairStepSeries"/> class.
 /// </summary>
 public StairStepSeries()
 {
     InternalSeries = new OxyPlot.Series.StairStepSeries();
 }
        private Series ConvertSeries(ChartSeriesViewModel series)
        {
            Series newSeries = null;
            var valueSeries = series.GetScaleForProperty(series.ValueMemberPath);
            var labelSeries = series.GetScaleForProperty(series.LabelMemberPath);

            switch (series.SeriesType)
            {
                case( ChartSeriesType.Column):
                {
                    newSeries = new ColumnSeries
                    {
                        ValueField = series.ValueMemberPath,
                        ItemsSource = series.DataSource.Data,
                        FillColor = valueSeries.Color.ToOxyColor(),
                        StrokeColor = valueSeries.Color.ToOxyColor(),
                        YAxisKey = valueSeries.Name,
                        XAxisKey = labelSeries.Name,
                    };

                    break;
                }
                case( ChartSeriesType.Line ):
                {
                    newSeries = new LineSeries
                    {
                        ItemsSource = series.DataSource.Data,
                        DataFieldX = series.XMemberPath,
                        DataFieldY = series.YMemberPath,
                        MarkerType = MarkerType.Circle,
                        Color = valueSeries.Color.ToOxyColor(),
                        MarkerFill = valueSeries.Color.ToOxyColor(),
                        YAxisKey = valueSeries.Name,
                        XAxisKey = labelSeries.Name,
                    };
                    break;
                }
                case( ChartSeriesType.Spline):
                {
                    newSeries = new LineSeries
                    {
                        ItemsSource = series.DataSource.Data,
                        DataFieldX = series.XMemberPath,
                        DataFieldY = series.YMemberPath,
                        MarkerType = MarkerType.Circle,
                        Color = valueSeries.Color.ToOxyColor(),
                        MarkerFill = valueSeries.Color.ToOxyColor(),
                        Smooth = true,
                        YAxisKey = valueSeries.Name,
                        XAxisKey = labelSeries.Name,
                    };
                    break;
                }
                case(ChartSeriesType.Area):
                {
                    newSeries = new AreaSeries
                    {
                        ItemsSource = series.DataSource.Data,
                        DataFieldX = series.XMemberPath,
                        DataFieldY = series.YMemberPath,
                        Color = valueSeries.Color.ToOxyColor(),
                        Fill = valueSeries.Color.ToOxyColor(),
                        MarkerFill = valueSeries.Color.ToOxyColor(),
                        YAxisKey = valueSeries.Name,
                        XAxisKey = labelSeries.Name,
                    };
                    break;
                }
                case( ChartSeriesType.SplineArea):
                {
                    newSeries = new AreaSeries
                    {
                        ItemsSource = series.DataSource.Data,
                        DataFieldX = series.XMemberPath,
                        DataFieldY = series.YMemberPath,
                        Color = valueSeries.Color.ToOxyColor(),
                        Fill = valueSeries.Color.ToOxyColor(),
                        MarkerFill = valueSeries.Color.ToOxyColor(),
                        Smooth = true,
                        YAxisKey = valueSeries.Name,
                        XAxisKey = labelSeries.Name,
                    };
                    break;
                }
                case(ChartSeriesType.Bubble):
                {
                    newSeries = new ScatterSeries
                    {
                        ItemsSource = series.DataSource.Data,
                        DataFieldX = series.XMemberPath,
                        DataFieldY = series.YMemberPath,
                        DataFieldSize = series.RadiusMemberPath,
                        MarkerFill = valueSeries.Color.ToOxyColor(),
                        MarkerType = MarkerType.Circle,
                        YAxisKey = valueSeries.Name,
                        XAxisKey = labelSeries.Name,
                    };
                    break;
                }
                case( ChartSeriesType.StepLine):
                {
                    newSeries = new StairStepSeries
                    {
                        ItemsSource = series.DataSource.Data,
                        DataFieldX = series.XMemberPath,
                        DataFieldY = series.YMemberPath,
                        Color = valueSeries.Color.ToOxyColor(),
                        YAxisKey = valueSeries.Name,
                        XAxisKey = labelSeries.Name,
                    };
                    break;
                }
                default:
                {
                    return null;
                }
            }

            newSeries.Title = series.Name;

            return newSeries;
        }
Exemplo n.º 7
0
        private void RefreshPlot()
        {
            PlotModel m = new PlotModel();

            m.Title = Labels.AlianceScoreAndCities;

            //oś X - z datami, w sumie zawsze :)
            DateTimeAxis xAxis = new DateTimeAxis();

            xAxis.Position           = AxisPosition.Bottom;
            xAxis.Key                = "x";
            xAxis.StringFormat       = "yyyy-MM-dd	";
            xAxis.Angle              = -45;
            xAxis.MajorGridlineStyle = LineStyle.Solid;
            xAxis.MinorGridlineStyle = LineStyle.Dot;
            m.Axes.Add(xAxis);

            //punktacja
            LinearAxis scoreY = new LinearAxis();

            if (DiffScore)
            {
                scoreY.Title = Labels.ScoreSpeed;
            }
            else
            {
                scoreY.Title = Labels.Score;
            }

            scoreY.Key                = "score";
            scoreY.Position           = AxisPosition.Left;
            scoreY.MajorGridlineStyle = LineStyle.Solid;
            scoreY.MinorGridlineStyle = LineStyle.Dot;

            if (ShowScore)
            {
                m.Axes.Add(scoreY);
            }

            //miasta
            LinearAxis citiesY = new LinearAxis();

            citiesY.Title    = Labels.Cities;
            citiesY.Key      = "cities";
            citiesY.Position = AxisPosition.Right;

            if (ShowCities)
            {
                m.Axes.Add(citiesY);
            }

            foreach (var aliance in Aliances.OrderBy(x => x.Key.Rank))
            {
                long     lastScore  = -1;
                double   scoreValue = 0;
                DateTime lastTime   = DateTime.Now;
                double   deltaTime  = 0;

                OxyPlot.Series.LineSeries ls = new OxyPlot.Series.LineSeries();
                ls.XAxisKey   = "x";
                ls.YAxisKey   = "score";
                ls.MarkerType = MarkerType.Diamond;
                ls.Title      = aliance.Key.AlianceName;

                OxyPlot.Series.StairStepSeries citiesSerie = new OxyPlot.Series.StairStepSeries();
                citiesSerie.XAxisKey = "x";
                citiesSerie.YAxisKey = "cities";
                citiesSerie.VerticalStrokeThickness = 0.2;

                citiesSerie.MarkerType = MarkerType.None;
                citiesSerie.Title      = aliance.Key.AlianceName;

                foreach (var hr in aliance.Value.OrderBy(x => x.CreateDT.Value))
                {
                    if (DiffScore)
                    {
                        if (lastScore < 0)
                        {
                            //pierwszy wynik, zaczynam od zera
                            lastScore  = hr.Score;
                            lastTime   = hr.CreateDT.Value;
                            scoreValue = 0;
                        }
                        else
                        {
                            deltaTime = (hr.CreateDT.Value - lastTime).TotalMinutes;

                            //liczę przyrosty na minutę, jeżeli czas między pomiaram > 3h, inaczej nie ma to sensu - za wolno punkty przyrastają i będąg głupoty
                            if (deltaTime > 180)
                            {
                                scoreValue = (hr.Score - lastScore) / deltaTime;
                                lastScore  = hr.Score;
                                lastTime   = hr.CreateDT.Value;
                            }
                        }
                    }
                    else
                    {
                        scoreValue = hr.Score;
                    }

                    if (((DiffScore && (deltaTime > 60)) || !DiffScore) && ShowScore)
                    {
                        ls.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, scoreValue));
                    }

                    if (ShowCities)
                    {
                        citiesSerie.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, hr.CitiesNo));
                    }
                }

                if (ShowScore)
                {
                    m.Series.Add(ls);
                }

                if (ShowCities)
                {
                    m.Series.Add(citiesSerie);
                }
            }
            PlotM = m;
        }