예제 #1
0
        /// <summary>
        ///     Returns the value margins for a given axis.
        /// </summary>
        /// <param name="consumer">
        ///     The axis to retrieve the value margins for.
        /// </param>
        /// <returns>A sequence of value margins.</returns>
        protected override IEnumerable <ValueMargin> GetValueMargins(IValueMarginConsumer consumer)
        {
            double dependentValueMargin = ActualHeight / 10;
            var    axis = consumer as IAxis;

            if (axis != null && ActiveDataPoints.Any())
            {
                Func <DataPoint, IComparable> selector = null;
                if (axis == InternalActualIndependentAxis)
                {
                    selector = dataPoint => (IComparable)dataPoint.ActualIndependentValue;

                    DataPoint minimumPoint = ActiveDataPoints.MinOrNull(selector);
                    DataPoint maximumPoint = ActiveDataPoints.MaxOrNull(selector);

                    double minimumMargin = minimumPoint.GetMargin(axis);
                    yield return(new ValueMargin(selector(minimumPoint), minimumMargin, minimumMargin));

                    double maximumMargin = maximumPoint.GetMargin(axis);
                    yield return(new ValueMargin(selector(maximumPoint), maximumMargin, maximumMargin));
                }
                else if (axis == InternalActualDependentAxis)
                {
                    selector = dataPoint => dataPoint.ActualDependentValue;

                    DataPoint minimumPoint = ActiveDataPoints.MinOrNull(selector);
                    DataPoint maximumPoint = ActiveDataPoints.MaxOrNull(selector);

                    yield return(new ValueMargin(selector(minimumPoint), dependentValueMargin, dependentValueMargin));

                    yield return(new ValueMargin(selector(maximumPoint), dependentValueMargin, dependentValueMargin));
                }
            }
        }
예제 #2
0
        /// <summary>
        ///     Returns the value margins for a given axis.
        /// </summary>
        /// <param name="consumer">
        ///     The axis to retrieve the value margins for.
        /// </param>
        /// <returns>A sequence of value margins.</returns>
        protected virtual IEnumerable <ValueMargin> GetValueMargins(IValueMarginConsumer consumer)
        {
            var axis = consumer as IAxis;

            if (axis != null && ActiveDataPoints.Any())
            {
                Func <DataPoint, IComparable> selector = null;
                DataPoint minimumPoint = null;
                DataPoint maximumPoint = null;
                double    margin       = 0.0;
                if (axis == InternalActualIndependentAxis)
                {
                    selector = dataPoint => (IComparable)dataPoint.ActualIndependentValue;

                    minimumPoint = ActiveDataPoints.MinOrNull(selector);
                    maximumPoint = ActiveDataPoints.MaxOrNull(selector);
                    margin       = minimumPoint.GetActualMargin(InternalActualIndependentAxis);
                }
                else if (axis == InternalActualDependentAxis)
                {
                    selector = dataPoint => dataPoint.ActualDependentValue;

                    Tuple <DataPoint, DataPoint> largestAndSmallestValues =
                        DataPointsByActualDependentValue.GetLargestAndSmallestValues();
                    minimumPoint = largestAndSmallestValues.Item1;
                    maximumPoint = largestAndSmallestValues.Item2;
                    margin       = minimumPoint.GetActualMargin(InternalActualDependentAxis);
                }

                yield return(new ValueMargin(selector(minimumPoint), margin, margin));

                yield return(new ValueMargin(selector(maximumPoint), margin, margin));
            }
        }
예제 #3
0
 /// <summary>
 /// Remove value margins from the side of the data points to ensure
 /// that area chart is flush against the edge of the chart.
 /// </summary>
 /// <param name="consumer">The value margin consumer.</param>
 /// <returns>A sequence of value margins.</returns>
 protected override IEnumerable <ValueMargin> GetValueMargins(IValueMarginConsumer consumer)
 {
     if (consumer == ActualIndependentAxis)
     {
         return(Enumerable.Empty <ValueMargin>());
     }
     return(base.GetValueMargins(consumer));
 }
