Пример #1
0
        private static void SetUpYAxis(BasicChart d)
        {
            var MyClass = (BasicChart)d;

            // Only calcualte the min and max values if AutoScale is true
            if (MyClass.AutoScale)
            {
                double TempYMax, TempYMin;
                TempYMax = double.MinValue;
                TempYMin = double.MaxValue;

                if (MyClass.ItemsSource == null)
                {
                    return;
                }
                foreach (var ClassItem in MyClass.ItemsSource)
                {
                    IEnumerable MyCollectionItem = (IEnumerable)GetPropValue(ClassItem, MyClass.DataCollectionName);
                    foreach (var item in MyCollectionItem)
                    {
                        double value = (double)GetPropValue(item, MyClass.DisplayMemberValues);
                        if (value < TempYMin)
                        {
                            TempYMin = value;
                        }

                        if (value > TempYMax)
                        {
                            TempYMax = value;
                        }
                    }
                }

                MyClass.YMax = TempYMax + (TempYMax - TempYMin) * 0.05d;
                MyClass.YMin = TempYMin - (TempYMax - TempYMin) * 0.05d;
            }

            MyClass.YItems = new ObservableCollection <YAxisLabels>();

            double deltaY = (MyClass.YMax - MyClass.YMin) / (MyClass.NumberOfYSteps);

            for (int j = 0; j <= MyClass.NumberOfYSteps; j++)
            {
                var YLabelObject = new YAxisLabels();
                YLabelObject.YLabel    = (MyClass.YMin + (double)j * deltaY).ToString(MyClass.DoubleToString);
                YLabelObject.YLocation = ((double)j) * (double)MyClass.PlotHeight / (double)MyClass.NumberOfYSteps;
                MyClass.YItems.Add(YLabelObject);
            }
        }
Пример #2
0
        private static void SetUpGraph(BasicChart sender, IEnumerable ItemsSource)
        {
            List <PointCollection> ListOfChartCurves = new List <PointCollection>();
            List <double>          origianlValues    = new List <double>();

            if (ItemsSource == null)
            {
                return;
            }

            //Loop trough all the sources
            foreach (var ClassItem in ItemsSource)
            {
                PointCollection PointsOnChart = new PointCollection();
                int             X             = 0;

                // Get the Collection of dataitems from the current source
                IEnumerable MyCollectionItem = (IEnumerable)GetPropValue(ClassItem, sender.DataCollectionName);

                // For all the chart points, get the relevant Y values
                foreach (var item in MyCollectionItem)
                {
                    var YValues = GetPropValue(item, sender.DisplayMemberValues);

                    // No X value filters are applied
                    if (sender.XMin == sender.XMax)
                    {
                        if (YValues is double)
                        {
                            origianlValues.Add((double)YValues);
                            if (double.IsInfinity((double)YValues) || double.IsNaN((double)YValues) || double.IsNegativeInfinity((double)YValues) || double.IsPositiveInfinity((double)YValues))
                            {
                                PointsOnChart.Add(new Point(0, double.NaN));
                            }
                            else
                            {
                                double YValue = ((double)YValues - sender.YMin) / (sender.YMax - sender.YMin) * sender.PlotHeight;
                                PointsOnChart.Add(new Point(0, YValue));
                            }
                        }
                    }
                    else if (sender.XMin <= X && X <= sender.XMax)
                    {
                        if (YValues is double)
                        {
                            origianlValues.Add((double)YValues);
                            if (double.IsInfinity((double)YValues) || double.IsNaN((double)YValues) || double.IsNegativeInfinity((double)YValues) || double.IsPositiveInfinity((double)YValues))
                            {
                                PointsOnChart.Add(new Point(0, double.NaN));
                            }
                            else
                            {
                                double YValue = ((double)YValues - sender.YMin) / (sender.YMax - sender.YMin) * sender.PlotHeight;
                                PointsOnChart.Add(new Point(0, YValue));
                            }
                        }
                    }


                    X++;
                }
                ListOfChartCurves.Add(PointsOnChart);
            }

            ObservableCollection <FrameworkElement> items = new ObservableCollection <FrameworkElement>();


            for (int k = 0; k < ListOfChartCurves.Count; k++)
            {
                for (int i = 0; i < ListOfChartCurves[k].Count; i++)
                {
                    double pos = (double)i * sender.PlotWidth / (double)ListOfChartCurves[k].Count;
                    ListOfChartCurves[k][i] = new Point(pos, ListOfChartCurves[k][i].Y);

                    if (sender.ShowGraphPoints && sender.CurveVisibility[k].IsChecked)
                    {
                        Ellipse CurvePoint = new Ellipse();
                        CurvePoint.Width   = 10;
                        CurvePoint.Height  = 10;
                        CurvePoint.Fill    = DistinctColorList[k];
                        CurvePoint.ToolTip = origianlValues[i].ToString();
                        Canvas.SetLeft(CurvePoint, ListOfChartCurves[k][i].X - 5);
                        Canvas.SetTop(CurvePoint, ListOfChartCurves[k][i].Y - 5);
                        items.Add(CurvePoint);
                    }
                }
            }



            for (int k = 0; k < ListOfChartCurves.Count; k++)
            {
                if (sender.CurveVisibility[k].IsChecked)
                {
                    PointCollection        PointsOnChart     = ListOfChartCurves[k];
                    List <PointCollection> MyLines           = new List <PointCollection>();
                    PointCollection        CurrentCollection = new PointCollection();

                    // Create lines even if points are disjoint/missing
                    for (int i = 0; i < PointsOnChart.Count; i++)
                    {
                        // Current point is mission
                        if (double.IsNaN(PointsOnChart[i].Y))
                        {
                            // Any values that should be stored in previous points?
                            if (CurrentCollection.Count != 0)
                            {
                                MyLines.Add(CurrentCollection.Clone());
                            }

                            // Create a new line to store any new valid points found
                            CurrentCollection = new PointCollection();
                        }
                        else
                        {
                            // It's a valid point, add it to the current pointcollection
                            CurrentCollection.Add(PointsOnChart[i]);
                        }
                    }

                    // Add the last pontcollection, if it has any points in it.
                    if (CurrentCollection.Count != 0)
                    {
                        MyLines.Add(CurrentCollection.Clone());
                    }

                    //Draw all the lines found in the curve
                    foreach (PointCollection item in MyLines)
                    {
                        Polyline Curve = new Polyline();
                        if (sender.SmoothCurve)
                        {
                            Curve.Points = CatmullRomSpline(item, 0.01);
                        }
                        else
                        {
                            Curve.Points = item;
                        }

                        Curve.StrokeThickness = 2;
                        Curve.Stroke          = DistinctColorList[k];
                        items.Add(Curve);
                    }
                }
            }

            sender.PlotArea.ItemsSource = items;
        }
