chore: save current workspace progress

This commit is contained in:
梁薄云
2026-08-09 22:13:18 +08:00
parent 650c2ab0e3
commit 2f4fd15e52
449 changed files with 76593 additions and 971 deletions
@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
namespace MultiWheelC.TrajectoryPlanning.Mapping;
/// <summary>直接提供世界 mm 几何列表的手工障碍物快照来源。</summary>
public sealed class ManualObstacleSource : IMapObstacleSource
{
private readonly IReadOnlyList<IMapObstacle> _obstacles;
/// <summary>
/// 创建手工障碍物来源。
///
/// 参数:sourceId 为唯一来源标识;sourceVersion 为非负快照版本;isRequired 指示失败是否阻断建图;obstacles 为世界 mm 几何列表。
/// 注意:几何内容变化时,调用方必须同步提高 sourceVersion。
/// </summary>
public ManualObstacleSource(string sourceId, long sourceVersion, bool isRequired, IReadOnlyList<IMapObstacle> obstacles)
{
SourceId = sourceId; SourceVersion = sourceVersion; IsRequired = isRequired; _obstacles = obstacles;
}
/// <summary>该快照的唯一来源标识。</summary>
public string SourceId { get; }
/// <summary>该快照的版本号;内容变化时必须递增。</summary>
public long SourceVersion { get; }
/// <summary>true 表示无效来源会阻断建图;false 表示只记录来源状态。</summary>
public bool IsRequired { get; }
/// <summary>
/// 返回手工障碍物的世界几何。
///
/// 返回:列表为空时为 Empty;列表为空引用或含无效几何时为 Invalid;其余情况为 Applied。
/// </summary>
public ObstacleProjectionResult ProjectToWorld()
{
if (_obstacles == null) return ObstacleProjectionResult.Invalid("Manual obstacle collection is null.");
if (_obstacles.Count == 0) return ObstacleProjectionResult.Empty("Manual obstacle collection is empty.");
for (int i = 0; i < _obstacles.Count; i++)
if (_obstacles[i] == null || !_obstacles[i].IsValid) return ObstacleProjectionResult.Invalid("Manual obstacle geometry is invalid.");
return ObstacleProjectionResult.Applied(_obstacles, "Manual obstacle snapshot applied.");
}
}