Exemple #1
0
        /// <summary>
        /// Measure axis ruler information.
        /// </summary>
        /// <param name="info">Specified axis data information set.</param>
        /// <param name="data">Data to be measured.</param>
        protected virtual void MeasureAxisRuler(AxisDataInfo info, double data)
        {
            if (info.Minimum > data)
            {
                info.Minimum = data;
            }
            if (info.Maximum < data)
            {
                info.Maximum = data;
            }

            info.LargeStride = (info.Maximum - info.Minimum) / 5;
        }
Exemple #2
0
        /// <summary>
        /// Update specified axis information.
        /// </summary>
        /// <param name="ai">Axis information set.</param>
        /// <param name="minData">Minimum value scanned from data range.</param>
        /// <param name="maxData">Maximum value scanned from data range.</param>
        protected virtual void UpdateAxisInfo(AxisDataInfo ai, double minData, double maxData)
        {
            var clientRect = this.PlotViewContainer;

            double range = maxData - minData;

            var isTransposed = HorizontalAxisInfoView.Orientation == AxisOrientation.Vertical;

            ai.Levels = (int)Math.Ceiling((isTransposed ? clientRect.Width : clientRect.Height) / 30f);

            // when clientRect is zero, nothing to do
            if (double.IsNaN(ai.Levels))
            {
                return;
            }

            if (minData == maxData)
            {
                if (maxData == 0)
                {
                    maxData = ai.Levels;
                }
                else
                {
                    minData = 0;
                }
            }

            int    scaler;
            double stride   = ChartUtility.CalcLevelStride(minData, maxData, ai.Levels, out scaler);
            double nearzero = stride / 1E9;

            ai.Scaler = scaler;

            double m;

            if (!ai.AutoMinimum)
            {
                if (this.AxisOriginToZero(minData, maxData, range))
                {
                    ai.Minimum = 0;
                }
                else
                {
                    m = minData % stride;
                    if (Math.Abs(m) < nearzero)
                    {
                        ai.Minimum = minData;
                    }
                    else
                    {
                        if (minData < 0)
                        {
                            ai.Minimum = minData - stride - m;
                        }
                        else
                        {
                            ai.Minimum = minData - m;
                        }
                    }
                }
            }

            if (!ai.AutoMaximum)
            {
                m = maxData % stride;
                if (Math.Abs(m) < nearzero)
                {
                    ai.Maximum = maxData;
                }
                else
                {
                    ai.Maximum = maxData - m + stride;
                }
            }

            ai.Levels = (int)Math.Round((ai.Maximum - ai.Minimum) / stride);

            ai.LargeStride = stride;
        }
Exemple #3
0
        /// <summary>
        /// Update specified axis information.
        /// </summary>
        /// <param name="ai">Axis information set.</param>
        /// <param name="minData">Minimum value scanned from data range.</param>
        /// <param name="maxData">Maximum value scanned from data range.</param>
        protected virtual void UpdateAxisInfo(AxisDataInfo ai, double minData, double maxData)
        {
            var clientRect = this.PlotViewContainer;

            double range = maxData - minData;

            ai.Levels = (int)Math.Ceiling(clientRect.Height / 30f);

            // when clientRect is zero, nothing to do
            if (double.IsNaN(ai.Levels))
            {
                return;
            }

            if (minData == maxData)
            {
                if (maxData == 0)
                {
                    maxData = ai.Levels;
                }
                else
                {
                    minData = 0;
                }
            }

            int    scaler;
            double stride = ChartUtility.CalcLevelStride(minData, maxData, ai.Levels, out scaler);

            ai.Scaler = scaler;

            double m;

            if (!ai.AutoMinimum)
            {
                if (this.AxisOriginToZero(minData, maxData, range))
                {
                    ai.Minimum = 0;
                }
                else
                {
                    m = minData % stride;
                    if (m == 0)
                    {
                        if (minData == 0)
                        {
                            ai.Minimum = minData;
                        }
                        else
                        {
                            ai.Minimum = minData - stride;
                        }
                    }
                    else
                    {
                        if (minData < 0)
                        {
                            ai.Minimum = minData - stride - m;
                        }
                        else
                        {
                            ai.Minimum = minData - m;
                        }
                    }
                }
            }

            if (!ai.AutoMaximum)
            {
                m = maxData % stride;
                if (m == 0)
                {
                    ai.Maximum = maxData + stride;
                }
                else
                {
                    ai.Maximum = maxData - m + stride;
                }
            }

            ai.Levels = (int)Math.Round((ai.Maximum - ai.Minimum) / stride);

            ai.LargeStride = stride;
        }
Exemple #4
0
 /// <summary>
 /// Create scatter chart component instance.
 /// </summary>
 public ScatterChart()
 {
     SecondaryAxisInfo = new AxisDataInfo();
     AddPlotViewLayer(ScatterChartPlotView = new ScatterChartPlotView(this));
 }