Exemple #1
0
        private void AltUnitsChoice_SelectedIndexChanged(object sender, EventArgs e)
        {
            ResetFailure();
            ComboBox Selector = (ComboBox)sender;
            AltUnits NewUnits = DecideAltUnits((string)Selector.SelectedItem);

            try
            {
                if (CurrentAltUnits == NewUnits)
                {
                    return;
                }
                if (!RwyElevationInput.Text.Equals(string.Empty))
                {
                    double CurrElev = double.Parse(RwyElevationInput.Text);
                    if (CurrentAltUnits == AltUnits.FEET)
                    {
                        RwyElevationInput.Text = Math.Round(InputCleaner.FeetToMeters(CurrElev)).ToString();
                    }
                    else
                    {
                        RwyElevationInput.Text = Math.Round(InputCleaner.MetersToFeet(CurrElev)).ToString();
                    }
                }
            } catch { FailedUnitsConversion(); }
            CurrentAltUnits = NewUnits;
        }
Exemple #2
0
 public MainWindow()
 {
     InitializeComponent();
     CurrentAltUnits = AltUnits.FEET;
     CurrentUnits    = PrimaryUnits.METRIC;
     this.AltUnitsChoice.SelectedIndex    = 0;
     this.WeightUnitsChoice.SelectedIndex = 0;
     this.RwyCondSel.SelectedIndex        = 0;
     this.FlapsSettingSel.SelectedIndex   = 0;
 }
        public static double GetMeters(double distance, AltUnits units)
        {
            double scaleFactor = 1.0;

            switch (units)
            {
            case AltUnits.Meters:
                scaleFactor = 1.0;
                break;

            case AltUnits.Feet:
                scaleFactor = 1.0 / 3.2808399;
                break;

            case AltUnits.Inches:
                scaleFactor = (1.0 / 3.2808399) / 12;
                break;

            case AltUnits.Miles:
                scaleFactor = 1609.344;
                break;

            case AltUnits.Kilometers:
                scaleFactor = 1000;
                break;

            case AltUnits.AstronomicalUnits:
                scaleFactor = UiTools.KilometersPerAu * 1000;
                break;

            case AltUnits.LightYears:
                scaleFactor = UiTools.AuPerLightYear * UiTools.KilometersPerAu * 1000;
                break;

            case AltUnits.Parsecs:
                scaleFactor = UiTools.AuPerParsec * UiTools.KilometersPerAu * 1000;
                break;

            case AltUnits.MegaParsecs:
                scaleFactor = UiTools.AuPerParsec * UiTools.KilometersPerAu * 1000 * 1000000;
                break;

            case AltUnits.Custom:
                scaleFactor = 1;
                break;

            default:
                break;
            }

            return(distance * scaleFactor);
        }
        public double GetScaleFactor(AltUnits AltUnit, double custom)
        {
            double factor = 1;

            switch (AltUnit)
            {
            case AltUnits.Meters:
                factor = 1;
                break;

            case AltUnits.Feet:
                factor = 1 * 0.3048;
                break;

            case AltUnits.Inches:
                factor = (1.0 / 12.0) * 0.3048;
                break;

            case AltUnits.Miles:
                factor = 5280 * 0.3048;
                break;

            case AltUnits.Kilometers:
                factor = 1000;
                break;

            case AltUnits.AstronomicalUnits:
                factor = 1000 * UiTools.KilometersPerAu;
                break;

            case AltUnits.LightYears:
                factor = 1000 * UiTools.KilometersPerAu * UiTools.AuPerLightYear;
                break;

            case AltUnits.Parsecs:
                factor = 1000 * UiTools.KilometersPerAu * UiTools.AuPerParsec;
                break;

            case AltUnits.MegaParsecs:
                factor = 1000 * UiTools.KilometersPerAu * UiTools.AuPerParsec * 1000000;
                break;

            case AltUnits.Custom:
                factor = custom;
                break;

            default:
                break;
            }
            return(factor);
        }
        public virtual void InitializeFromXml(XmlNode node)
        {
            Name               = node.Attributes.GetNamedItem("Name").Value;
            Parent             = node.Attributes.GetNamedItem("Parent").Value;
            ReferenceFrameType = (ReferenceFrameTypes)Enums.Parse("ReferenceFrameTypes", node.Attributes.GetNamedItem("ReferenceFrameType").Value);

            Reference = (ReferenceFrames)Enums.Parse("ReferenceFrames", node.Attributes.GetNamedItem("Reference").Value);

            ParentsRoationalBase = Boolean.Parse(node.Attributes.GetNamedItem("ParentsRoationalBase").Value);
            MeanRadius           = Double.Parse(node.Attributes.GetNamedItem("MeanRadius").Value);
            Oblateness           = Double.Parse(node.Attributes.GetNamedItem("Oblateness").Value);
            Heading     = Double.Parse(node.Attributes.GetNamedItem("Heading").Value);
            Pitch       = Double.Parse(node.Attributes.GetNamedItem("Pitch").Value);
            Roll        = Double.Parse(node.Attributes.GetNamedItem("Roll").Value);
            Scale       = Double.Parse(node.Attributes.GetNamedItem("Scale").Value);
            Tilt        = Double.Parse(node.Attributes.GetNamedItem("Tilt").Value);
            Translation = Vector3d.Parse(node.Attributes.GetNamedItem("Translation").Value);
            if (ReferenceFrameType == ReferenceFrameTypes.FixedSherical)
            {
                Lat      = Double.Parse(node.Attributes.GetNamedItem("Lat").Value);
                Lng      = Double.Parse(node.Attributes.GetNamedItem("Lng").Value);
                Altitude = Double.Parse(node.Attributes.GetNamedItem("Altitude").Value);
            }

            RotationalPeriod    = Double.Parse(node.Attributes.GetNamedItem("RotationalPeriod").Value);
            ZeroRotationDate    = Double.Parse(node.Attributes.GetNamedItem("ZeroRotationDate").Value);
            RepresentativeColor = Color.Load(node.Attributes.GetNamedItem("RepresentativeColor").Value);
            ShowAsPoint         = Boolean.Parse(node.Attributes.GetNamedItem("ShowAsPoint").Value);
            if (node.Attributes.GetNamedItem("StationKeeping") != null)
            {
                StationKeeping = Boolean.Parse(node.Attributes.GetNamedItem("StationKeeping").Value);
            }

            if (ReferenceFrameType == ReferenceFrameTypes.Orbital)
            {
                ShowOrbitPath = Boolean.Parse(node.Attributes.GetNamedItem("ShowOrbitPath").Value);
                SemiMajorAxis = Double.Parse(node.Attributes.GetNamedItem("SemiMajorAxis").Value);

                SemiMajorAxisUnits = (AltUnits)Enums.Parse("AltUnits", node.Attributes.GetNamedItem("SemiMajorAxisScale").Value);

                Eccentricity             = Double.Parse(node.Attributes.GetNamedItem("Eccentricity").Value);
                Inclination              = Double.Parse(node.Attributes.GetNamedItem("Inclination").Value);
                ArgumentOfPeriapsis      = Double.Parse(node.Attributes.GetNamedItem("ArgumentOfPeriapsis").Value);
                LongitudeOfAscendingNode = Double.Parse(node.Attributes.GetNamedItem("LongitudeOfAscendingNode").Value);
                MeanAnomolyAtEpoch       = Double.Parse(node.Attributes.GetNamedItem("MeanAnomolyAtEpoch").Value);
                MeanDailyMotion          = Double.Parse(node.Attributes.GetNamedItem("MeanDailyMotion").Value);
                Epoch = Double.Parse(node.Attributes.GetNamedItem("Epoch").Value);
            }
        }
