/// <summary> /// 清理无任务小车锁定的方向信息 /// </summary> static void ClearPointDirection() { //如果被Agv锁的点,不在AGV的路径中,则移除。 List <AgvPoint> listAgvPoint = new List <AgvPoint>(); foreach (Agv agv in App.AgvList) { if (agv.sTaskList.Count != 0) { foreach (PathPoint pp in agv.sTaskList[0].pathList) { listAgvPoint.Add(new AgvPoint(agv.agvNo, pp.point)); } } } List <Point> listPointDirectionLock = App.pointList.Where( a => a.listTmpDirection.Count != 0).ToList(); foreach (Point point in listPointDirectionLock) { for (int i = 0; i < point.listTmpDirection.Count; i++) { TmpDirection td = point.listTmpDirection[i]; bool isExists = listAgvPoint.Exists(a => a.agv == td.agvNo && a.point == point); if (!isExists) { point.listTmpDirection.RemoveAll(a => a.agvNo == td.agvNo); } } } }
/// <summary> /// 锁定路径方向 /// </summary> /// <param name="Path"></param> public static void OriLock(List <PathPoint> Path, Agv agv) { //终点不比较 for (int i = 0; i < Path.Count - 1; i++) { Point point = Path[i].point; Point nextPoint = Path[i + 1].point; if (point == nextPoint) { continue; } AStar aStart = new AStar(); int direction = aStart.GetDircition(nextPoint, point); TmpDirection td = new TmpDirection(); td.direction = direction; td.agvNo = agv.agvNo; point.listTmpDirection.Add(td); } }