Пример #1
0
        protected void createAndAddChartArea(Chart chart, RaceResultViewProvider results)
        {
            if (chart.ChartAreas.Count() == 0)
            {
                ChartArea area = new ChartArea();
                chart.ChartAreas.Add(area);
                area.BorderColor     = Color.FromArgb(0x3f, 0x43, 0x4b);
                area.BorderDashStyle = ChartDashStyle.Solid;
                area.BorderWidth     = 1;
                //area.AlignmentOrientation = AreaAlignmentOrientations.Horizontal;
                //area.Position.X = 5;
                //area.Position.Y = 5;
                //area.Position.Width = 80;
                //area.Position.Height = 90;

                //ChartArea areaBB = new ChartArea();
                //chart.ChartAreas.Add(areaBB);
                //areaBB.BorderColor = Color.FromArgb(0x3f, 0x43, 0x4b);
                //areaBB.BorderDashStyle = ChartDashStyle.Solid;
                //areaBB.BorderWidth = 1;
                //areaBB.AlignmentOrientation = AreaAlignmentOrientations.Horizontal;
                //areaBB.AlignmentStyle = AreaAlignmentStyles.AxesView;
                //areaBB.Position.X = 85;
                //areaBB.Position.Y = 5;
                //areaBB.Position.Width = 20;
                //areaBB.Position.Height = 90;
                //areaBB.AxisY.LabelStyle.Enabled = false;

                chart.Customize += Chart_Customize;
            }

            configureAxisX(chart.ChartAreas[0].AxisX, results);
            configureAxisY(chart.ChartAreas[0].AxisY, results);
            //configureAxisY(chart.ChartAreas[1].AxisY, results);
        }
        public ViewFactory()
        {
            _prototypes = new Dictionary <string, ViewProvider>();

            _prototypes["Startlist_1stRun_StartnumberAscending"] = new FirstRunStartListViewProvider();
            _prototypes["Startlist_1stRun_Points_0"]             = new DSVFirstRunStartListViewProvider(0);
            _prototypes["Startlist_1stRun_Points_15"]            = new DSVFirstRunStartListViewProvider(15);
            _prototypes["Startlist_1stRun_Points_30"]            = new DSVFirstRunStartListViewProvider(30);

            _prototypes["Startlist_2nd_StartnumberAscending"] = new SimpleSecondRunStartListViewProvider(StartListEntryComparer.Direction.Ascending);
            //_prototypes["Startlist_2nd_StartnumberAscending"] = new SimpleSecondRunStartListViewProvider(StartListEntryComparer.Direction.Ascending);
            _prototypes["Startlist_2nd_StartnumberDescending"] = new SimpleSecondRunStartListViewProvider(StartListEntryComparer.Direction.Descending);
            //_prototypes["Startlist_2nd_StartnumberDescending"] = new SimpleSecondRunStartListViewProvider(StartListEntryComparer.Direction.Descending);
            _prototypes["Startlist_2nd_PreviousRun_0_OnlyWithResults"]      = new BasedOnResultsFirstRunStartListViewProvider(0, false);
            _prototypes["Startlist_2nd_PreviousRun_0_AlsoWithoutResults"]   = new BasedOnResultsFirstRunStartListViewProvider(0, true);
            _prototypes["Startlist_2nd_PreviousRun_15_OnlyWithResults"]     = new BasedOnResultsFirstRunStartListViewProvider(15, false);
            _prototypes["Startlist_2nd_PreviousRun_15_AlsoWithoutResults"]  = new BasedOnResultsFirstRunStartListViewProvider(15, true);
            _prototypes["Startlist_2nd_PreviousRun_30_OnlyWithResults"]     = new BasedOnResultsFirstRunStartListViewProvider(30, false);
            _prototypes["Startlist_2nd_PreviousRun_30_AlsoWithoutResults"]  = new BasedOnResultsFirstRunStartListViewProvider(30, true);
            _prototypes["Startlist_2nd_PreviousRun_all_OnlyWithResults"]    = new BasedOnResultsFirstRunStartListViewProvider(int.MaxValue, false);
            _prototypes["Startlist_2nd_PreviousRun_all_AlsoWithoutResults"] = new BasedOnResultsFirstRunStartListViewProvider(int.MaxValue, true);

            _prototypes["RaceResult_BestOfTwo"]          = new RaceResultViewProvider(RaceResultViewProvider.TimeCombination.BestRun);
            _prototypes["RaceResult_Sum"]                = new RaceResultViewProvider(RaceResultViewProvider.TimeCombination.Sum);
            _prototypes["RaceResult_SumBest2"]           = new RaceResultViewProvider(RaceResultViewProvider.TimeCombination.SumBest2);
            _prototypes["RaceResult_SumDSVPointsSchool"] = new DSVSchoolRaceResultViewProvider();

            _prototypes["RaceRunResult"] = new RaceRunResultViewProvider();
        }
