private double CalculateOffset(MilepostInfo mpi, double interval) { if (mpi.FirstMilepost == 0) { return(0); } double distance = Math.Abs(mpi.FirstMilepost - mpi.LeftMilepost); return(distance * interval); }
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; }
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; } }
private double CalculateInterval(MilepostInfo mpi, double graphicTrackLength) { double lm = Math.Abs(mpi.LeftMilepost - mpi.RightMilepost); return(graphicTrackLength / lm); }