添加项目文件。

This commit is contained in:
2025-12-07 20:25:27 +08:00
parent 52ad3bd1e4
commit b866365968
31 changed files with 16642 additions and 0 deletions

View 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("所有示例运行完成!");
}
}
}