コード例 #1
0
        public void UpdateBody(IRangeAxis rangeAxis)
        {
            if (Body == null)
            {
                return;
            }

            double highPointY  = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(High)).Value;
            double lowPointY   = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(Low)).Value;
            double openPointY  = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(Open)).Value;
            double closePointY = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(Close)).Value;

            Thickness margin;

            if (openPointY > closePointY)
            {
                margin = new Thickness(0, highPointY - openPointY, 0, closePointY - lowPointY);
            }
            else
            {
                margin = new Thickness(0, highPointY - closePointY, 0, openPointY - lowPointY);
            }

            Body.Margin = margin;
        }
コード例 #2
0
        /// <summary>
        /// Overrides the range requested from the axis.  The default range is
        /// the range of values on to be plotted on the axis.
        /// </summary>
        /// <param name="rangeAxis">The axis to retrieve the range for.</param>
        /// <param name="range">The range of values that are plotted on the
        /// axis.</param>
        /// <returns>A new range.</returns>
        protected virtual Range <IComparable> OverrideRequestedAxisRange(IRangeAxis rangeAxis, Range <IComparable> range)
        {
            if (range.HasData)
            {
                double minimumCoordinate = rangeAxis.GetPlotAreaCoordinate(range.Minimum);
                double maximumCoordinate = rangeAxis.GetPlotAreaCoordinate(range.Maximum);

                if (ValueHelper.CanGraph(minimumCoordinate) && ValueHelper.CanGraph(maximumCoordinate))
                {
                    minimumCoordinate -= RangeAxisMargin;
                    maximumCoordinate += RangeAxisMargin;

                    Range <IComparable> minimumOffsetRange = rangeAxis.GetPlotAreaCoordinateValueRange(minimumCoordinate);
                    Range <IComparable> maximumOffsetRange = rangeAxis.GetPlotAreaCoordinateValueRange(maximumCoordinate);

                    if (minimumOffsetRange.HasData && maximumOffsetRange.HasData)
                    {
                        return(new Range <IComparable>(
                                   minimumOffsetRange.Minimum,
                                   maximumOffsetRange.Maximum));
                    }
                }
            }
            return(range);
        }
コード例 #3
0
        public void UpdateBody(IRangeAxis rangeAxis)
        {
            if (OpenLine == null || CloseLine == null || MinMaxLine == null)
            {
                return;
            }

            Double highPointY = rangeAxis.GetPlotAreaCoordinate(High);

            Double lowPointY = rangeAxis.GetPlotAreaCoordinate(Low);

            Double openPointY = rangeAxis.GetPlotAreaCoordinate(Open);

            Double closePointY = rangeAxis.GetPlotAreaCoordinate(Close);

            OpenLine.Width = (Int32)(((DataPoint)this).Width / 2);

            CloseLine.Width = (Int32)(((DataPoint)this).Width / 2);

            Double openLineMargin = openPointY - lowPointY;

            if ((Int32)openLineMargin >= (Int32)this.Height)
            {
                openLineMargin = this.Height - 1;
            }

            if (openLineMargin < 0.0)
            {
                openLineMargin = 0.0;
            }

            Double closeLineMargin = highPointY - closePointY;

            if ((Int32)closeLineMargin >= (Int32)this.Height)
            {
                closeLineMargin = this.Height - 1;
            }

            if (closeLineMargin < 0.0)
            {
                closeLineMargin = 0.0;
            }

            OpenLine.Margin = new Thickness(0, 0, 0, openLineMargin);

            CloseLine.Margin = new Thickness(0, closeLineMargin, 0, 0);

            MinMaxLine.Width = 2.0;
        }
コード例 #4
0
        /// <summary>
        /// Get a point in screen coordinates.
        /// </summary>
        /// <param name="x">Independent value.</param>
        /// <param name="function">The function.</param>
        /// <param name="independent">The independent axis.</param>
        /// <param name="dependent">The dependent axis.</param>
        /// <returns>The point in screen coordinates.</returns>
        private Point GetPoint(double x, Func <double, double> function, IRangeAxis independent, IRangeAxis dependent)
        {
            // Get the dependent value
            double y = double.NaN;

            try
            {
                y = function(x);
            }
            catch (DivideByZeroException)
            {
            }

            // Map the actual values into coordinate values
            return(new Point(
                       independent.GetPlotAreaCoordinate(x).Value,
                       Math.Min(
                           Math.Max(
                               ActualHeight - dependent.GetPlotAreaCoordinate(y).Value,
                               -1),
                           ActualHeight + 1)));
        }
コード例 #5
0
        /// <summary>
        /// Get a point in screen coordinates.
        /// </summary>
        /// <param name="x">Independent value.</param>
        /// <param name="function">The function.</param>
        /// <param name="independent">The independent axis.</param>
        /// <param name="dependent">The dependent axis.</param>
        /// <returns>The point in screen coordinates.</returns>
        private Point GetPoint(double x, Func<double, double> function, IRangeAxis independent, IRangeAxis dependent)
        {
            // Get the dependent value
            double y = double.NaN;
            try
            {
                y = function(x);
            }
            catch (DivideByZeroException)
            {
            }

            // Map the actual values into coordinate values
            return new Point(
                independent.GetPlotAreaCoordinate(x).Value,
                Math.Min(
                    Math.Max(
                        ActualHeight - dependent.GetPlotAreaCoordinate(y).Value,
                        -1),
                    ActualHeight + 1));
        }
コード例 #6
0
        public void UpdateBody(IRangeAxis rangeAxis)
        {
            if (Body == null)
                return;

            double highPointY = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(High)).Value;
            double lowPointY = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(Low)).Value;
            double openPointY = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(Open)).Value;
            double closePointY = rangeAxis.GetPlotAreaCoordinate(ValueHelper.ToDouble(Close)).Value;

            Thickness margin;
            if (openPointY > closePointY)
            {
                margin = new Thickness(0, highPointY - openPointY, 0, closePointY - lowPointY);
            }
            else
            {
                margin = new Thickness(0, highPointY - closePointY, 0, openPointY - lowPointY);
            }

            Body.Margin = margin;
        }