# 2.1.4 编辑保存和导入功能设计说明

## 2.1.4.1. 模块描述

编辑保存和导入模块负责路径数据的管理功能，支持对路径上的各点进行坐标编辑，保存当前路径点集合为路径规划文件，以及从文件导入路径并在当前通道表面重绘路径。该模块还支持记录并查看路径文件操作的历史记录，为用户提供完整的路径数据生命周期管理。

该模块与PathDatabase、PathDataManager和各类导出器（XML/JSON/CSV）紧密集成，实现路径数据的持久化和交换。

## 2.1.4.2. 功能

### 核心功能
1. **坐标编辑**：支持对路径点的坐标进行精确编辑
2. **路径保存**：将路径保存为XML、JSON、CSV格式文件
3. **路径导入**：从文件导入路径并在当前场景重绘
4. **历史记录**：记录路径文件操作历史，支持查看和回溯

### 子功能
| 功能编号 | 功能名称 | 功能描述 |
|---------|---------|---------|
| 2.1.4.F1 | 坐标编辑 | 编辑路径点的X/Y/Z坐标 |
| 2.1.4.F2 | 批量编辑 | 批量修改多个路径点坐标 |
| 2.1.4.F3 | XML导出 | 导出路径为XML格式 |
| 2.1.4.F4 | JSON导出 | 导出路径为JSON格式 |
| 2.1.4.F5 | CSV导出 | 导出路径为CSV格式 |
| 2.1.4.F6 | XML导入 | 从XML文件导入路径 |
| 2.1.4.F7 | JSON导入 | 从JSON文件导入路径 |
| 2.1.4.F8 | CSV导入 | 从CSV文件导入路径 |
| 2.1.4.F9 | 路径重绘 | 导入后在当前场景重绘路径 |
| 2.1.4.F10 | 历史记录 | 记录和查看文件操作历史 |

## 2.1.4.3. 性能

### 性能指标
| 指标名称 | 目标值 | 说明 |
|---------|-------|------|
| 保存响应时间 | < 500ms | 保存路径到文件的时间 |
| 导入响应时间 | < 1秒 | 从文件导入路径的时间 |
| 支持文件大小 | > 10MB | 支持导入的最大文件大小 |
| 历史记录数量 | > 1000条 | 支持保存的最大历史记录数 |
| 批量编辑响应 | < 200ms | 批量编辑操作的响应时间 |

### 性能优化策略
1. 使用流式读写处理大文件
2. 数据库批量操作优化历史记录写入
3. 异步文件操作避免阻塞UI

## 2.1.4.4. 输入输出项

### 1. 字段输入输出

#### 输入字段（保存）
| 字段名 | 类型 | 必填 | 说明 |
|-------|------|-----|------|
| Route | PathRoute | 是 | 要保存的路径对象 |
| FilePath | string | 是 | 目标文件路径 |
| Format | ExportFormat | 是 | 导出格式 |

#### 输入字段（导入）
| 字段名 | 类型 | 必填 | 说明 |
|-------|------|-----|------|
| FilePath | string | 是 | 源文件路径 |
| Format | ImportFormat | 否 | 导入格式（自动检测） |

#### 输入字段（编辑）
| 字段名 | 类型 | 必填 | 说明 |
|-------|------|-----|------|
| PointId | string | 是 | 要编辑的点ID |
| NewPosition | Point3D | 是 | 新坐标位置 |

#### 输出字段
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Success | bool | 操作是否成功 |
| Message | string | 操作结果消息 |
| ImportedRoute | PathRoute | 导入的路径对象 |
| HistoryRecords | List<HistoryRecord> | 历史记录列表 |

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

#### 界面输入
- 文件选择对话框操作
- 坐标编辑表单输入
- 导入格式选择

#### 界面输出
- 文件保存/导入进度
- 操作结果提示
- 历史记录列表显示

## 2.1.4.5. 算法

### 坐标编辑算法
```
算法：路径点坐标编辑
输入：点ID，新坐标
输出：编辑结果

1. 根据ID查找路径点
2. 验证新坐标的有效性
3. 更新路径点坐标
4. 重新计算路径长度
5. 更新路径显示
6. 记录编辑历史
```

### 路径导出算法
```
算法：路径数据导出
输入：路径对象，目标格式
输出：文件内容

1. 根据格式选择对应的导出器
2. 序列化路径数据
3. 应用格式特定的转换
4. 写入文件
5. 记录导出历史
```

### 路径导入算法
```
算法：路径数据导入
输入：文件路径
输出：路径对象

1. 检测文件格式
2. 选择对应的导入器
3. 解析文件内容
4. 验证数据完整性
5. 创建路径对象
6. 在当前场景重绘路径
7. 记录导入历史
```

