//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()); }
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()); }