Esempio n. 1
0
        /// <summary>
        /// Calculates the visible range.
        /// </summary>
        /// <param name="axis">The axis.</param>
        /// <param name="avalableSize">Size of the available.</param>
        /// <param name="interval">The interval.</param>
        internal static void CalculateVisibleRange(ChartAxisBase2D axis, Size avalableSize, object interval)
        {
            if (axis.ZoomFactor < 1 || axis.ZoomPosition > 0)
            {
#if NETFX_CORE
                if (interval == null || Convert.ToDouble(interval) == 0)
#else
                if (interval == null || ((double?)interval).Value == 0)
#endif
                {
                    axis.VisibleInterval = axis.CalculateNiceInterval(axis.VisibleRange, avalableSize);
                }
                else if (interval != null)
                {
#if NETFX_CORE
                    double actualInterval = Convert.ToDouble(interval);
#else
                    double actualInterval = ((double?)interval).Value;
#endif
                    axis.VisibleInterval = axis.EnableAutoIntervalOnZooming
                                          ? axis.CalculateNiceInterval(axis.VisibleRange, avalableSize)
                                          : actualInterval;
                }
            }
        }
        // To set the properties of corresponding textblock and border
        internal void SetVisualBinding(TextBlock textBlock, Border border, ChartAxisBase2D axis)
        {
            Binding binding = new Binding()
            {
                Source = this, Path = new PropertyPath("FontSize")
            };

            textBlock.SetBinding(TextBlock.FontSizeProperty, binding);
            binding = new Binding()
            {
                Source = this, Path = new PropertyPath("Text")
            };
            textBlock.SetBinding(TextBlock.TextProperty, binding);
            binding = new Binding()
            {
                Source = this, Path = new PropertyPath("Foreground")
            };
            textBlock.SetBinding(TextBlock.ForegroundProperty, binding);
            binding = new Binding()
            {
                Source = this, Path = new PropertyPath("FontFamily")
            };
            textBlock.SetBinding(TextBlock.FontFamilyProperty, binding);
            textBlock.Tag = this;
            binding       = new Binding()
            {
                Source = axis, Path = new PropertyPath("LabelBorderBrush")
            };
            border.SetBinding(Border.BorderBrushProperty, binding);
        }
Esempio n. 3
0
 /// <summary>
 /// Calculates the visible range.
 /// </summary>
 /// <param name="axis">The axis.</param>
 /// <param name="availableSize">Size of the available.</param>
 /// <param name="interval">The interval.</param>
 internal static void CalculateVisibleRange(ChartAxisBase2D axis, Size availableSize, double interval)
 {
     if (axis.ZoomFactor < 1 || axis.ZoomPosition > 0)
     {
         if (interval != 0 || !double.IsNaN(interval))
         {
             axis.VisibleInterval = axis.EnableAutoIntervalOnZooming
                                     ? axis.CalculateNiceInterval(axis.VisibleRange, availableSize)
                                     : axis.ActualInterval;
         }
         else
         {
             axis.VisibleInterval = axis.CalculateNiceInterval(axis.VisibleRange, availableSize);
         }
     }
     else
     {
         var dateTimeAxis = axis as DateTimeAxis;
         if (dateTimeAxis.IntervalType != DateTimeIntervalType.Auto)
         {
             dateTimeAxis.ActualIntervalType = dateTimeAxis.IntervalType;
         }
         if (interval != 0 || !double.IsNaN(interval))
         {
             axis.VisibleInterval = axis.ActualInterval;
         }
         else
         {
             axis.VisibleInterval = axis.CalculateNiceInterval(axis.VisibleRange, availableSize);
         }
     }
 }
