using System; using System.Collections.Generic; namespace MultiWheelC.TrajectoryPlanning.Mapping; /// 障碍物来源的一次投影结果,包含状态、世界 mm 几何和可选诊断信息。 public sealed class ObstacleProjectionResult { private ObstacleProjectionResult(ObstacleSourceStatus status, IReadOnlyList obstacles, string diagnostic) { Status = status; Obstacles = obstacles ?? Array.Empty(); Diagnostic = diagnostic ?? string.Empty; } /// 投影状态。只有 的几何会被栅格化。 public ObstacleSourceStatus Status { get; } /// 世界 mm 坐标的障碍物列表。非 Applied 状态时为空列表,不为 null。 public IReadOnlyList Obstacles { get; } /// 用于日志和诊断的说明文本;未提供时为空字符串。 public string Diagnostic { get; } /// 创建成功投影结果。参数 obstacles 为有效世界 mm 几何;diagnostic 为可选诊断文本。返回的状态为 Applied。 public static ObstacleProjectionResult Applied(IReadOnlyList obstacles, string diagnostic = null) { return new ObstacleProjectionResult(ObstacleSourceStatus.Applied, obstacles, diagnostic); } /// 创建空投影结果。参数 diagnostic 为可选原因;返回状态为 Empty,障碍物列表为空。 public static ObstacleProjectionResult Empty(string diagnostic = null) { return new ObstacleProjectionResult(ObstacleSourceStatus.Empty, null, diagnostic); } /// 创建不可用投影结果。参数 diagnostic 应说明快照缺失原因;返回状态为 Unavailable。 public static ObstacleProjectionResult Unavailable(string diagnostic) { return new ObstacleProjectionResult(ObstacleSourceStatus.Unavailable, null, diagnostic); } /// 创建无效投影结果。参数 diagnostic 应说明数据或几何错误;返回状态为 Invalid。 public static ObstacleProjectionResult Invalid(string diagnostic) { return new ObstacleProjectionResult(ObstacleSourceStatus.Invalid, null, diagnostic); } }