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