Пример #3
0
 private static void OnCurveVisibilityChanged(BasicChart sender, IEnumerable NewValues)
 {
     SetUpGraph(sender, NewValues);
 }
Пример #4
0
        private static void SetUpXAxis(BasicChart d)
        {
            ObservableCollection <XAxisLabels> Xitems = new ObservableCollection <XAxisLabels>();

            var MyBasicChart = (BasicChart)d;

            if (MyBasicChart.ItemsSource == null)
            {
                return;
            }

            int count = 0;

            foreach (var item in MyBasicChart.ItemsSource)
            {
                count += 1;
            }

            if (count == 0)
            {
                return;
            }

            IEnumerable MyItemsSource = MyBasicChart.ItemsSource;

            var GetItemsSourceEnumerator = MyItemsSource.GetEnumerator();

            GetItemsSourceEnumerator.MoveNext();

            var FirstItemsSource = GetItemsSourceEnumerator.Current;

            IEnumerable test2       = (IEnumerable)GetPropValue(FirstItemsSource, MyBasicChart.DataCollectionName);
            int         ItemsNumber = 0;

            foreach (var item in test2)
            {
                var Xlables = GetPropValue(item, MyBasicChart.DisplayMemberLabels);
                if (MyBasicChart.XMin == MyBasicChart.XMax)
                {
                    // Set up the X labels
                    var XLabelObject = new XAxisLabels();
                    if ((MyBasicChart.StartSkipAt <= ItemsNumber) &&
                        (ItemsNumber - MyBasicChart.StartSkipAt) % MyBasicChart.SkipLabels == 0)
                    {
                        XLabelObject.XLabel = Xlables.ToString();
                    }

                    Xitems.Add(XLabelObject);
                }
                else
                {
                    if (MyBasicChart.XMin <= ItemsNumber && ItemsNumber <= MyBasicChart.XMax)
                    {
                        // Set up the X labels
                        var XLabelObject = new XAxisLabels();
                        if ((MyBasicChart.StartSkipAt <= ItemsNumber) &&
                            (ItemsNumber - MyBasicChart.StartSkipAt) % MyBasicChart.SkipLabels == 0)
                        {
                            XLabelObject.XLabel = Xlables.ToString();
                        }

                        Xitems.Add(XLabelObject);
                    }
                }

                ItemsNumber++;
            }

            for (int i = 0; i < Xitems.Count; i++)
            {
                double pos = (double)i * (double)MyBasicChart.PlotWidth / (double)Xitems.Count;
                Xitems[i].LabelAngle = 45;
                Xitems[i].XLocation  = pos;
            }

            MyBasicChart.XAxis.ItemsSource = Xitems;
        }