コード例 #1
0
 public static void PrepareData(Series series, IServiceContainer serviceContainer)
 {
     if (string.Compare(series.ChartTypeName, "Kagi", StringComparison.OrdinalIgnoreCase) == 0 && series.IsVisible())
     {
         Chart chart = (Chart)serviceContainer.GetService(typeof(Chart));
         if (chart == null)
         {
             throw new InvalidOperationException(SR.ExceptionKagiNullReference);
         }
         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.ExceptionKagiCanNotCombine);
             }
         }
         string name = "KAGI_ORIGINAL_DATA_" + series.Name;
         if (chart.Series.GetIndex(name) == -1)
         {
             Series series3 = new Series(name, series.YValuesPerPoint);
             series3.Enabled      = false;
             series3.ShowInLegend = false;
             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;
                     }
                 }
             }
             KagiChart.FillKagiData(series, series3);
         }
     }
 }
コード例 #2
0
        private static void FillKagiData(Series series, Series originalData)
        {
            int num = 0;

            if (series.IsAttributeSet("UsedYValue"))
            {
                try
                {
                    num = int.Parse(((DataPointAttributes)series)["UsedYValue"], CultureInfo.InvariantCulture);
                }
                catch
                {
                    throw new InvalidOperationException(SR.ExceptionKagiAttributeFormatInvalid("UsedYValue"));
                }
                if (num >= series.YValuesPerPoint)
                {
                    throw new InvalidOperationException(SR.ExceptionKagiAttributeOutOfRange("UsedYValue"));
                }
            }
            double num2 = 0.0;
            double num3 = KagiChart.GetReversalAmount(series, originalData, num, out num2);
            double num4 = double.NaN;
            int    num5 = 0;
            int    num6 = 0;

            foreach (DataPoint point in originalData.Points)
            {
                if (double.IsNaN(num4))
                {
                    num4 = point.YValues[num];
                    DataPoint dataPoint2 = point.Clone();
                    dataPoint2.series     = series;
                    dataPoint2.XValue     = point.XValue;
                    dataPoint2.YValues[0] = point.YValues[num];
                    series.Points.Add(dataPoint2);
                    num6++;
                }
                else
                {
                    if (num2 != 0.0)
                    {
                        num3 = num4 / 100.0 * num2;
                    }
                    int num7 = 0;
                    num7 = ((point.YValues[num] > num4) ? 1 : ((point.YValues[num] < num4) ? (-1) : 0));
                    if (num7 != 0)
                    {
                        if (num7 == num5)
                        {
                            series.Points[series.Points.Count - 1].YValues[0] = point.YValues[num];
                            ((DataPointAttributes)series.Points[series.Points.Count - 1])["OriginalPointIndex"] = num6.ToString(CultureInfo.InvariantCulture);
                        }
                        else
                        {
                            if (Math.Abs(point.YValues[num] - num4) < num3)
                            {
                                num6++;
                                continue;
                            }
                            DataPoint dataPoint3 = point.Clone();
                            ((DataPointAttributes)dataPoint3)["OriginalPointIndex"] = num6.ToString(CultureInfo.InvariantCulture);
                            dataPoint3.series     = series;
                            dataPoint3.XValue     = point.XValue;
                            dataPoint3.YValues[0] = point.YValues[num];
                            series.Points.Add(dataPoint3);
                        }
                        num4 = point.YValues[num];
                        num5 = num7;
                    }
                    num6++;
                }
            }
        }