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; }
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; } }