# 2.1.3 路径点规划功能设计说明

## 2.1.3.1. 模块描述

路径点规划模块是物流路径规划系统的核心功能，针对较为复杂的环境，支持路径点功能。用户可以在三维视图中，在通道上点击指定起点、路径点、终点的位置及方向，并以三维可视化的方式显示路径。该模块支持多条路径的保存、选择和编辑，为物流运输提供精确的路径规划能力。

路径点规划模块与PathPlanningManager、PathClickToolPlugin和PathPointRenderPlugin紧密协作，实现从用户交互到路径生成的完整流程。

## 2.1.3.2. 功能

### 核心功能
1. **路径点创建**：在三维视图中点击创建起点、路径点、终点
2. **方向设置**：为每个路径点设置方向向量
3. **路径生成**：根据路径点自动生成平滑路径
4. **多路径管理**：支持多条路径的创建、保存和切换
5. **三维可视化**：实时显示路径点和路径线

### 子功能
| 功能编号 | 功能名称 | 功能描述 |
|---------|---------|---------|
| 2.1.3.F1 | 起点设置 | 在三维视图中指定路径起点 |
| 2.1.3.F2 | 终点设置 | 在三维视图中指定路径终点 |
| 2.1.3.F3 | 中间点设置 | 添加路径中间点进行路径控制 |
| 2.1.3.F4 | 方向调整 | 调整路径点的方向向量 |
| 2.1.3.F5 | 路径预览 | 实时预览生成的路径 |
| 2.1.3.F6 | 路径编辑 | 编辑已有路径的点位置和方向 |
| 2.1.3.F7 | 多路径切换 | 在多条路径之间切换编辑 |
| 2.1.3.F8 | 路径删除 | 删除不需要的路径 |

## 2.1.3.3. 性能

### 性能指标
| 指标名称 | 目标值 | 说明 |
|---------|-------|------|
| 路径点创建响应 | < 200ms | 点击到点显示的响应时间 |
| 路径生成时间 | < 1秒 | 根据路径点生成完整路径的时间 |
| 支持路径点数量 | > 50个 | 单条路径支持的最大路径点数量 |
| 支持路径数量 | > 100条 | 支持保存的最大路径数量 |
| 渲染帧率 | > 30FPS | 路径可视化渲染帧率 |

### 性能优化策略
1. 使用缓存避免重复的路径计算
2. 路径点批量渲染，减少Draw Call
3. 懒加载策略，非活动路径不渲染

## 2.1.3.4. 输入输出项

### 1. 字段输入输出

#### 输入字段
| 字段名 | 类型 | 必填 | 说明 |
|-------|------|-----|------|
| PointType | PathPointType | 是 | 路径点类型（起点/中间点/终点） |
| Position | Point3D | 是 | 路径点三维坐标 |
| Direction | Vector3D | 否 | 路径点方向向量 |
| PathName | string | 否 | 路径名称 |

#### 输出字段
| 字段名 | 类型 | 说明 |
|-------|------|------|
| PathRoute | PathRoute | 生成的路径对象 |
| PathLength | double | 路径总长度 |
| EstimatedTime | double | 预估通行时间 |
| PathPoints | List<PathPoint> | 路径点列表 |

### 2. 界面交互输入输出

#### 界面输入
- 鼠标点击选择路径点位置
- 方向调整操作
- 路径参数设置

#### 界面输出
- 三维路径点标记显示
- 路径连线显示
- 路径信息面板显示

## 2.1.3.5. 算法

### 路径点插值算法
```
算法：基于Catmull-Rom样条的路径平滑
输入：路径点列表
输出：平滑路径点列表

1. 对于每对相邻路径点：
   2. 计算控制点（使用前后点作为切线参考）
   3. 使用Catmull-Rom样条插值生成中间点
   4. 将插值点加入结果列表
5. 返回平滑后的路径点列表
```

