///<summary> /// Ensure this lineStudy is visible ///</summary> ///<param name="position"></param> public override void EnsureVisible(EnsureVisibilityPosition position) { int startPos = _chartX.FirstVisibleRecord; int endPos = _chartX.LastVisibleRecord; int windowSize = _chartX.LastVisibleRecord - _chartX.FirstVisibleRecord - 1; int bestStartPos = startPos; double bestFit = double.MaxValue; double lineValue = _chartPanel.GetReverseY(_line.Y2); double min, max; List <int> seriesIdxs = new List <int>(); seriesIdxs.AddRange(_chartPanel.SeriesCollection.Select(_ => _.SeriesIndex)); //try left while (startPos >= 0) { _chartX._dataManager.MinMaxFromInterval(seriesIdxs, startPos, endPos, out min, out max); double m = (max + min) / 2; double diff = Math.Abs(m - lineValue); if (diff < bestFit) { bestFit = diff; bestStartPos = startPos; } startPos--; endPos--; } //go right startPos = _chartX.FirstVisibleRecord; endPos = _chartX.LastVisibleRecord; while (endPos < _chartX.RecordCount) { _chartX._dataManager.MinMaxFromInterval(seriesIdxs, startPos, endPos, out min, out max); double m = (max + min) / 2; double diff = Math.Abs(m - lineValue); if (diff < bestFit) { bestFit = diff; bestStartPos = startPos; } startPos++; endPos++; } if (bestFit == double.MaxValue) //means no records { return; } _chartX._startIndex = bestStartPos; _chartX._endIndex = bestStartPos + windowSize; _chartX.ResetYScale(_chartPanel.Index); _chartX.Update(); }
///<summary> /// Ensures the LineStudy is visible ///</summary> ///<param name="position"></param> public virtual void EnsureVisible(EnsureVisibilityPosition position) { }