public void DealPacket_ChainInfo(object pack) { RD_ChainInfo rd = (RD_ChainInfo)pack; if (rd.StartOrEnd == "s") { chain_path temp = new chain_path(this); temp.sensor_name = rd.id; temp.path = rd.PathNodes; foreach (var o in rd.PathNodes) { temp.path_Objs.Add(Scenemana.stkObjs.Find(c => c.ObjName == o)); } Scenemana.setupchain(temp); Scenemana.all_path.Add(temp); } else if (rd.StartOrEnd == "e") { //清楚掉链路 chain_path temp; temp = Scenemana.all_path.Find(c => c.sensor_name == rd.id); if (temp != null) { Scenemana.RemoveAllSensorOnPath(temp); Scenemana.all_path.Remove(temp); } else { MessageBox.Show("读取链路记录异常"); } } }
public void DealPacket_ChainInfo(object pack) { RD_ChainInfo rd = (RD_ChainInfo)pack; //建立链路 chain_path temp = new chain_path(this); temp.sensor_name = rd.id; temp.path = rd.PathNodes; foreach (var o in rd.PathNodes) { temp.path_Objs.Add(Scenemana.stkObjs.Find(c => c.ObjName == o)); } //beamdiameter = 103; Scenemana.setupchain(temp, beamdiameter); Scenemana.all_path.Add(temp); }
public void DealPacket_InterSatellitePath(object pack) { RD_InterSatellitePath rd = (RD_InterSatellitePath)pack; //判断是否为之前已存在的相同链路,如不同,则清除之前的链路 if (rd_update.ISLPath != null && !rd.ISLPath.Equals(rd_update.ISLPath)) { //清除链路 chain_path temp; temp = Scenemana.all_path.Find(c => c.sensor_name == rd_update.ISLid.ToString()); if (temp != null) { Scenemana.RemoveAllSensorOnPath(temp); Scenemana.all_path.Remove(temp); } //else MessageBox.Show("读取链路记录异常"); } //判断是否需要建立新的链路(第一次建立或者链路改变) if (rd_update.ISLPath == null || !rd.ISLPath.Equals(rd_update.ISLPath)) { chain_path pathinfo = new chain_path(this); RD_ChainInfo temp1; int index = 0; string Nodes = rd.ISLPath.ToString(); string[] nodelist = Nodes.Split(new string[] { "->" }, StringSplitOptions.None); foreach (var str in nodelist) { pathinfo.path.Add(str); //将系统物件表中的物体添加到链路的小表中 pathinfo.path_Objs.Add(Scenemana.stkObjs.Find(c => c.ObjName == str)); } //pathinfo.sensor_name = pathinfo.path[0] + "-" + pathinfo.path[pathinfo.path.Count - 1]; pathinfo.sensor_name = rd.ISLid.ToString(); Scenemana.msglist.Clear(); Scenemana.msglist.Add(new Msg { PathNodes = pathinfo.path, id = pathinfo.sensor_name }); temp1 = Scenemana.MakePacket(Scenemana.msglist[index]); if (temp1 != null) { //立即执行 DealPacket_ChainInfo(temp1); index++; } } rd_update = rd;//记录最新的链路信息,为下次判断做准备 }
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 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 { } } }