예제 #4
0
        /// <summary>
        ///     The margins required for each value.
        /// </summary>
        /// <param name="consumer">The consumer to return the value margins for.</param>
        /// <returns>A sequence of margins for each value.</returns>
        protected override IEnumerable <ValueMargin> GetValueMargins(IValueMarginConsumer consumer)
        {
            var axis = consumer as IAxis;

            if (axis != null)
            {
                return(ActiveDataPoints.Select(dataPoint =>
                {
                    double margin = dataPoint.GetMargin(axis);
                    return new ValueMargin(
                        GetActualDataPointAxisValue(dataPoint, axis),
                        margin,
                        margin);
                }));
            }

            return(Enumerable.Empty <ValueMargin>());
        }
        /// <summary>
        /// Updates the value margins after all data points are updated.
        /// </summary>
        protected override void OnAfterUpdateDataPoints()
        {
            IValueMarginProvider provider = this as IValueMarginProvider;

            {
                IValueMarginConsumer consumer = ActualDependentRangeAxis as IValueMarginConsumer;
                if (consumer != null)
                {
                    consumer.ValueMarginsChanged(provider, GetValueMargins(consumer));
                }
            }
            {
                IValueMarginConsumer consumer = ActualIndependentAxis as IValueMarginConsumer;
                if (consumer != null)
                {
                    consumer.ValueMarginsChanged(provider, GetValueMargins(consumer));
                }
            }
            base.OnAfterUpdateDataPoints();
        }
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 protected override IEnumerable <ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     if (valueMarginConsumer == ActualIndependentAxis)
     {
         return(Enumerable.Empty <ValueMargin>());
     }
     else
     {
         return(base.IValueMarginProviderGetValueMargins(valueMarginConsumer));
     }
 }
예제 #7
0
        protected override IEnumerable <ValueMargin> GetValueMargins(IValueMarginConsumer consumer)
        {
            double dependentValueMargin = this.ActualHeight / 10;
            IAxis  axis = consumer as IAxis;

            if (axis != null && ActiveDataPoints.Any())
            {
                Func <DataPoint, IComparable> selector = null;
                if (axis == InternalActualIndependentAxis)
                {
                    selector = (dataPoint) => (IComparable)dataPoint.ActualIndependentValue;

                    DataPoint minimumPoint = ActiveDataPoints.MinOrNull(selector);
                    DataPoint maximumPoint = ActiveDataPoints.MaxOrNull(selector);

                    double minimumMargin = minimumPoint.GetMargin(axis);
                    yield return(new ValueMargin(selector(minimumPoint), minimumMargin, minimumMargin));

                    double maximumMargin = maximumPoint.GetMargin(axis);
                    yield return(new ValueMargin(selector(maximumPoint), maximumMargin, maximumMargin));
                }
                else if (axis == InternalActualDependentAxis)
                {
                    IEnumerable <StackedColumnSeries> columnSeries = SeriesHost.Series.OfType <StackedColumnSeries>().Where(series => series.ActualIndependentAxis == ActualIndependentAxis);

                    IList <double> maximums = new List <double>();
                    IList <double> minimums = new List <double>();

                    foreach (StackedColumnSeries currSeries in columnSeries)
                    {
                        for (int i = 0; i < currSeries.ActiveDataPointCount; i++)
                        {
                            if (maximums.Count <= i)
                            {
                                maximums.Add(0.0);
                            }

                            if (minimums.Count <= i)
                            {
                                minimums.Add(0.0);
                            }

                            DataPoint currDataPoint = currSeries.ActiveDataPoints.ElementAt <DataPoint>(i);

                            if ((double)currDataPoint.ActualDependentValue > 0)
                            {
                                maximums[i] += (double)currDataPoint.ActualDependentValue;
                            }
                            else
                            {
                                minimums[i] += (double)currDataPoint.ActualDependentValue;
                            }
                        }
                    }
                    double maximum = 0.0;
                    double minimum = 0.0;

                    for (int i = 0; i < minimums.Count; i++)
                    {
                        if (maximums[i] > maximum)
                        {
                            maximum = maximums[i];
                        }

                        if (minimums[i] < minimum)
                        {
                            minimum = minimums[i];
                        }
                    }
                    yield return(new ValueMargin(minimum, dependentValueMargin, dependentValueMargin));

                    yield return(new ValueMargin(maximum, dependentValueMargin, dependentValueMargin));
                }
            }
            else
            {
                yield break;
            }
        }
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 protected override IEnumerable<ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     if (valueMarginConsumer == ActualIndependentAxis)
     {
         return Enumerable.Empty<ValueMargin>();
     }
     else
     {
         return base.IValueMarginProviderGetValueMargins(valueMarginConsumer);
     }
 }
