Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
        }