Exemplo n.º 1
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));
            }
        /// <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);
                    }
                }
            }
        }
Exemplo n.º 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));
            }