예제 #1
0
        ///<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)
 {
 }