public RouteDto addOutdoorTransisiton(NavType type, CoordinateDto location, int floor) { string subtype = NavStackNode.TYPE_WALKING; switch (type) { case NavType.Walking: subtype = NavStackNode.TYPE_WALKING; break; } NavStackNode vert = new NavStackNode(NavStackNode.TYPE_OUTDOOR, subtype, location, floor, 0); navStack.Add(vert); return this; }
public RouteDto addVerticalTransisiton(NavType type, CoordinateDto location, int floor, int toFloor) { string subtype = ""; string direction = (floor - toFloor) > 0 ? "-down" : "-up"; switch (type) { case NavType.Stair: subtype = NavStackNode.TYPE_STAIRS; break; case NavType.Elevator: subtype = NavStackNode.TYPE_ELEVATOR; break; case NavType.Escalator: subtype = NavStackNode.TYPE_ESCALATOR; break; } subtype += (floor - toFloor) > 0 ? "-down" : "-up"; NavStackNode vert = new NavStackNode(NavStackNode.TYPE_VERTICAL, subtype, location, floor, toFloor); navStack.Add(vert); return this; }
/// <summary> /// /// </summary> /// <param name="node1"></param> /// <param name="node2"></param> /// <returns></returns> private NavStackNode mergeTurns(NavStackNode node1, NavStackNode node2) { string type = NavStackNode.TYPE_PATH; CoordinateDto location = node1.location; int floor = node1.floor; int toFloor = node1.toFloor; if (node1.subtype.Equals(node2.subtype)) { if (node1.subtype.Equals(NavStackNode.TYPE_ANGLE_LEFT)) { return new NavStackNode(type, NavStackNode.TYPE_LEFT, location, floor, toFloor); } else if (node1.subtype.Equals(NavStackNode.TYPE_ANGLE_RIGHT)) { return new NavStackNode(type, NavStackNode.TYPE_RIGHT, location, floor, toFloor); } } // TODO: THis should not necessarily be the default return node1; }
/// <summary> /// Takes a congruent path and interprets where navStack events should take place. i.g. "left at x, y" /// </summary> /// <param name="floor"></param> /// <param name="path"></param> private void addPathToNavStack(int floor, List<CoordinateDto> path) { // paths should not be length 1, but just in case if (path.Count <= 2) { return; } // initialize the turn-wheel witht the first two points TurnWheel wheel = new TurnWheel(path[0], path[1]); // initialize an empty list to temporarily hold our new nav items List<NavStackNode> list = new List<NavStackNode>(); for (int i = 2; i < path.Count; i++) { string turnType = wheel.getNext(path[i]); if (!turnType.Equals(NavStackNode.TYPE_STRAIGHT)) { NavStackNode navItem = new NavStackNode(NavStackNode.TYPE_PATH, turnType, path[i], floor, 0); list.Add(navItem); } } // two angle-lefts in a row close to eachother should probably be a hard-right. let's condense things like that condenseTurns(list); // put our temporary list items into the navStack navStack.AddRange(list); }