private static void _SaveFakeItems(XmlWriter writer, int partID, IList <Stop> sortedStops, Stop currentStop, bool previouslyStopBreak, int currentIndex) { Debug.Assert(currentStop.StopType == StopType.Lunch); // WORKAROUND: add fake direction for break var stopWithLocation = SolveHelper.GetActualLunchStop(sortedStops, currentIndex); Debug.Assert(0 < stopWithLocation.Directions.Length); int lastDirIndex = stopWithLocation.Directions.Length - 1; Direction lastDirection = stopWithLocation.Directions[lastDirIndex]; string geometry = lastDirection.Geometry; // hardcoded text string text = Properties.Resources.DomainPropertyNameLunch; // add depart direction string departText = text; string departGeometry = geometry; StopManeuverType maneuver = StopManeuverType.Depart; // if previously stop not Break if (!previouslyStopBreak) { // if next stop have directions Direction?nextDirection = _GetNextStopStartDirection(sortedStops, currentIndex); if (nextDirection.HasValue) { // update values from start direction Direction direction = nextDirection.Value; maneuver = direction.ManeuverType; departText = direction.Text; departGeometry = direction.Geometry; } } _SaveStopDirection(writer, partID, 0.0, 0.0, maneuver, departText, departGeometry); // add arrive direction _SaveStopDirection(writer, partID, 0.0, 0.0, StopManeuverType.Stop, text, geometry); }
private static void _SaveStopDirection(XmlWriter writer, int partID, double length, double time, StopManeuverType maneuverType, string text, string geometry) { writer.WriteStartElement(ITEM_NODE_NAME); writer.WriteStartElement(PARTID_NODE_NAME); writer.WriteValue(partID); writer.WriteEndElement(); writer.WriteStartElement(ITEMLENGTH_NODE_NAME); writer.WriteValue(length.ToString(DOUBLE_FORMAT, NumberFormatInfo.InvariantInfo)); writer.WriteEndElement(); writer.WriteStartElement(ITEMTIME_NODE_NAME); writer.WriteValue(time.ToString(DOUBLE_FORMAT, NumberFormatInfo.InvariantInfo)); writer.WriteEndElement(); esriSMDirectionType directionType; switch (maneuverType) { case StopManeuverType.Depart: directionType = esriSMDirectionType.esriSMDTDepart; break; case StopManeuverType.Stop: directionType = esriSMDirectionType.esriSMDTArrive; break; default: directionType = esriSMDirectionType.esriSMDTNewRoad; break; }; writer.WriteStartElement(ITEMTYPE_NODE_NAME); writer.WriteValue((int)directionType); writer.WriteEndElement(); writer.WriteStartElement(ITEMTEXT_NODE_NAME); writer.WriteStartElement(TEXT_NODE_NAME); writer.WriteStartElement(STRING_NODE_NAME); writer.WriteValue(text); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); if (length > 0) { writer.WriteStartElement(DRIVETEXT_NODE_NAME); writer.WriteStartElement(STRING_NODE_NAME); string lengthText = _GetLengthString(length, true); writer.WriteValue(lengthText); writer.WriteEndElement(); writer.WriteEndElement(); } writer.WriteStartElement(MANEUVER_NODE_NAME); // inc for compability with SM writer.WriteValue((int)maneuverType + 1); writer.WriteEndElement(); _SaveShape(writer, geometry); writer.WriteEndElement(); }
private static void _SaveStopDirection(XmlWriter writer, int partID, double length, double time, StopManeuverType maneuverType, string text, string geometry) { writer.WriteStartElement(ITEM_NODE_NAME); writer.WriteStartElement(PARTID_NODE_NAME); writer.WriteValue(partID); writer.WriteEndElement(); writer.WriteStartElement(ITEMLENGTH_NODE_NAME); writer.WriteValue(length.ToString(DOUBLE_FORMAT, NumberFormatInfo.InvariantInfo)); writer.WriteEndElement(); writer.WriteStartElement(ITEMTIME_NODE_NAME); writer.WriteValue(time.ToString(DOUBLE_FORMAT, NumberFormatInfo.InvariantInfo)); writer.WriteEndElement(); esriSMDirectionType directionType; switch (maneuverType) { case StopManeuverType.Depart: directionType = esriSMDirectionType.esriSMDTDepart; break; case StopManeuverType.Stop: directionType = esriSMDirectionType.esriSMDTArrive; break; default: directionType = esriSMDirectionType.esriSMDTNewRoad; break; } ; writer.WriteStartElement(ITEMTYPE_NODE_NAME); writer.WriteValue((int)directionType); writer.WriteEndElement(); writer.WriteStartElement(ITEMTEXT_NODE_NAME); writer.WriteStartElement(TEXT_NODE_NAME); writer.WriteStartElement(STRING_NODE_NAME); writer.WriteValue(text); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); if (length > 0) { writer.WriteStartElement(DRIVETEXT_NODE_NAME); writer.WriteStartElement(STRING_NODE_NAME); string lengthText = _GetLengthString(length, true); writer.WriteValue(lengthText); writer.WriteEndElement(); writer.WriteEndElement(); } writer.WriteStartElement(MANEUVER_NODE_NAME); // inc for compability with SM writer.WriteValue((int)maneuverType + 1); writer.WriteEndElement(); _SaveShape(writer, geometry); writer.WriteEndElement(); }