NavisworksTransport/doc/introduction/2.1.3_路径点规划功能设计说明.md

288 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 当前总点数 |