# 2.4.2 结果输出功能设计说明

## 2.4.2.1. 模块描述

结果输出模块是交互式导航功能的重要组成部分，负责输出导航地图和路径规划结果，可以是视频或者图片。该模块将路径规划的结果以多种可视化形式输出，便于用户保存、分享和报告使用。

该模块与NavigationMapGenerator、PathAnimationManager和媒体导出功能紧密集成，支持高质量的视觉输出。

## 2.4.2.2. 功能

### 核心功能
1. **图片输出**：将路径规划结果导出为图片
2. **视频输出**：生成路径导航视频
3. **导航地图生成**：生成包含路径的导航地图
4. **视角控制**：控制输出视角和视图范围
5. **输出配置**：配置输出分辨率、格式等参数

### 子功能
| 功能编号 | 功能名称 | 功能描述 |
|---------|---------|---------|
| 2.4.2.F1 | 静态图片导出 | 导出当前视图或指定视角的图片 |
| 2.4.2.F2 | 路径视频生成 | 沿路径生成漫游视频 |
| 2.4.2.F3 | 导航地图生成 | 生成2D/3D导航地图 |
| 2.4.2.F4 | 视角设置 | 设置相机视角和路径 |
| 2.4.2.F5 | 分辨率配置 | 配置输出分辨率 |
| 2.4.2.F6 | 格式选择 | 选择输出格式（PNG/JPG/MP4等） |
| 2.4.2.F7 | 批量输出 | 批量输出多条路径结果 |

## 2.4.2.3. 性能

### 性能指标
| 指标名称 | 目标值 | 说明 |
|---------|-------|------|
| 图片导出时间 | < 2秒 | 导出单张图片的时间 |
| 视频生成速度 | > 10FPS | 视频生成的帧率 |
| 支持分辨率 | 4K | 支持的最大输出分辨率 |
| 内存占用 | < 500MB | 输出过程的内存占用 |

### 性能优化策略
1. 异步视频生成避免阻塞UI
2. 帧缓存优化
3. 硬件加速渲染

## 2.4.2.4. 输入输出项

### 1. 字段输入输出

#### 输入字段
| 字段名 | 类型 | 必填 | 说明 |
|-------|------|-----|------|
| Route | PathRoute | 是 | 要输出的路径 |
| OutputType | OutputType | 是 | 输出类型（图片/视频） |
| Resolution | Size | 否 | 输出分辨率，默认1920x1080 |
| Format | string | 否 | 文件格式，根据类型自动确定 |

#### 输出字段
| 字段名 | 类型 | 说明 |
|-------|------|------|
| OutputFilePath | string | 输出文件路径 |
| FileSize | long | 输出文件大小 |
| GenerationTime | TimeSpan | 生成耗时 |

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

#### 界面输入
- 输出类型选择
- 分辨率设置
- 文件格式选择
- 保存路径选择

#### 界面输出
- 生成进度显示
- 预览窗口
- 输出结果提示
- 文件打开链接

## 2.4.2.5. 算法

### 图片导出算法
```
算法：导出路径规划结果为图片
输入：路径，视角参数，输出配置
输出：图片文件

1. 设置相机位置和方向
2. 配置渲染参数
3. 渲染场景到帧缓冲区
4. 编码为指定格式（PNG/JPG）
5. 保存到文件
```

### 视频生成算法
```
算法：生成路径漫游视频
输入：路径，视频配置
输出：视频文件

1. 计算相机路径（沿路径的相机位置）
2. 初始化视频编码器
3. 对于视频的每一帧：
   4. 计算当前相机位置
   5. 渲染场景
   6. 编码帧到视频
7. 完成编码并保存文件
```

## 2.4.2.6. 流程逻辑

```
开始
  │
  ▼
┌─────────────────┐
│  选择输出路径    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  选择输出类型    │
└────────┬────────┘
         │
    ┌────┴────┐
    ▼         ▼
┌────────┐  ┌────────┐
│图片    │  │视频    │
└───┬────┘  └───┬────┘
    │           │
    ▼           ▼
┌────────┐  ┌────────┐
│设置视角│  │设置相机│
└───┬────┘  │路径    │
    │       └───┬────┘
    │           │
    │           ▼
    │       ┌────────┐
    │       │设置时长│
    │       └───┬────┘
    │           │
    └─────┬─────┘
          │
          ▼
┌─────────────────┐
│  设置分辨率/格式 │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  选择保存路径    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  开始生成输出    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  显示生成进度    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  完成并打开文件  │
└────────┬────────┘
         │
         ▼
        结束
```

## 2.4.2.7. 接口

### 公共接口
```csharp
/// <summary>
/// 结果输出管理器
/// </summary>
public class ResultOutputManager
{
    /// <summary>
    /// 导出路径为图片
    /// </summary>
    /// <param name="route">路径对象</param>
    /// <param name="config">图片配置</param>
    /// <returns>输出结果</returns>
    public OutputResult ExportAsImage(PathRoute route, ImageExportConfig config);
    
    /// <summary>
    /// 生成路径漫游视频
    /// </summary>
    /// <param name="route">路径对象</param>
    /// <param name="config">视频配置</param>
    /// <returns>输出结果</returns>
    public OutputResult GenerateVideo(PathRoute route, VideoExportConfig config);
    
    /// <summary>
    /// 生成导航地图
    /// </summary>
    public NavigationMap GenerateNavigationMap(PathRoute route);
}

/// <summary>
/// 图片导出配置
/// </summary>
public class ImageExportConfig
{
    public int Width { get; set; }
    public int Height { get; set; }
    public ImageFormat Format { get; set; }
    public Viewpoint Viewpoint { get; set; }
}

/// <summary>
/// 视频导出配置
/// </summary>
public class VideoExportConfig
{
    public int Width { get; set; }
    public int Height { get; set; }
    public int FrameRate { get; set; }
    public double Duration { get; set; }
    public VideoFormat Format { get; set; }
}
```

## 2.4.2.8. 注释设计

### 代码注释规范
```csharp
/// <summary>
/// 输出类型
/// </summary>
public enum OutputType
{
    /// <summary>
    /// 静态图片
    /// </summary>
    Image,
    
    /// <summary>
    /// 视频
    /// </summary>
    Video,
    
    /// <summary>
    /// 导航地图
    /// </summary>
    NavigationMap
}

/// <summary>
/// 图片格式
/// </summary>
public enum ImageFormat
{
    PNG,
    JPEG,
    BMP
}
```

## 2.4.2.9. 数据结构

### OutputType 枚举
| 值 | 说明 |
|---|------|
| Image | 静态图片输出 |
| Video | 视频输出 |
| NavigationMap | 导航地图输出 |

### ImageExportConfig 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Width | int | 图片宽度 |
| Height | int | 图片高度 |
| Format | ImageFormat | 图片格式 |
| Viewpoint | Viewpoint | 相机视角 |
| IncludeAnnotations | bool | 是否包含标注 |

### VideoExportConfig 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Width | int | 视频宽度 |
| Height | int | 视频高度 |
| FrameRate | int | 帧率（FPS） |
| Duration | double | 时长（秒） |
| Format | VideoFormat | 视频格式 |
| CameraHeight | double | 相机高度（米） |

### OutputResult 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Success | bool | 是否成功 |
| FilePath | string | 输出文件路径 |
| FileSize | long | 文件大小（字节） |
| GenerationTime | TimeSpan | 生成耗时 |
| ErrorMessage | string | 错误消息（如果失败） |