Exemple #6
0
        public void FromTLE(string line1, string line2, double gravity)
        {
            Epoch                    = SpaceTimeController.TwoLineDateToJulian(line1.Substr(18, 14));
            Eccentricity             = double.Parse("0." + line2.Substr(26, 7));
            Inclination              = double.Parse(line2.Substr(8, 8));
            LongitudeOfAscendingNode = double.Parse(line2.Substr(17, 8));
            ArgumentOfPeriapsis      = double.Parse(line2.Substr(34, 8));
            double revs = double.Parse(line2.Substr(52, 11));

            MeanAnomolyAtEpoch = double.Parse(line2.Substr(43, 8));
            MeanDailyMotion    = revs * 360.0;
            double part = (86400.0 / revs) / (Math.PI * 2.0);

            SemiMajorAxis      = Math.Pow((part * part) * gravity, 1.0 / 3.0);
            SemiMajorAxisUnits = AltUnits.Meters;
        }
Exemple #7
0
        private void ComputeBtn_Click(object sender, EventArgs e)
        {
            ResetFailure();
            ResetOutput();
            PrimaryUnits       Units         = DecideUnits((string)WeightUnitsChoice.SelectedValue);
            AltUnits           AltitudeUnits = DecideAltUnits((string)AltUnitsChoice.SelectedValue);
            FlapsSetting       Flaps         = DecideFlapsSetting((string)FlapsSettingSel.SelectedValue);
            LandingSpeedValues BaseValues    = new LandingSpeedValues {
                Units = Units, Flaps = Flaps,
            };
            bool ConvertSuccess = double.TryParse(OATInput.Text, out double OAT);

            ConvertSuccess &= double.TryParse(WeightInput.Text, out double WeightDouble);
            if (!ConvertSuccess)
            {
                FailedToClean(); return;
            }
            BaseValues.OAT    = (int)Math.Round(OAT);
            BaseValues.Weight = (int)Math.Round(WeightDouble);

            // Compute Landing
            bool CleanSuccess = InputCleaner.CleanedLandingSpeeds(BaseValues, out LandingSpeedValues CleanedLandingVals);

            if (!CleanSuccess)
            {
                FailedToClean(); return;
            }
            LandingComputation LandingComp = new LandingComputation(CleanedLandingVals);

            if (LandingComp.Failed)
            {
                FailedToCompute(); return;
            }

            // Display landing data
            DisplayLandingData(LandingComp.Output);

            TakeoffSpeedValues TakeOffValues = new TakeoffSpeedValues();

            // ALT Units, AntiIce, Runway HDG, Wind HFG, Wind Speed, Elevation, RWY Conditions
            TakeOffValues.BasicVals = CleanedLandingVals;
            bool ConvertValsSuccess = double.TryParse(RwyElevationInput.Text, out double RwyElev);

            ConvertValsSuccess &= double.TryParse(RwyHdgInput.Text, out double RwyHdg);
            double WindHdg = 0;
            double WindSpd = 0;

            try
            {
                string[] WindInfo = RwyWindInput.Text.Split('/');
                ConvertValsSuccess &= double.TryParse(WindInfo[0], out WindHdg);
                ConvertValsSuccess &= double.TryParse(WindInfo[1], out WindSpd);
            }
            catch { FailedToCleanTO(); return; }
            if (!ConvertValsSuccess)
            {
                FailedToCleanTO(); return;
            }
            TakeOffValues.Elevation  = (int)Math.Round(RwyElev);
            TakeOffValues.RunwayHdg  = (int)Math.Round(RwyHdg);
            TakeOffValues.WindHdg    = (int)Math.Round(WindHdg);
            TakeOffValues.WindSpd    = (int)Math.Round(WindSpd);
            TakeOffValues.Conditions = DecideRunwayConditions((string)RwyCondSel.SelectedItem);
            TakeOffValues.AntiIce    = DeIceOnCheckbox.Checked;

            CleanSuccess = InputCleaner.CleanedTakeoffSpeeds(TakeOffValues, out TakeoffSpeedValues CleanedTakeOffVals);
            if (!CleanSuccess)
            {
                FailedTakeoffComputation(); return;
            }

            TakeoffComputation TakeoffComp = new TakeoffComputation(CleanedTakeOffVals);

            if (TakeoffComp.Failed)
            {
                FailedTakeoffComputation(); return;
            }

            // Display Takeoff Data
            DisplayTakeoffData(TakeoffComp.Output);
            Success();
        }