Пример #3
0
        public void configureAxisX(Axis axis, RaceResultViewProvider results)
        {
            axis.Minimum = 0.5; // Double.NaN;
            axis.CustomLabels.Clear();
            var lr = results.GetView() as System.Windows.Data.ListCollectionView;

            if (lr.Groups != null)
            {
                int    x1 = 1;
                int    x2Last = 1;
                int    x2 = 1;
                string name2 = null, name2Last = null;
                foreach (var group in lr.Groups)
                {
                    if (group is System.Windows.Data.CollectionViewGroup cvGroup)
                    {
                        var lblGroup = axis.CustomLabels.Add(x1 - 0.5, x1 + 0.5, workaroundGermanUmlaut(cvGroup.GetName()));
                        lblGroup.GridTicks = GridTickTypes.None;

                        // Second Level if possible
                        if (cvGroup.Name is ParticipantClass @class)
                        {
                            name2 = @class.Group.Name;
                            if (name2Last == null) // init set to same name
                            {
                                name2Last = name2;
                            }

                            if (!string.Equals(name2, name2Last))
                            {
                                var lblName2 = axis.CustomLabels.Add(x2Last - 0.5, (x2 - 1) + 0.5, workaroundGermanUmlaut(name2Last), 1, LabelMarkStyle.LineSideMark);
                                name2Last = name2;
                                x2Last    = x2;
                            }
                        }
                    }

                    x1++;
                    x2++;
                }

                // Final 2nd group
                if (name2 != null && name2Last != null)
                {
                    var lblName2 = axis.CustomLabels.Add(x2Last - 0.5, (x2 - 1) + 0.5, workaroundGermanUmlaut(name2Last), 1, LabelMarkStyle.LineSideMark);
                }

                axis.Maximum = x2 - 0.5;
            }

            // Enable X axis labels automatic fitting
            axis.IsLabelAutoFit    = true;
            axis.LabelAutoFitStyle = LabelAutoFitStyles.DecreaseFont | LabelAutoFitStyles.IncreaseFont | LabelAutoFitStyles.WordWrap;
            axis.MajorGrid.Enabled = false;
            axis.MinorGrid.Enabled = false;
        }
Пример #4
0
        public void SetupChart(Chart chart, RaceResultViewProvider results)
        {
            createAndAddChartArea(chart, results);

            // Setup Data Series
            chart.Series.Clear();
            createDataSerieses(results, chart);

            //chart.SaveImage("", ChartImageFormat.)
        }
Пример #5
0
        public DSVRaceCalculation(Race race, RaceResultViewProvider vpSource, char sex)
        {
            _race     = race;
            _vpSource = vpSource;
            _sex      = sex;

            _valueF = race.RaceConfiguration.ValueF;
            _valueA = race.RaceConfiguration.ValueA;

            _minPenalty  = race.RaceConfiguration.MinimumPenalty;
            _valueCutOff = race.RaceConfiguration.ValueCutOff;

            _penalty        = _penaltyA = _penaltyB = _penaltyC = 0.0;
            _appliedPenalty = 0.0;
            _bestTime       = null;
        }
