Ejemplo n.º 1
0
 private void Fix2CenterButton_Click(object sender, EventArgs e)
 {
     // East declination is positive; west is negative
     // True (map) Heading = Mag Bearing + Declination
     // Mag Hdg = True Brg - Declination
     // VOR headings are always magnetic (Hdg)
     if (FixListDataGridView.SelectedRows.Count > 0)
     {
         string   FixText = string.Empty;
         double[] Coords;
         double   Lat = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[1].Value);
         double   Lon = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[2].Value);
         // VORs are in bearings and need no adjustment
         //double MagVar = Convert.ToDouble(MagVarTextBox.Text);
         if (FixOffsetCheckBox.Checked)
         {
             double Dist = Convert.ToDouble(FixDistTextBox.Text);
             double Brg  = Convert.ToDouble(FixBrgNUD.Value);
             //if (FixListDataGridView.SelectedRows[0].Cells[3].Value != null)
             //MagVar = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[3].Value);
             Coords  = LatLongCalc.Destination(Lat, Lon, Dist, Brg, 'N');
             Lat     = Coords[0]; Lon = Coords[1];
             FixText = String.Format("{0:000}", FixBrgNUD.Value) +
                       String.Format("{0:000.0}", Convert.ToDouble(FixDistTextBox.Text));
         }
         CenterLatitudeTextBox.Text = Conversions.Degrees2SCT(Lat, true);
         CenterLat = Lat;
         CenterLongitudeTextBox.Text = Conversions.Degrees2SCT(Lon, false);
         CenterLon = Lon;
         //MagVarTextBox.Text = MagVar.ToString();
         CenterFixTextBox.Text = FixListDataGridView.SelectedRows[0].Cells[0].Value.ToString() + FixText;
         UpdateStats();
     }
 }
Ejemplo n.º 2
0
 private void InsertCoordsButton_Click(object sender, EventArgs e)
 {
     if ((CenterLat == -1) || (CenterLon == -1))
     {
         SCTcommon.SendMessage("First select the center point of the arc.");
         return;
     }
     if ((CalcDistanceTextBox.TextLength == 0) || (Convert.ToDouble(CalcDistanceTextBox.Text) < 1))
     {
         SCTcommon.SendMessage("Radius of arc must be at least 1 NM");
         return;
     }
     else
     {
         double[] Coords;
         double   CenterLat = Conversions.DMS2Degrees(CenterLatitudeTextBox.Text);
         double   CenterLon = Conversions.DMS2Degrees(CenterLongitudeTextBox.Text);
         double   Dist = Convert.ToDouble(CalcDistanceTextBox.Text);
         double   BrgStart = Convert.ToDouble(StartRadialNUD.Value);
         double   BrgEnd = Convert.ToDouble(EndRadialNUD.Value);
         double   MagVar = Convert.ToDouble(MagVarTextBox.Text);
         double   Lat; double Lon;
         if (CircleCheckBox.Checked)
         {
             Coords = LatLongCalc.Destination(CenterLat, CenterLon, Dist, 90, 'N');
             Lat    = Coords[0];
             Lon    = Coords[1];
             StartLatitudeTextBox.Text  = Conversions.Degrees2SCT(Lat, true);
             StartLongitudeTextBox.Text = Conversions.Degrees2SCT(Lon, false);
             StartLat = Lat;
             StartLon = Lon;
             EndLatitudeTextBox.Text  = Conversions.Degrees2SCT(Lat, true);
             EndLongitudeTextBox.Text = Conversions.Degrees2SCT(Lon, false);
             EndLat = Lat;
             EndLon = Lon;
         }
         else
         {
             if (MagBrgCheckBox.Checked == true)
             {
                 BrgStart -= MagVar; BrgEnd -= MagVar;
             }
             Coords = LatLongCalc.Destination(CenterLat, CenterLon, Dist, BrgStart, 'N');
             Lat    = Coords[0];
             Lon    = Coords[1];
             StartLatitudeTextBox.Text  = Conversions.Degrees2SCT(Lat, true);
             StartLongitudeTextBox.Text = Conversions.Degrees2SCT(Lon, false);
             StartLat = Lat;
             StartLon = Lon;
             Coords   = LatLongCalc.Destination(CenterLat, CenterLon, Dist, BrgEnd, 'N');
             Lat      = Coords[0];
             Lon      = Coords[1];
             EndLatitudeTextBox.Text  = Conversions.Degrees2SCT(Lat, true);
             EndLongitudeTextBox.Text = Conversions.Degrees2SCT(Lon, false);
             EndLat = Lat;
             EndLon = Lon;
         }
         UpdateStats();
     }
 }
