Initial commit
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
using RobotNet10.RobotApp.Shared;
|
||||
|
||||
namespace RobotNet10.RobotApp.SLAM.Cartographer.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Shared helper for map name sanitization and legacy metadata migration.
|
||||
/// Used by CartographerService and MapSaveProcessor.
|
||||
/// </summary>
|
||||
public static class MapNameHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Sanitize map name for use as directory name.
|
||||
/// Removes invalid filename characters and trims spaces/dots.
|
||||
/// </summary>
|
||||
public static string Sanitize(string mapName)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(mapName))
|
||||
throw new ArgumentException("Map name cannot be null or empty", nameof(mapName));
|
||||
|
||||
var invalidChars = Path.GetInvalidFileNameChars();
|
||||
var sanitized = mapName;
|
||||
|
||||
foreach (var c in invalidChars)
|
||||
{
|
||||
sanitized = sanitized.Replace(c, '_');
|
||||
}
|
||||
|
||||
sanitized = sanitized.Trim(' ', '.');
|
||||
|
||||
if (string.IsNullOrWhiteSpace(sanitized))
|
||||
throw new ArgumentException("Map name is invalid after sanitization", nameof(mapName));
|
||||
|
||||
return sanitized;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensures MapInfo has Size calculated from Bounds for legacy map.json files
|
||||
/// that don't have Size field populated.
|
||||
/// </summary>
|
||||
public static MapInfo EnsureMapSize(MapInfo metadata)
|
||||
{
|
||||
if (metadata.Size.Width == 0 && metadata.Size.Height == 0)
|
||||
{
|
||||
var width = metadata.Bounds.MaxX - metadata.Bounds.MinX;
|
||||
var height = metadata.Bounds.MaxY - metadata.Bounds.MinY;
|
||||
return new MapInfo
|
||||
{
|
||||
Name = metadata.Name,
|
||||
FolderPath = metadata.FolderPath,
|
||||
CreatedDate = metadata.CreatedDate,
|
||||
Resolution = metadata.Resolution,
|
||||
Size = new MapSize(width, height),
|
||||
Origin = metadata.Origin,
|
||||
Bounds = metadata.Bounds,
|
||||
TrajectoryNodeCount = metadata.TrajectoryNodeCount
|
||||
};
|
||||
}
|
||||
return metadata;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user