Exemple #8
0
        //public virtual void SaveToXml(System.Xml.XmlTextWriter xmlWriter)
        //{
        //    xmlWriter.WriteStartElement("ReferenceFrame");
        //    xmlWriter.WriteAttributeString("Name", Name);
        //    xmlWriter.WriteAttributeString("Parent", Parent);
        //    xmlWriter.WriteAttributeString("ReferenceFrameType", ReferenceFrameType.ToString());
        //    xmlWriter.WriteAttributeString("Reference", Reference.ToString());
        //    xmlWriter.WriteAttributeString("ParentsRoationalBase",ParentsRoationalBase.ToString() );
        //    xmlWriter.WriteAttributeString("MeanRadius", MeanRadius.ToString());
        //    xmlWriter.WriteAttributeString("Oblateness", Oblateness.ToString());
        //    xmlWriter.WriteAttributeString("Heading", Heading.ToString());
        //    xmlWriter.WriteAttributeString("Pitch", Pitch.ToString());
        //    xmlWriter.WriteAttributeString("Roll", Roll.ToString());
        //    xmlWriter.WriteAttributeString("Scale", Scale.ToString());
        //    xmlWriter.WriteAttributeString("Tilt", Tilt.ToString());
        //    xmlWriter.WriteAttributeString("Translation", Translation.ToString());
        //    if (ReferenceFrameType == ReferenceFrameTypes.FixedSherical)
        //    {
        //        xmlWriter.WriteAttributeString("Lat", Lat.ToString());
        //        xmlWriter.WriteAttributeString("Lng", Lng.ToString());
        //        xmlWriter.WriteAttributeString("Altitude", Altitude.ToString());
        //    }
        //    xmlWriter.WriteAttributeString("RotationalPeriod", RotationalPeriod.ToString());
        //    xmlWriter.WriteAttributeString("ZeroRotationDate", ZeroRotationDate.ToString());
        //    xmlWriter.WriteAttributeString("RepresentativeColor",SavedColor.Save(RepresentativeColor));
        //    xmlWriter.WriteAttributeString("ShowAsPoint", ShowAsPoint.ToString());
        //    xmlWriter.WriteAttributeString("StationKeeping", StationKeeping.ToString());
        //    if (ReferenceFrameType == ReferenceFrameTypes.Orbital)
        //    {
        //        xmlWriter.WriteAttributeString("ShowOrbitPath", ShowOrbitPath.ToString());
        //        xmlWriter.WriteAttributeString("SemiMajorAxis", SemiMajorAxis.ToString());
        //        xmlWriter.WriteAttributeString("SemiMajorAxisScale", this.SemiMajorAxisUnits.ToString());
        //        xmlWriter.WriteAttributeString("Eccentricity", Eccentricity.ToString());
        //        xmlWriter.WriteAttributeString("Inclination", Inclination.ToString());
        //        xmlWriter.WriteAttributeString("ArgumentOfPeriapsis", ArgumentOfPeriapsis.ToString());
        //        xmlWriter.WriteAttributeString("LongitudeOfAscendingNode", LongitudeOfAscendingNode.ToString());
        //        xmlWriter.WriteAttributeString("MeanAnomolyAtEpoch", MeanAnomolyAtEpoch.ToString());
        //        xmlWriter.WriteAttributeString("MeanDailyMotion", MeanDailyMotion.ToString());
        //        xmlWriter.WriteAttributeString("Epoch", Epoch.ToString());
        //    }

        //    xmlWriter.WriteEndElement();
        //}

        public virtual void InitializeFromXml(XmlNode node)
        {
            Name   = node.Attributes.GetNamedItem("Name").Value;
            Parent = node.Attributes.GetNamedItem("Parent").Value;

            switch (node.Attributes.GetNamedItem("ReferenceFrameType").Value)
            {
            case "FixedSherical":
                ReferenceFrameType = ReferenceFrameTypes.FixedSherical;
                break;

            case "Orbital":
                ReferenceFrameType = ReferenceFrameTypes.Orbital;
                break;

            case "Trajectory":
                ReferenceFrameType = ReferenceFrameTypes.Trajectory;
                break;

            default:
                break;
            }

            switch (node.Attributes.GetNamedItem("Reference").Value)
            {
            case "Sky":
                Reference = ReferenceFrames.Sky;
                break;

            case "Ecliptic":
                Reference = ReferenceFrames.Ecliptic;
                break;

            case "Galactic":
                Reference = ReferenceFrames.Galactic;
                break;

            case "Sun":
                Reference = ReferenceFrames.Sun;
                break;

            case "Mercury":
                Reference = ReferenceFrames.Mercury;
                break;

            case "Venus":
                Reference = ReferenceFrames.Venus;
                break;

            case "Earth":
                Reference = ReferenceFrames.Earth;
                break;

            case "Mars":
                Reference = ReferenceFrames.Mars;
                break;

            case "Jupiter":
                Reference = ReferenceFrames.Jupiter;
                break;

            case "Saturn":
                Reference = ReferenceFrames.Saturn;
                break;

            case "Uranus":
                Reference = ReferenceFrames.Uranus;
                break;

            case "Neptune":
                Reference = ReferenceFrames.Neptune;
                break;

            case "Pluto":
                Reference = ReferenceFrames.Pluto;
                break;

            case "Moon":
                Reference = ReferenceFrames.Moon;
                break;

            case "Io":
                Reference = ReferenceFrames.Io;
                break;

            case "Europa":
                Reference = ReferenceFrames.Europa;
                break;

            case "Ganymede":
                Reference = ReferenceFrames.Ganymede;
                break;

            case "Callisto":
                Reference = ReferenceFrames.Callisto;
                break;

            case "Custom":
                Reference = ReferenceFrames.Custom;
                break;

            case "Identity":
                Reference = ReferenceFrames.Identity;
                break;

            default:
                break;
            }


            ParentsRoationalBase = Boolean.Parse(node.Attributes.GetNamedItem("ParentsRoationalBase").Value);
            MeanRadius           = Double.Parse(node.Attributes.GetNamedItem("MeanRadius").Value);
            Oblateness           = Double.Parse(node.Attributes.GetNamedItem("Oblateness").Value);
            Heading     = Double.Parse(node.Attributes.GetNamedItem("Heading").Value);
            Pitch       = Double.Parse(node.Attributes.GetNamedItem("Pitch").Value);
            Roll        = Double.Parse(node.Attributes.GetNamedItem("Roll").Value);
            Scale       = Double.Parse(node.Attributes.GetNamedItem("Scale").Value);
            Tilt        = Double.Parse(node.Attributes.GetNamedItem("Tilt").Value);
            Translation = Vector3d.Parse(node.Attributes.GetNamedItem("Translation").Value);
            if (ReferenceFrameType == ReferenceFrameTypes.FixedSherical)
            {
                Lat      = Double.Parse(node.Attributes.GetNamedItem("Lat").Value);
                Lng      = Double.Parse(node.Attributes.GetNamedItem("Lng").Value);
                Altitude = Double.Parse(node.Attributes.GetNamedItem("Altitude").Value);
            }

            RotationalPeriod    = Double.Parse(node.Attributes.GetNamedItem("RotationalPeriod").Value);
            ZeroRotationDate    = Double.Parse(node.Attributes.GetNamedItem("ZeroRotationDate").Value);
            RepresentativeColor = Color.Load(node.Attributes.GetNamedItem("RepresentativeColor").Value);
            ShowAsPoint         = Boolean.Parse(node.Attributes.GetNamedItem("ShowAsPoint").Value);
            if (node.Attributes.GetNamedItem("StationKeeping") != null)
            {
                StationKeeping = Boolean.Parse(node.Attributes.GetNamedItem("StationKeeping").Value);
            }

            if (ReferenceFrameType == ReferenceFrameTypes.Orbital)
            {
                ShowOrbitPath = Boolean.Parse(node.Attributes.GetNamedItem("ShowOrbitPath").Value);
                SemiMajorAxis = Double.Parse(node.Attributes.GetNamedItem("SemiMajorAxis").Value);

                switch (node.Attributes.GetNamedItem("SemiMajorAxisScale").Value)
                {
                case "Meters":
                    SemiMajorAxisUnits = AltUnits.Meters;
                    break;

                case "Feet":
                    SemiMajorAxisUnits = AltUnits.Feet;
                    break;

                case "Inches":
                    SemiMajorAxisUnits = AltUnits.Inches;
                    break;

                case "Miles":
                    SemiMajorAxisUnits = AltUnits.Miles;
                    break;

                case "Kilometers":
                    SemiMajorAxisUnits = AltUnits.Kilometers;
                    break;

                case "AstronomicalUnits":
                    SemiMajorAxisUnits = AltUnits.AstronomicalUnits;
                    break;

                case "LightYears":
                    SemiMajorAxisUnits = AltUnits.LightYears;
                    break;

                case "Parsecs":
                    SemiMajorAxisUnits = AltUnits.Parsecs;
                    break;

                case "MegaParsecs":
                    SemiMajorAxisUnits = AltUnits.MegaParsecs;
                    break;

                case "Custom":
                    SemiMajorAxisUnits = AltUnits.Custom;
                    break;

                default:
                    break;
                }

                Eccentricity             = Double.Parse(node.Attributes.GetNamedItem("Eccentricity").Value);
                Inclination              = Double.Parse(node.Attributes.GetNamedItem("Inclination").Value);
                ArgumentOfPeriapsis      = Double.Parse(node.Attributes.GetNamedItem("ArgumentOfPeriapsis").Value);
                LongitudeOfAscendingNode = Double.Parse(node.Attributes.GetNamedItem("LongitudeOfAscendingNode").Value);
                MeanAnomolyAtEpoch       = Double.Parse(node.Attributes.GetNamedItem("MeanAnomolyAtEpoch").Value);
                MeanDailyMotion          = Double.Parse(node.Attributes.GetNamedItem("MeanDailyMotion").Value);
                Epoch = Double.Parse(node.Attributes.GetNamedItem("Epoch").Value);
            }
        }
        public double GetScaleFactor(AltUnits AltUnit, double custom)
        {
            double factor = 1;

            switch (AltUnit)
            {
                case AltUnits.Meters:
                    factor = 1;
                    break;
                case AltUnits.Feet:
                    factor = 1 * 0.3048;
                    break;
                case AltUnits.Inches:
                    factor = (1.0 / 12.0) * 0.3048;
                    break;
                case AltUnits.Miles:
                    factor = 5280 * 0.3048;
                    break;
                case AltUnits.Kilometers:
                    factor = 1000;
                    break;
                case AltUnits.AstronomicalUnits:
                    factor = 1000 * UiTools.KilometersPerAu;
                    break;
                case AltUnits.LightYears:
                    factor = 1000 * UiTools.KilometersPerAu * UiTools.AuPerLightYear;
                    break;
                case AltUnits.Parsecs:
                    factor = 1000 * UiTools.KilometersPerAu * UiTools.AuPerParsec;
                    break;
                case AltUnits.MegaParsecs:
                    factor = 1000 * UiTools.KilometersPerAu * UiTools.AuPerParsec * 1000000;
                    break;
                case AltUnits.Custom:
                    factor = custom;
                    break;
                default:
                    break;
            }
            return factor;
        }
        //public virtual void SaveToXml(System.Xml.XmlTextWriter xmlWriter)
        //{
        //    xmlWriter.WriteStartElement("ReferenceFrame");
        //    xmlWriter.WriteAttributeString("Name", Name);
        //    xmlWriter.WriteAttributeString("Parent", Parent);
        //    xmlWriter.WriteAttributeString("ReferenceFrameType", ReferenceFrameType.ToString());
        //    xmlWriter.WriteAttributeString("Reference", Reference.ToString());
        //    xmlWriter.WriteAttributeString("ParentsRoationalBase",ParentsRoationalBase.ToString() );
        //    xmlWriter.WriteAttributeString("MeanRadius", MeanRadius.ToString());
        //    xmlWriter.WriteAttributeString("Oblateness", Oblateness.ToString());
        //    xmlWriter.WriteAttributeString("Heading", Heading.ToString());
        //    xmlWriter.WriteAttributeString("Pitch", Pitch.ToString());
        //    xmlWriter.WriteAttributeString("Roll", Roll.ToString());
        //    xmlWriter.WriteAttributeString("Scale", Scale.ToString());
        //    xmlWriter.WriteAttributeString("Tilt", Tilt.ToString());
        //    xmlWriter.WriteAttributeString("Translation", Translation.ToString());
        //    if (ReferenceFrameType == ReferenceFrameTypes.FixedSherical)
        //    {
        //        xmlWriter.WriteAttributeString("Lat", Lat.ToString());
        //        xmlWriter.WriteAttributeString("Lng", Lng.ToString());
        //        xmlWriter.WriteAttributeString("Altitude", Altitude.ToString());
        //    }
        //    xmlWriter.WriteAttributeString("RotationalPeriod", RotationalPeriod.ToString());
        //    xmlWriter.WriteAttributeString("ZeroRotationDate", ZeroRotationDate.ToString());
        //    xmlWriter.WriteAttributeString("RepresentativeColor",SavedColor.Save(RepresentativeColor));
        //    xmlWriter.WriteAttributeString("ShowAsPoint", ShowAsPoint.ToString());
        //    xmlWriter.WriteAttributeString("StationKeeping", StationKeeping.ToString());
        //    if (ReferenceFrameType == ReferenceFrameTypes.Orbital)
        //    {
        //        xmlWriter.WriteAttributeString("ShowOrbitPath", ShowOrbitPath.ToString());
        //        xmlWriter.WriteAttributeString("SemiMajorAxis", SemiMajorAxis.ToString());
        //        xmlWriter.WriteAttributeString("SemiMajorAxisScale", this.SemiMajorAxisUnits.ToString());
        //        xmlWriter.WriteAttributeString("Eccentricity", Eccentricity.ToString());
        //        xmlWriter.WriteAttributeString("Inclination", Inclination.ToString());
        //        xmlWriter.WriteAttributeString("ArgumentOfPeriapsis", ArgumentOfPeriapsis.ToString());
        //        xmlWriter.WriteAttributeString("LongitudeOfAscendingNode", LongitudeOfAscendingNode.ToString());
        //        xmlWriter.WriteAttributeString("MeanAnomolyAtEpoch", MeanAnomolyAtEpoch.ToString());
        //        xmlWriter.WriteAttributeString("MeanDailyMotion", MeanDailyMotion.ToString());
        //        xmlWriter.WriteAttributeString("Epoch", Epoch.ToString());
        //    }
        //    xmlWriter.WriteEndElement();
        //}
        public virtual void InitializeFromXml(XmlNode node)
        {
            Name = node.Attributes.GetNamedItem("Name").Value;
            Parent = node.Attributes.GetNamedItem("Parent").Value;

            switch (node.Attributes.GetNamedItem("ReferenceFrameType").Value)
            {
                case "FixedSherical":
                    ReferenceFrameType = ReferenceFrameTypes.FixedSherical;
                    break;
                case "Orbital":
                    ReferenceFrameType = ReferenceFrameTypes.Orbital;
                    break;
                case "Trajectory":
                    ReferenceFrameType = ReferenceFrameTypes.Trajectory;
                    break;
                default:
                    break;
            }

              switch (node.Attributes.GetNamedItem("Reference").Value)
            {
                case "Sky":
                    Reference = ReferenceFrames.Sky;
                    break;
                case "Ecliptic":
                    Reference = ReferenceFrames.Ecliptic;
                    break;
                case "Galactic":
                    Reference = ReferenceFrames.Galactic;
                    break;
                case "Sun":
                    Reference = ReferenceFrames.Sun;
                    break;
                case "Mercury":
                    Reference = ReferenceFrames.Mercury;
                    break;
                case "Venus":
                    Reference = ReferenceFrames.Venus;
                    break;
                case "Earth":
                    Reference = ReferenceFrames.Earth;
                    break;
                case "Mars":
                    Reference = ReferenceFrames.Mars;
                    break;
                case "Jupiter":
                    Reference = ReferenceFrames.Jupiter;
                    break;
                case "Saturn":
                    Reference = ReferenceFrames.Saturn;
                    break;
                case "Uranus":
                    Reference = ReferenceFrames.Uranus;
                    break;
                case "Neptune":
                    Reference = ReferenceFrames.Neptune;
                    break;
                case "Pluto":
                    Reference = ReferenceFrames.Pluto;
                    break;
                case "Moon":
                    Reference = ReferenceFrames.Moon;
                    break;
                case "Io":
                    Reference = ReferenceFrames.Io;
                    break;
                case "Europa":
                    Reference = ReferenceFrames.Europa;
                    break;
                case "Ganymede":
                    Reference = ReferenceFrames.Ganymede;
                    break;
                case "Callisto":
                    Reference = ReferenceFrames.Callisto;
                    break;
                case "Custom":
                    Reference = ReferenceFrames.Custom;
                    break;
                case "Identity":
                    Reference = ReferenceFrames.Identity;
                    break;
                default:
                    break;
            }

            ParentsRoationalBase = Boolean.Parse(node.Attributes.GetNamedItem("ParentsRoationalBase").Value);
            MeanRadius = Double.Parse(node.Attributes.GetNamedItem("MeanRadius").Value);
            Oblateness = Double.Parse(node.Attributes.GetNamedItem("Oblateness").Value);
            Heading = Double.Parse(node.Attributes.GetNamedItem("Heading").Value);
            Pitch = Double.Parse(node.Attributes.GetNamedItem("Pitch").Value);
            Roll = Double.Parse(node.Attributes.GetNamedItem("Roll").Value);
            Scale = Double.Parse(node.Attributes.GetNamedItem("Scale").Value);
            Tilt = Double.Parse(node.Attributes.GetNamedItem("Tilt").Value);
            Translation = Vector3d.Parse(node.Attributes.GetNamedItem("Translation").Value);
            if (ReferenceFrameType == ReferenceFrameTypes.FixedSherical)
            {
                Lat = Double.Parse(node.Attributes.GetNamedItem("Lat").Value);
                Lng = Double.Parse(node.Attributes.GetNamedItem("Lng").Value);
                Altitude = Double.Parse(node.Attributes.GetNamedItem("Altitude").Value);
            }

            RotationalPeriod = Double.Parse(node.Attributes.GetNamedItem("RotationalPeriod").Value);
            ZeroRotationDate = Double.Parse(node.Attributes.GetNamedItem("ZeroRotationDate").Value);
            RepresentativeColor = Color.Load(node.Attributes.GetNamedItem("RepresentativeColor").Value);
            ShowAsPoint = Boolean.Parse(node.Attributes.GetNamedItem("ShowAsPoint").Value);
            if (node.Attributes.GetNamedItem("StationKeeping")!= null)
            {
                StationKeeping = Boolean.Parse(node.Attributes.GetNamedItem("StationKeeping").Value);
            }

            if (ReferenceFrameType == ReferenceFrameTypes.Orbital)
            {
                ShowOrbitPath = Boolean.Parse(node.Attributes.GetNamedItem("ShowOrbitPath").Value);
                SemiMajorAxis = Double.Parse(node.Attributes.GetNamedItem("SemiMajorAxis").Value);

                switch (node.Attributes.GetNamedItem("SemiMajorAxisScale").Value)
                {
                    case "Meters":
                        SemiMajorAxisUnits = AltUnits.Meters;
                        break;
                      case "Feet":
                        SemiMajorAxisUnits = AltUnits.Feet;
                        break;
                      case "Inches":
                        SemiMajorAxisUnits = AltUnits.Inches;
                        break;
                      case "Miles":
                        SemiMajorAxisUnits = AltUnits.Miles;
                        break;
                      case "Kilometers":
                        SemiMajorAxisUnits = AltUnits.Kilometers;
                        break;
                      case "AstronomicalUnits":
                        SemiMajorAxisUnits = AltUnits.AstronomicalUnits;
                        break;
                      case "LightYears":
                        SemiMajorAxisUnits = AltUnits.LightYears;
                        break;
                      case "Parsecs":
                        SemiMajorAxisUnits = AltUnits.Parsecs;
                        break;
                      case "MegaParsecs":
                        SemiMajorAxisUnits = AltUnits.MegaParsecs;
                        break;
                      case "Custom":
                        SemiMajorAxisUnits = AltUnits.Custom;
                        break;
                    default:
                        break;
                }

                Eccentricity = Double.Parse(node.Attributes.GetNamedItem("Eccentricity").Value);
                Inclination = Double.Parse(node.Attributes.GetNamedItem("Inclination").Value);
                ArgumentOfPeriapsis = Double.Parse(node.Attributes.GetNamedItem("ArgumentOfPeriapsis").Value);
                LongitudeOfAscendingNode = Double.Parse(node.Attributes.GetNamedItem("LongitudeOfAscendingNode").Value);
                MeanAnomolyAtEpoch = Double.Parse(node.Attributes.GetNamedItem("MeanAnomolyAtEpoch").Value);
                MeanDailyMotion = Double.Parse(node.Attributes.GetNamedItem("MeanDailyMotion").Value);
                Epoch = Double.Parse(node.Attributes.GetNamedItem("Epoch").Value);

            }
        }
 public void FromTLE(string line1, string line2, double gravity)
 {
     Epoch = SpaceTimeController.TwoLineDateToJulian(line1.Substr(18, 14));
     Eccentricity = double.Parse("0." + line2.Substr(26, 7));
     Inclination = double.Parse(line2.Substr(8, 8));
     LongitudeOfAscendingNode = double.Parse(line2.Substr(17, 8));
     ArgumentOfPeriapsis = double.Parse(line2.Substr(34, 8));
     double revs = double.Parse(line2.Substr(52, 11));
     MeanAnomolyAtEpoch = double.Parse(line2.Substr(43, 8));
     MeanDailyMotion = revs * 360.0;
     double part = (86400.0 / revs) / (Math.PI * 2.0);
     SemiMajorAxis = Math.Pow((part * part) * gravity, 1.0 / 3.0);
     SemiMajorAxisUnits = AltUnits.Meters;
 }