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")); }
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); }
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); }