예제 #1
0
        /// <summary>
        /// Modifies the source data before passing it to the target for display in the UI.
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="language"></param>
        /// <returns></returns>
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            ChartAdornment adornment = value as ChartAdornment;

            if (adornment == null)
            {
                return(value);
            }

            ChartSeriesBase series = adornment.Series;
            ChartBase       area   = series.ActualArea;

            var selectableSegment = series as ISegmentSelectable;

            if (area.SelectedSeriesCollection.Contains(series) &&
                area.GetSeriesSelectionBrush(series) != null && series is ChartSeries &&
                series.adornmentInfo.HighlightOnSelection && area.GetEnableSeriesSelection())
            {
                return(area.GetSeriesSelectionBrush(series));
            }
            else if (series.SelectedSegmentsIndexes.Contains(series.ActualData.IndexOf(adornment.Item)) &&
                     selectableSegment != null && series.adornmentInfo.HighlightOnSelection &&
                     selectableSegment.SegmentSelectionBrush != null)
            {
                return(selectableSegment.SegmentSelectionBrush);
            }
            else
            {
                return(adornment.BorderBrush);
            }
        }
예제 #2
0
            /// <summary>
            /// Transforms chart cordinates to real coordinates.
            /// </summary>
            /// <param name="x">The x value.</param>
            /// <param name="y">The y value.</param>
            /// <returns>The visible point</returns>
            public Point TransformToVisible(double x, double y)
            {
                if (XAxis != null && YAxis != null && double.IsNaN(m_viewport.Width) == false && double.IsNaN(m_viewport.Height) == false)
                {
                    ChartBase area = XAxis.Area;
                    x = x = x_IsLogarithmic && x > 0 ? Math.Log(x, xlogarithmicBase) : x;
                    y = y_IsLogarithmic && y > 0 ? Math.Log(y, ylogarithmicBase) : y;
                    var isSfChart = area is SfChart;
                    if (this.m_IsRoated)
                    {
                        double left = isSfChart ? YAxis.RenderedRect.Left - XAxis.Area.SeriesClipRect.Left : YAxis.RenderedRect.Left;
                        double top  = isSfChart ? XAxis.RenderedRect.Top - YAxis.Area.SeriesClipRect.Top : XAxis.RenderedRect.Top;
                        return(new Point(left + YAxis.RenderedRect.Width * YAxis.ValueToCoefficientCalc(y), top + XAxis.RenderedRect.Height * (1 - XAxis.ValueToCoefficientCalc(x))));
                    }
                    else
                    {
                        if (isSfChart)
                        {
                            double left = XAxis.RenderedRect.Left - XAxis.Area.SeriesClipRect.Left;
                            double top  = YAxis.RenderedRect.Top - YAxis.Area.SeriesClipRect.Top;
                            return(new Point(left + XAxis.RenderedRect.Width * XAxis.ValueToCoefficientCalc(x), top + YAxis.RenderedRect.Height * (1 - YAxis.ValueToCoefficientCalc(y))));
                        }
                        else
                        {
                            double left = XAxis.RenderedRect.Left;
                            double top  = YAxis.RenderedRect.Top;
                            return(new Point(left + Math.Round(XAxis.RenderedRect.Width * XAxis.ValueToCoefficientCalc(x)), top + Math.Round(YAxis.RenderedRect.Height * (1 - YAxis.ValueToCoefficientCalc(y)))));
                        }
                    }
                }

                return(new Point(0, 0));
            }
예제 #3
0
            /// <summary>
            /// Transforms chart cordinates to real coordinates.
            /// </summary>
            /// <param name="x">The x value.</param>
            /// <param name="y">The y value.</param>
            /// <param name="z">The y value.</param>
            /// <returns>The visible point</returns>
            internal Vector3D TransformToVisible3D(double x, double y, double z)
            {
                if (XAxis != null && YAxis != null && !double.IsNaN(m_viewport.Width) && !double.IsNaN(m_viewport.Height) &&
                    ZAxis != null && !double.IsNaN(m_viewport.Width) && !double.IsNaN(m_viewport.Height))
                {
                    ChartBase area = XAxis.Area;
                    x = x = x_IsLogarithmic && x > 0 ? Math.Log(x, xlogarithmicBase) : x;
                    y = y_IsLogarithmic && y > 0 ? Math.Log(y, ylogarithmicBase) : y;
                    z = z_IsLogarithmic && z > 0 ? Math.Log(z, zlogarithmicBase) : z;
                    var    isSfChart = area is SfChart;
                    double depth     = isSfChart ? ZAxis.RenderedRect.Left - ZAxis.Area.SeriesClipRect.Left : ZAxis.RenderedRect.Left;


                    if (this.m_IsRoated)
                    {
                        double left = isSfChart ? YAxis.RenderedRect.Left - XAxis.Area.SeriesClipRect.Left : YAxis.RenderedRect.Left;
                        double top  = isSfChart ? XAxis.RenderedRect.Top - YAxis.Area.SeriesClipRect.Top : XAxis.RenderedRect.Top;
                        return(new Vector3D(left + YAxis.RenderedRect.Width * YAxis.ValueToCoefficientCalc(y), top + XAxis.RenderedRect.Height * (1 - XAxis.ValueToCoefficientCalc(x))
                                            , depth + Math.Round(ZAxis.RenderedRect.Width * ZAxis.ValueToCoefficientCalc(z))));
                    }
                    else
                    {
                        double left = isSfChart ? XAxis.RenderedRect.Left - XAxis.Area.SeriesClipRect.Left : XAxis.RenderedRect.Left;
                        double top  = isSfChart ? YAxis.RenderedRect.Top - YAxis.Area.SeriesClipRect.Top : YAxis.RenderedRect.Top;
                        return(new Vector3D(left + Math.Round(XAxis.RenderedRect.Width * XAxis.ValueToCoefficientCalc(x)), top + Math.Round(YAxis.RenderedRect.Height * (1 - YAxis.ValueToCoefficientCalc(y)))
                                            , depth + Math.Round(ZAxis.RenderedRect.Width * ZAxis.ValueToCoefficientCalc(z))));
                    }
                }

                return(new Vector3D(0, 0, 0));
            }
예제 #4
0
        private static void OnEnableSegmentSelectionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ChartBase chartBase = (d as ChartSelectionBehavior).ChartArea;

            if (chartBase != null && !(bool)e.NewValue)
            {
                foreach (var series in chartBase.VisibleSeries)
                {
                    for (int i = 0; i < series.ActualData.Count; i++)
                    {
                        if (series.SelectedSegmentsIndexes.Contains(i))
                        {
                            series.SelectedSegmentsIndexes.Remove(i);
                            series.OnResetSegment(i);
                        }
                    }

                    var selectableSegment = series as ISegmentSelectable;
                    if (selectableSegment != null)
                    {
                        selectableSegment.SelectedIndex = -1;
                    }
                    series.SelectedSegmentsIndexes.Clear();
                }
            }
            else if (chartBase != null && (bool)e.NewValue)
            {
                for (int index = 0; index < chartBase.VisibleSeries.Count; index++)
                {
                    ChartSeriesBase series            = chartBase.VisibleSeries[index];
                    var             selectableSegment = series as ISegmentSelectable;

                    if (selectableSegment != null && selectableSegment.SelectedIndex != -1)
                    {
                        series.SelectedIndexChanged(selectableSegment.SelectedIndex, -1);
                    }
                }
            }
        }