/// <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); } }
/// <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)); }
/// <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)); }
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); } } } }