예제 #9
0
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>
 /// Sequence of value margins.
 /// </returns>
 protected override IEnumerable <ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     if (UseMargins)
     {
         return(base.IValueMarginProviderGetValueMargins(valueMarginConsumer));
     }
     else
     {
         return(Enumerable.Empty <ValueMargin>());
     }
 }
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 protected override IEnumerable<ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     if (IsStacked100 && (valueMarginConsumer == ActualDependentAxis))
     {
         return Enumerable.Empty<ValueMargin>();
     }
     else if ((valueMarginConsumer == ActualDependentAxis) || (valueMarginConsumer == ActualIndependentAxis))
     {
         Range<IComparable> range = IRangeProviderGetRange((IRangeConsumer)valueMarginConsumer);
         double margin = DataItems
             .Select(di =>
             {
                 return (null != di.DataPoint) ?
                     (valueMarginConsumer == ActualDependentAxis) ? di.DataPoint.ActualHeight : di.DataPoint.ActualWidth :
                     0;
             })
             .Average() * (3.0 / 4.0);
         return new ValueMargin[]
         {
             new ValueMargin(range.Minimum, margin, margin),
             new ValueMargin(range.Maximum, margin, margin),
         };
     }
     else
     {
         return base.IValueMarginProviderGetValueMargins(valueMarginConsumer);
     }
 }
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 protected override IEnumerable<ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     if (valueMarginConsumer == ActualDependentAxis)
     {
         if (IsStacked100)
         {
             return Enumerable.Empty<ValueMargin>();
         }
         else
         {
             Range<IComparable> range = IRangeProviderGetRange((IRangeConsumer)ActualDependentAxis);
             double margin = ((AxisOrientation.Y == ActualDependentAxis.Orientation) ? ActualHeight : ActualWidth) / 10;
             return new ValueMargin[]
             {
                 new ValueMargin(range.Minimum, margin, margin),
                 new ValueMargin(range.Maximum, margin, margin),
             };
         }
     }
     else if (valueMarginConsumer == ActualIndependentAxis)
     {
         // Using a non-ICategoryAxis for the independent axis
         // Relevant space already accounted for by IRangeProviderGetRange
         return Enumerable.Empty<ValueMargin>();
     }
     else
     {
         return base.IValueMarginProviderGetValueMargins(valueMarginConsumer);
     }
 }
 /// <summary>
 /// Returns the value margins for a given axis.
 /// </summary>
 /// <param name="axis">The axis to retrieve the value margins for.
 /// </param>
 /// <returns>A sequence of value margins.</returns>
 IEnumerable<ValueMargin> IValueMarginProvider.GetValueMargins(IValueMarginConsumer axis)
 {
     return GetValueMargins(axis);
 }
        /// <summary>
        /// Returns the value margins for a given axis.
        /// </summary>
        /// <param name="consumer">The axis to retrieve the value margins for.
        /// </param>
        /// <returns>A sequence of value margins.</returns>
        protected virtual IEnumerable<ValueMargin> GetValueMargins(IValueMarginConsumer consumer)
        {
            IAxis axis = consumer as IAxis;
            if (axis != null && ActiveDataPoints.Any())
            {
                Func<DataPoint, IComparable> selector = null;
                DataPoint minimumPoint = null;
                DataPoint maximumPoint = null;
                double margin = 0.0;
                if (axis == InternalActualIndependentAxis)
                {
                    selector = (dataPoint) => (IComparable)dataPoint.ActualIndependentValue;

                    minimumPoint = ActiveDataPoints.MinOrNull(selector);
                    maximumPoint = ActiveDataPoints.MaxOrNull(selector);
                    margin = minimumPoint.GetActualMargin(this.InternalActualIndependentAxis);
                }
                else if (axis == InternalActualDependentAxis)
                {
                    selector = (dataPoint) => (IComparable)dataPoint.ActualDependentValue;

                    Tuple<DataPoint, DataPoint> largestAndSmallestValues = this.DataPointsByActualDependentValue.GetLargestAndSmallestValues();
                    minimumPoint = largestAndSmallestValues.Item1;
                    maximumPoint = largestAndSmallestValues.Item2;
                    margin = minimumPoint.GetActualMargin(this.InternalActualDependentAxis);
                }
                
                yield return new ValueMargin(selector(minimumPoint), margin, margin);
                yield return new ValueMargin(selector(maximumPoint), margin, margin);
            }
            else
            {
                yield break;
            }
        }
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 protected override IEnumerable <ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     if (valueMarginConsumer == ActualDependentAxis)
     {
         if (IsStacked100)
         {
             return(Enumerable.Empty <ValueMargin>());
         }
         else
         {
             Range <IComparable> range = IRangeProviderGetRange((IRangeConsumer)ActualDependentAxis);
             double margin             = ((AxisOrientation.Y == ActualDependentAxis.Orientation) ? ActualHeight : ActualWidth) / 10;
             return(new ValueMargin[]
             {
                 new ValueMargin(range.Minimum, margin, margin),
                 new ValueMargin(range.Maximum, margin, margin),
             });
         }
     }
     else if (valueMarginConsumer == ActualIndependentAxis)
     {
         // Using a non-ICategoryAxis for the independent axis
         // Relevant space already accounted for by IRangeProviderGetRange
         return(Enumerable.Empty <ValueMargin>());
     }
     else
     {
         return(base.IValueMarginProviderGetValueMargins(valueMarginConsumer));
     }
 }
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 IEnumerable<ValueMargin> IValueMarginProvider.GetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     return IValueMarginProviderGetValueMargins(valueMarginConsumer);
 }
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 protected virtual IEnumerable<ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     throw new NotImplementedException();
 }
