Ejemplo n.º 1
0
        private static void FillPointAndFigureData(Series series, Series originalData)
        {
            int num = 0;

            if (series.IsAttributeSet("UsedYValueHigh"))
            {
                try
                {
                    num = int.Parse(((DataPointAttributes)series)["UsedYValueHigh"], CultureInfo.InvariantCulture);
                }
                catch
                {
                    throw new InvalidOperationException(SR.ExceptionPointAndFigureUsedYValueHighInvalidFormat);
                }
                if (num >= series.YValuesPerPoint)
                {
                    throw new InvalidOperationException(SR.ExceptionPointAndFigureUsedYValueHighOutOfRange);
                }
            }
            int num2 = 1;

            if (series.IsAttributeSet("UsedYValueLow"))
            {
                try
                {
                    num2 = int.Parse(((DataPointAttributes)series)["UsedYValueLow"], CultureInfo.InvariantCulture);
                }
                catch
                {
                    throw new InvalidOperationException(SR.ExceptionPointAndFigureUsedYValueLowInvalidFormat);
                }
                if (num2 >= series.YValuesPerPoint)
                {
                    throw new InvalidOperationException(SR.ExceptionPointAndFigureUsedYValueLowOutOfrange);
                }
            }
            Color  color = ChartGraphics.GetGradientColor(series.Color, Color.Black, 0.5);
            string text  = ((DataPointAttributes)series)["PriceUpColor"];

            if (text != null)
            {
                try
                {
                    ColorConverter colorConverter = new ColorConverter();
                    color = (Color)colorConverter.ConvertFromString(null, CultureInfo.InvariantCulture, text);
                }
                catch
                {
                    throw new InvalidOperationException(SR.ExceptionPointAndFigureUpBrickColorInvalidFormat);
                }
            }
            double minPrice = default(double);
            double maxPrice = default(double);

            PointAndFigureChart.GetPriceRange(originalData, num, num2, out minPrice, out maxPrice);
            double boxSize        = PointAndFigureChart.GetBoxSize(series, originalData, num, num2, minPrice, maxPrice);
            double reversalAmount = PointAndFigureChart.GetReversalAmount(series, originalData, num, num2, minPrice, maxPrice);
            double num3           = double.NaN;
            double num4           = double.NaN;
            int    num5           = 0;
            int    num6           = 0;

            foreach (DataPoint point in originalData.Points)
            {
                if (!point.Empty)
                {
                    bool flag = false;
                    int  num7 = 0;
                    if (double.IsNaN(num3))
                    {
                        num3 = point.YValues[num];
                        num4 = point.YValues[num2];
                        num6++;
                        continue;
                    }
                    int num8 = 0;
                    if (num5 == 1 || num5 == 0)
                    {
                        if (point.YValues[num] >= num3 + boxSize)
                        {
                            num8 = 1;
                            num7 = (int)Math.Floor((point.YValues[num] - num3) / boxSize);
                        }
                        else if (point.YValues[num2] <= num3 - boxSize * reversalAmount)
                        {
                            num8 = -1;
                            num7 = (int)Math.Floor((num3 - point.YValues[num2]) / boxSize);
                        }
                        else if (point.YValues[num] <= num4 - boxSize)
                        {
                            flag = true;
                            num7 = (int)Math.Floor((num4 - point.YValues[num]) / boxSize);
                            if (series.Points.Count > 0)
                            {
                                series.Points[series.Points.Count - 1].YValues[0] -= (double)num7 * boxSize;
                            }
                            num4 -= (double)num7 * boxSize;
                        }
                    }
                    if (num8 == 0 && (num5 == -1 || num5 == 0))
                    {
                        if (point.YValues[num2] <= num4 - boxSize)
                        {
                            num8 = -1;
                            num7 = (int)Math.Floor((num4 - point.YValues[num2]) / boxSize);
                        }
                        else if (point.YValues[num] >= num4 + boxSize * reversalAmount)
                        {
                            num8 = 1;
                            num7 = (int)Math.Floor((point.YValues[num] - num4) / boxSize);
                        }
                        else if (point.YValues[num2] >= num3 + boxSize)
                        {
                            flag = true;
                            num7 = (int)Math.Floor((num3 - point.YValues[num2]) / boxSize);
                            if (series.Points.Count > 0)
                            {
                                series.Points[series.Points.Count - 1].YValues[1] += (double)num7 * boxSize;
                            }
                            num3 += (double)num7 * boxSize;
                        }
                    }
                    if (num8 != 0 && !flag)
                    {
                        if (num8 == num5)
                        {
                            if (num8 == 1)
                            {
                                series.Points[series.Points.Count - 1].YValues[1] += (double)num7 * boxSize;
                                num3 += (double)num7 * boxSize;
                                ((DataPointAttributes)series.Points[series.Points.Count - 1])["OriginalPointIndex"] = num6.ToString(CultureInfo.InvariantCulture);
                            }
                            else
                            {
                                series.Points[series.Points.Count - 1].YValues[0] -= (double)num7 * boxSize;
                                num4 -= (double)num7 * boxSize;
                                ((DataPointAttributes)series.Points[series.Points.Count - 1])["OriginalPointIndex"] = num6.ToString(CultureInfo.InvariantCulture);
                            }
                        }
                        else
                        {
                            DataPoint dataPoint2 = point.Clone();
                            ((DataPointAttributes)dataPoint2)["OriginalPointIndex"] = num6.ToString(CultureInfo.InvariantCulture);
                            dataPoint2.series = series;
                            dataPoint2.XValue = point.XValue;
                            if (num8 == 1)
                            {
                                dataPoint2.Color = color;
                                ((DataPointAttributes)dataPoint2)["PriceUpPoint"] = "true";
                                dataPoint2.YValues[0] = num4 + ((num5 != 0) ? boxSize : 0.0);
                                dataPoint2.YValues[1] = dataPoint2.YValues[0] + (double)num7 * boxSize - ((num5 != 0) ? boxSize : 0.0);
                            }
                            else
                            {
                                dataPoint2.YValues[1] = num3 - ((num5 != 0) ? boxSize : 0.0);
                                dataPoint2.YValues[0] = dataPoint2.YValues[1] - (double)num7 * boxSize;
                            }
                            num3 = dataPoint2.YValues[1];
                            num4 = dataPoint2.YValues[0];
                            series.Points.Add(dataPoint2);
                        }
                        num5 = num8;
                    }
                }
                num6++;
            }
        }
