예제 #1
0
        /// <summary>
        /// Sets the position of the slider.
        /// </summary>
        /// <param name="dp">The data point.</param>
        /// <param name="s">The series.</param>
        public void SetPosition(DataPoint dp, OxyPlot.DataSeries s)
        {
            var dp1 = new DataPoint(dp.X, s.YAxis.ActualMaximum);
            var dp2 = new DataPoint(dp.X, s.YAxis.ActualMinimum);
            var dp3 = new DataPoint(s.XAxis.ActualMinimum, dp.Y);
            var dp4 = new DataPoint(s.XAxis.ActualMaximum, dp.Y);

            var pt0 = AxisBase.Transform(dp, s.XAxis, s.YAxis);
            var pt1 = AxisBase.Transform(dp1, s.XAxis, s.YAxis);
            var pt2 = AxisBase.Transform(dp2, s.XAxis, s.YAxis);
            var pt3 = AxisBase.Transform(dp3, s.XAxis, s.YAxis);
            var pt4 = AxisBase.Transform(dp4, s.XAxis, s.YAxis);

            if (ContentTemplate != null)
            {
                content.Content         = new SliderViewModel(s, dp, SliderLabelFormat);
                content.ContentTemplate = ContentTemplate;
                SetLeft(content, pt0.X);
                SetTop(content, pt0.Y);
            }

            sliderLine1.X1 = pt1.X;
            sliderLine1.Y1 = pt1.Y;
            sliderLine1.X2 = pt2.X;
            sliderLine1.Y2 = pt2.Y;

            sliderLine2.X1 = pt3.X;
            sliderLine2.Y1 = pt3.Y;
            sliderLine2.X2 = pt4.X;
            sliderLine2.Y2 = pt4.Y;

            Visibility = Visibility.Visible;
        }
예제 #2
0
        private DataPoint?GetNearestPoint(OxyPlot.DataSeries s, System.Windows.Point pt, bool snap, bool pointsOnly)
        {
            if (s == null)
            {
                return(null);
            }
            var dp = pc.InverseTransform(pt, s.XAxis, s.YAxis);

            if (snap || pointsOnly)
            {
                var dpn = s.GetNearestPoint(dp);
                if (dpn != null && snap)
                {
                    var spn = pc.Transform(dpn.Value, s.XAxis, s.YAxis);
                    if (spn.DistanceTo(pt) < 20)
                    {
                        return(dpn);
                    }
                }
            }

            if (!pointsOnly)
            {
                return(s.GetNearestPointOnLine(dp));
            }

            return(null);
        }
예제 #3
0
 public override void OnMouseUp()
 {
     base.OnMouseUp();
     if (currentSeries == null)
     {
         return;
     }
     currentSeries = null;
     pc.HideSlider();
 }
예제 #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SliderViewModel"/> class.
        /// </summary>
        /// <param name="series">The series.</param>
        /// <param name="point">The point.</param>
        /// <param name="fmt">The format string.</param>
        public SliderViewModel(OxyPlot.DataSeries series, DataPoint point, string fmt = null)
        {
            if (String.IsNullOrEmpty(fmt))
            {
                fmt = DefaultFormat;
            }

            Format = fmt;
            Series = series;
            Point  = point;
        }
예제 #5
0
        public override void OnMouseDown(System.Windows.Point pt, MouseButton button, int clickCount, bool control, bool shift)
        {
            base.OnMouseDown(pt, button, clickCount, control, shift);

            if (button != MouseButton.Left)
                return;

            // Middle button double click adds an annotation
            if (clickCount == 2)
            {
                // pc.Annotations.
                pc.Refresh();
            }

            currentSeries = pc.GetSeriesFromPoint(pt);

            OnMouseMove(pt, control, shift);

            //pc.CaptureMouse();
            // pc.Cursor = Cursors.Cross;
        }
예제 #6
0
        public override void OnMouseDown(System.Windows.Point pt, MouseButton button, int clickCount, bool control, bool shift)
        {
            base.OnMouseDown(pt, button, clickCount, control, shift);

            if (button != MouseButton.Left)
            {
                return;
            }

            // Middle button double click adds an annotation
            if (clickCount == 2)
            {
                // pc.Annotations.
                pc.Refresh();
            }

            currentSeries = pc.GetSeriesFromPoint(pt);

            OnMouseMove(pt, control, shift);

            //pc.CaptureMouse();
            // pc.Cursor = Cursors.Cross;
        }
예제 #7
0
 public override void OnMouseUp()
 {
     base.OnMouseUp();
     if (currentSeries == null)
         return;
     currentSeries = null;
     pc.HideSlider();
 }
예제 #8
0
 public void ShowSlider(OxyPlot.DataSeries s, DataPoint dp)
 {
     slider.ContentTemplate = SliderTemplate;
     slider.SetPosition(dp, s);
 }