Exemple #1
0
        //populates some form values, gets scenario timeframe
        private void InitConnection()
        {
            if (!stkconnected)
            {
                // Get reference to running STK instance
                uiApp = System.Runtime.InteropServices.Marshal.GetActiveObject("STK11.Application") as AgUiApplication;

                // Get our IAgStkObjectRoot interface
                stkRoot      = uiApp.Personality2 as IAgStkObjectRoot;
                zscen        = stkRoot.CurrentScenario as IAgScenario;
                stkconnected = true;

                dtp_start.Value = DateTime.ParseExact(zscen.StartTime, parsingFormats, null, System.Globalization.DateTimeStyles.None);
                dtp_end.Value   = DateTime.ParseExact(zscen.StopTime, parsingFormats, null, System.Globalization.DateTimeStyles.None);

                btn_refresh.BackColor = Color.LimeGreen;
            }
            else
            {
                //refresh scenario times
                dtp_start.Value = DateTime.ParseExact(zscen.StartTime, parsingFormats, null, System.Globalization.DateTimeStyles.None);
                dtp_end.Value   = DateTime.ParseExact(zscen.StopTime, parsingFormats, null, System.Globalization.DateTimeStyles.None);
            }


            if (string.IsNullOrEmpty(workingUserDirectory))
            {
                //get user directory for working purposes
                IAgExecCmdResult conRes = stkRoot.ExecuteCommand(@"GetDirectory / UserData");
                workingUserDirectory = conRes[0];
            }

            SafelyUpdateLabel("Connected and using: " + Environment.NewLine + workingUserDirectory);
        }
        public string GetScenarioDirectory()
        {
            IAgExecCmdResult result = m_root.ExecuteCommand("GetDirectory / Scenario");

            return(result[0].ToString());
        }
