Esempio n. 1
0
        // 恢复/停止 指定的流程 的业务

        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()));
        }
Esempio n. 2
0
 public Action(eSwitch targetSwitch)
 {
     this.Type         = eAction.Switch;
     this.TargetSwitch = targetSwitch;
     this.HasAction    = true;
     this.IsMove       = false;
 }
Esempio n. 3
0
        //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);
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public void Switch(eSwitch targetType)
 {
     this.Action = new Action(targetType);
 }
Esempio n. 7
0
        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();
        }
Esempio n. 8
0
 protected override void handleSwitch(eSwitch switchEvent, int value)
 {
     Console.WriteLine("Switch: {0} {1} {2}", switchEvent, value, time);
 }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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();
        }
Esempio n. 11
0
 /// <summary>Handle EV_SW events</summary>
 protected virtual void handleSwitch(eSwitch switchEvent, int value)
 {
 }