## 2.1.4.6. 流程逻辑

```
开始
  │
  ├──┬── 保存路径 ──┐
  │  │              │
  │  ▼              │
  │┌─────────────┐  │
  ││选择保存格式 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││选择文件路径 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││执行导出操作 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││记录保存历史 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││显示保存结果 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │      结束 ◄─────┘
  │
  ├──┬── 导入路径 ──┐
  │  │              │
  │  ▼              │
  │┌─────────────┐  │
  ││选择导入文件 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││检测文件格式 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││解析文件内容 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││验证数据     │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││重绘路径     │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │┌─────────────┐  │
  ││记录导入历史 │  │
  │└──────┬──────┘  │
  │       │         │
  │       ▼         │
  │      结束 ◄─────┘
  │
  └──┬── 编辑坐标 ──┐
     │              │
     ▼              │
   ┌─────────────┐  │
   │选择编辑的点 │  │
   └──────┬──────┘  │
          │         │
          ▼         │
   ┌─────────────┐  │
   │输入新坐标   │  │
   └──────┬──────┘  │
          │         │
          ▼         │
   ┌─────────────┐  │
   │验证坐标     │  │
   └──────┬──────┘  │
          │         │
          ▼         │
   ┌─────────────┐  │
   │更新路径显示 │  │
   └──────┬──────┘  │
          │         │
          ▼         │
         结束 ◄─────┘
```

## 2.1.4.7. 接口

### 公共接口
```csharp
/// <summary>
/// 路径数据管理器
/// </summary>
public class PathDataManager
{
    /// <summary>
    /// 保存路径到文件
    /// </summary>
    /// <param name="route">路径对象</param>
    /// <param name="filePath">文件路径</param>
    /// <param name="format">导出格式</param>
    /// <returns>保存结果</returns>
    public SaveResult SavePath(PathRoute route, string filePath, ExportFormat format);
    
    /// <summary>
    /// 从文件导入路径
    /// </summary>
    /// <param name="filePath">文件路径</param>
    /// <returns>导入的路径对象</returns>
    public ImportResult ImportPath(string filePath);
    
    /// <summary>
    /// 编辑路径点坐标
    /// </summary>
    /// <param name="pointId">点ID</param>
    /// <param name="newPosition">新坐标</param>
    /// <returns>编辑结果</returns>
    public EditResult EditPointCoordinate(string pointId, Point3D newPosition);
    
    /// <summary>
    /// 获取历史记录
    /// </summary>
    /// <returns>历史记录列表</returns>
    public List<HistoryRecord> GetHistoryRecords();
}
```

### 事件接口
```csharp
/// <summary>
/// 路径保存完成事件
/// </summary>
public event EventHandler<PathSavedEventArgs> PathSaved;

/// <summary>
/// 路径导入完成事件
/// </summary>
public event EventHandler<PathImportedEventArgs> PathImported;

/// <summary>
/// 坐标编辑完成事件
/// </summary>
public event EventHandler<CoordinateEditedEventArgs> CoordinateEdited;
```

## 2.1.4.8. 注释设计

### 代码注释规范
```csharp
/// <summary>
/// 导出格式枚举
/// </summary>
public enum ExportFormat
{
    /// <summary>
    /// XML格式
    /// </summary>
    XML,
    
    /// <summary>
    /// JSON格式
    /// </summary>
    JSON,
    
    /// <summary>
    /// CSV格式
    /// </summary>
    CSV
}

/// <summary>
/// 保存结果
/// </summary>
public class SaveResult
{
    /// <summary>
    /// 是否保存成功
    /// </summary>
    public bool Success { get; set; }
    
    /// <summary>
    /// 结果消息
    /// </summary>
    public string Message { get; set; }
    
    /// <summary>
    /// 保存的文件路径
    /// </summary>
    public string FilePath { get; set; }
}
```

## 2.1.4.9. 数据结构

### ExportFormat 枚举
| 值 | 说明 |
|---|------|
| XML | XML格式导出 |
| JSON | JSON格式导出 |
| CSV | CSV格式导出 |

### SaveResult 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Success | bool | 保存是否成功 |
| Message | string | 结果消息 |
| FilePath | string | 保存的文件路径 |
| FileSize | long | 文件大小（字节） |

### ImportResult 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Success | bool | 导入是否成功 |
| Message | string | 结果消息 |
| ImportedRoute | PathRoute | 导入的路径对象 |
| Format | ImportFormat | 检测到的格式 |

### HistoryRecord 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| Id | string | 记录ID |
| OperationType | string | 操作类型（保存/导入/编辑） |
| FilePath | string | 相关文件路径 |
| OperationTime | DateTime | 操作时间 |
| UserName | string | 操作用户 |
| Details | string | 操作详情 |
