Пример #1
0
 private static IList <ChartSerie> Convert(IEnumerable source, string serieName, string serieValue, string pointName, string pointValue)
 {
     try
     {
         var result    = new List <ChartSerie>();
         var serieType = source.GetType().GenericTypeArguments[0];
         foreach (var item in source)
         {
             var serie = new ChartSerie
             {
                 Name   = serieType.GetProperty(serieName).GetValue(item) as string,
                 Values = new List <DataPoint>()
             };
             if (source.Cast <object>().Count() > 1 && //more than single serie - name is required
                 (string.IsNullOrEmpty(serie.Name) || result.Any(d => d.Name == serie.Name)))
             {
                 continue;
             }
             var points = serieType.GetProperty(serieValue).GetValue(item) as IEnumerable;
             if (points == null)
             {
                 continue;
             }
             var pointType = points.GetType().GenericTypeArguments[0];
             foreach (var p in points)
             {
                 var dataPoint = new DataPoint
                 {
                     Name  = pointType.GetProperty(pointName).GetValue(p) as string,
                     Value = System.Convert.ToDouble(pointType.GetProperty(pointValue).GetValue(p))
                 };
                 if (string.IsNullOrEmpty(dataPoint.Name))
                 {
                     continue;
                 }
                 serie.Values.Add(dataPoint);
             }
             result.Add(serie);
         }
         return(result);
     }
     catch
     {
         return(new List <ChartSerie>());
     }
 }
Пример #2
0
        private string CreatePath(ChartSerie serie, double maxItemsCount)
        {
            var builder = new StringBuilder();

            if (maxItemsCount == 0)
            {
                maxItemsCount = 1;
            }
            for (var i = 0; i < serie.Values.Count; i++)
            {
                var x = (i * ChartArea.ActualWidth) / maxItemsCount;
                var y = (ChartArea.ActualHeight * (1 - serie.Values[i].Value / MaximalValue.Value));
                builder.AppendFormat(i == 0 ? " M {0:0.00} {1:0.00} " : " L {0:0.00} {1:0.00} ", x, y);
            }
            if (ChartType == ChartType.Area)
            {
                builder.AppendFormat("V {0:0.00} H {1:0.00} Z", ChartArea.ActualHeight, (1 / MaximalValue.Value));
            }
            return(builder.ToString().Replace(",", "."));
        }
Пример #3
0
        private IEnumerable <Ellipse> CreateDataPoints(ChartSerie serie, Brush serieBrush, double maxItemsCount)
        {
            var list = new List <Ellipse>();

            for (var i = 0; i < serie.Values.Count; i++)
            {
                var x = (i * ChartArea.ActualWidth) / maxItemsCount;
                var y = (ChartArea.ActualHeight * (1 - serie.Values[i].Value / MaximalValue.Value));

                list.Add(new Ellipse
                {
                    Width   = EllipseWidth,
                    Height  = EllipseWidth,
                    Fill    = serieBrush,
                    Margin  = new Thickness(x - Radious, y - Radious, (ChartArea.ActualWidth - x - Radious), (ChartArea.ActualHeight - y - Radious)),
                    ToolTip = Converter != null
                            ? Converter.Convert(new object[] { serie.Values[i].Name, serie.Values[i].Value }, null, null, null) as string
                            : string.Format(DataPointStringFormat, serie.Values[i].Name, serie.Values[i].Value),
                    Opacity = 1
                });
            }
            return(list);
        }
Пример #4
0
        private void AddBackgroundSerie(int maxCount)
        {
            var serie = new ChartSerie
            {
                Name   = "__bck",
                Values = new List <DataPoint> {
                    new DataPoint {
                        Value = MinimalValue.Value
                    }, new DataPoint {
                        Value = MaximalValue.Value
                    }
                }
            };
            var path = CreatePath(serie, maxCount);

            ChartArea.Children.Add(new Path
            {
                Data                = Geometry.Parse(path),
                Stroke              = Brushes.Transparent,
                VerticalAlignment   = VerticalAlignment.Stretch,
                HorizontalAlignment = HorizontalAlignment.Stretch,
                Visibility          = Visibility.Visible
            });
        }