Esempio n. 1
0
        private void ReadSpline(IRoadSpline spline, XmlNode splineNode)
        {
            var pointsNodes = splineNode.SelectNodes("points/point");

            foreach (XmlNode pointNode in pointsNodes)
            {
                Vector3 point = ReadPoint(pointNode);
                spline.Points.Add(point);
            }

            spline.Length = float.Parse(splineNode.GetFieldValue("length"));
        }
Esempio n. 2
0
        private void WriteSpline(IRoadSpline spline, XmlDocument xml, XmlNode node)
        {
            var pointsNode = xml.CreateElement("points");

            for (var i = 0; i < spline.Points.Count; i++)
            {
                var point     = spline.Points[i];
                var pointNode = xml.CreateElement("point");
                WritePoint(point, xml, pointNode);
                pointsNode.AppendChild(pointNode);
            }

            var lengthNode = xml.CreateElement("length");

            lengthNode.InnerText = spline.Length.ToString(CultureInfo.InvariantCulture);

            node.AppendChild(pointsNode);
            node.AppendChild(lengthNode);
        }
Esempio n. 3
0
        public IRoadmap Deserialize(IRoadmapFactory roadmapFactory, string filePath)
        {
            IRoadmap roadmap = roadmapFactory.Roadmap();

            using (FileStream fileStream = File.Open(filePath, FileMode.Open))
            {
                XmlDocument xml = new XmlDocument();
                xml.Load(fileStream);
                XmlElement root = xml.DocumentElement;

                var roadSplinesNode = root.SelectSingleNode("roadSplines");
                foreach (XmlNode splineNode in roadSplinesNode.ChildNodes)
                {
                    if (splineNode.Name == "roadSpline")
                    {
                        IRoadSpline spline = roadmapFactory.Spline();
                        ReadSpline(spline, splineNode);
                        roadmap.Splines.Add(spline);
                    }
                }

                var roadNodes = root.SelectNodes("roads/road");
                foreach (XmlNode roadNode in roadNodes)
                {
                    IRoadDefinition road = roadmapFactory.Road();
                    ReadRoad(road, roadmapFactory, roadNode);
                    roadmap.Roads.Add(road);
                    var fromCrossroad = ushort.Parse(roadNode.GetAttrValue("fromCrossroad"));
                    var toCrossroad   = ushort.Parse(roadNode.GetAttrValue("toCrossroad"));
                    roadmap.RoadToCrossroadMapping.Add(fromCrossroad);
                    roadmap.RoadToCrossroadMapping.Add(toCrossroad);
                }

                var crossroadNodes = root.SelectNodes("crossroads/crossroad");
                foreach (XmlNode crossroadNode in crossroadNodes)
                {
                    ICrossroad crossroad = roadmapFactory.Crossroad();
                    ReadCrossroad(crossroad, roadmapFactory, crossroadNode);
                    roadmap.Crossroads.Add(crossroad);
                }

                var roadGraphEdgeNodes = root.SelectNodes("roadGraph/roadGraphEdge");
                foreach (XmlNode edgeNode in roadGraphEdgeNodes)
                {
                    ICostMapEntry costMapEntry = roadmapFactory.CostMapEntry();
                    roadmap.CostMap.Add(costMapEntry);

                    var type = (RoadGraphEdgeType)Enum.Parse(typeof(RoadGraphEdgeType), edgeNode.GetFieldValue("edgeType"));
                    var cost = ushort.Parse(edgeNode.GetFieldValue("cost"));
                    costMapEntry.RoadGraphEdgeType = type;
                    costMapEntry.Cost = cost;

                    if (type == RoadGraphEdgeType.Road)
                    {
                        var roadIndex = ushort.Parse(edgeNode.GetFieldValue("roadIndex"));
                        costMapEntry.RoadGraphEdgeLink = roadIndex;

                        roadmap.AddRoadEdge(roadIndex);
                    }
                    else if (type == RoadGraphEdgeType.CrossroadJunction)
                    {
                        var crossroadIndex  = ushort.Parse(edgeNode.GetFieldValue("crossroadIndex"));
                        var targetRoadIndex = ushort.Parse(edgeNode.GetFieldValue("targetRoadIndex"));

                        costMapEntry.RoadGraphEdgeLink = crossroadIndex;

                        roadmap.AddCrossroadJunctionEdge(targetRoadIndex);
                    }
                }
            }

            return(roadmap);
        }