1. 在PathPlanningManager中添加_previewInsertIndex字段保存预览插入索引 2. 添加FindNearestLineSegmentWithIndex等方法计算最近线段和插入位置 3. 修改SetPreviewPoint方法,在设置预览点时计算并保存插入索引 4. 修改ConfirmPreviewPoint方法,使用Insert()而不是Add()进行插入操作 5. 修改ClearPreviewPoint方法,清除预览时也清除保存的插入索引 问题:之前预览连线工作正常能显示正确插入位置,但确认添加时新路径点被错误地添加到路径末尾 解决:现在新路径点会插入到预览时计算出的正确位置,确保路径点顺序符合用户期望 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
46 lines
1.9 KiB
Markdown
46 lines
1.9 KiB
Markdown
# 路径点插入位置修复测试
|
||
|
||
## 问题描述
|
||
修复了预览连线功能工作正常,但确认添加路径点时,新的路径点被错误地添加到路径末尾,而不是插入到预览时计算出来的正确位置的问题。
|
||
|
||
## 修改内容
|
||
|
||
### 1. 在 PathPlanningManager 中添加字段保存预览插入的索引位置
|
||
```csharp
|
||
private int _previewInsertIndex = -1; // 保存预览点应该插入的索引位置
|
||
```
|
||
|
||
### 2. 添加了查找最近线段的方法
|
||
- `FindNearestLineSegmentWithIndex()` - 查找最近线段并返回插入索引
|
||
- `CalculatePointToLineSegmentDistance()` - 计算点到线段距离
|
||
- `CalculateDistance()` - 计算两点间距离
|
||
|
||
### 3. 修改 SetPreviewPoint 方法
|
||
- 在设置预览点时,计算并保存最佳插入位置索引
|
||
- 当路径中有至少2个点时,调用 `FindNearestLineSegmentWithIndex()` 计算插入位置
|
||
|
||
### 4. 修改 ConfirmPreviewPoint 方法
|
||
- 使用保存的 `_previewInsertIndex` 进行 `Insert()` 操作,而不是 `Add()`
|
||
- 如果没有有效插入索引,则回退到原来的添加到末尾的行为
|
||
|
||
### 5. 修改 ClearPreviewPoint 方法
|
||
- 清除预览时也清除保存的插入索引
|
||
|
||
## 测试步骤
|
||
1. 创建新路径,添加至少2个路径点
|
||
2. 启用添加路径点模式
|
||
3. 将鼠标移动到两个现有路径点之间的位置
|
||
4. 观察预览连线是否正确显示插入位置
|
||
5. 点击确认添加路径点
|
||
6. 验证新路径点是否插入到预览显示的正确位置,而不是路径末尾
|
||
|
||
## 预期结果
|
||
- 预览连线正确显示新路径点应该插入的位置
|
||
- 确认添加时,新路径点插入到预览时计算的正确位置
|
||
- 路径点顺序符合用户的期望
|
||
|
||
## 技术细节
|
||
- 插入索引的计算基于点到线段的最短距离
|
||
- 使用了几何算法计算点到线段的垂直距离
|
||
- 插入索引是最近线段的第二个点的索引位置
|
||
- 例如:如果最近线段是点1到点2,新点应该插入到索引2的位置 |