예제 #17
0
        /// <summary>
        /// The margins required for each value.
        /// </summary>
        /// <param name="consumer">The consumer to return the value margins for.</param>
        /// <returns>A sequence of margins for each value.</returns>
        protected override IEnumerable<ValueMargin> GetValueMargins(IValueMarginConsumer consumer)
        {
            IAxis axis = consumer as IAxis;
            if (axis != null)
            {
                return ActiveDataPoints.Select(dataPoint =>
                {
                    double margin = dataPoint.GetMargin(axis);
                    return new ValueMargin(
                        GetActualDataPointAxisValue(dataPoint, axis), 
                        margin,
                        margin);
                });
            }

            return Enumerable.Empty<ValueMargin>();
        }
 /// <summary>
 /// Returns the value margins for a given axis.
 /// </summary>
 /// <param name="axis">The axis to retrieve the value margins for.
 /// </param>
 /// <returns>A sequence of value margins.</returns>
 IEnumerable <ValueMargin> IValueMarginProvider.GetValueMargins(IValueMarginConsumer axis)
 {
     return(GetValueMargins(axis));
 }
예제 #19
0
 /// <summary>
 /// Returns the value margins for the data points of the series.
 /// </summary>
 /// <param name="valueMarginConsumer">Consumer of the value margins.</param>
 /// <returns>Sequence of value margins.</returns>
 protected override IEnumerable <ValueMargin> IValueMarginProviderGetValueMargins(IValueMarginConsumer valueMarginConsumer)
 {
     if (IsStacked100 && (valueMarginConsumer == ActualDependentAxis))
     {
         return(Enumerable.Empty <ValueMargin>());
     }
     else if ((valueMarginConsumer == ActualDependentAxis) || (valueMarginConsumer == ActualIndependentAxis))
     {
         Range <IComparable> range = IRangeProviderGetRange((IRangeConsumer)valueMarginConsumer);
         double margin             = DataItems
                                     .Select(di =>
         {
             return((null != di.DataPoint) ?
                    (valueMarginConsumer == ActualDependentAxis) ? di.DataPoint.ActualHeight : di.DataPoint.ActualWidth :
                    0);
         })
                                     .Average() * (3.0 / 4.0);
         return(new ValueMargin[]
         {
             new ValueMargin(range.Minimum, margin, margin),
             new ValueMargin(range.Maximum, margin, margin),
         });
     }
     else
     {
         return(base.IValueMarginProviderGetValueMargins(valueMarginConsumer));
     }
 }