Esempio n. 1
0
        private double CalculateOffset(MilepostInfo mpi, double interval)
        {
            if (mpi.FirstMilepost == 0)
            {
                return(0);
            }

            double distance = Math.Abs(mpi.FirstMilepost - mpi.LeftMilepost);

            return(distance * interval);
        }
Esempio n. 2
0
        private void TrackMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            // Get mouse position
            var pos = e.GetPosition(Canvas);

            // Calculate ratio
            var grTrkLength = (float)Utility.CalculateDistance(
                TrackComponent.LX, TrackComponent.LY,
                TrackComponent.RX, TrackComponent.RY);

            var grDistanceToMouse = (float)Utility.CalculateDistance(
                pos.X, pos.Y, TrackComponent.LX, TrackComponent.LY);

            var ratio = grDistanceToMouse / grTrkLength;

            // Get Miles.
            MilepostInfo mpi = DetermineMilepostSequence(TrackComponent.LeftLimitMPRange, TrackComponent.RightLimitMPRange);
            var          trackLengthInMiles = Math.Abs(mpi.RightMilepost - mpi.LeftMilepost);

            MouseMiles = mpi.LeftMilepost + mpi.IncrementAmount * ratio * trackLengthInMiles;
        }
Esempio n. 3
0
        private void DrawMileLines()
        {
            MilepostInfo mpi      = DetermineMilepostSequence(TrackComponent.LeftLimitMPRange, TrackComponent.RightLimitMPRange);
            var          interval = CalculateInterval(mpi, _rect.Width);

            if (interval <= 0 || double.IsInfinity(interval))
            {
                return;
            }

            var offset = CalculateOffset(mpi, interval);

            if (offset + interval >= _rect.Width)
            {
                return;
            }

            int mp = mpi.FirstMilepost;

            for (Double x = offset; x < _rect.Width + offset; x += interval)
            {
                Line ln = new Line()
                {
                    Stroke          = System.Windows.Media.Brushes.Blue,
                    StrokeThickness = 1,
                    X1 = x + TrackComponent.LX,
                    X2 = x + TrackComponent.LX,
                    Y1 = TrackComponent.LY,
                    Y2 = TrackComponent.LY + _rect.Height,
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment   = VerticalAlignment.Center,
                    ToolTip             = mp.ToString("d")
                };

                Canvas.Children.Add(ln);

                mp += mpi.IncrementAmount;
            }
        }
Esempio n. 4
0
        private double CalculateInterval(MilepostInfo mpi, double graphicTrackLength)
        {
            double lm = Math.Abs(mpi.LeftMilepost - mpi.RightMilepost);

            return(graphicTrackLength / lm);
        }