/// <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); }