### 路径生成算法
```
算法：路径点驱动的路径生成
输入：起点、中间点列表、终点
输出：完整路径

1. 创建PathRoute对象
2. 添加起点到路径
3. 对于每个中间点：
   4. 计算与前一点的方向向量
   5. 添加中间点到路径
6. 添加终点到路径
7. 计算路径长度和预估时间
8. 触发路径生成事件
```

## 2.1.3.6. 流程逻辑

```
开始
  │
  ▼
┌─────────────────┐
│  进入路径编辑模式 │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  设置起点        │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  添加中间点？    │────否────┐
└────────┬────────┘          │
         │是                 │
         ▼                  │
┌─────────────────┐          │
│  点击添加中间点  │          │
└────────┬────────┘          │
         │                   │
         └─────────┬─────────┘
                   │
                   ▼
┌─────────────────┐
│  设置终点        │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  生成路径预览    │
└────────┬────────┘
         │
    ┌────┴────┐
    ▼         ▼
┌────────┐  ┌────────┐
│调整点  │  │确认保存│
└───┬────┘  └───┬────┘
    │           │
    └─────┬─────┘
          │
          ▼
         结束
```

## 2.1.3.7. 接口

### 公共接口
```csharp
/// <summary>
/// 路径规划管理器
/// </summary>
public class PathPlanningManager
{
    /// <summary>
    /// 添加路径点
    /// </summary>
    /// <param name="position">点位置</param>
    /// <param name="type">点类型</param>
    /// <returns>创建的路径点</returns>
    public PathPoint AddPathPoint(Point3D position, PathPointType type);
    
    /// <summary>
    /// 生成路径
    /// </summary>
    /// <returns>生成的路径</returns>
    public PathRoute GeneratePath();
    
    /// <summary>
    /// 获取当前路径
    /// </summary>
    /// <returns>当前路径</returns>
    public PathRoute GetCurrentRoute();
    
    /// <summary>
    /// 切换当前路径
    /// </summary>
    /// <param name="routeName">路径名称</param>
    public void SwitchRoute(string routeName);
}
```

### 事件接口
```csharp
/// <summary>
/// 路径点添加事件
/// </summary>
public event EventHandler<PathPointAddedEventArgs> PathPointAdded;

/// <summary>
/// 路径生成完成事件
/// </summary>
public event EventHandler<PathGeneratedEventArgs> PathGenerated;

/// <summary>
/// 当前路径变更事件
/// </summary>
public event EventHandler<RouteChangedEventArgs> CurrentRouteChanged;
```

## 2.1.3.8. 注释设计

### 代码注释规范
```csharp
/// <summary>
/// 路径点类型
/// </summary>
public enum PathPointType
{
    /// <summary>
    /// 起点
    /// </summary>
    Start,
    
    /// <summary>
    /// 中间点（路径点）
    /// </summary>
    WayPoint,
    
    /// <summary>
    /// 终点
    /// </summary>
    End
}

/// <summary>
/// 路径点类
/// 表示路径上的一个关键节点
/// </summary>
public class PathPoint
{
    /// <summary>
    /// 点唯一标识
    /// </summary>
    public string Id { get; set; }
    
    /// <summary>
    /// 点位置（模型单位）
    /// </summary>
    public Point3D Position { get; set; }
    
    /// <summary>
    /// 点方向（用于控制路径走向）
    /// </summary>
    public Vector3D Direction { get; set; }
}
```

## 2.1.3.9. 数据结构

### PathPoint 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Id | string | 点唯一标识符 |
| Position | Point3D | 三维坐标位置 |
| Direction | Vector3D | 方向向量 |
| Type | PathPointType | 点类型 |
| Index | int | 在路径中的索引 |

### PathRoute 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Id | string | 路径唯一标识符 |
| Name | string | 路径名称 |
| Points | List<PathPoint> | 路径点列表 |
| TotalLength | double | 路径总长度（米） |
| EstimatedTime | double | 预估通行时间（秒） |
| CreateTime | DateTime | 创建时间 |

### PathPointAddedEventArgs 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Point | PathPoint | 添加的路径点 |
| PointIndex | int | 点索引 |
| TotalPoints | int | 当前总点数 |