Пример #6
0
        public void RenderToWmf(Stream wmfStream, RaceResultViewProvider results)
        {
            SetupChart(_chart, results);

            //_chart.SaveImage(path, ChartImageFormat.Png);

            MemoryStream emfStream = new MemoryStream();

            _chart.SaveImage(emfStream, ChartImageFormat.Emf);

            emfStream.Seek(0, SeekOrigin.Begin);
            ConvertToWMF(emfStream, wmfStream);

            //_chart.SaveImage(wmfStream, System.Drawing.Imaging.ImageFormat.Wmf);
            //wmfStream.Seek(0, SeekOrigin.Begin);
            //_chart.SaveImage(@"c:\trash\test.wmf", System.Drawing.Imaging.ImageFormat.Wmf);
        }
        public void ConfigureRace(Race race)
        {
            for (int i = 0; i < race.GetMaxRun(); i++)
            {
                RaceRun rr = race.GetRun(i);

                StartListViewProvider slVP = GetStartlistViewProvider(rr);
                rr.SetStartListProvider(slVP);

                RaceRunResultViewProvider rrVP = GetRaceRunResultViewProvider(rr);
                rr.SetResultViewProvider(rrVP);
            }

            RaceResultViewProvider raceVP = GetRaceResultViewProvider(race);

            race.SetResultViewProvider(raceVP);
        }
        string getResultList(Race race, string grouping)
        {
            string output = "";

            Application.Current.Dispatcher.Invoke(() =>
            {
                ViewConfigurator viewConfigurator = new ViewConfigurator(race);
                RaceResultViewProvider vp         = viewConfigurator.GetRaceResultViewProvider(race);
                if (grouping != null)
                {
                    vp.ChangeGrouping(grouping);
                }

                output = JsonConversion.ConvertRaceResults(vp.GetView(), (uint)race.GetMaxRun());
            });

            return(output);
        }
        public RaceResultViewProvider GetRaceResultViewProvider(Race race, string context = null)
        {
            ViewFactory factory = Singleton <ViewFactory> .Instance;

            RaceResultViewProvider rVP;

            rVP = factory.Create <RaceResultViewProvider>(_config.RaceResultView);

            if (rVP == null)
            {
                rVP = new RaceResultViewProvider(RaceResultViewProvider.TimeCombination.BestRun);
            }

            rVP.SetDefaultGrouping(_config.DefaultGrouping);

            rVP.Init(race, _dataModel);

            return(rVP);
        }
Пример #10
0
        private void initialize()
        {
            RaceResultViewProvider vp = _thisRace.GetResultViewProvider();

            UiUtilities.FillGrouping(cmbTotalResultGrouping, vp.ActiveGrouping);

            cmbTotalResult.Items.Clear();
            cmbTotalResult.Items.Add(new CBItem {
                Text = "Teilnehmer", Value = new CBObjectTotalResults {
                    Type = "participants"
                }
            });
            FillCmbTotalsResultsWithRaceSpecifics(cmbTotalResult);
            cmbTotalResult.Items.Add(new CBItem {
                Text = "Rennergebnis", Value = new CBObjectTotalResults {
                    Type = "raceresults"
                }
            });
            cmbTotalResult.SelectedIndex = cmbTotalResult.Items.Count - 1;
        }
Пример #11
0
        protected void createDataSerieses(RaceResultViewProvider results, Chart chart)
        {
            // Populate series data with random data
            var lr = results.GetView() as System.Windows.Data.ListCollectionView;

            if (lr.Groups != null)
            {
                int x = 1;
                foreach (var group in lr.Groups)
                {
                    if (group is System.Windows.Data.CollectionViewGroup cvGroup)
                    {
                        System.Windows.Forms.DataVisualization.Charting.Series ds = new Series(cvGroup.GetName());

                        if (cvGroup.Items.Count > 0)
                        {
                            formatDataSeries(ds);
                            fillDataSeries(ds, cvGroup.Items, x);
                        }
                        x++;

                        ds.ChartArea = chart.ChartAreas[0].Name;
                        chart.Series.Add(ds);
                        ds.Enabled = true;

                        //Series dsBB = new Series("BoxPlot" + cvGroup.GetName());
                        //dsBB.ChartType = SeriesChartType.BoxPlot;
                        //dsBB["BoxPlotSeries"] = ds.Name;
                        //dsBB["BoxPlotWhiskerPercentile"] = "5";
                        //dsBB["BoxPlotPercentile"] = "30";
                        //dsBB["BoxPlotShowAverage"] = "true";
                        //dsBB["BoxPlotShowMedian"] = "true";
                        //dsBB["BoxPlotShowUnusualValues"] = "true";
                        ////dsBB["MaxPixelPointWidth"] = "15";
                        //chart.Series.Add(dsBB);
                    }
                }
            }
        }
