getBrush() public method

public getBrush ( ) : System.Windows.Media.Brush
return System.Windows.Media.Brush
Example #1
0
        public void Update()
        {
            Children.Clear();
            xc = Width / 2.0;
            yc = Height / 2.0;
            rad = scale * System.Math.Min(Width / 2.5, Height / 2.5);

            if (eLegend == Legends.LEGEND || eLegend == Legends.LEGEND_PERCENT)
            {
                rad *= 0.7;
                xc -= 0.8 * (xc - rad);
            }

            double angle = 0;
            double x1 = rad, y1 = 0, x2, y2;
            Size size = new Size(0, 0);
            Color col = Colors.White;
            Brush brush;
            Ellipse ellipse;
            Rectangle rectangle;
            TextBlock textblock;

            for (int i = 0; i < Count; i++)
            {
                double frac = startColor + (endColor - startColor) * i / (double)(Count);
                switch (eHSL)
                {
                    case HSL.HUE:
                        col = (Color)ColorConverter.ConvertFromString(LDColours.HSLtoRGB(360 * frac, saturation, lightness));
                        break;
                    case HSL.SATURATION:
                        col = (Color)ColorConverter.ConvertFromString(LDColours.HSLtoRGB(hue, frac, lightness));
                        break;
                    case HSL.LIGHTNESS:
                        col = (Color)ColorConverter.ConvertFromString(LDColours.HSLtoRGB(hue, saturation, frac));
                        break;
                }
                brush = new SolidColorBrush(col);
                if (centralColour != "")
                {
                    GradientBrush gradientBrush = new GradientBrush("", new Primitive("1=" + centralColour + ";2=" + col.ToString() + ";"), "");
                    brush = gradientBrush.getBrush();
                }

                angle += 2 * System.Math.PI * Values[i] / Total;
                x2 = rad + rad * System.Math.Sin(angle);
                y2 = rad - rad * System.Math.Cos(angle);

                switch (eStyle)
                {
                    case Styles.PIE:
                    case Styles.DOUGHNUT:
                        {
                            PathSegmentCollection pathSegments = new PathSegmentCollection();
                            pathSegments.Add(new LineSegment(new Point(x1, y1), false));
                            pathSegments.Add(new ArcSegment(new Point(x2, y2), new Size(rad, rad), angle, false, SweepDirection.Clockwise, false));
                            PathFigureCollection pathFigures = new PathFigureCollection();
                            pathFigures.Add(new PathFigure(new Point(rad, rad), pathSegments, true));
                            PathFigureCollection figCollection = new PathFigureCollection(pathFigures);

                            ellipse = new Ellipse { Width = 2 * rad, Height = 2 * rad, Fill = brush };
                            ellipse.Clip = new PathGeometry(figCollection);
                            ellipse.Tag = new Segment(xc, yc, rad, rad, Name, Labels[i]);
                            ellipse.MouseDown += new MouseButtonEventHandler(_ValueClickedEvent);
                            Children.Add(ellipse);
                            Chart.SetLeft(ellipse, xc - rad);
                            Chart.SetTop(ellipse, yc - rad);
                        }
                        break;
                    case Styles.BUBBLE:
                        {
                            double sin = System.Math.Sin(System.Math.PI * Values[i] / Total);
                            double r = rad * sin / (1.0 + sin);
                            angle -= System.Math.PI * Values[i] / Total;
                            double x = xc + (rad - r) * System.Math.Sin(angle);
                            double y = yc - (rad - r) * System.Math.Cos(angle);
                            angle += System.Math.PI * Values[i] / Total;
                            ellipse = new Ellipse { Width = 2 * r, Height = 2 * r, Fill = brush };
                            ellipse.Tag = new Segment(x, y, r, r, Name, Labels[i]);
                            ellipse.MouseDown += new MouseButtonEventHandler(_ValueClickedEvent);
                            Children.Add(ellipse);
                            Chart.SetLeft(ellipse, x - r);
                            Chart.SetTop(ellipse, y - r);
                        }
                        break;
                    case Styles.BAR:
                        {
                            double w = rad * (Values[i] - Min) / (Max - Min);
                            double h = rad / (double)Count;
                            double x = xc - rad + w;
                            double y = yc - rad + (2 * i + 1) * h;
                            rectangle = new Rectangle { Width = 2 * w, Height = 2 * h, Fill = brush };
                            rectangle.Tag = new Segment(x, y, w, h, Name, Labels[i]);
                            rectangle.MouseDown += new MouseButtonEventHandler(_ValueClickedEvent);
                            Children.Add(rectangle);
                            Chart.SetLeft(rectangle, x - w);
                            Chart.SetTop(rectangle, y - h);
                        }
                        break;
                    case Styles.COLUMN:
                        {
                            double w = rad / (double)Count;
                            double h = rad * (Values[i] - Min) / (Max - Min);
                            double x = xc - rad + (2 * i + 1) * w;
                            double y = yc + rad - h;
                            rectangle = new Rectangle { Width = 2 * w, Height = 2 * h, Fill = brush };
                            rectangle.Tag = new Segment(x, y, w, h, Name, Labels[i]);
                            rectangle.MouseDown += new MouseButtonEventHandler(_ValueClickedEvent);
                            Children.Add(rectangle);
                            Chart.SetLeft(rectangle, x - w);
                            Chart.SetTop(rectangle, y - h);
                        }
                        break;
                }

                brush = new SolidColorBrush(col);
                x1 = x2;
                y1 = y2;

                if (eLegend == Legends.OVERLAY || eLegend == Legends.PERCENT || eLegend == Legends.LEGEND_PERCENT)
                {
                    textblock = new TextBlock
                    {
                        Text = eLegend == Legends.OVERLAY ? Labels[i] : string.Format("{0:F1}%", 100 * Values[i] / Total),
                        Foreground = foreground,
                        FontFamily = fontFamily,
                        FontSize = fontSize,
                        FontWeight = fontWeight,
                        FontStyle = fontStyle
                    };
                    if (bLegendBackground) textblock.Background = brush;
                    textblock.FontSize *= legendScale;
                    textblock.MouseDown += new MouseButtonEventHandler(_ValueClickedEvent);
                    Children.Add(textblock);
                    textblock.Measure(size);
                    textblock.Arrange(new Rect(size));
                    angle -= System.Math.PI * Values[i] / Total;
                    double w = textblock.ActualWidth / 2.0;
                    double h = textblock.ActualHeight / 2.0;
                    if (eStyle == Styles.PIE)
                    {
                        x2 = xc + 0.67 * rad * System.Math.Sin(angle);
                        y2 = yc - 0.67 * rad * System.Math.Cos(angle);
                    }
                    else if (eStyle == Styles.DOUGHNUT)
                    {
                        x2 = xc + (1 + LDChart.DoughnutFraction) / 2.0 * rad * System.Math.Sin(angle);
                        y2 = yc - (1 + LDChart.DoughnutFraction) / 2.0 * rad * System.Math.Cos(angle);
                    }
                    else if (eStyle == Styles.BUBBLE)
                    {
                        double sin = System.Math.Sin(System.Math.PI * Values[i] / Total);
                        double r = rad * sin / (1.0 + sin);
                        x2 = xc + (rad - r) * System.Math.Sin(angle);
                        y2 = yc - (rad - r) * System.Math.Cos(angle);
                    }
                    else if (eStyle == Styles.BAR)
                    {
                        //x2 = xc - rad + rad * (Values[i] - Min) / (Max - Min);
                        x2 = xc - rad + w + 5;
                        y2 = yc - rad + (2 * i + 1) * rad / (double)Count;
                    }
                    else if (eStyle == Styles.COLUMN)
                    {
                        x2 = xc - rad + (2 * i + 1) * rad / (double)Count;
                        //y2 = yc + rad - rad * (Values[i] - Min) / (Max - Min);
                        y2 = yc + rad - w - 5;
                        RotateTransform rotateTransform = new RotateTransform();
                        rotateTransform.CenterX = w;
                        rotateTransform.CenterY = h;
                        rotateTransform.Angle = -90;
                        textblock.RenderTransform = rotateTransform;
                    }
                    angle += System.Math.PI * Values[i] / Total;
                    textblock.Tag = new Segment(x2, y2, w, h, Name, Labels[i]);
                    Chart.SetLeft(textblock, x2 - w);
                    Chart.SetTop(textblock, y2 - h);
                    Canvas.SetZIndex(textblock, 1);
                }

                if (eLegend == Legends.LEGEND || eLegend == Legends.LEGEND_PERCENT)
                {
                    rectangle = new Rectangle { Width = 10 * legendScale, Height = 10 * legendScale, Fill = brush };
                    Children.Add(rectangle);
                    x2 = 2 * xc;
                    y2 = (Width - 15 * Count * legendScale) / 2 + 15 * i * legendScale;
                    Chart.SetLeft(rectangle, x2);
                    Chart.SetTop(rectangle, y2);
                    Canvas.SetZIndex(rectangle, 1);

                    textblock = new TextBlock
                    {
                        Text = Labels[i],
                        Foreground = foreground,
                        FontFamily = fontFamily,
                        FontSize = fontSize,
                        FontWeight = fontWeight,
                        FontStyle = fontStyle
                    };
                    if (bLegendBackground) textblock.Background = brush;
                    textblock.FontSize *= legendScale;
                    Children.Add(textblock);
                    textblock.Measure(size);
                    textblock.Arrange(new Rect(size));
                    Chart.SetLeft(textblock, x2 + 15 * legendScale);
                    Chart.SetTop(textblock, y2 + 5 * legendScale - textblock.ActualHeight / 2.0);
                    Canvas.SetZIndex(textblock, 1);
                }
            }

            if (eStyle == Styles.DOUGHNUT)
            {
                ellipse = new Ellipse { Width = 2 * LDChart.DoughnutFraction * rad, Height = 2 * LDChart.DoughnutFraction * rad, Fill = Background };
                Children.Add(ellipse);
                Chart.SetLeft(ellipse, xc - LDChart.DoughnutFraction * rad);
                Chart.SetTop(ellipse, yc - LDChart.DoughnutFraction * rad);
            }
        }