Files
AohDrllTools/CoordinateFormatTest.cs
2025-12-07 20:25:27 +08:00

142 lines
5.1 KiB
C#
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.

using System;
using System.Collections.Generic;
using DrillTools;
using DrillTools.Integration;
namespace DrillTools.Tests
{
/// <summary>
/// 坐标格式保留测试类
/// 用于验证修改后的代码能正确保留原始坐标格式
/// </summary>
public class CoordinateFormatTest
{
/// <summary>
/// 测试坐标格式保留功能
/// </summary>
public static void TestCoordinateFormatPreservation()
{
Console.WriteLine("=== 坐标格式保留测试 ===");
// 测试用例:各种格式的坐标
var testCases = new[]
{
"X-265000Y013250", // 负坐标,前导零
"X-265000Y008250", // 负坐标,前导零
"X075392Y559511", // 正坐标,前导零
"X017500Y519500G85X018500Y519500", // 槽孔坐标
"X-238500Y519500G85X-237500Y519500" // 负坐标槽孔
};
// 创建测试钻带内容
string drillTapeContent = CreateTestDrillTape(testCases);
// 解析钻带
var result = DrillTapeProcessor.ProcessDrillTape(drillTapeContent);
// 验证结果
if (result.Success)
{
Console.WriteLine("钻带解析成功!");
// 检查每个工具的坐标输出
foreach (var toolResult in result.ToolResults)
{
Console.WriteLine($"\n工具 T{toolResult.ToolNumber:D2} (直径: {toolResult.Diameter:F3}mm):");
Console.WriteLine($"坐标数量: {toolResult.Locations.Count}");
// 显示前5个坐标作为示例
int displayCount = Math.Min(5, toolResult.Locations.Count);
for (int i = 0; i < displayCount; i++)
{
string original = i < testCases.Length ? testCases[i] : "N/A";
string parsed = toolResult.Locations[i];
Console.WriteLine($" 原始: {original}");
Console.WriteLine($" 解析: {parsed}");
Console.WriteLine($" 匹配: {(original == parsed ? "" : "")}");
Console.WriteLine();
}
}
}
else
{
Console.WriteLine($"钻带解析失败: {result.Message}");
}
}
/// <summary>
/// 创建测试钻带内容
/// </summary>
private static string CreateTestDrillTape(string[] coordinates)
{
var drillTape = new System.Text.StringBuilder();
// 添加头部
drillTape.AppendLine("M48");
drillTape.AppendLine("METRIC");
drillTape.AppendLine("VER,1");
drillTape.AppendLine("FMAT,2");
// 添加刀具定义
drillTape.AppendLine("T01C1.000");
drillTape.AppendLine("T02C2.000");
// 添加结束标记
drillTape.AppendLine("%");
// 添加刀具1的坐标
drillTape.AppendLine("T01");
for (int i = 0; i < Math.Min(3, coordinates.Length); i++)
{
// 只添加普通坐标不含G85
if (!coordinates[i].Contains("G85"))
{
drillTape.AppendLine(coordinates[i]);
}
}
// 添加刀具2的坐标槽孔
drillTape.AppendLine("T02");
for (int i = 3; i < coordinates.Length; i++)
{
// 添加槽孔坐标含G85
if (coordinates[i].Contains("G85"))
{
drillTape.AppendLine(coordinates[i]);
}
}
// 添加结束标记
drillTape.AppendLine("M30");
return drillTape.ToString();
}
/// <summary>
/// 测试Point2D的原始字符串保留功能
/// </summary>
public static void TestPoint2DOriginalString()
{
Console.WriteLine("\n=== Point2D原始字符串测试 ===");
// 测试用例
var testCoordinates = new[]
{
"X-265000Y013250",
"X075392Y559511",
"X000123Y000456"
};
foreach (var coord in testCoordinates)
{
var point = Point2D.ParseFromDrillString(coord);
Console.WriteLine($"原始坐标: {coord}");
Console.WriteLine($"解析后X: {point.X:F3}, Y: {point.Y:F3}");
Console.WriteLine($"原始字符串: {point.OriginalString}");
Console.WriteLine($"字符串匹配: {(coord == point.OriginalString ? "" : "")}");
Console.WriteLine();
}
}
}
}