using RobotNet.VDA5050; using RobotNet.VDA5050.Order; using RobotNet10.GlobalPathPlanner.Model; using System.Text.Json; namespace RobotNet10.FleetManager.Services.TrafficControl.Helpers; /// /// Helper class to convert MapManager entities to GlobalPathPlanner models /// public static class MapDataConverter { /// /// Convert Node (MapManager) to GlobalNode (PathPlanner) /// public static GlobalNode ToGlobalNode(MapManager.Data.Node node, Guid mapId) { return new GlobalNode { Id = node.Id, MapId = mapId, Name = node.NodeName ?? node.NodeId, X = node.X, Y = node.Y, Orientation = Orientation.NONE // Default, can be enhanced later }; } /// /// Convert Edge (MapManager) to GlobalEdge (PathPlanner) /// public static GlobalEdge ToGlobalEdge(MapManager.Data.Edge edge, Guid mapId, Guid vehicleId) { var globalEdge = new GlobalEdge { Id = edge.Id, MapId = mapId, StartNodeId = edge.StartNodeId, EndNodeId = edge.EndNodeId, Degree = 1, ControlPoint1X = 0.0, ControlPoint1Y = 0.0, ControlPoint2X = 0.0, ControlPoint2Y = 0.0 }; // Get edge vehicle properties for trajectory (if available) var vehicleProperty = edge.VehicleProperties?.FirstOrDefault(prop => prop.VehicleTypeId == vehicleId); if(vehicleProperty is not null) { // Use trajectory fields directly from Entity if (vehicleProperty.TrajectoryDegree.HasValue) { globalEdge.Degree = vehicleProperty.TrajectoryDegree.Value; } globalEdge.ControlPoint1X = vehicleProperty.TrajectoryControlPoint1X ?? 0.0; globalEdge.ControlPoint1Y = vehicleProperty.TrajectoryControlPoint1Y ?? 0.0; globalEdge.ControlPoint2X = vehicleProperty.TrajectoryControlPoint2X ?? 0.0; globalEdge.ControlPoint2Y = vehicleProperty.TrajectoryControlPoint2Y ?? 0.0; } return globalEdge; } /// /// Convert list of Nodes to GlobalNodes /// public static GlobalNode[] ToGlobalNodes(IEnumerable nodes, Guid mapId) { return [.. nodes.Select(n => ToGlobalNode(n, mapId))]; } /// /// Convert list of Edges to GlobalEdges /// public static GlobalEdge[] ToGlobalEdges(IEnumerable edges, Guid mapId, Guid vehicleId) { return [.. edges.Select(e => ToGlobalEdge(e, mapId, vehicleId))]; } }