Esempio n. 4
0
 internal void Dispose()
 {
     Axis = null;
     if (labelsPanel != null)
     {
         labelsPanel.Children.Clear();
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Generates the visible labels.
        /// </summary>
        /// <param name="axis">The axis.</param>
        internal static void GenerateVisibleLabels(ChartAxisBase2D axis, object minimum, object maximum, object actualInterval)
        {
            double interval = axis.VisibleInterval;
            var    range    = axis.VisibleRange;
            double position;
            var    timeSpanAxis = axis as TimeSpanAxis;

            if ((minimum != null && maximum != null && actualInterval != 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 <= axis.VisibleRange.End; position += interval)
            {
                if (position == previousPosition)
                {
                    break;
                }
                if (axis.VisibleRange.Inside(position))
                {
                    axis.VisibleLabels.Add(new ChartAxisLabel(position, timeSpanAxis.GetActualLabelContent(position), position));
                }

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

                previousPosition = position;
            }
#if NETFX_CORE
            if (((maximum != null && range.End.Equals((TimeSpan.Parse(maximum.ToString())).TotalMilliseconds)) ||
                 axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.AlwaysVisible ||
                 (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.Visible && !axis.IsZoomed)) &&
                !range.End.Equals(position - interval))
#else
            if (((maximum != null && range.End.Equals(((TimeSpan)maximum).TotalMilliseconds)) ||
                 axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.AlwaysVisible ||
                 (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.Visible && !axis.IsZoomed)) &&
                !range.End.Equals(position - interval))
#endif
            {
                axis.VisibleLabels.Add(new ChartAxisLabel(range.End, timeSpanAxis.GetActualLabelContent(range.End), range.End));
            }
        }
Esempio n. 6
0
 /// <summary>
 /// Calculates the visible range.
 /// </summary>
 /// <param name="axis">The axis.</param>
 /// <param name="avalableSize">Size of the available.</param>
 /// <param name="interval">The interval.</param>
 internal static void CalculateVisibleRange(ChartAxisBase2D axis, Size avalableSize, object interval)
 {
     if (axis.ZoomFactor < 1 || axis.ZoomPosition > 0)
     {
         if (interval != null)
         {
             axis.VisibleInterval = axis.EnableAutoIntervalOnZooming
                                     ? axis.CalculateNiceInterval(axis.VisibleRange, avalableSize)
                                     : axis.ActualInterval;
         }
         else
         {
             axis.VisibleInterval = axis.CalculateNiceInterval(axis.VisibleRange, avalableSize);
         }
     }
 }
Esempio n. 7
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. 8
0
        internal void Dispose()
        {
            DetachTouchModeEvents();

#if NETFX_CORE
            if (handler != null)
            {
                if (parent is Page)
                {
                    (parent as Page).RemoveHandler(Page.PointerPressedEvent, handler);
                }
            }
#endif

            DiposeEvents();
            axis = null;
        }
Esempio n. 9
0
        /// <summary>
        /// Method implementation for Generate Labels in ChartAxis
        /// </summary>
        /// <param name="axis">The axis.</param>
        /// <param name="maximum">The maximum.</param>
        /// <param name="minimum">The minimum.</param>
        /// <param name="actualInterval">The actual interval.</param>
        internal static void GenerateVisibleLabels(ChartAxisBase2D axis, object minimum, object maximum, object actualInterval, double logBase)
        {
            double interval        = axis.VisibleInterval;
            var    logarithmicAxis = axis as LogarithmicAxis;

            double position;

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

            for (; position <= axis.VisibleRange.End; position += interval)
            {
                if (axis.VisibleRange.Inside(position))
                {
                    axis.VisibleLabels.Add(new ChartAxisLabel(position, logarithmicAxis.GetActualLabelContent(Math.Pow(logBase, position)), position));
                }

                if (axis.smallTicksRequired)
                {
                    axis.AddSmallTicksPoint(position, logarithmicAxis.LogarithmicBase);
                }
            }

            if (((maximum != null && axis.VisibleRange.End.Equals(maximum)) ||
                 axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.AlwaysVisible ||
                 (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.Visible && !axis.IsZoomed)) &&
                !axis.VisibleRange.End.Equals(position - interval))
            {
                axis.VisibleLabels.Add(new ChartAxisLabel(axis.VisibleRange.End, logarithmicAxis.GetActualLabelContent(Math.Pow(logBase, axis.VisibleRange.End)), axis.VisibleRange.End));
            }
        }
        /// <summary>
        /// Updates the vertical stripline.
        /// </summary>
        /// <param name="axis">The Axis</param>
        private void UpdateVerticalStripLine(ChartAxisBase2D axis)
        {
            var visibleRange = axis.VisibleRange;
            var seriesRect   = Area.SeriesClipRect;

            axis.StriplineXRange = DoubleRange.Empty;
            axis.StriplineYRange = DoubleRange.Empty;
            foreach (var stripLine in axis.StripLines)
            {
                IEnumerable <ChartAxis> xAxes;
                ChartAxis cusAxis = Area.Axes[stripLine.SegmentAxisName];
                if (cusAxis != null)
                {
                    xAxes = new List <ChartAxis> {
                        cusAxis
                    };
                }
                else if (axis.RegisteredSeries.Count > 0)
                {
                    xAxes = (Area.ColumnDefinitions.Count > 1) ? axis.AssociatedAxes : axis.AssociatedAxes.DistinctBy(Area.GetActualColumn);//WPF-13976-StripLine not working while using RowDefinitions
                }
                else
                {
                    xAxes = new List <ChartAxis> {
                        Area.InternalPrimaryAxis
                    };
                }

                foreach (var xAxis in xAxes)
                {
                    var count = axis.RegisteredSeries.Where(item => item.ActualXAxis == xAxis || item.ActualYAxis == xAxis).Count();//stripline drawn for all the xaxis in the chart area .hence it is filtered using its associated axis- WPF-13976
                    if (count == 0 && axis.RegisteredSeries.Count == 0)
                    {
                        count = 1;
                    }
                    if (count > 0)
                    {
                        var  xAxisRect = xAxis.ArrangeRect;
                        var  yAxisRect = axis.ArrangeRect;
                        Rect stripRect;
                        if (!stripLine.IsSegmented)
                        {
                            double startStrip = stripLine.Start;
                            double endStrip   = double.IsNaN(stripLine.RepeatUntil)
                                ? visibleRange.End
                                : stripLine.RepeatUntil;
                            double periodStrip = stripLine.RepeatEvery;

                            do
                            {
                                double y1 = Area.ValueToPoint(axis, startStrip);
                                double y2;
                                if (stripLine.IsPixelWidth)
                                {
                                    y2 = stripLine.Width < yAxisRect.Height
                                        ? y1 - stripLine.Width
                                        : y1 - yAxisRect.Height;
                                }
                                else
                                {
                                    double stripEnd = (!double.IsNaN(stripLine.RepeatUntil) ? (startStrip < stripLine.RepeatUntil) ? startStrip + stripLine.Width
                                            : startStrip - stripLine.Width : startStrip + stripLine.Width);
                                    y2 = Area.ValueToPoint(axis, stripEnd);
                                }
                                axis.StriplineYRange += new DoubleRange(startStrip, Area.PointToValue(axis, new Point(0, y2)));

                                double top = yAxisRect.Top - seriesRect.Top;
                                y2        = y2 > top ? y2 : top;
                                stripRect = new Rect(new Point(xAxisRect.Left - seriesRect.Left, y1),
                                                     new Point(xAxisRect.Width + xAxisRect.Left - seriesRect.Left, y2));
                                RenderStripLine(stripRect, stripLine);

                                startStrip = startStrip < endStrip ? startStrip + periodStrip : startStrip - periodStrip;
                            }while (periodStrip != 0 && (Double.IsNaN(stripLine.RepeatUntil) ? startStrip < endStrip : (stripLine.Start < stripLine.RepeatUntil ? startStrip <endStrip
                                                                                                                                                                              : startStrip> endStrip)));
                        }
                        else
                        {
                            double startStrip = stripLine.Start;
                            double endStrip   = double.IsNaN(stripLine.RepeatUntil)
                                ? visibleRange.End
                                : stripLine.RepeatUntil;
                            double periodStrip = stripLine.RepeatEvery;

                            if (!double.IsNaN(stripLine.SegmentStartValue) &&
                                !double.IsNaN(stripLine.SegmentEndValue))
                            {
                                do
                                {
                                    double y1 = Area.ValueToPoint(axis, startStrip);
                                    double y2;
                                    if (stripLine.IsPixelWidth)
                                    {
                                        y2 = y1 - stripLine.Width;
                                    }
                                    else
                                    {
                                        double stripEnd = (!double.IsNaN(stripLine.RepeatUntil) ? (startStrip < stripLine.RepeatUntil) ? startStrip + stripLine.Width
                                            : startStrip - stripLine.Width : startStrip + stripLine.Width);
                                        y2 = Area.ValueToPoint(axis, stripEnd);
                                    }

                                    axis.StriplineYRange += new DoubleRange(startStrip, Area.PointToValue(axis, new Point(0, y2)));

                                    if (axis.Area != null && axis.Area.InternalPrimaryAxis != null)
                                    {
                                        double startVal = Area.ValueToPoint(xAxis,
                                                                            stripLine.SegmentStartValue);
                                        double endVal = Area.ValueToPoint(xAxis,
                                                                          stripLine.SegmentEndValue);

                                        stripRect = new Rect(new Point(startVal, y1),
                                                             new Point(endVal, y2));
                                        RenderStripLine(stripRect, stripLine);
                                        if ((axis as ChartAxisBase2D).IncludeStripLineRange)
                                        {
                                            axis.StriplineXRange += new DoubleRange(stripLine.SegmentStartValue, stripLine.SegmentEndValue);
                                        }
                                    }
                                    startStrip = startStrip < endStrip ? startStrip + periodStrip : startStrip - periodStrip;
                                }while (periodStrip != 0 && (Double.IsNaN(stripLine.RepeatUntil) ? startStrip < endStrip : (stripLine.Start < stripLine.RepeatUntil ? startStrip <endStrip
                                                                                                                                                                                  : startStrip> endStrip)));
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Updates the horizontal stripline.
        /// </summary>
        /// <param name="axis">The Relevant Axis</param>
        private void UpdateHorizontalStripLine(ChartAxisBase2D axis)
        {
            var  seriesRect   = Area.SeriesClipRect;
            var  visibleRange = axis.VisibleRange;
            Rect xAxisRect    = axis.ArrangeRect;

            axis.StriplineXRange = DoubleRange.Empty;
            axis.StriplineYRange = DoubleRange.Empty;
            foreach (var stripLine in axis.StripLines)
            {
                IEnumerable <ChartAxis> yAxes;
                ChartAxis cusAxis = Area.Axes[stripLine.SegmentAxisName];
                if (cusAxis != null)
                {
                    yAxes = new List <ChartAxis> {
                        cusAxis
                    };
                }
                else if (axis.RegisteredSeries.Count > 0)
                {
                    yAxes = (Area.RowDefinitions.Count > 1) ? axis.AssociatedAxes : axis.AssociatedAxes.DistinctBy(Area.GetActualRow); //WPF-13976-StripLine not working while using RowDefinitions
                }
                else
                {
                    yAxes = new List <ChartAxis> {
                        Area.InternalSecondaryAxis
                    };
                }

                foreach (var currAxis in yAxes)
                {
                    var count = axis.RegisteredSeries.Where(item => (item.ActualXAxis == currAxis || item.ActualYAxis == currAxis)).Count(); //stripline drawn for all the yaxis in the chart area .hence it is filtered using its associated axis -WPF-13976
                    if (count == 0 && axis.RegisteredSeries.Count == 0)
                    {
                        count = 1;
                    }
                    if (count > 0)
                    {
                        var  yAxisRect = currAxis.ArrangeRect;
                        Rect stripRect;
                        if (!stripLine.IsSegmented)
                        {
                            double startStrip = stripLine.Start;
                            double endStrip   = double.IsNaN(stripLine.RepeatUntil)
                                ? visibleRange.End
                                : stripLine.RepeatUntil;
                            double periodStrip = stripLine.RepeatEvery;

                            do
                            {
                                double stripStart = startStrip;
                                double stripEnd   = (!double.IsNaN(stripLine.RepeatUntil) ? (startStrip < stripLine.RepeatUntil) ? startStrip + stripLine.Width
                                            : startStrip - stripLine.Width : startStrip + stripLine.Width);
                                double x1 = Area.ValueToPoint(axis, startStrip);

                                double x2;
                                if (stripLine.IsPixelWidth)
                                {
                                    x2 = x1 + stripLine.Width;
                                }
                                else
                                {
                                    x2 = Area.ValueToPoint(axis, stripEnd);
                                }
                                axis.StriplineXRange += new DoubleRange(stripStart, Area.PointToValue(axis, new Point(x2, 0)));
                                axis.StriplineXRange += currAxis.StriplineXRange;
                                double left = xAxisRect.Width + xAxisRect.Left - seriesRect.Left;
                                x2        = left > x2 ? x2 : left;//WPF-12981-Striplines are cut when we set plotoffset to primaryaxis
                                stripRect = new Rect(new Point(x1, yAxisRect.Top - seriesRect.Top),
                                                     new Point(x2, yAxisRect.Height + yAxisRect.Top - seriesRect.Top));
                                RenderStripLine(stripRect, stripLine);

                                startStrip = startStrip < endStrip ? startStrip + periodStrip : startStrip - periodStrip;
                            }while (periodStrip != 0 && (Double.IsNaN(stripLine.RepeatUntil) ? startStrip < endStrip : (stripLine.Start < stripLine.RepeatUntil ? startStrip <endStrip
                                                                                                                                                                              : startStrip> endStrip)));
                        }
                        else
                        {
                            double startStrip = stripLine.Start;
                            double endStrip   = double.IsNaN(stripLine.RepeatUntil)
                                ? visibleRange.End
                                : stripLine.RepeatUntil;
                            double periodStrip = stripLine.RepeatEvery;
                            if (!double.IsNaN(stripLine.SegmentStartValue) &&
                                !double.IsNaN(stripLine.SegmentEndValue))
                            {
                                do
                                {
                                    double x1 = Area.ValueToPoint(axis, startStrip);
                                    double x2;
                                    if (stripLine.IsPixelWidth)
                                    {
                                        x2 = x1 + stripLine.Width;
                                    }
                                    else
                                    {
                                        double stripEnd = (!double.IsNaN(stripLine.RepeatUntil) ? (startStrip < stripLine.RepeatUntil) ? startStrip + stripLine.Width
                                            : startStrip - stripLine.Width : startStrip + stripLine.Width);
                                        x2 = Area.ValueToPoint(axis, stripEnd);
                                    }

                                    axis.StriplineXRange += new DoubleRange(startStrip, Area.PointToValue(axis, new Point(x2, 0)));
                                    axis.StriplineXRange += currAxis.StriplineXRange;
                                    if (axis.Area != null)
                                    {
                                        double startVal = Area.ValueToPoint(currAxis,
                                                                            stripLine.SegmentStartValue);
                                        double endVal = Area.ValueToPoint(currAxis,
                                                                          stripLine.SegmentEndValue);

                                        stripRect = new Rect(new Point(x1, startVal),
                                                             new Point(x2, endVal));
                                        RenderStripLine(stripRect, stripLine);
                                        if ((axis as ChartAxisBase2D).IncludeStripLineRange)
                                        {
                                            currAxis.StriplineYRange += new DoubleRange(stripLine.SegmentStartValue, stripLine.SegmentEndValue);
                                        }
                                    }

                                    startStrip = startStrip < endStrip ? startStrip + periodStrip : startStrip - periodStrip;
                                }while (periodStrip != 0 && (Double.IsNaN(stripLine.RepeatUntil) ? startStrip < endStrip : (stripLine.Start < stripLine.RepeatUntil ? startStrip <endStrip
                                                                                                                                                                                  : startStrip> endStrip)));
                            }
                        }
                    }
                }
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Generates the visible labels.
        /// </summary>
        /// <param name="axis">The axis.</param>
        /// <param name="intervalType">Type of the interval.</param>
        /// Method implementation for Create VisibleLabels for DateTime axis
        internal static void GenerateVisibleLabels(ChartAxisBase2D axis, object minimum, object maximum, DateTimeIntervalType intervalType)
        {
            var      startDate = axis.VisibleRange.Start.FromOADate();
            DateTime alignedDate;
            var      interval = IncreaseInterval(startDate, axis.VisibleInterval, intervalType).ToOADate() - axis.VisibleRange.Start;

            if (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.AlwaysVisible ||
                (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.Visible && !axis.IsZoomed))
            {
                alignedDate = startDate;
            }
            else
            {
                alignedDate = AlignRangeStart(startDate, axis.VisibleInterval, intervalType);
            }

            var    dateTimeAxis = axis as DateTimeAxis;
            var    days         = "";
            double distinctDate = 0d;
            double position     = alignedDate.ToOADate();

            if (dateTimeAxis != null && dateTimeAxis.EnableBusinessHours)
            {
                days        = dateTimeAxis.InternalWorkingDays;
                alignedDate = new DateTime(startDate.Year, startDate.Month, startDate.Day).AddHours(dateTimeAxis.OpenTime);
                position    = alignedDate.ToOADate();
            }

            double previousPosition = double.NaN;

            if (axis.IsDefaultRange && dateTimeAxis.Interval != 0)
            {
                if (intervalType == DateTimeIntervalType.Minutes)
                {
                    axis.VisibleRange = new DoubleRange(0, 0.041);
                }
                else if (intervalType == DateTimeIntervalType.Seconds)
                {
                    axis.VisibleRange = new DoubleRange(0, 0.041 / 60);
                }
                else if (intervalType == DateTimeIntervalType.Milliseconds)
                {
                    axis.VisibleRange = new DoubleRange(0, 0.041 / 3600);
                }
            }

            while (position <= axis.VisibleRange.End)
            {
                if (position == previousPosition)
                {
                    break;
                }

                if (axis.VisibleRange.Inside(position))
                {
                    var dateTimeAxisLabel = new DateTimeAxisLabel(position, alignedDate.ToString(axis.LabelFormat, CultureInfo.CurrentCulture), position);
                    dateTimeAxisLabel.IntervalType = dateTimeAxis.ActualIntervalType;
                    dateTimeAxisLabel.IsTransition = GetTransitionState(ref distinctDate, alignedDate, dateTimeAxis.ActualIntervalType);
                    axis.VisibleLabels.Add(dateTimeAxisLabel);
                }

                alignedDate = IncreaseNonWorkingInterval(days, dateTimeAxis, alignedDate, axis.VisibleInterval, intervalType);
                if (dateTimeAxis != null && dateTimeAxis.EnableBusinessHours)
                {
                    alignedDate = NonWorkingDaysIntervals(dateTimeAxis, alignedDate, interval, intervalType);
                }

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

                previousPosition = position;
                position         = alignedDate.ToOADate();
            }

            double rangeEnd = axis.VisibleRange.End;

            if (((maximum != null && rangeEnd.FromOADate().Equals(maximum)) ||
                 axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.AlwaysVisible ||
                 (axis.EdgeLabelsVisibilityMode == EdgeLabelsVisibilityMode.Visible && !axis.IsZoomed)) &&
                !rangeEnd.Equals(position - interval))
            {
                var dateTimeAxisLabel = new DateTimeAxisLabel(
                    rangeEnd,
                    alignedDate.ToString(
                        axis.LabelFormat,
                        CultureInfo.CurrentCulture),
                    rangeEnd);
                dateTimeAxisLabel.IntervalType = dateTimeAxis.ActualIntervalType;
                dateTimeAxisLabel.IsTransition = GetTransitionState(ref distinctDate, alignedDate, dateTimeAxis.ActualIntervalType);
                axis.VisibleLabels.Add(dateTimeAxisLabel);
            }
        }
Esempio n. 13
0
        /// <summary>
        /// Measures the elements in the panel.
        /// </summary>
        /// <param name="availableSize">available size of the panel.</param>
        /// <returns>Returns the desired size</returns>
        public Size Measure(Size availableSize)
        {
            left = right = top = bottom = 0;

            if (Area.ColumnDefinitions.Count == 0)
            {
                Area.ColumnDefinitions.Add(new ChartColumnDefinition());
            }

            if (Area.RowDefinitions.Count == 0)
            {
                Area.RowDefinitions.Add(new ChartRowDefinition());
            }

            foreach (ChartColumnDefinition column in Area.ColumnDefinitions)
            {
                column.Axis.Clear();
            }

            foreach (ChartRowDefinition row in Area.RowDefinitions)
            {
                row.Axis.Clear();
            }

            foreach (ChartAxis content in Area.Axes)
            {
                if (content.DisableScrollbar)
                {
                    ChartAxisBase2D chartAxisBase2D = content as ChartAxisBase2D;
                    if (chartAxisBase2D != null)
                    {
                        chartAxisBase2D.EnableScrollBar = true;
                    }
                }

                if (content.Orientation == Orientation.Horizontal)
                {
                    Area.ColumnDefinitions[Area.GetActualColumn(content)].Axis.Add(content);
                }
                else
                {
                    Area.RowDefinitions[Area.GetActualRow(content)].Axis.Add(content);
                }
            }

            // Spanning calculation for each axis
            if (Area != null)
            {
                AxisSpanCalculation();
            }
            leftSizes.Clear();
            rightSizes.Clear();
            topSizes.Clear();
            bottomSizes.Clear();

            MeasureAxis(availableSize, new Rect(new Point(0, 0), availableSize));

            Area.AxisThickness = new Thickness(left, top, right, bottom);

            // Area.SeriesClipRect = rect;

            UpdateArrangeRect(availableSize);

            Rect rect = ChartLayoutUtils.Subtractthickness(new Rect(new Point(0, 0), availableSize), this.Area.AxisThickness);

            currentAvalilableSize = availableSize;

            Area.SeriesClipRect = rect;

            foreach (ChartSeriesBase series in Area.VisibleSeries.OfType <ISupportAxes>())
            {
                if (series.ActualXAxis != null && series.ActualYAxis != null)
                {
                    ChartAxis xAxis = series.ActualXAxis.Orientation == Orientation.Horizontal
                                          ? series.ActualXAxis
                                          : series.ActualYAxis;
                    ChartAxis yAxis = series.ActualYAxis.Orientation == Orientation.Vertical
                                          ? series.ActualYAxis
                                          : series.ActualXAxis;

                    var x      = xAxis.ArrangeRect.Left - rect.Left;
                    var y      = yAxis.ArrangeRect.Top - rect.Top;
                    var width  = xAxis.ArrangeRect.Width;
                    var height = yAxis.ArrangeRect.Height;

                    series.Clip = new RectangleGeometry()
                    {
                        Rect = new Rect(x, y, width + 0.5, height + 0.5)
                    };
                }
            }

            _desiredSize = availableSize;
            return(availableSize);
        }
Esempio n. 14
0
        // To set the properties of corresponding textblock and brace's polyline
        internal void SetBraceVisualBinding(TextBlock textBlock, Shape polyline1, Shape polyline2, ChartAxisBase2D axis)
        {
            Binding binding = new Binding()
            {
                Source = this, Path = new PropertyPath("FontSize")
            };

            textBlock.SetBinding(TextBlock.FontSizeProperty, binding);
            binding = new Binding()
            {
                Source = this, Path = new PropertyPath("Foreground")
            };
            textBlock.SetBinding(TextBlock.ForegroundProperty, binding);
            binding = new Binding()
            {
                Source = this, Path = new PropertyPath("FontFamily")
            };
            textBlock.SetBinding(TextBlock.FontFamilyProperty, binding);
            binding = new Binding()
            {
                Source = this, Path = new PropertyPath("Text")
            };
            textBlock.SetBinding(TextBlock.TextProperty, binding);
            textBlock.Tag = this;
            binding       = new Binding()
            {
                Source = axis, Path = new PropertyPath("LabelBorderBrush")
            };
            polyline1.SetBinding(Shape.StrokeProperty, binding);
            binding = new Binding()
            {
                Source = axis, Path = new PropertyPath("LabelBorderBrush")
            };
            polyline2.SetBinding(Shape.StrokeProperty, binding);
            binding = new Binding()
            {
                Source = axis, Path = new PropertyPath("LabelBorderWidth")
            };
            polyline1.SetBinding(Shape.StrokeThicknessProperty, binding);
            binding = new Binding()
            {
                Source = axis, Path = new PropertyPath("LabelBorderWidth")
            };
            polyline2.SetBinding(Shape.StrokeThicknessProperty, binding);
        }