Ejemplo n.º 3
0
 private void FixToEndButton_Click(object sender, EventArgs e)
 {
     if (FixListDataGridView.SelectedRows.Count > 0)
     {
         string   FixText = string.Empty;
         double[] Coords;
         double   Lat = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[1].Value);
         double   Lon = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[2].Value);
         // VORs are in bearings and need no adjustment
         //double MagVar = Convert.ToDouble(MagVarTextBox.Text);
         if (FixOffsetCheckBox.Checked)
         {
             double Dist = Convert.ToDouble(FixDistTextBox.Text);
             double Brg  = Convert.ToDouble(FixBrgNUD.Value);
             //if (FixListDataGridView.SelectedRows[0].Cells[3].Value != null)
             //MagVar = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[3].Value);
             Coords  = LatLongCalc.Destination(Lat, Lon, Dist, Brg, 'N');
             Lat     = Coords[0]; Lon = Coords[1];
             FixText = String.Format("{0:000}", FixBrgNUD.Value) +
                       String.Format("{0:000.0}", Convert.ToDouble(FixDistTextBox.Text));
         }
         EndLatitudeTextBox.Text = Conversions.Degrees2SCT(Lat, true);
         EndLat = Lat;
         EndLongitudeTextBox.Text = Conversions.Degrees2SCT(Lon, false);
         EndLon = Lon;
         //MagVarTextBox.Text = MagVar.ToString();
         EndFixTextBox.Text = FixListDataGridView.SelectedRows[0].Cells[0].Value.ToString() + FixText;
         UpdateStats();
     }
 }
Ejemplo n.º 4
0
        private void CalcEndButton_Click(object sender, EventArgs e)
        {
            /// Summary
            /// "West is Best, East is least"
            /// To calculate true bearing from compass bearing (and known deviation and variation):
            ///     Compass bearing +deviation = magnetic bearing
            ///     Magnetic bearing + variation = true bearing
            /// To calculate compass bearing from true bearing(and known deviation and variation):
            ///     True bearing -variation = Magnetic bearing
            /// West Variations are negative
            /// In the US, the agonic line is roughly along the Mississippi river
            /// In aviation, maps, GPS and runways use true bearings
            double CalcTrueBrg = CalcBrg;

            if (MagBrgCheckBox.Checked)
            {
                CalcTrueBrg -= CalcMag;
            }
            double[] CalcLocation =
                LatLongCalc.Destination(StartLat, StartLon, DistanceAdjust(CalcDist, CalcType), CalcTrueBrg, CalcType);
            EndLat = CalcLocation[0];
            EndLon = CalcLocation[1];
            EndLatitudeTextBox.Text  = Conversions.Degrees2SCT(EndLat, true);
            EndLongitudeTextBox.Text = Conversions.Degrees2SCT(EndLon, false);
            EndFixTextBox.Text       = string.Empty;
            UpdateCopyButtons();
        }
