Files
BQP/srcs/RobotNet10/FleetManager/RobotNet10.FleetManager/Services/TrafficControl/Helpers/MapDataConverter.cs
2026-07-13 09:25:40 +07:00

83 lines
2.8 KiB
C#

using RobotNet.VDA5050;
using RobotNet.VDA5050.Order;
using RobotNet10.GlobalPathPlanner.Model;
using System.Text.Json;
namespace RobotNet10.FleetManager.Services.TrafficControl.Helpers;
/// <summary>
/// Helper class to convert MapManager entities to GlobalPathPlanner models
/// </summary>
public static class MapDataConverter
{
/// <summary>
/// Convert Node (MapManager) to GlobalNode (PathPlanner)
/// </summary>
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
};
}
/// <summary>
/// Convert Edge (MapManager) to GlobalEdge (PathPlanner)
/// </summary>
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;
}
/// <summary>
/// Convert list of Nodes to GlobalNodes
/// </summary>
public static GlobalNode[] ToGlobalNodes(IEnumerable<MapManager.Data.Node> nodes, Guid mapId)
{
return [.. nodes.Select(n => ToGlobalNode(n, mapId))];
}
/// <summary>
/// Convert list of Edges to GlobalEdges
/// </summary>
public static GlobalEdge[] ToGlobalEdges(IEnumerable<MapManager.Data.Edge> edges, Guid mapId, Guid vehicleId)
{
return [.. edges.Select(e => ToGlobalEdge(e, mapId, vehicleId))];
}
}