From 3cdf68651f258075e350f4bd2fae8d6ca68de7e9 Mon Sep 17 00:00:00 2001 From: "Mr.Xia" <1424473282@qq.com> Date: Sat, 13 Dec 2025 12:30:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=96=B9=E6=B3=95=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BA=86=E5=88=80=E5=BA=8F=E9=87=8D=E6=8E=92=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=20=E4=BC=98=E5=8C=96=E4=BA=86=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=88=80=E5=BA=8F=E5=88=B0=E9=92=BB=E5=B8=A6=E5=90=8E?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DragDropHelper.cs | 1 + GenerateReorderedDrillTape_Implementation.md | 180 ----- MainWindow.xaml | 4 +- MainWindow.xaml.cs | 16 +- MainWindowViewModel.cs | 792 +++---------------- ToolReorderConfirmationViewModel.cs | 201 +++++ ToolReorderConfirmationWindow.xaml | 104 +++ ToolReorderConfirmationWindow.xaml.cs | 151 ++++ 8 files changed, 595 insertions(+), 854 deletions(-) delete mode 100644 GenerateReorderedDrillTape_Implementation.md create mode 100644 ToolReorderConfirmationViewModel.cs create mode 100644 ToolReorderConfirmationWindow.xaml create mode 100644 ToolReorderConfirmationWindow.xaml.cs diff --git a/DragDropHelper.cs b/DragDropHelper.cs index 84d4e5c..999dfff 100644 --- a/DragDropHelper.cs +++ b/DragDropHelper.cs @@ -172,6 +172,7 @@ namespace DrillTools if (sourceIndex != -1 && targetIndex != -1 && sourceIndex != targetIndex) { + // 执行重排 viewModel?.ReorderTools(sourceIndex, targetIndex); Debug.WriteLine($"[DragDrop] 重新排序完成: {sourceIndex} -> {targetIndex}"); } diff --git a/GenerateReorderedDrillTape_Implementation.md b/GenerateReorderedDrillTape_Implementation.md deleted file mode 100644 index 188d60d..0000000 --- a/GenerateReorderedDrillTape_Implementation.md +++ /dev/null @@ -1,180 +0,0 @@ -# GenerateReorderedDrillTape 方法实现方案 - -## 目标 -将 `GenerateReorderedDrillTape` 静态扩展方法的功能升级,使其与 `ReorderAndRenumberTools` 方法完全一致。 - -## 当前问题分析 -现有的 `GenerateReorderedDrillTape` 方法只实现简单的重排功能,缺少以下关键特性: -1. 刀具重新编号(T01, T02, T03...) -2. 机台码智能处理(保持原始编号) -3. 完整的钻带内容重构逻辑 -4. 数据映射和同步机制 - -## 新实现方案 - -### 1. 方法签名保持不变 -```csharp -public static string GenerateReorderedDrillTape(string originalDrillTape, List reorderedTools) -``` - -### 2. 核心实现逻辑 - -#### 步骤1: 创建刀具编号映射 -```csharp -// 1. 创建原始刀具编号到新编号的映射 -var toolNumberMapping = new Dictionary(); -var originalToNewMapping = new Dictionary(); - -// 2. 按当前列表顺序重新编号(T01, T02, T03...) -int newToolNumber = 1; -foreach (var tool in reorderedTools) -{ - // 机台码刀具不允许重新编号 - if (tool.ToolType != ToolType.MachineCode) - { - originalToNewMapping[tool.ToolNumber] = newToolNumber; - toolNumberMapping[tool.ToolNumber] = newToolNumber; - tool.ToolNumber = newToolNumber++; - } - else - { - // 机台码刀具保持原始编号,但也要加入映射 - toolNumberMapping[tool.ToolNumber] = tool.ToolNumber; - } -} -``` - -#### 步骤2: 解析原始钻带内容 -```csharp -// 解析原始钻带中的刀具定义行,保存参数信息 -var originalToolDefinitions = new Dictionary(); -var headerLines = new List(); - -var lines = originalDrillTape.Split(new[] { '\r', '\n' }, StringSplitOptions.None); -foreach (var line in lines) -{ - string trimmedLine = line.Trim(); - - if (trimmedLine == "%") - { - break; - } - - // 处理刀具定义行(如 T01C1.049H05000Z+0.000S060.00F105.0U0700.0) - if (Regex.IsMatch(trimmedLine, @"^T(\d+)C")) - { - var match = Regex.Match(trimmedLine, @"^T(\d+)C(.*)$"); - if (match.Success) - { - int originalToolNumber = int.Parse(match.Groups[1].Value); - originalToolDefinitions[originalToolNumber] = match.Groups[2].Value; - } - } - else - { - if (line != "") - headerLines.Add(line); - } -} -``` - -#### 步骤3: 重构刀具定义部分 -```csharp -// 按照新的刀具编号顺序输出刀具定义部分 -var sortedTools = reorderedTools.OrderBy(t => t.ToolNumber).ToList(); -foreach (var tool in sortedTools) -{ - // 查找原始刀具编号 - int originalToolNumber = -1; - foreach (var kvp in toolNumberMapping) - { - if (kvp.Value == tool.ToolNumber) - { - originalToolNumber = kvp.Key; - break; - } - } - - if (originalToolNumber != -1 && originalToolDefinitions.ContainsKey(originalToolNumber)) - { - string toolDef = $"T{tool.ToolNumber:D2}C{originalToolDefinitions[originalToolNumber]}"; - result.Add(toolDef); - } -} -``` - -#### 步骤4: 处理坐标数据和机台码 -```csharp -// 按新刀具编号顺序输出刀具切换行和对应的坐标数据 -var sortedToolsForData = reorderedTools.OrderBy(t => t.ToolNumber).ToList(); - -foreach (var tool in sortedToolsForData) -{ - // 添加刀具切换行 - result.Add($"T{tool.ToolNumber:D2}"); - - // 添加该刀具对应的所有坐标数据 - if (tool.ToolType != ToolType.MachineCode && tool.HoleLocations != null && tool.HoleLocations.Count > 0) - { - foreach (var location in tool.HoleLocations) - { - result.Add(location); - } - } - - // 如果是机台码刀具,添加机台码命令和坐标 - if (tool.ToolType == ToolType.MachineCode) - { - if (!string.IsNullOrEmpty(tool.MachineCodeCommand) && !string.IsNullOrEmpty(tool.MachineCodeType)) - { - result.Add($"{tool.MachineCodeCommand},{tool.MachineCodeType},$S $N"); - - // 添加机台码的坐标数据 - if (tool.HoleLocations != null && tool.HoleLocations.Count > 0) - { - foreach (var location in tool.HoleLocations) - { - result.Add(location); - } - } - } - } -} -``` - -### 3. 关键特性实现 - -#### 机台码处理逻辑 -- 机台码刀具保持原始编号不变 -- 机台码命令(M97/M98)和类型(A*/B*)正确保留 -- 机台码坐标数据完整保留 - -#### 数据映射机制 -- 创建原始编号到新编号的完整映射 -- 支持混合编号场景(部分重新编号) -- 确保坐标数据正确绑定到对应刀具 - -#### 钻带内容重构 -- 完整保留原始刀具参数 -- 按新编号顺序重新组织钻带结构 -- 确保格式和语法正确性 - -### 4. 实现优势 - -1. **功能一致性**: 与 `ReorderAndRenumberTools` 方法功能完全一致 -2. **向后兼容**: 保持原有方法签名,现有调用代码无需修改 -3. **健壮性**: 完整的错误处理和边界条件检查 -4. **可维护性**: 清晰的代码结构和注释 - -### 5. 测试验证 - -需要验证以下场景: -1. 普通刀具重排和重新编号 -2. 机台码刀具保持原始编号 -3. 混合场景(部分机台码、部分普通刀具) -4. 坐标数据正确绑定 -5. 钻带格式正确性 - -## 实现建议 - -建议切换到 Code 模式进行实际的代码修改,因为 Architect 模式只能编辑 Markdown 文件。实现时应严格按照上述方案进行,确保与 `ReorderAndRenumberTools` 方法的行为完全一致。 \ No newline at end of file diff --git a/MainWindow.xaml b/MainWindow.xaml index 2edfbc8..756db7d 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -24,11 +24,11 @@ -