Ejemplo n.º 2
0
 public static void PrepareData(Series series, IServiceContainer serviceContainer)
 {
     if (string.Compare(series.ChartTypeName, "PointAndFigure", StringComparison.OrdinalIgnoreCase) == 0 && series.IsVisible())
     {
         Chart chart = (Chart)serviceContainer.GetService(typeof(Chart));
         if (chart == null)
         {
             throw new InvalidOperationException(SR.ExceptionPointAndFigureNullReference);
         }
         ChartArea chartArea = chart.ChartAreas[series.ChartArea];
         foreach (Series item in chart.Series)
         {
             if (item.IsVisible() && item != series && chartArea == chart.ChartAreas[item.ChartArea])
             {
                 throw new InvalidOperationException(SR.ExceptionPointAndFigureCanNotCombine);
             }
         }
         if (!PointAndFigureChart.customizeSubscribed)
         {
             PointAndFigureChart.customizeSubscribed = true;
             chart.Customize += PointAndFigureChart.OnCustomize;
         }
         string name = "POINTANDFIGURE_ORIGINAL_DATA_" + series.Name;
         if (chart.Series.GetIndex(name) == -1)
         {
             Series series3 = new Series(name, series.YValuesPerPoint);
             series3.Enabled         = false;
             series3.ShowInLegend    = false;
             series3.YValuesPerPoint = series.YValuesPerPoint;
             chart.Series.Add(series3);
             foreach (DataPoint point in series.Points)
             {
                 series3.Points.Add(point);
             }
             series.Points.Clear();
             if (series.IsAttributeSet("TempDesignData"))
             {
                 ((DataPointAttributes)series3)["TempDesignData"] = "true";
             }
             ((DataPointAttributes)series)["OldXValueIndexed"]   = series.XValueIndexed.ToString(CultureInfo.InvariantCulture);
             ((DataPointAttributes)series)["OldYValuesPerPoint"] = series.YValuesPerPoint.ToString(CultureInfo.InvariantCulture);
             series.XValueIndexed = true;
             if (series.ChartArea.Length > 0 && series.IsXValueDateTime())
             {
                 Axis axis = chartArea.GetAxis(AxisName.X, series.XAxisType, series.XSubAxisName);
                 if (axis.Interval == 0.0 && axis.IntervalType == DateTimeIntervalType.Auto)
                 {
                     bool   flag = false;
                     double num  = 1.7976931348623157E+308;
                     double num2 = -1.7976931348623157E+308;
                     foreach (DataPoint point2 in series3.Points)
                     {
                         if (!point2.Empty)
                         {
                             if (point2.XValue != 0.0)
                             {
                                 flag = true;
                             }
                             if (point2.XValue > num2)
                             {
                                 num2 = point2.XValue;
                             }
                             if (point2.XValue < num)
                             {
                                 num = point2.XValue;
                             }
                         }
                     }
                     if (flag)
                     {
                         ((DataPointAttributes)series)["OldAutomaticXAxisInterval"] = "true";
                         DateTimeIntervalType intervalType = DateTimeIntervalType.Auto;
                         axis.interval     = ((AxisScale)axis).CalcInterval(num, num2, true, out intervalType, series.XValueType);
                         axis.intervalType = intervalType;
                     }
                 }
             }
             PointAndFigureChart.FillPointAndFigureData(series, series3);
         }
     }
 }