Esempio n. 1
0
        /// <summary>
        /// Checks whether intersection region of two ranges is not empty.
        /// </summary>
        /// <param name="range">the DoubleRange</param>
        /// <returns><b>true</b> if  intersection is not empty</returns>
        public bool Intersects(DoubleRange range)
        {
            if (this.IsEmpty || this.IsEmpty)
            {
                return(false);
            }

            return(this.Inside(range.m_start) || this.Inside(range.m_end) || range.Inside(this.m_start) || range.Inside(this.m_end));
        }
Esempio n. 2
0
        internal double CalculateValueToCoefficient(double value)
        {
            double      result = 0;
            double      length;
            double      spacing            = 5;
            DoubleRange visibleActualRange = DoubleRange.Empty;

            length = this.Orientation == Orientation.Horizontal ? AvailableSize.Width
                      : AvailableSize.Height;

            foreach (var range in AxisRanges)
            {
                visibleActualRange += range;
            }

            for (int i = 0; i < AxisRanges.Count; i++)
            {
                if (BreakRanges != null && i < BreakRanges.Count)
                {
                    spacing = this.BreakRangesInfo[BreakRanges[i]].BreakSpacing;
                }

                if (visibleActualRange.Inside(value))
                {
                    if (AxisRanges[i].Inside(value))
                    {
                        var start = AxisRanges[i].Start;
                        var delta = AxisRanges[i].Delta;
                        result += (AxisLength[i] / length)
                                  * (value - start) / delta;
                        break;
                    }

                    if (BreakRanges != null && i < BreakRanges.Count && value > BreakRanges[i].Start && value < BreakRanges[i].End)
                    {
                        result += ((AxisLength[i]) / length);
                        result += (((value - BreakRanges[i].Start)) / BreakRanges[i].Delta) * (spacing / length);
                        break;
                    }

                    result += ((AxisLength[i] + spacing) / length);
                }
                else
                {
                    result = (value - visibleActualRange.Start) / visibleActualRange.Delta;
                }
            }

            return(result);
        }
Esempio n. 3
0
        private double CalculateCoefficientToValue(double value)
        {
            double length;
            double result     = double.NaN;
            double coeffValue = 0;
            double spacing    = 5;

            length = this.Orientation == Orientation.Horizontal ? AvailableSize.Width :
                     AvailableSize.Height;

            for (int i = 0; i < AxisRanges.Count; i++)
            {
                var brkCoeff = DoubleRange.Empty;
                if (BreakRanges != null && i < BreakRanges.Count)
                {
                    spacing  = this.BreakRangesInfo[BreakRanges[i]].BreakSpacing;
                    brkCoeff = new DoubleRange(ValueToCoefficient(BreakRanges[i].Start), ValueToCoefficient(BreakRanges[i].End));
                }

                var coeffRange = new DoubleRange(ValueToCoefficient(AxisRanges[i].Start), ValueToCoefficient(AxisRanges[i].End));

                if (coeffRange.Inside(value))
                {
                    result = AxisRanges[i].Start + (AxisRanges[i].Delta * ((value - coeffValue) / (AxisLength[i] / length)));
                    break;
                }

                if (value > 1)
                {
                    result = AxisRanges[AxisRanges.Count - 1].Start + (AxisRanges[AxisRanges.Count - 1].Delta * ((value - coeffValue) / (AxisLength.Last() / length)));
                    break;
                }

                if (value < 0)
                {
                    result = AxisRanges[0].Start + (AxisRanges[0].Delta * ((value - coeffValue) / (AxisLength.First() / length)));
                    break;
                }

                if (i < BreakRanges.Count && value > brkCoeff.Start && value < brkCoeff.End)
                {
                    result = BreakRanges[i].Start + (BreakRanges[i].Delta * ((value - coeffValue) / BreakRangesInfo[BreakRanges[i]].BreakSpacing / length));
                    break;
                }

                coeffValue += ((AxisLength[i] + spacing) / length);
            }

            return(result);
        }
Esempio n. 4
0
        /// <summary>
        /// Method implementation for Generate Labels in ChartAxis
        /// </summary>
        /// <param name="axis">The axis.</param>
        /// <param name="smallTicksPerInterval">The small ticks per interval.</param>
        internal static void GenerateVisibleLabels(ChartAxisBase2D axis, object minimum, object maximum, object actualInterval, double smallTicksPerInterval)
        {
            DoubleRange range    = axis.VisibleRange;
            double      interval = axis.VisibleInterval;
            double      position;

            if ((minimum != null && maximum != null && actualInterval != null) || axis.DesiredIntervalsCount != null ||
                axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.AlwaysVisible ||
                (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.Visible && !axis.IsZoomed))
            {
                position = range.Start;
            }
            else
            {
                position = range.Start - (range.Start % interval);
            }

            double previousPosition = double.NaN;

            for (; position <= range.End; position += interval)
            {
                if (position == previousPosition)
                {
                    break;
                }

                if (range.Inside(position))
                {
                    axis.VisibleLabels.Add(new ChartAxisLabel(position, (axis as ChartAxis).GetActualLabelContent(position), position));
                }

                if (axis.smallTicksRequired)
                {
                    axis.AddSmallTicksPoint(position);
                }

                previousPosition = position;
            }

            if (((maximum != null && range.End.Equals(maximum)) ||
                 axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.AlwaysVisible ||
                 (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.Visible && !axis.IsZoomed)) &&
                !range.End.Equals(position - interval))
            {
                axis.VisibleLabels.Add(new ChartAxisLabel(range.End, (axis as ChartAxis).GetActualLabelContent(range.End), range.End));
            }
        }
Esempio n. 5
0
        private void ComputeBreakRange(DoubleRange currentRange, int index)
        {
            bool canAdd = true;

            for (int i = 0; i < this.BreakRanges.Count;)
            {
                DoubleRange previous = this.BreakRanges[i];
                if (currentRange.Inside(previous))
                {
                    BreakRangesInfo.Remove(BreakRanges[i]);
                    this.BreakRanges.RemoveAt(i);
                }
                else if (previous.Inside(currentRange))
                {
                    canAdd = false;
                    break;
                }
                else if (previous.Intersects(currentRange))
                {
                    currentRange += previous;
                    BreakRangesInfo.Remove(BreakRanges[i]);
                    this.BreakRanges.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }

            if (!canAdd)
            {
                return;
            }
            if (currentRange.Delta == 0)
            {
                return;
            }
            this.BreakRanges.Add(currentRange);
            BreakRangesInfo.Add(currentRange, AxisScaleBreaks[index]);
        }