// 恢复/停止 指定的流程 的业务 void set_Business_OnOff(string vflowName, eSwitch allowDoBusiness) { if (string.IsNullOrEmpty(vflowName)) { return; } if (!_faim3.dict_Threads.ContainsKey(vflowName)) { FACC.F_Log.Debug_1("clsThManagerBLL", string.Format("--->>>>! 线程没有启动 2:{0}", vflowName)); return; } if ((int)allowDoBusiness != (int)eSwitch.Yes) { _faim3.dict_Threads[vflowName].Info.allowBusiness = eSwitch.Close; } else { _faim3.dict_Threads[vflowName].Info.allowBusiness = eSwitch.Yes; clsFlow _flow = _faim3.dict_Flow[vflowName]; // 无效 _flow.isStepBy = false; // 单步1 _flow.stepCase = ""; // 单步2 _flow.breakSkipCase = _flow.currCase; // 断点 _flow.isStepLine = false; // 单行1 _flow.caseLineIdx = -1; // 单行2 } FACC.F_Log.Debug_1("clsThManagerBLL", string.Format("流程:{0}-->{1}", vflowName, allowDoBusiness.ToString())); }
public Action(eSwitch targetSwitch) { this.Type = eAction.Switch; this.TargetSwitch = targetSwitch; this.HasAction = true; this.IsMove = false; }
//returns orientation and coarse private static string[] GetOrientation(eTrack maintrack, eTrack sidetrack, eSwitch sw) { string[] result = new string[2]; bool trackend = false; double angle; Point switchlocation = new Point(sw.geoCoord.coord[0], sw.geoCoord.coord[1]); if (DataContainer.GetItem(sw.connection[0].@ref).FindParent(typeof(eTrackBegin)) != null) { trackend = true; } double bestdist = 9999999999999999999; List <Point> maintracknodelist = NodeList(maintrack); Point[] maintrackpoints = new Point[2]; for (int i = 0; i < maintracknodelist.Count - 1; i++) { double dist = GetDistance(maintracknodelist[i], maintracknodelist[i + 1], switchlocation); if (dist < bestdist) { maintrackpoints[0] = maintracknodelist[i]; maintrackpoints[1] = maintracknodelist[i + 1]; } } List <Point> sidetracknodelist = NodeList(sidetrack); Point[] sidetrackpoints = new Point[2]; if (trackend) { sidetrackpoints[0] = sidetracknodelist[sidetracknodelist.Count]; sidetrackpoints[1] = sidetracknodelist[sidetracknodelist.Count - 1]; } else { sidetrackpoints[0] = sidetracknodelist[0]; sidetrackpoints[1] = sidetracknodelist[1]; } angle = Math.Atan2((maintrackpoints[1] - maintrackpoints[0]).X, (maintrackpoints[1] - maintrackpoints[0]).Y) - Math.Atan2((sidetrackpoints[1] - sidetrackpoints[0]).X, (sidetrackpoints[1] - sidetrackpoints[0]).Y); if (angle > Math.PI / 4 || angle < -Math.PI / 4) { result[0] = "incoming"; } else { result[0] = "outgoing"; } if (angle < 0) { result[1] = "right"; } else { result[1] = "left"; } return(result); }
public static void AddSwitchesFromExcel(string filepath) { FileStream stream; Loop: try { stream = File.Open(filepath, FileMode.Open, FileAccess.Read); } catch { MessageBoxResult result = MessageBox.Show("Error. Please close the excel document. Retry?", "Error", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { goto Loop; } else { return; } } IExcelDataReader excelreader = ExcelReaderFactory.CreateOpenXmlReader(stream); excelreader.IsFirstRowAsColumnNames = true; _dataset = excelreader.AsDataSet(); _maintable = _dataset.Tables[0]; foreach (DataRow row in _maintable.Rows) { if ((string)row["Type"] == "Turnout" || ((string)row["Type"]) == "Crossover") { eSwitch tempswitch = new eSwitch(); tempswitch.id = row["SerialNo"] as string; tempswitch.pos = (decimal)(((row["Miles"] as double?) ?? 0) + ((row["Yards"] as double?) ?? 0) / 1760); tempswitch.description = row["Description"] as string; tempswitch.geoCoord.coord.Add((double)row["INGEasting"]); tempswitch.geoCoord.coord.Add((double)row["INGNorthing"]); tempswitch = FindConnections(tempswitch); } else if ((string)row["Type"] == "Fixed Diamond") { FixedDiamond(row); } else if ((string)row["Type"] == "Switch Diamond") { SwitchDiamond(row); } else if ((string)row["Type"] == "Double Slip") { SingleSlip(row); } else if ((string)row["Type"] == "Switch Diamond") { DoubleSlip(row); } } }
public static void AddCrossing(eTrack track1, eTrack track2, double length, double pos1, double pos2) { string id1 = DataContainer.IDGenerator("Connection"); string id2 = DataContainer.IDGenerator("Connection"); string id3 = DataContainer.IDGenerator("Connection"); string id4 = DataContainer.IDGenerator("Connection"); tConnectionData switchtotrack1 = new tConnectionData() { id = id1, @ref = id2 }; tSwitchConnectionData track1toswitch = new tSwitchConnectionData() { id = id2, @ref = id1 }; tConnectionData switchtotrack2 = new tConnectionData() { id = id3, @ref = id4 }; tSwitchConnectionData track2toswitch = new tSwitchConnectionData() { id = id4, @ref = id3 }; eTrack track = new eTrack() { id = DataContainer.IDGenerator("track") }; track.trackTopology.trackBegin.pos = 0; track.trackTopology.trackEnd.pos = (decimal)length; track.trackTopology.trackBegin.Item = switchtotrack1; track.trackTopology.trackEnd.Item = switchtotrack2; DataContainer.model.infrastructure.tracks.Add(track); eSwitch switch1 = new eSwitch() { pos = (decimal)pos1, id = DataContainer.IDGenerator("Switch") }; switch1.connection.Add(track1toswitch); track1.trackTopology.connections.Add(switch1); eSwitch switch2 = new eSwitch() { pos = (decimal)pos2, id = DataContainer.IDGenerator("Switch") }; switch1.connection.Add(track2toswitch); track2.trackTopology.connections.Add(switch2); }
public void Switch(eSwitch targetType) { this.Action = new Action(targetType); }
public void TestButton_Click(object sender, EventArgs e) { DataContainer.model = new railml(); eTrack track1 = new eTrack{trackTopology = new eTrackTopology{trackBegin=new eTrackBegin{pos=0, geoCoord=new tGeoCoord()}, trackEnd = new eTrackEnd{pos=600, geoCoord=new tGeoCoord()}}}; DataContainer.IDGenerator(track1); track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackEnd.geoCoord.coord.Add(600); track1.trackTopology.trackEnd.geoCoord.coord.Add(0); eSwitch sw1 = new eSwitch() { id = "sw1" }; sw1.geoCoord.coord.AddRange(new double[] { 300, 0 }); track1.trackTopology.connections.Add(sw1); DataContainer.model.infrastructure.tracks.Add(track1); eTrack track2 = new eTrack{trackTopology = new eTrackTopology{trackBegin=new eTrackBegin{pos=0, geoCoord=new tGeoCoord()}, trackEnd = new eTrackEnd{pos=600, geoCoord=new tGeoCoord()}}}; DataContainer.IDGenerator(track2); track2.trackTopology.trackBegin.geoCoord.coord.Add(6000); track2.trackTopology.trackBegin.geoCoord.coord.Add(20); track2.trackTopology.trackEnd.geoCoord.coord.Add(8000); track2.trackTopology.trackEnd.geoCoord.coord.Add(20); DataContainer.model.infrastructure.tracks.Add(track2); Data.Editor.AddCrossing(track1, track2, 70, 300, 350); eOcp ocp1 = new eOcp { id = "34", name= "test1", geoCoord = new tGeoCoord() }; ocp1.geoCoord.coord.Add(0); ocp1.geoCoord.coord.Add(0); DataContainer.model.infrastructure.operationControlPoints.Add(ocp1); eOcp ocp2 = new eOcp { id = "443", name = "test2", geoCoord = new tGeoCoord() }; ocp2.geoCoord.coord.Add(600); ocp2.geoCoord.coord.Add(0); DataContainer.model.infrastructure.operationControlPoints.Add(ocp2); eOcp ocp3 = new eOcp { id = "344", name = "test3", geoCoord = new tGeoCoord() }; ocp3.geoCoord.coord.Add(600); ocp3.geoCoord.coord.Add(20); DataContainer.model.infrastructure.operationControlPoints.Add(ocp3); eOcp ocp4 = new eOcp { id = "343", name = "test3", geoCoord = new tGeoCoord() }; ocp4.geoCoord.coord.Add(0); ocp4.geoCoord.coord.Add(20); DataContainer.model.infrastructure.operationControlPoints.Add(ocp4); DataContainer.PrepareData(); dynamic result = DataContainer.model.infrastructure.tracks[2].trackTopology.trackBegin.FindParent(typeof(eTrack)); this.MainViewContentControl.Content = new BaseRailMLView(); }
protected override void handleSwitch(eSwitch switchEvent, int value) { Console.WriteLine("Switch: {0} {1} {2}", switchEvent, value, time); }
private static eSwitch FindConnections(eSwitch tempswitch) { Point switchlocation = new Point(tempswitch.geoCoord.coord[0], tempswitch.geoCoord.coord[1]); eTrack hostline = null; eTrack track2 = null; bool trackend = false; while (track2 == null) { eTrack besttrack = null; double bestdist = 999999999999; foreach (eTrack track in DataContainer.model.infrastructure.tracks) { double dist = GetDistance(switchlocation, new Point(track.trackTopology.trackBegin.geoCoord.coord[0], track.trackTopology.trackBegin.geoCoord.coord[1])); if (dist < bestdist) { bestdist = dist; besttrack = track; trackend = false; } dist = GetDistance(switchlocation, new Point(track.trackTopology.trackEnd.geoCoord.coord[0], track.trackTopology.trackEnd.geoCoord.coord[1])); if (dist < bestdist) { bestdist = dist; besttrack = track; trackend = true; } } track2 = besttrack; } while (hostline == null) { eTrack besttrack = null; double bestdist = 99999999999; foreach (eTrack track in DataContainer.model.infrastructure.tracks) { if (track == track2) { continue; } List <Point> pointlist = NodeList(track); for (int i = 0; i < pointlist.Count - 1; i++) { double dist = GetDistance(pointlist[i], pointlist[i + 1], switchlocation); if (dist < bestdist) { bestdist = dist; besttrack = track; } } } hostline = besttrack; } tConnectionData conn1 = new tConnectionData(); DataContainer.IDGenerator(conn1); tSwitchConnectionData conn2 = new tSwitchConnectionData(); DataContainer.IDGenerator(conn2); conn1.@ref = conn2.id; conn2.@ref = conn1.id; if (trackend == true) { track2.trackTopology.trackEnd.Item = conn1; } else { track2.trackTopology.trackBegin.Item = conn1; } tempswitch.connection.Add(conn2); hostline.trackTopology.connections.Add(tempswitch); string[] orientation = GetOrientation(hostline, track2, tempswitch); tempswitch.connection[0].orientation = orientation[0]; tempswitch.connection[0].course = orientation[1]; return(tempswitch); }
public void TestButton_Click(object sender, EventArgs e) { DataContainer.model = new railml(); eTrack track1 = new eTrack { trackTopology = new eTrackTopology { trackBegin = new eTrackBegin { pos = 0, geoCoord = new tGeoCoord() }, trackEnd = new eTrackEnd { pos = 600, geoCoord = new tGeoCoord() } } }; DataContainer.IDGenerator(track1); track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackEnd.geoCoord.coord.Add(600); track1.trackTopology.trackEnd.geoCoord.coord.Add(0); eSwitch sw1 = new eSwitch() { id = "sw1" }; sw1.geoCoord.coord.AddRange(new double[] { 300, 0 }); track1.trackTopology.connections.Add(sw1); DataContainer.model.infrastructure.tracks.Add(track1); eTrack track2 = new eTrack { trackTopology = new eTrackTopology { trackBegin = new eTrackBegin { pos = 0, geoCoord = new tGeoCoord() }, trackEnd = new eTrackEnd { pos = 600, geoCoord = new tGeoCoord() } } }; DataContainer.IDGenerator(track2); track2.trackTopology.trackBegin.geoCoord.coord.Add(6000); track2.trackTopology.trackBegin.geoCoord.coord.Add(20); track2.trackTopology.trackEnd.geoCoord.coord.Add(8000); track2.trackTopology.trackEnd.geoCoord.coord.Add(20); DataContainer.model.infrastructure.tracks.Add(track2); Data.Editor.AddCrossing(track1, track2, 70, 300, 350); eOcp ocp1 = new eOcp { id = "34", name = "test1", geoCoord = new tGeoCoord() }; ocp1.geoCoord.coord.Add(0); ocp1.geoCoord.coord.Add(0); DataContainer.model.infrastructure.operationControlPoints.Add(ocp1); eOcp ocp2 = new eOcp { id = "443", name = "test2", geoCoord = new tGeoCoord() }; ocp2.geoCoord.coord.Add(600); ocp2.geoCoord.coord.Add(0); DataContainer.model.infrastructure.operationControlPoints.Add(ocp2); eOcp ocp3 = new eOcp { id = "344", name = "test3", geoCoord = new tGeoCoord() }; ocp3.geoCoord.coord.Add(600); ocp3.geoCoord.coord.Add(20); DataContainer.model.infrastructure.operationControlPoints.Add(ocp3); eOcp ocp4 = new eOcp { id = "343", name = "test3", geoCoord = new tGeoCoord() }; ocp4.geoCoord.coord.Add(0); ocp4.geoCoord.coord.Add(20); DataContainer.model.infrastructure.operationControlPoints.Add(ocp4); DataContainer.PrepareData(); dynamic result = DataContainer.model.infrastructure.tracks[2].trackTopology.trackBegin.FindParent(typeof(eTrack)); this.MainViewContentControl.Content = new BaseRailMLView(); }
/// <summary>Handle EV_SW events</summary> protected virtual void handleSwitch(eSwitch switchEvent, int value) { }