Ejemplo n.º 5
0
 private void ImportFixToHold()
 {
     // East declination is positive; west is negative
     // True (map) Heading = Mag Bearing + Declination
     // Mag Hdg = True Brg - Declination
     // VOR headings are always magnetic (Hdg)
     if (FixListDataGridView.SelectedRows.Count > 0)
     {
         string   FixText = string.Empty;
         double[] Coords;
         double   Lat = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[1].Value);
         double   Lon = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[2].Value);
         // VORs are in bearings and need no adjustment
         //double MagVar = Convert.ToDouble(MagVarTextBox.Text);
         if (FixOffsetCheckBox.Checked)
         {
             double Dist = Convert.ToDouble(FixOffsetDistTextBox.Text);
             double Brg  = Convert.ToDouble(FixOffsetBrgNUD.Value);
             //if (FixListDataGridView.SelectedRows[0].Cells[3].Value != null)
             //MagVar = Convert.ToDouble(FixListDataGridView.SelectedRows[0].Cells[3].Value);
             Coords  = LatLongCalc.Destination(Lat, Lon, Dist, Brg, 'N');
             Lat     = Coords[0]; Lon = Coords[1];
             FixText = String.Format("{0:000}", FixOffsetBrgNUD.Value) +
                       String.Format("{0:000.0}", Convert.ToDouble(FixOffsetDistTextBox.Text));
         }
         HoldLatitudeTextBox.Text = Conversions.Degrees2SCT(Lat, true);
         HoldLat = Lat;
         HoldLongitudeTextBox.Text = Conversions.Degrees2SCT(Lon, false);
         HoldLon = Lon;
         //MagVarTextBox.Text = MagVar.ToString();
         HoldFixTextBox.Text         = FixListDataGridView.SelectedRows[0].Cells[0].Value.ToString() + FixText;
         AddFixLabelCheckBox.Enabled = AddFixSymbolCheckBox.Enabled = (HoldFixTextBox.TextLength != 0);
     }
 }
Ejemplo n.º 6
0
 private void FixEndCoordButton_Click(object sender, EventArgs e)
 {
     double[] coords =
         LatLongCalc.Destination(CenterLat, CenterLon, ArcRadius, Convert.ToDouble(EndRadialNUD.Value), 'N');
     EndLat = coords[0];
     EndLon = coords[1];
     EndLatitudeTextBox.Text  = Conversions.Degrees2SCT(EndLat, true);
     EndLongitudeTextBox.Text = Conversions.Degrees2SCT(EndLon, false);
     UpdateStats();
 }
Ejemplo n.º 7
0
 private void RadBrgStartButton_Click(object sender, EventArgs e)
 {
     double[] coords = new double[2];
     if ((CenterLat != -1) && (CenterLon != -1))
     {
         coords   = LatLongCalc.Destination(CenterLat, CenterLon, ArcRadius, Convert.ToDouble(StartRadialNUD.Value), 'N');
         StartLat = coords[0];
         StartLon = coords[1];
         StartLatitudeTextBox.Text  = Conversions.Degrees2SCT(StartLat, true);
         StartLongitudeTextBox.Text = Conversions.Degrees2SCT(StartLon, false);
     }
 }
Ejemplo n.º 8
0
        private string BuildArcString(double StartBrg, double EndBrg, double StartLat, double StartLon)
        {
            string Lat0 = string.Empty; string Lon0 = string.Empty; string Lat1; string Lon1;
            string output = string.Empty;

            double[] Coords;
            // Make sure we aren't crossing 360...
            if ((StartBrg + Math.Abs(EndBrg - StartBrg)) > 360)
            {
                for (double i = StartBrg; i < 360; i++)
                {
                    Coords  = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, i, 'N');
                    Lat1    = Conversions.Degrees2SCT(Coords[0], true);
                    Lon1    = Conversions.Degrees2SCT(Coords[1], false);
                    output += OutputText(Lat0, Lon0, Lat1, Lon1);
                    Lat0    = Lat1; Lon0 = Lon1;
                }
                for (double i = 1; i < EndBrg; i++)
                {
                    Coords  = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, i, 'N');
                    Lat1    = Conversions.Degrees2SCT(Coords[0], true);
                    Lon1    = Conversions.Degrees2SCT(Coords[1], false);
                    output += OutputText(Lat0, Lon0, Lat1, Lon1);
                    Lat0    = Lat1; Lon0 = Lon1;
                }
            }
            else
            {
                for (double i = StartBrg; i < EndBrg; i++)
                {
                    Coords  = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, i, 'N');
                    Lat1    = Conversions.Degrees2SCT(Coords[0], true);
                    Lon1    = Conversions.Degrees2SCT(Coords[1], false);
                    output += OutputText(Lat0, Lon0, Lat1, Lon1);
                    Lat0    = Lat1; Lon0 = Lon1;
                }
            }
            // Draw last segment
            Coords   = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, EndBrg, 'N');
            PasteLat = Coords[0]; PasteLon = Coords[1];
            Lat1     = Conversions.Degrees2SCT(Coords[0], true);
            Lon1     = Conversions.Degrees2SCT(Coords[1], false);
            output  += OutputText(Lat0, Lon0, Lat1, Lon1);
            return(output);
        }
