public bool newsat(string objname, double radius, double incline, double raan, string mdlpath) { StringBuilder sat = new StringBuilder(); StringBuilder orb = new StringBuilder(); StringBuilder mdl = new StringBuilder(); try { sat.AppendFormat("New / */Satellite {0}", objname); orb.AppendFormat("SetState */Satellite/{5} Classical J2Perturbation \"{0}\" \"{1}\" 60 J2000 \"{0}\" {2} 0.0 {3} 0.0 {4} 360.0 ", view.startTime, view.endTime, radius, incline, raan, objname); mdl.AppendFormat("VO */Satellite/{1} Model File \"{0}\"", mdlpath, objname); this.view.root.ExecuteCommand(sat.ToString()); view.root.ExecuteCommand(mdl.ToString()); this.view.root.ExecuteCommand(orb.ToString());//这句话很卡,相当占内存...已修复 STKObject temp = new STKObject(); temp.ClassName = "Satellite"; temp.Level = 1; temp.ObjName = objname; temp.ParentObjName = "*"; this.stkObjs.Add(temp); return(true); } catch (Exception e) { MessageBox.Show(e.ToString(), "添加卫星失败"); return(false); } }
public bool newuser(string objname, string lat, string lon) { try { StringBuilder nam = new StringBuilder(); StringBuilder loc = new StringBuilder(); nam.AppendFormat("New / */Facility {0}", objname); loc.AppendFormat("SetPosition */Facility/{0} Geodetic {1} {2} 0.0", objname, lat, lon); this.view.root.ExecuteCommand(nam.ToString()); //用来关闭所有的可视阈值 view.root.ExecuteCommand(string.Format("VO */Facility/{0} ModelDetail Off", objname)); this.view.root.ExecuteCommand(loc.ToString()); STKObject temp = new STKObject(); City fac = new City(); temp.ClassName = "Facility"; temp.ObjName = objname; fac.name = objname; temp.Level = 1; temp.xpos = Convert.ToDouble(lat); fac.lat = Convert.ToDouble(lat); temp.ypos = Convert.ToDouble(lon); fac.lon = Convert.ToDouble(lon); temp.ParentObjName = "*"; stkObjs.Add(temp); stkusers.Add(fac); return(true); } catch { return(false); } }
public void RemoveAllSensorOnPath(chain_path trafficPath) { String cmdSensorRemove_beg = "Unload / */"; StringBuilder cmdSensorRemove = new StringBuilder(); for (int i = 0; i < trafficPath.path_Objs.Count - 1; i++) //20151014 { if (trafficPath.path_Objs[i].SensorName.Contains(trafficPath.sensor_name)) { trafficPath.path_Objs[i].SensorName.Remove(trafficPath.sensor_name); cmdSensorRemove.Append(cmdSensorRemove_beg).Append(trafficPath.path_Objs[i].ClassName).Append("/").Append(trafficPath.path_Objs[i].ObjName) .Append("/Sensor/").Append(trafficPath.sensor_name); try { this.view.root.ExecuteCommand(cmdSensorRemove.ToString()); } catch { MessageBox.Show("STK Command命令出错:" + "无法删除传感器"); } cmdSensorRemove.Clear(); } else if (trafficPath.path_Objs[i].ClassName.Equals("Facility") && trafficPath.path_Objs[i + 1].ClassName.Equals("Facility")) { try { string namestr = trafficPath.path_Objs[i].ObjName + trafficPath.sensor_name; string str = "Unload / */LineTarget/" + namestr; this.view.root.ExecuteCommand(str); } catch (Exception e) { MessageBox.Show("Unload / */LineTarget: \r\n" + e.Message); } } //gez20170406删除波束 if ((trafficPath.path_Objs[i].ClassName.Equals("Satellite") && trafficPath.path_Objs[i + 1].ClassName.Equals("Facility")) || (i > 0) && (trafficPath.path_Objs[i].ClassName.Equals("Satellite") && trafficPath.path_Objs[i - 1].ClassName.Equals("Facility"))) { STKObject seled = trafficPath.path_Objs[i]; if (seled.LinkIndex == 1) { string cmd, cmd2; cmd = string.Format("Unload / */Satellite/{0}/Sensor/cov1", seled.ObjName); cmd2 = string.Format("Unload / */Satellite/{0}/Sensor/cov2", seled.ObjName); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); } seled.LinkIndex--; } //gez20171116删除中继站类型的地面站的放大 if (trafficPath.path_Objs[i].ClassName.Equals("Facility")) { try { hlFaci(trafficPath.path_Objs[i].ObjName, false); } catch { } } if (trafficPath.path_Objs[i].ClassName.Equals("Satellite")) { hlSatSets(trafficPath.path_Objs[i].ObjName, false); } //移除遥感卫星的传感器 if (trafficPath.path_Objs[i].ObjName.IndexOf("RS") != -1) { string cmd; STKObject seled = trafficPath.path_Objs[i]; cmd = string.Format("Unload / */Satellite/{0}/Sensor/rscov1 ", seled.ObjName); view.root.ExecuteCommand(cmd); } } //最后一个如果是facility的话才会有特殊效果 if (trafficPath.path_Objs[trafficPath.path_Objs.Count - 1].ClassName.Equals("Facility")) { try { hlFaci(trafficPath.path_Objs[trafficPath.path_Objs.Count - 1].ObjName, false); } catch { } } }
//链路通断定时处理 public void setupchain(chain_path trafficPath, int diameter) { StringBuilder cmdCreate = new StringBuilder(); StringBuilder cmdSensorRename = new StringBuilder(); StringBuilder cmdSensorGraphics = new StringBuilder(); StringBuilder cmdCommon = new StringBuilder(); //在树视图上增加节点 try { TreeNode node = new TreeNode(trafficPath.sensor_name); trafficPath.path_node = node; node.Tag = trafficPath; node.NodeFont = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Bold); //默认是显示该链路,用粗体 view.trafficView.AddTreeNodeOnLev1(node); if (this.LJ_sensorcolor_index == this.LJ_sensorcolor.Length) { this.LJ_sensorcolor_index = 0; } trafficPath.colorIndex = this.LJ_sensorcolor_index++; for (int i = 0; i < trafficPath.path.Count; i++) { TreeNode node2 = new TreeNode(trafficPath.path[i]); trafficPath.path_node.Nodes.Add(node2); } } catch { } //一个一个的增加传感器 for (int i = 0; i < trafficPath.path_Objs.Count - 1; i++) { cmdCreate.Clear(); cmdSensorRename.Clear(); cmdSensorRename.Append("Rename */"); cmdSensorGraphics.Clear(); cmdCommon.Clear(); if (trafficPath.path_Objs[i].ClassName.Equals("Facility") && trafficPath.path_Objs[i + 1].ClassName.Equals("Facility")) { string namestr = trafficPath.path_Objs[i].ObjName + trafficPath.sensor_name; cmdCreate.Append("New / */LineTarget " + namestr); view.root.ExecuteCommand(cmdCreate.ToString()); LineTargets.Add(namestr); string str = (2).ToString() + " " + trafficPath.path_Objs[i].ypos.ToString() + " " + trafficPath.path_Objs[i].xpos.ToString() + " " + trafficPath.path_Objs[i + 1].ypos.ToString() + " " + trafficPath.path_Objs[i + 1].xpos.ToString(); view.root.ExecuteCommand("SetLine */LineTarget/" + namestr + " LatLon " + str); // this.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " LineStyle dashed"); view.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " LineWidth 8"); view.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " SetColor " + LJ_sensorcolor[trafficPath.colorIndex]); view.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " Label Show Off"); } else { //星地的接口,这里显示波束 if ((trafficPath.path_Objs[i].ClassName.Equals("Satellite") && trafficPath.path_Objs[i + 1].ClassName.Equals("Facility")) || (i > 0) && (trafficPath.path_Objs[i].ClassName.Equals("Satellite") && trafficPath.path_Objs[i - 1].ClassName.Equals("Facility"))) { STKObject seled = trafficPath.path_Objs[i]; if (seled.LinkIndex == 0) { string cmd, cmd2; double temp_diameter = diameter / 2.0; int halfdiameter = (int)Math.Round(temp_diameter); int smallhalfdiameter = (int)Math.Round(halfdiameter * 0.93); cmd = string.Format("New / */Satellite/{0}/Sensor cov1", seled.ObjName); cmd2 = string.Format("New / */Satellite/{0}/Sensor cov2", seled.ObjName); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); cmd = string.Format("Define */Satellite/{0}/Sensor/cov1 SimpleCone {1}", seled.ObjName, halfdiameter); cmd2 = string.Format("Define */Satellite/{0}/Sensor/cov2 SimpleCone {1}", seled.ObjName, smallhalfdiameter); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); cmd = string.Format("Define */Satellite/{0}/Sensor/cov1 SimpleCone {1}", seled.ObjName, halfdiameter); cmd2 = string.Format("Define */Satellite/{0}/Sensor/cov2 SimpleCone {1}", seled.ObjName, smallhalfdiameter); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); //设置传感器的颜色 cmd = string.Format("Graphics */Satellite/{0}/Sensor/cov1 SetColor white", seled.ObjName); cmd2 = string.Format("Graphics */Satellite/{0}/Sensor/cov2 SetColor red", seled.ObjName); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); } seled.LinkIndex++; } //用来高亮显示地面的信关站 if (trafficPath.path_Objs[i].ClassName.Equals("Facility")) { try { hlFaci(trafficPath.path_Objs[i].ObjName, true); } catch { } } //用来显示星间的波束链路 cmdCreate.Append("Load / */").Append(trafficPath.path_Objs[i].ClassName).Append("/").Append(trafficPath.path_Objs[i].ObjName).Append("/Sensor ").Append(LJ_sensorFilePath); cmdSensorRename.Append(trafficPath.path_Objs[i].ClassName).Append("/").Append(trafficPath.path_Objs[i].ObjName).Append("/Sensor/Sensor0 ").Append(trafficPath.sensor_name); cmdCommon.Append(trafficPath.path_Objs[i].ClassName).Append("/").Append(trafficPath.path_Objs[i].ObjName).Append("/Sensor/").Append(trafficPath.sensor_name); view.root.ExecuteCommand(cmdCreate.ToString()); view.root.ExecuteCommand(cmdSensorRename.ToString()); trafficPath.path_Objs[i].SensorName.Add(trafficPath.sensor_name.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("Point */").Append(cmdCommon).Append(" Targeted Tracking ").Append(trafficPath.path_Objs[i + 1].ClassName) .Append("/").Append(trafficPath.path_Objs[i + 1].ObjName).Append(" Hold "); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("VO */").Append(cmdCommon).Append(" Pulse Show On Amplitude 1 Smooth Off"); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("VO */").Append(cmdCommon).Append(" Pulse PulseLength 300 Frequency 0.1 Style Box"); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("Graphics */").Append(cmdCommon).Append(" SetColor ").Append(LJ_sensorcolor[trafficPath.colorIndex]); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); //cmdSensorGraphics.Clear(); //cmdSensorGraphics.Append("Graphics */").Append(cmdCommon_temp).Append(" LineWidth 10");//这只是设置投射到地面的边缘线的宽度 //this.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("Graphics */").Append(cmdCommon).Append(" Show On"); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); //用来显示链路上的卫星 if (trafficPath.path_Objs[i].ClassName == "Satellite") { hlSatSets(trafficPath.path_Objs[i].ObjName, true); } //给遥感卫星添加传感器 if (trafficPath.path_Objs[i].ObjName.IndexOf("RS") != -1) { string cmd; STKObject seled = trafficPath.path_Objs[i]; //安装传感器 cmd = string.Format("New / */Satellite/{0}/Sensor rscov1", seled.ObjName); view.root.ExecuteCommand(cmd); //设置波束形状 cmd = string.Format("Define */Satellite/{0}/Sensor/rscov1 Rectangular 45 1", seled.ObjName); view.root.ExecuteCommand(cmd); cmd = string.Format("Define */Satellite/{0}/Sensor/rscov1 Rectangular 45 1", seled.ObjName); view.root.ExecuteCommand(cmd); //设置传感器的颜色 cmd = string.Format("Graphics */Satellite/{0}/Sensor/rscov1 SetColor white", seled.ObjName); view.root.ExecuteCommand(cmd); //显示传感器 cmd = string.Format("Graphics */Satellite/{0}/Sensor/rscov1 Show On", seled.ObjName); view.root.ExecuteCommand(cmd); } } } //如果是最后一个目标的话 if (trafficPath.path_Objs[trafficPath.path_Objs.Count - 1].ClassName.Equals("Facility")) { try { hlFaci(trafficPath.path_Objs[trafficPath.path_Objs.Count - 1].ObjName, true); } catch { } } }
public bool newwalker_SatUser(string sat, int planes, int pnum, double deg, double raanspread) { try { string cmd; cmd = string.Format("Walker */Satellite/{0} {1} {2} {3} {4} No", sat, planes, pnum, deg, raanspread); this.view.root.ExecuteCommand(cmd); int i, j; if (planes < 10 && pnum < 10) { for (i = 1; i <= planes; i++) { for (j = 1; j <= pnum; j++) { STKObject temp = new STKObject(); temp.ClassName = "Satellite"; temp.Level = 1; temp.ParentObjName = "*"; //星座名称的设置,这里一定要改 temp.ObjName = string.Format("RS{0:D1}{1:D1}", i, j); stkObjs.Add(temp); } } return(true); } else if (planes >= 10 && pnum >= 10) { for (i = 1; i <= planes; i++) { for (j = 1; j <= pnum; j++) { STKObject temp = new STKObject(); temp.ClassName = "Satellite"; temp.Level = 1; temp.ParentObjName = "*"; //星座名称的设置 temp.ObjName = string.Format("RS{0:D2}{1:D2}", i, j); stkObjs.Add(temp); } } return(true); } else if (planes < 10 && pnum >= 10) { for (i = 1; i <= planes; i++) { for (j = 1; j <= pnum; j++) { STKObject temp = new STKObject(); temp.ClassName = "Satellite"; temp.Level = 1; temp.ParentObjName = "*"; //星座名称的设置 temp.ObjName = string.Format("RS{0:D1}{1:D2}", i, j); stkObjs.Add(temp); } } return(true); } else if (planes >= 10 && pnum < 10) { for (i = 1; i <= planes; i++) { for (j = 1; j <= pnum; j++) { STKObject temp = new STKObject(); temp.ClassName = "Satellite"; temp.Level = 1; temp.ParentObjName = "*"; //星座名称的设置 temp.ObjName = string.Format("RS{0:D2}{1:D1}", i, j); stkObjs.Add(temp); } } return(true); } return(false); } catch { return(false); } }
//链路通断定时处理 public void setupchain(chain_path trafficPath) { StringBuilder cmdCreate = new StringBuilder(); StringBuilder cmdSensorRename = new StringBuilder(); StringBuilder cmdSensorGraphics = new StringBuilder(); StringBuilder cmdCommon = new StringBuilder(); //在树视图上增加节点 try { TreeNode node = new TreeNode(trafficPath.sensor_name); trafficPath.path_node = node; node.Tag = trafficPath; node.NodeFont = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Bold); //默认是显示该链路,用粗体 view.trafficView.AddTreeNodeOnLev1(node); if (this.LJ_sensorcolor_index == this.LJ_sensorcolor.Length) { this.LJ_sensorcolor_index = 0; } trafficPath.colorIndex = this.LJ_sensorcolor_index++; for (int i = 0; i < trafficPath.path.Count; i++) { TreeNode node2 = new TreeNode(trafficPath.path[i]); trafficPath.path_node.Nodes.Add(node2); } } catch { } //一个一个的增加传感器 for (int i = 0; i < trafficPath.path_Objs.Count - 1; i++) { cmdCreate.Clear(); cmdSensorRename.Clear(); cmdSensorRename.Append("Rename */"); cmdSensorGraphics.Clear(); cmdCommon.Clear(); if (trafficPath.path_Objs[i].ClassName.Equals("Facility") && trafficPath.path_Objs[i + 1].ClassName.Equals("Facility")) { string namestr = trafficPath.path_Objs[i].ObjName + trafficPath.sensor_name; cmdCreate.Append("New / */LineTarget " + namestr); view.root.ExecuteCommand(cmdCreate.ToString()); LineTargets.Add(namestr); string str = (2).ToString() + " " + trafficPath.path_Objs[i].ypos.ToString() + " " + trafficPath.path_Objs[i].xpos.ToString() + " " + trafficPath.path_Objs[i + 1].ypos.ToString() + " " + trafficPath.path_Objs[i + 1].xpos.ToString(); view.root.ExecuteCommand("SetLine */LineTarget/" + namestr + " LatLon " + str); // this.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " LineStyle dashed"); view.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " LineWidth 8"); view.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " SetColor " + LJ_sensorcolor[trafficPath.colorIndex]); view.root.ExecuteCommand("Graphics */LineTarget/" + namestr + " Label Show Off"); } else { //星地的接口,这里显示波束 if ((trafficPath.path_Objs[i].ClassName.Equals("Satellite") && trafficPath.path_Objs[i + 1].ClassName.Equals("Facility")) || (i > 0) && (trafficPath.path_Objs[i].ClassName.Equals("Satellite") && trafficPath.path_Objs[i - 1].ClassName.Equals("Facility"))) { STKObject seled = trafficPath.path_Objs[i]; if (seled.LinkIndex == 0) { string cmd, cmd2; cmd = string.Format("New / */Satellite/{0}/Sensor cov1", seled.ObjName); cmd2 = string.Format("New / */Satellite/{0}/Sensor cov2", seled.ObjName); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); cmd = string.Format("Define */Satellite/{0}/Sensor/cov1 SimpleCone 57", seled.ObjName); cmd2 = string.Format("Define */Satellite/{0}/Sensor/cov2 SimpleCone 53", seled.ObjName); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); cmd = string.Format("Define */Satellite/{0}/Sensor/cov1 SimpleCone 57", seled.ObjName); cmd2 = string.Format("Define */Satellite/{0}/Sensor/cov2 SimpleCone 53", seled.ObjName); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); //设置传感器的颜色 cmd = string.Format("Graphics */Satellite/{0}/Sensor/cov1 SetColor white", seled.ObjName); cmd2 = string.Format("Graphics */Satellite/{0}/Sensor/cov2 SetColor red", seled.ObjName); view.root.ExecuteCommand(cmd); view.root.ExecuteCommand(cmd2); } seled.LinkIndex++; } if (trafficPath.path_Objs[i].ClassName.Equals("Facility")) { try { hlFaci(trafficPath.path_Objs[i].ObjName, true); } catch { } } cmdCreate.Append("Load / */").Append(trafficPath.path_Objs[i].ClassName).Append("/").Append(trafficPath.path_Objs[i].ObjName).Append("/Sensor ").Append(LJ_sensorFilePath); cmdSensorRename.Append(trafficPath.path_Objs[i].ClassName).Append("/").Append(trafficPath.path_Objs[i].ObjName).Append("/Sensor/Sensor0 ").Append(trafficPath.sensor_name); cmdCommon.Append(trafficPath.path_Objs[i].ClassName).Append("/").Append(trafficPath.path_Objs[i].ObjName).Append("/Sensor/").Append(trafficPath.sensor_name); view.root.ExecuteCommand(cmdCreate.ToString()); view.root.ExecuteCommand(cmdSensorRename.ToString()); trafficPath.path_Objs[i].SensorName.Add(trafficPath.sensor_name.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("Point */").Append(cmdCommon).Append(" Targeted Tracking ").Append(trafficPath.path_Objs[i + 1].ClassName) .Append("/").Append(trafficPath.path_Objs[i + 1].ObjName).Append(" Hold "); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("VO */").Append(cmdCommon).Append(" Pulse Show On Amplitude 0.67 Smooth On"); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("VO */").Append(cmdCommon).Append(" Pulse PulseLength 2000 Frequency 0.083 Style Box"); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("Graphics */").Append(cmdCommon).Append(" SetColor ").Append(LJ_sensorcolor[trafficPath.colorIndex]); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); //cmdSensorGraphics.Clear(); //cmdSensorGraphics.Append("Graphics */").Append(cmdCommon_temp).Append(" LineWidth 10");//这只是设置投射到地面的边缘线的宽度 //this.root.ExecuteCommand(cmdSensorGraphics.ToString()); cmdSensorGraphics.Clear(); cmdSensorGraphics.Append("Graphics */").Append(cmdCommon).Append(" Show On"); view.root.ExecuteCommand(cmdSensorGraphics.ToString()); } } if (trafficPath.path_Objs[trafficPath.path_Objs.Count - 1].ClassName.Equals("Facility")) { try { hlFaci(trafficPath.path_Objs[trafficPath.path_Objs.Count - 1].ObjName, true); } catch { } } }