Ejemplo n.º 1
0
 public PngTextDrawer(IWordsPlacer wordsPlacer, IBrushSelector brushSelector, FontFamily fontFamily, Color backgroundColor, Size imageSize)
 {
     this.wordsPlacer     = wordsPlacer;
     this.brushSelector   = brushSelector;
     this.backgroundColor = backgroundColor;
     textFontFamily       = fontFamily;
     this.imageSize       = imageSize;
 }
Ejemplo n.º 2
0
        private void DrawPieChart(Canvas canvas, double centerX, double centerY, double innerRadius, double outerRadius, IBrushSelector brushSelector, bool isLegendSymbol)
        {
            canvas.Children.Clear();

            // Add pie chart sectors and add up data values.
            double sum = 0;

            for (int i = 0; i < Data.Count; ++i)
            {
                DataPoint data = Data[i];

                // Create pie chart sector.
                var element = CreateDataPoint(data.DataContext ?? data) as PieChartItem;
                if (element == null)
                {
                    // Unsupported DataPointTemplate. Do not draw anything.
                    return;
                }

                element.CenterX     = centerX;
                element.CenterY     = centerY;
                element.InnerRadius = innerRadius;
                element.OuterRadius = outerRadius;

                if (brushSelector != null)
                {
                    var brush = brushSelector.SelectBrush(data.DataContext, i);
                    if (brush != null)
                    {
                        element.Background = brush;
                    }
                }

                if (isLegendSymbol)
                {
                    // Override dependency properties which might be set using data binding
                    // or styles.
                    element.InnerLabel = null;
                    element.OuterLabel = null;
                    element.Offset     = 0;

                    element.IsHitTestVisible = false;
                }

                canvas.Children.Add(element);

                sum += data.Y;
            }

            // Set start and end angles of sectors.
            double startAngle   = 0;
            double valueToAngle = 1 / sum * 2.0 * Math.PI;

            for (int i = 0; i < Data.Count; ++i)
            {
                double angle    = Data[i].Y * valueToAngle;
                double endAngle = startAngle + angle;

                var element = (PieChartItem)canvas.Children[i];
                element.StartAngle = startAngle;
                element.EndAngle   = endAngle;

                if (Numeric.IsZero(angle))
                {
                    element.Visibility = Visibility.Collapsed;
                }

                startAngle = endAngle;
            }
        }