Ejemplo n.º 9
0
        private void CenterFromChord()
        {
            // The center is perpendicular to the midpoint of the start/end chord
            // Since I'm always turning to the right, perpendicular is always +90
            double Lat0 = (StartLat + EndLat) / 2.0;
            double Lon0 = (StartLon + EndLon) / 2.0;
            double Brg  = (LatLongCalc.Bearing(StartLat, StartLon, EndLat, EndLon) + 90) % 360;

            double[] Coords = LatLongCalc.Destination(Lat0, Lon0, RadiusFromChordArc(), Brg, 'N');
            CenterLat = Coords[0]; CenterLon = Coords[1];
            CenterLatitudeTextBox.Text  = Conversions.Degrees2SCT(CenterLat, true);
            CenterLongitudeTextBox.Text = Conversions.Degrees2SCT(CenterLon, false);
            CenterFixTextBox.Text       = "<calculated from chord>";
            StartBrg             = (LatLongCalc.Bearing(CenterLat, CenterLon, StartLat, StartLon) + 90) % 360;
            StartRadialNUD.Value = (int)StartBrg;
            EndBrg             = (LatLongCalc.Bearing(CenterLat, CenterLon, EndLat, EndLon) + 90) % 360;
            EndRadialNUD.Value = (int)EndBrg;
        }
Ejemplo n.º 10
0
        private string BuildArcString()
        {
            string Lat0 = string.Empty; string Lon0 = string.Empty; string Lat1; string Lon1;
            string output = string.Empty;

            double[] Coords;
            if (CircleCheckBox.Checked)
            {
                StartBrg = 0; EndBrg = 360;
            }
            // Make sure we aren't crossing 360...
            if ((StartBrg + (EndBrg - StartBrg)) > 360)
            {
                for (double i = StartBrg; i < 360; i++)
                {
                    Coords  = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, i, 'N');
                    Lat1    = Conversions.Degrees2SCT(Coords[0], true);
                    Lon1    = Conversions.Degrees2SCT(Coords[1], false);
                    output += OutputText(Lat0, Lon0, Lat1, Lon1);
                    Lat0    = Lat1; Lon0 = Lon1;
                }
                for (double i = 1; i < EndBrg; i++)
                {
                    Coords  = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, i, 'N');
                    Lat1    = Conversions.Degrees2SCT(Coords[0], true);
                    Lon1    = Conversions.Degrees2SCT(Coords[1], false);
                    output += OutputText(Lat0, Lon0, Lat1, Lon1);
                    Lat0    = Lat1; Lon0 = Lon1;
                }
            }
            else
            {
                for (double i = StartBrg; i < EndBrg; i++)
                {
                    Coords  = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, i, 'N');
                    Lat1    = Conversions.Degrees2SCT(Coords[0], true);
                    Lon1    = Conversions.Degrees2SCT(Coords[1], false);
                    output += OutputText(Lat0, Lon0, Lat1, Lon1);
                    Lat0    = Lat1; Lon0 = Lon1;
                }
            }
            return(output);
        }
