Exemple #1
0
        protected override void UpdateDataItemPlacement(IEnumerable <DefinitionSeries.DataItem> dataItems)
        {
            base.UpdateDataItemPlacement(dataItems);
            double width = this.SeriesArea.ActualWidth / IndependentValueGroups.Count();

            double min = 32767;
            double max = 0;

            List <string> series = new List <string>();

            foreach (DefinitionSeries.DataItem dataItem in dataItems)
            {
                if (dataItem.DataPoint.Width < min)
                {
                    min = dataItem.DataPoint.Width;
                }
                if (dataItem.DataPoint.Width > max)
                {
                    max = dataItem.DataPoint.Width;
                }
                if (!series.Contains(dataItem.SeriesDefinition.ActualTitle.ToString()))
                {
                    series.Add(dataItem.SeriesDefinition.ActualTitle.ToString());
                }
            }

            foreach (DefinitionSeries.DataItem dataItem in dataItems)
            {
                double orgWidth = dataItem.DataPoint.Width;
                double delta    = width - dataItem.DataPoint.Width - 1;
                dataItem.DataPoint.Width = width;

                Canvas.SetLeft(dataItem.Container, Canvas.GetLeft(dataItem.Container) - delta);

                if (orgWidth == max)
                {
                    Canvas.SetLeft(dataItem.Container, Canvas.GetLeft(dataItem.Container) - 1);
                    if (series.Count > 1)
                    {
                        dataItem.DataPoint.Width = dataItem.DataPoint.Width + 1;
                    }
                }

                dataItem.DataPoint.Width = dataItem.DataPoint.Width + 1;
            }

            if (series.Count > 1)
            {
                int z = dataItems.Count();
                foreach (DefinitionSeries.DataItem dataItem in dataItems)
                {
                    Canvas.SetZIndex(dataItem.Container, z);
                    z--;
                    dataItem.DataPoint.Width = dataItem.DataPoint.Width - 1;
                }
            }
        }
Exemple #2
0
        protected override void UpdateDataItemPlacement(IEnumerable <DefinitionSeries.DataItem> dataItems)
        {
            base.UpdateDataItemPlacement(dataItems);
            double width = this.SeriesArea.ActualWidth / IndependentValueGroups.Count();

            foreach (DefinitionSeries.DataItem dataItem in dataItems)
            {
                double delta = width - dataItem.DataPoint.Width;
                dataItem.DataPoint.Width = width;
                Canvas.SetLeft(dataItem.Container, Canvas.GetLeft(dataItem.Container) - delta);
            }
        }
        protected override Range <IComparable> IRangeProviderGetRange(IRangeConsumer rangeConsumer)
        {
            if (rangeConsumer == ActualDependentAxis)
            {
                var dependentValuesByIndependentValue = IndependentValueDependentValues.Select(e => e.ToArray()).ToArray();

                var mostNegative = dependentValuesByIndependentValue
                                   .Select(g => g.Where(v => v < 0)
                                           .Sum())
                                   .Where(v => v < 0)
                                   .ToArray();
                var leastNegative = dependentValuesByIndependentValue
                                    .Select(g => g.Where(v => v <= 0)
                                            .DefaultIfEmpty(1.0)
                                            .First())
                                    .Where(v => v <= 0)
                                    .ToArray();
                var mostPositive = dependentValuesByIndependentValue
                                   .Select(g => g.Where(v => 0 < v)
                                           .Sum())
                                   .Where(v => 0 < v)
                                   .ToArray();
                var leastPositive = dependentValuesByIndependentValue
                                    .Select(g => g.Where(v => 0 <= v)
                                            .DefaultIfEmpty(-1.0)
                                            .First())
                                    .Where(v => 0 <= v)
                                    .ToArray();

                // Compute minimum
                double minimum = 0;
                if (mostNegative.Any())
                {
                    minimum = mostNegative.Min();
                }
                else if (leastPositive.Any())
                {
                    minimum = leastPositive.Min();
                }

                // Compute maximum
                double maximum = 0;
                if (mostPositive.Any())
                {
                    maximum = mostPositive.Max();
                }
                else if (leastNegative.Any())
                {
                    maximum = leastNegative.Max();
                }

                if (IsStacked100)
                {
                    minimum = Math.Min(minimum, 0);
                    maximum = Math.Max(maximum, 0);
                }

                return(new Range <IComparable>(minimum, maximum));
            }
            else if (rangeConsumer == ActualIndependentAxis)
            {
                // Using a non-ICategoryAxis for the independent axis
                // Need to specifically adjust for slot size of bars/columns so they don't overlap
                // Note: Calculation for slotSize is not perfect, but it's quick, close, and errs on the safe side
                Range <IComparable> range = base.IRangeProviderGetRange(rangeConsumer);
                int count = Math.Max(IndependentValueGroups.Count(), 1);
                if (ActualIndependentAxis.CanPlot(0.0))
                {
                    double minimum  = ValueHelper.ToDouble(range.Minimum);
                    double maximum  = ValueHelper.ToDouble(range.Maximum);
                    double slotSize = (maximum - minimum) / count;
                    return(new Range <IComparable>(minimum - slotSize, maximum + slotSize));
                }
                else
                {
                    DateTime minimum  = ValueHelper.ToDateTime(range.Minimum);
                    DateTime maximum  = ValueHelper.ToDateTime(range.Maximum);
                    TimeSpan slotSize = TimeSpan.FromTicks((maximum - minimum).Ticks / count);
                    return(new Range <IComparable>(minimum - slotSize, maximum + slotSize));
                }
            }
            else
            {
                return(base.IRangeProviderGetRange(rangeConsumer));
            }
        }