添加项目文件。
This commit is contained in:
241
SlotHoleCalculatorExamples.cs
Normal file
241
SlotHoleCalculatorExamples.cs
Normal file
@@ -0,0 +1,241 @@
|
||||
using System;
|
||||
using DrillTools;
|
||||
|
||||
namespace DrillTools.Examples
|
||||
{
|
||||
/// <summary>
|
||||
/// 槽孔计算器使用示例
|
||||
/// </summary>
|
||||
public class SlotHoleCalculatorExamples
|
||||
{
|
||||
/// <summary>
|
||||
/// 示例1:计算线段槽孔孔数
|
||||
/// </summary>
|
||||
public static void CalculateLineSlotHoleCountExample()
|
||||
{
|
||||
Console.WriteLine("=== 线段槽孔孔数计算示例 ===");
|
||||
|
||||
// 创建线段槽孔(参考readme.md中的测试数据)
|
||||
var slot = new LineSlot(
|
||||
new Point2D(-69.659, 16.450), // 起点
|
||||
new Point2D(-94.159, 16.450), // 终点
|
||||
1.601 // 孔径
|
||||
);
|
||||
|
||||
// 计算孔数
|
||||
int holeCount = SlotHoleCalculator.CalculateLineSlotHoleCount(slot);
|
||||
|
||||
Console.WriteLine($"槽孔长度: {slot.Length:F3} mm");
|
||||
Console.WriteLine($"槽孔宽度: {slot.Width} mm");
|
||||
Console.WriteLine($"计算孔数: {holeCount}");
|
||||
Console.WriteLine($"预期孔数: 88 (CAM350标准)");
|
||||
Console.WriteLine($"结果验证: {(holeCount == 88 ? "✓ 通过" : "✗ 失败")}");
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 示例2:从G85命令解析并计算
|
||||
/// </summary>
|
||||
public static void ParseFromG85Example()
|
||||
{
|
||||
Console.WriteLine("=== G85命令解析示例 ===");
|
||||
|
||||
// G85命令字符串(来自钻带文件)
|
||||
string g85Command = "X-069659Y016450G85X-094159Y016450";
|
||||
double width = 1.601;
|
||||
|
||||
try
|
||||
{
|
||||
// 解析G85命令
|
||||
var slot = SlotHoleCalculator.ParseLineSlotFromG85(g85Command, width);
|
||||
|
||||
// 计算孔数
|
||||
int holeCount = SlotHoleCalculator.CalculateLineSlotHoleCount(slot);
|
||||
|
||||
Console.WriteLine($"G85命令: {g85Command}");
|
||||
Console.WriteLine($"解析起点: ({slot.StartPoint.X}, {slot.StartPoint.Y})");
|
||||
Console.WriteLine($"解析终点: ({slot.EndPoint.X}, {slot.EndPoint.Y})");
|
||||
Console.WriteLine($"槽孔宽度: {slot.Width} mm");
|
||||
Console.WriteLine($"计算孔数: {holeCount}");
|
||||
Console.WriteLine();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"解析失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 示例3:计算钻孔位置
|
||||
/// </summary>
|
||||
public static void CalculateHolePositionsExample()
|
||||
{
|
||||
Console.WriteLine("=== 钻孔位置计算示例 ===");
|
||||
|
||||
// 创建线段槽孔
|
||||
var slot = new LineSlot(
|
||||
new Point2D(0, 0),
|
||||
new Point2D(10, 0),
|
||||
1.0
|
||||
);
|
||||
|
||||
// 计算钻孔位置
|
||||
var positions = SlotHoleCalculator.CalculateLineSlotHolePositions(slot);
|
||||
|
||||
Console.WriteLine($"槽孔长度: {slot.Length} mm");
|
||||
Console.WriteLine($"钻孔数量: {positions.Count}");
|
||||
Console.WriteLine("钻孔位置列表:");
|
||||
|
||||
for (int i = 0; i < positions.Count; i++)
|
||||
{
|
||||
Console.WriteLine($" 孔 {i + 1}: ({positions[i].X:F3}, {positions[i].Y:F3})");
|
||||
}
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 示例4:弧段槽孔计算
|
||||
/// </summary>
|
||||
public static void CalculateArcSlotExample()
|
||||
{
|
||||
Console.WriteLine("=== 弧段槽孔计算示例 ===");
|
||||
|
||||
// 创建弧段槽孔(半圆)
|
||||
var arcSlot = new ArcSlot(
|
||||
new Point2D(10, 0), // 起点
|
||||
new Point2D(0, 10), // 终点
|
||||
new Point2D(0, 0), // 圆心
|
||||
1.0, // 宽度
|
||||
false // 顺时针
|
||||
);
|
||||
|
||||
// 计算孔数
|
||||
int holeCount = SlotHoleCalculator.CalculateArcSlotHoleCount(arcSlot);
|
||||
|
||||
// 计算钻孔位置
|
||||
var positions = SlotHoleCalculator.CalculateArcSlotHolePositions(arcSlot);
|
||||
|
||||
Console.WriteLine($"弧段半径: {arcSlot.Radius:F3} mm");
|
||||
Console.WriteLine($"弧段长度: {SlotHoleCalculator.CalculateArcLength(arcSlot):F3} mm");
|
||||
Console.WriteLine($"计算孔数: {holeCount}");
|
||||
Console.WriteLine($"钻孔位置数量: {positions.Count}");
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 示例5:批量计算不同孔径的槽孔
|
||||
/// </summary>
|
||||
public static void BatchCalculationExample()
|
||||
{
|
||||
Console.WriteLine("=== 批量计算示例 ===");
|
||||
|
||||
// 不同孔径的槽孔(参考readme.md中的测试数据)
|
||||
var diameters = new[] { 1.601, 1.701, 1.801, 1.901, 2.001, 1.501, 1.401, 1.301, 1.201, 1.101, 1.001, 0.706, 0.506 };
|
||||
var expectedCounts = new[] { 88, 85, 83, 81, 79, 91, 94, 97, 101, 106, 111, 132, 156 };
|
||||
|
||||
Console.WriteLine("孔径(mm)\t计算孔数\t预期孔数\t验证结果");
|
||||
Console.WriteLine("----------------------------------------");
|
||||
|
||||
for (int i = 0; i < diameters.Length; i++)
|
||||
{
|
||||
var slot = new LineSlot(
|
||||
new Point2D(-69.659, 16.450),
|
||||
new Point2D(-94.159, 16.450),
|
||||
diameters[i]
|
||||
);
|
||||
|
||||
int actualCount = SlotHoleCalculator.CalculateLineSlotHoleCount(slot);
|
||||
int expectedCount = expectedCounts[i];
|
||||
bool passed = actualCount == expectedCount;
|
||||
|
||||
Console.WriteLine($"{diameters[i]}\t{actualCount}\t{expectedCount}\t{(passed ? "✓" : "✗")}");
|
||||
}
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 示例6:自定义凸位高度值
|
||||
/// </summary>
|
||||
public static void CustomToleranceExample()
|
||||
{
|
||||
Console.WriteLine("=== 自定义凸位高度值示例 ===");
|
||||
|
||||
var slot = new LineSlot(
|
||||
new Point2D(0, 0),
|
||||
new Point2D(10, 0),
|
||||
1.0
|
||||
);
|
||||
|
||||
// 使用默认凸位高度值
|
||||
int defaultHoleCount = SlotHoleCalculator.CalculateLineSlotHoleCount(slot);
|
||||
|
||||
// 使用自定义凸位高度值
|
||||
double customTolerance = 0.01; // 0.01mm
|
||||
int customHoleCount = SlotHoleCalculator.CalculateLineSlotHoleCount(slot, customTolerance);
|
||||
|
||||
Console.WriteLine($"默认凸位高度值 (0.0127mm): {defaultHoleCount} 个孔");
|
||||
Console.WriteLine($"自定义凸位高度值 (0.01mm): {customHoleCount} 个孔");
|
||||
Console.WriteLine($"差异: {Math.Abs(defaultHoleCount - customHoleCount)} 个孔");
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 示例7:处理实际钻带数据
|
||||
/// </summary>
|
||||
public static void ProcessRealDrillTapeExample()
|
||||
{
|
||||
Console.WriteLine("=== 处理实际钻带数据示例 ===");
|
||||
|
||||
// 模拟钻带数据中的槽孔命令
|
||||
var g85Commands = new[]
|
||||
{
|
||||
"X-069659Y016450G85X-094159Y016450", // T01 - 1.601mm
|
||||
"X-181341Y195550G85X-156841Y195550", // T02 - 1.601mm
|
||||
"X-181341Y389550G85X-156841Y389550", // T03 - 1.601mm
|
||||
};
|
||||
|
||||
var toolDiameters = new[] { 1.601, 1.601, 1.601 };
|
||||
var expectedHoleCounts = new[] { 88, 88, 88 };
|
||||
|
||||
Console.WriteLine("刀具\t孔径(mm)\tG85命令\t\t\t\t计算孔数\t预期孔数\t验证结果");
|
||||
Console.WriteLine("--------------------------------------------------------------------------------");
|
||||
|
||||
for (int i = 0; i < g85Commands.Length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var slot = SlotHoleCalculator.ParseLineSlotFromG85(g85Commands[i], toolDiameters[i]);
|
||||
int holeCount = SlotHoleCalculator.CalculateLineSlotHoleCount(slot);
|
||||
bool passed = holeCount == expectedHoleCounts[i];
|
||||
|
||||
Console.WriteLine($"T{i + 1:D2}\t{toolDiameters[i]}\t{g85Commands[i]}\t{holeCount}\t\t{expectedHoleCounts[i]}\t\t{(passed ? "✓" : "✗")}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"T{i + 1:D2}\t{toolDiameters[i]}\t{g85Commands[i]}\t解析失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 运行所有示例
|
||||
/// </summary>
|
||||
public static void RunAllExamples()
|
||||
{
|
||||
Console.WriteLine("槽孔计算器使用示例");
|
||||
Console.WriteLine("==================");
|
||||
Console.WriteLine();
|
||||
|
||||
CalculateLineSlotHoleCountExample();
|
||||
ParseFromG85Example();
|
||||
CalculateHolePositionsExample();
|
||||
CalculateArcSlotExample();
|
||||
BatchCalculationExample();
|
||||
CustomToleranceExample();
|
||||
ProcessRealDrillTapeExample();
|
||||
|
||||
Console.WriteLine("所有示例运行完成!");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user