Ejemplo n.º 11
0
        private string BuildRaceTrack()
        {
            string output = string.Empty;
            // Step 1  - build leg away from hold fix
            double StartLat = HoldLat;
            double StartLon = HoldLon;
            double StartBrg; double EndBrg;
            double EndLat; double EndLon; double[] Coords;
            string Lat0; string Lon0; string Lat1; string Lon1;
            double OutTrack = Track;

            if (InboundTrackRadioButton.Checked)
            {
                OutTrack = Track + 540 % 360;                                   // Reverse track to outbnd
            }
            Coords  = LatLongCalc.Destination(StartLat, StartLon, LegLnthDist, OutTrack, 'N');
            EndLat  = Coords[0]; EndLon = Coords[1];
            Lat0    = Conversions.Degrees2SCT(PasteLat, true);
            Lon0    = Conversions.Degrees2SCT(PasteLon, false);
            Lat1    = Conversions.Degrees2SCT(EndLat, true);
            Lon1    = Conversions.Degrees2SCT(EndLon, false);
            output += OutputText(Lat0, Lon0, Lat1, Lon1);
            // Step 2 - Enter first turn
            StartLat = EndLat; StartLon = EndLon;   // This is start of turn
            if (TurnRight)
            {
                StartBrg = (OutTrack + 270) % 360;
                EndBrg   = (OutTrack + 90) % 360;
            }
            else
            {
                EndBrg   = (OutTrack + 270) % 360;
                StartBrg = (OutTrack + 90) % 360;
            }
            Coords = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, EndBrg, 'N');
            double CenterLat = Coords[0]; double CenterLon = Coords[1];                     // Center of arc

            output += BuildArcString(StartBrg, EndBrg, CenterLat, CenterLon);               // Build Arc 1
            // Step 3 - Return leg
            // Need to close the end of arc with next line
            Coords   = LatLongCalc.Destination(StartLat, StartLon, ArcRadius * 2, EndBrg, 'N');
            StartLat = Coords[0]; StartLon = Coords[1];
            Lat0     = Conversions.Degrees2SCT(PasteLat, true);
            Lon0     = Conversions.Degrees2SCT(PasteLon, false);
            Lat1     = Conversions.Degrees2SCT(StartLat, true);
            Lon1     = Conversions.Degrees2SCT(StartLon, false);
            output  += OutputText(Lat0, Lon0, Lat1, Lon1);
            // Now draw the leg line
            double InTrack = (OutTrack + 180) % 360;

            Coords  = LatLongCalc.Destination(StartLat, StartLon, LegLnthDist, InTrack, 'N');
            EndLat  = Coords[0]; EndLon = Coords[1];
            Lat0    = Conversions.Degrees2SCT(StartLat, true);
            Lon0    = Conversions.Degrees2SCT(StartLon, false);
            Lat1    = Conversions.Degrees2SCT(EndLat, true);
            Lon1    = Conversions.Degrees2SCT(EndLon, false);
            output += OutputText(Lat0, Lon0, Lat1, Lon1);
            // Step 4 - Return arc
            if (TurnRight)
            {
                EndBrg   = (OutTrack + 270) % 360;
                StartBrg = (OutTrack + 90) % 360;
            }
            else
            {
                StartBrg = (OutTrack + 270) % 360;
                EndBrg   = (OutTrack + 90) % 360;
            }
            StartLat  = EndLat; StartLon = EndLon;
            Coords    = LatLongCalc.Destination(StartLat, StartLon, ArcRadius, EndBrg, 'N');
            CenterLat = Coords[0]; CenterLon = Coords[1];
            output   += BuildArcString(StartBrg, EndBrg, CenterLat, CenterLon);
            if (DrawFixSymbol)
            {
                output += DrawFix_Symbol();
            }
            if (DrawFixLabel)
            {
                output += DrawFix_Label();
            }
            return(output);
        }