Exemple #3
0
        private void ExportUMTFile()
        {
            SaveFileDialog saveDialog = new SaveFileDialog();

            saveDialog.Filter           = "UMT files (*.umt)|*.umt";
            saveDialog.FilterIndex      = 0;
            saveDialog.RestoreDirectory = true;
            string fileName = "";

            if (saveDialog.ShowDialog() == DialogResult.OK)
            {
                fileName = saveDialog.FileName;
            }

            if (fileName == "")
            {
                return;
            }

            //
            // init
            //
            m_root.UnitPreferences.SetCurrentUnit("Time", "sec");
            m_root.UnitPreferences.SetCurrentUnit("DateFormat", "EpSec");
            m_root.UnitPreferences.SetCurrentUnit("LatitudeUnit", "rad");
            m_root.UnitPreferences.SetCurrentUnit("LongitudeUnit", "rad");
            m_root.UnitPreferences.SetCurrentUnit("AngleUnit", "rad");
            m_root.UnitPreferences.SetCurrentUnit("DistanceUnit", "m");
            m_root.ExecuteCommand("SetUnits / EpSec");

            //
            // get select obj
            //
            IAgStkObject mySelObj = m_root.GetObjectFromPath(m_psite.Selection[0].Path);


            //
            // get obj class, and roll-offset
            //
            double rOffset = 0.0;

            if ((mySelObj.ClassName == "Ship") || (mySelObj.ClassName == "GroundVehicle"))
            {
                rOffset = Math.PI;
            }


            Console.WriteLine("Create times..." + DateTime.Now.ToString());
            //
            // get object start/stop times
            //
            // If I use ObjModel properties, this would be class specific, so I will use connect
            //
            string[] times = m_root.ExecuteCommand("GetTimePeriod " + mySelObj.Path)[0].Replace("\"", "").Split(',');
            //step = 1; // set = 0 to use native ephemeris time step

            //DAN - Changing this to UTCG times
            string startTime = m_root.ConversionUtility.ConvertDate("EpSec", "UTCG", times[0]);
            string stopTime  = m_root.ConversionUtility.ConvertDate("EpSec", "UTCG", times[1]);

            //DAN - Update the object model to expect UTCG dates
            m_root.UnitPreferences.SetCurrentUnit("DateFormat", "UTCG");


            IAgDataPrvTimeVar dp         = mySelObj.DataProviders.GetDataPrvTimeVarFromPath("Cartesian Position/Fixed");
            Array             elements   = new object[] { "Time" };
            IAgDrResult       result     = dp.ExecElements(startTime, stopTime, 1.0, elements);
            Array             timesArray = result.DataSets.GetDataSetByName("Time").GetValues();


            Console.WriteLine("Data Providers..." + DateTime.Now.ToString());
            //
            // get position data
            //
            elements = new object[] { "x", "y", "z" };
            dp       = mySelObj.DataProviders.GetDataPrvTimeVarFromPath("Cartesian Position/Fixed");
            IAgDrResult results = dp.ExecElements(startTime, stopTime, 1.0, ref elements);
            Array       x       = results.DataSets.GetDataSetByName("x").GetValues();
            Array       y       = results.DataSets.GetDataSetByName("y").GetValues();
            Array       z       = results.DataSets.GetDataSetByName("z").GetValues();



            //
            // get velocity
            //
            elements = new object[] { "x", "y", "z" };
            dp       = mySelObj.DataProviders.GetDataPrvTimeVarFromPath("Cartesian Velocity/Fixed");
            results  = dp.ExecElements(startTime, stopTime, 1.0, ref elements);
            Array xd = results.DataSets.GetDataSetByName("x").GetValues();
            Array yd = results.DataSets.GetDataSetByName("y").GetValues();
            Array zd = results.DataSets.GetDataSetByName("z").GetValues();



            //
            // get acceleration
            //
            dp      = mySelObj.DataProviders.GetDataPrvTimeVarFromPath("Cartesian Acceleration/Fixed");
            results = dp.ExecElements(startTime, stopTime, 1.0, ref elements);
            Array xdd = results.DataSets.GetDataSetByName("x").GetValues();
            Array ydd = results.DataSets.GetDataSetByName("y").GetValues();
            Array zdd = results.DataSets.GetDataSetByName("z").GetValues();


            //
            // get jerk - need to calcualate this: dA/dT
            //
            List <string> xddd = new List <string>();
            List <string> yddd = new List <string>();
            List <string> zddd = new List <string>();

            for (int j = 0; j <= timesArray.Length - 1; j++)
            {
                xddd.Add("0");
                yddd.Add("0");
                zddd.Add("0");
            }


            //
            // get heading, elevation, bank (rad)
            //
            dp = mySelObj.DataProviders.GetDataPrvTimeVarFromPath("Body Axes Orientation/NorthEastDown");
            Array eulerElements = new object[] { "Euler321 precession", "Euler321 nutation", "Euler321 spin" };

            results = dp.ExecElements(startTime, stopTime, 1.0, ref eulerElements);
            Array h = results.DataSets.GetDataSetByName("Euler321 precession").GetValues();
            Array e = results.DataSets.GetDataSetByName("Euler321 nutation").GetValues();
            Array b = results.DataSets.GetDataSetByName("Euler321 spin").GetValues();



            //
            // get angular vel about x,y,z body axes (rad/s)
            //
            dp = mySelObj.DataProviders.GetDataPrvTimeVarFromPath("Body Axes Orientation/Earth Fixed");
            Array avElements = new object[] { "wx", "wy", "wz" };

            results = dp.ExecElements(startTime, stopTime, 1.0, ref avElements);
            Array avel_x = results.DataSets.GetDataSetByName("wx").GetValues();
            Array avel_y = results.DataSets.GetDataSetByName("wy").GetValues();
            Array avel_z = results.DataSets.GetDataSetByName("wz").GetValues();



            //
            // calcualate angular acc about x,y,z body axes (rad/s^2) - from angVel
            //
            List <string> aacc_x = new List <string>();
            List <string> aacc_y = new List <string>();
            List <string> aacc_z = new List <string>();

            for (int j = 0; j <= timesArray.Length - 1; j++)
            {
                aacc_x.Add("0");
                aacc_y.Add("0");
                aacc_z.Add("0");
            }


            //
            // calcualate angular jerk about x,y,z body axes (rad/s^3)  - from angAcc
            //
            List <string> ajerk_x = new List <string>();;
            List <string> ajerk_y = new List <string>();;
            List <string> ajerk_z = new List <string>();;

            for (int j = 0; j <= timesArray.Length - 1; j++)
            {
                ajerk_x.Add("0");
                ajerk_y.Add("0");
                ajerk_z.Add("0");
            }



            //
            // format data (convert time from secs to hh:mm:ss.sss)
            //
            Console.WriteLine("Data Loop... " + DateTime.Now.ToString());
            string[] data = new string[timesArray.Length];
            for (int j = 0; j <= timesArray.Length - 1; j++)
            {
                DateTime iTime = DateTime.Parse(timesArray.GetValue(j).ToString());

                string t = iTime.ToString("HH:mm:ss.fff");
                data[j] = t + ",mot,V1_M1," + Convert.ToString(x.GetValue(j)) + "," + Convert.ToString(y.GetValue(j)) + "," + Convert.ToString(z.GetValue(j)) + "," + Convert.ToString(xd.GetValue(j)) + "," + Convert.ToString(yd.GetValue(j)) + "," + Convert.ToString(zd.GetValue(j)) + "," + Convert.ToString(xdd.GetValue(j)) + "," + Convert.ToString(ydd.GetValue(j)) + "," + Convert.ToString(zdd.GetValue(j)) + "," + xddd[j] + "," + yddd[j] + "," + zddd[j] + "," + Convert.ToString(h.GetValue(j)) + "," + Convert.ToString(e.GetValue(j)) + "," + Convert.ToString(((double)b.GetValue(j) + rOffset)) + "," + Convert.ToString(avel_x.GetValue(j)) + "," + Convert.ToString(avel_y.GetValue(j)) + "," + Convert.ToString(avel_z.GetValue(j)) + "," + aacc_x[j] + "," + aacc_y[j] + "," + aacc_z[j] + "," + ajerk_x[j] + "," + ajerk_y[j] + "," + ajerk_z[j];
            }
            Console.WriteLine("Writing File..." + DateTime.Now.ToString());
            System.IO.File.WriteAllLines(fileName, data);
            Console.WriteLine("Complete. " + DateTime.Now.ToString());
        }