示例#1
0
        /// <summary>
        /// 将区段或道岔加到AdvanceRoute中
        /// </summary>
        /// <param 要处理的device="CurrentRoute"></param>
        /// <returns 如果遇到MA终点,返回true,否则返回false></returns>
        private bool AddToAdvanceRoute(Device device)
        {
            List <TopolotyNode> NextNodes = FindNextNode();

            if (device is Section)
            {
                Section inSection = device as Section;
                if (inSection.HasNonComTrain.Count != 0)
                {
                    DeletePreSection(inSection);
                    return(true);
                }
                else if (inSection.GetIsEB() || inSection.GetIsDoorOpen())
                {
                    return(true);
                }
                else if (inSection.AxleOccupy && device != trainInfo.HeadPosition && inSection.GetTrainOccupy() == TrainOccupy.NonOccupy)
                {
                    #region 适应时序前
                    //return true;
                    #endregion
                    #region 适应时序后
                    if (NextNodes.Contains(MainWindow.stationTopoloty_.Nodes.Find((TopolotyNode inputNode) => { return(inputNode.NodeDevice == inSection); })))
                    {
                        Add(inSection);
                    }
                    else
                    {
                        return(true);
                    }
                    #endregion
                }
                else if (inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.AllOccupy)
                {
                    return(true);
                }
                else if (trainInfo.TrainDirection == TrainDir.Right && inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.LeftOccupy)
                {
                    return(true);
                }
                else if (trainInfo.TrainDirection == TrainDir.Left && inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.RightOccupy)
                {
                    return(true);
                }
                else if (inSection.GetTrainOccupy(trainInfo.NIDTrain) == TrainOccupy.NonOccupy)
                {
                    Add(device);
                }
                else
                {
                    Add(device);
                    return(true);
                }
            }
            else if (device is RailSwitch)
            {
                RailSwitch inRailSwitch = device as RailSwitch;
                if (inRailSwitch.HasNonComTrain.Count != 0)
                {
                    DeletePreSection(inRailSwitch);
                    return(true);
                }
                else if (inRailSwitch.AxleOccupy && inRailSwitch != trainInfo.HeadPosition)
                {
                    #region 适应时序前
                    //return true;
                    #endregion
                    #region 适应时序后
                    if (inRailSwitch.TrainOccupy.Count != 0)
                    {
                        return(true);
                    }
                    else
                    {
                        if (NextNodes.Contains(MainWindow.stationTopoloty_.Nodes.Find((TopolotyNode inputNode) => { return(inputNode.NodeDevice == inRailSwitch); })))
                        {
                            Add(inRailSwitch);
                        }
                        else
                        {
                            return(true);
                        }
                    }
                    #endregion
                }
                else if (inRailSwitch.GetTrainOccupy(trainInfo.NIDTrain))
                {
                    return(true);
                }
                else
                {
                    Add(device);
                }
            }
            return(false);
        }