/// <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> /// Draws the gridlines with the specified values. /// </summary> /// <param name="axis">The Axis</param> /// <param name="lines">The Lines</param> /// <param name="left">The Left</param> /// <param name="top">The Top</param> /// <param name="width">The Width</param> /// <param name="height">The Height</param> /// <param name="values">The Values</param> /// <param name="drawOrigin">Check For Draw Origin</param> /// <param name="index">The Index</param> private void DrawGridLines(ChartAxis axis, UIElementsRecycler <Line> lines, double left, double top, double width, double height, double[] values, bool drawOrigin, int index) { if (lines == null || axis == null) { return; } int labelsCount = values.Length; int linesCount = lines.Count; Orientation orienatation = axis.Orientation; if (orienatation == Orientation.Horizontal) { int i; for (i = 0; i < labelsCount; i++) { if (i < linesCount) { Line line = lines[index]; double value = axis.ValueToCoefficientCalc(values[i]); value = double.IsNaN(value) ? 0 : value; //line.X1 = (value=Math.Round(width * value) + 0.5)>width ? value-0.5:value; line.X1 = (Math.Round(width * value)) + left; line.Y1 = top; line.X2 = line.X1; line.Y2 = height; } index++; } if (!axis.ShowOrigin && panel.Children.Contains(xOriginLine)) { panel.Children.Remove(xOriginLine); } if (axis.ShowOrigin && drawOrigin) { double value = Area.InternalSecondaryAxis.ValueToCoefficientCalc(axis.Origin); value = double.IsNaN(value) ? 0 : value; xOriginLine.X1 = 0; xOriginLine.Y1 = xOriginLine.Y2 = Math.Round(height * (1 - value)); xOriginLine.X2 = width; Binding binding = new Binding(); binding.Path = new PropertyPath("OriginLineStyle"); binding.Source = axis; xOriginLine.SetBinding(Line.StyleProperty, binding); if (!panel.Children.Contains(xOriginLine)) { panel.Children.Add(xOriginLine); } } } else { int i; for (i = 0; i < labelsCount; i++) { if (i < linesCount) { Line line = lines[index]; double value = axis.ValueToCoefficientCalc(values[i]); value = double.IsNaN(value) ? 0 : value; line.X1 = left; line.Y1 = Math.Round(height * (1 - value)) + 0.5 + top; line.X2 = width; line.Y2 = line.Y1; } index++; } if (!axis.ShowOrigin && panel.Children.Contains(yOriginLine)) { panel.Children.Remove(yOriginLine); } if (axis.ShowOrigin && axis.VisibleRange.Delta > 0 && drawOrigin) { double value = Area.InternalPrimaryAxis.ValueToCoefficientCalc(axis.Origin); value = double.IsNaN(value) ? 0 : value; yOriginLine.X1 = yOriginLine.X2 = Math.Round(width * (value)); yOriginLine.Y1 = 0; yOriginLine.Y2 = height; Binding binding = new Binding(); binding.Path = new PropertyPath("OriginLineStyle"); binding.Source = axis; yOriginLine.SetBinding(Line.StyleProperty, binding); if (!panel.Children.Contains(yOriginLine)) { panel.Children.Add(yOriginLine); } } } }
/// <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)); }