public ClassBreakViewModel()
 {
     minimum               = 0;
     classesCount          = 5;
     baseBrush             = new GeoSolidBrush(GeoColor.FromHtml("#9ACD32"));
     endBrush              = new GeoSolidBrush(GeoColor.StandardColors.Red);
     colorFields           = new String[] { "Hue", "Saturation", "Lightness" };
     selectedColorField    = ClassBreakBy.Hue;
     startColorName        = "Start Color";
     endColorName          = "End Color";
     colorPickerVisibility = Visibility.Visible;
     sliderVisibility      = Visibility.Collapsed;
 }
        private Collection <GeoSolidBrush> GetBreakdownBrushes(int breakCount, GeoSolidBrush baseBrush, GeoSolidBrush endBrush, ClassBreakBy breakColorMode)
        {
            Collection <GeoSolidBrush> brushes = new Collection <GeoSolidBrush>();
            HSL baseHsl = GetHslFromRgb(baseBrush.Color.RedComponent, baseBrush.Color.GreenComponent, baseBrush.Color.BlueComponent);
            HSL endHsl  = null;

            if (breakColorMode == ClassBreakBy.Hue)
            {
                endHsl = GetHslFromRgb(endBrush.Color.RedComponent, endBrush.Color.GreenComponent, endBrush.Color.BlueComponent);
                var averageH     = (endHsl.Hue - baseHsl.Hue) / (breakCount - 1);
                var averageS     = (endHsl.Saturation - baseHsl.Saturation) / (breakCount - 1);
                var averageL     = (endHsl.Luminance - baseHsl.Luminance) / (breakCount - 1);
                var averageAlpha = (endBrush.Color.AlphaComponent - baseBrush.Color.AlphaComponent) / (breakCount - 1);
                brushes.Add(baseBrush);
                for (int i = 1; i <= breakCount - 2; i++)
                {
                    HSL generatedHsl = new HSL(baseHsl.Hue, baseHsl.Saturation, baseHsl.Luminance);
                    generatedHsl.Hue        += averageH * i;
                    generatedHsl.Saturation += averageS * i;
                    generatedHsl.Luminance  += averageL * i;

                    brushes.Add(GetSolidBrushFromHsl((byte)((int)baseBrush.Color.AlphaComponent + averageAlpha * i), generatedHsl));
                }
                brushes.Add(endBrush);
            }
            else
            {
                endHsl = new HSL(baseHsl.Hue, baseHsl.Saturation, baseHsl.Luminance);
                if (breakColorMode == ClassBreakBy.Saturation)
                {
                    endHsl.Saturation = this.currentValue;
                    var averageS = (baseHsl.Saturation - currentValue) / (breakCount - 1);
                    brushes.Add(GetSolidBrushFromHsl(baseBrush.Color.AlphaComponent, endHsl));
                    for (int i = 1; i <= breakCount - 2; i++)
                    {
                        HSL generatedHsl = new HSL(endHsl.Hue, endHsl.Saturation, endHsl.Luminance);
                        generatedHsl.Saturation += averageS * i;
                        brushes.Add(GetSolidBrushFromHsl(baseBrush.Color.AlphaComponent, generatedHsl));
                    }
                    brushes.Add(baseBrush);
                }
                else
                {
                    endHsl.Luminance = this.currentValue;
                    var averageL = (baseHsl.Luminance - currentValue) / (breakCount - 1);
                    brushes.Add(GetSolidBrushFromHsl(baseBrush.Color.AlphaComponent, endHsl));
                    for (int i = 1; i <= breakCount - 2; i++)
                    {
                        HSL generatedHsl = new HSL(endHsl.Hue, endHsl.Saturation, endHsl.Luminance);
                        generatedHsl.Luminance += averageL * i;

                        brushes.Add(GetSolidBrushFromHsl(baseBrush.Color.AlphaComponent, generatedHsl));
                    }
                    brushes.Add(baseBrush);
                }
            }
            return(brushes);
        }