Пример #12
0
        public void RenderToImage(Stream imgStream, RaceResultViewProvider results)
        {
            SetupChart(_chart, results);

            _chart.SaveImage(imgStream, ChartImageFormat.Png);
        }
Пример #13
0
        public void configureAxisY(Axis axis, RaceResultViewProvider results)
        {
            double timeMax = double.NaN;
            double timeMin = double.NaN;

            foreach (var v in results.GetView())
            {
                if (v is RaceResultItem result)
                {
                    if (result.TotalTime != null)
                    {
                        double timeValue = ((TimeSpan)result.TotalTime).TotalMilliseconds / 1000.0;

                        if (double.IsNaN(timeMax) || timeMax < timeValue)
                        {
                            timeMax = timeValue;
                        }

                        if (double.IsNaN(timeMin) || timeMin > timeValue)
                        {
                            timeMin = timeValue;
                        }
                    }
                }
            }

            if (double.IsNaN(timeMin))
            {
                timeMin = 0;
            }
            if (double.IsNaN(timeMax))
            {
                timeMax = 0;
            }

            double yInt, yMinInt;

            yInt = yMinInt = 0;
            getNiceRoundNumbers(ref timeMin, ref timeMax, ref yInt, ref yMinInt);


            axis.Minimum  = timeMin;
            axis.Maximum  = timeMax;
            axis.Interval = yInt;
            axis.MinorTickMark.Interval      = yMinInt;
            axis.MinorTickMark.TickMarkStyle = TickMarkStyle.OutsideArea;
            axis.MinorTickMark.Enabled       = true;
            axis.MinorTickMark.Size          = axis.MajorTickMark.Size / 2;

            axis.IsMarginVisible   = false;
            axis.IsStartedFromZero = false;
            axis.Title             = "Zeit [s]";
            axis.TitleFont         = new System.Drawing.Font("Helvetica", 10);
            axis.LabelAutoFitStyle = LabelAutoFitStyles.None;
            //axis.LabelStyle.Format = "#.##";
            //axis.RoundAxisValues();
            //axis.IntervalType = DateTimeIntervalType.= IntervalAutoMode.

            axis.MajorGrid.LineDashStyle = ChartDashStyle.Solid;
            axis.MajorGrid.LineColor     = System.Drawing.Color.Gray;
            axis.MajorGrid.Interval      = yInt;

            axis.MinorGrid.Enabled       = true;
            axis.MinorGrid.LineDashStyle = ChartDashStyle.Dot;
            axis.MinorGrid.LineColor     = System.Drawing.Color.LightGray;
            axis.MinorGrid.Interval      = yMinInt;


            // Enable scale breaks
            axis.ScaleBreakStyle.Enabled = false;
            //axis.ScaleBreakStyle.BreakLineStyle = BreakLineStyle.Wave;
            //axis.ScaleBreakStyle.Spacing = 2;
            //axis.ScaleBreakStyle.LineWidth = 2;
            //axis.ScaleBreakStyle.LineColor = System.Drawing.Color.Red;
            //axis.ScaleBreakStyle.CollapsibleSpaceThreshold = 10;
            //// If all data points are significantly far from zero, the Chart will calculate the scale minimum value
            //axis.ScaleBreakStyle.StartFromZero = StartFromZero.Yes;
        }
Пример #14
0
        public void Display(RaceResultViewProvider results)
        {
            ResultCharts helper = new ResultCharts();

            helper.SetupChart(msChart.GetChart(), results);
        }