feat: 基础信息叠板计算功能
- 新增 StackCountCalculator: 数字化规则表(短槽刀/EA刀10×4、槽刀10×4、钻针10×6),公开Calculate方法,输入校验,查表逻辑,16oz铜厚递减 - 新增 StartupSelectionViewModel: 替换匿名DataContext,保留所有显示属性,新增板厚/铜厚输入、计算结果/明细、CanCalculate - 新增 NonEmptyToVisibilityConverter - 修改 StartupSelectionWindow.xaml: 增宽680px,新增3行(输入+结果+明细),计算按钮在基础信息内部 - 修改 StartupSelectionWindow.xaml.cs: 构造函数接收ViewModel,新增计算按钮事件 - 修改 App.xaml.cs: 构建ViewModel实例,CalculateStackMinDiameters独立遍历Tools(含0.749mm,排除机台码) - 修改 App.xaml: 注册NonEmptyToVisibilityConverter
This commit is contained in:
74
App.xaml.cs
74
App.xaml.cs
@@ -5,6 +5,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace DrillTools
|
||||
{
|
||||
@@ -60,20 +61,28 @@ namespace DrillTools
|
||||
double outer3175XSpacing = viewModel.Outer3175XSpacing;
|
||||
double outer3175YSpacing = viewModel.Outer3175YSpacing;
|
||||
|
||||
var selectionViewModel = new StartupSelectionViewModel
|
||||
{
|
||||
FileName = Path.GetFileNameWithoutExtension(filePath),
|
||||
MinDrillDiameter = minDrill,
|
||||
MinSlotDiameter = minSlot,
|
||||
MinEADiameter = minEA,
|
||||
IsPpDrillTape = isPpDrillTape,
|
||||
PpXSpacing = ppXSpacing,
|
||||
PpYSpacing = ppYSpacing,
|
||||
HasOuter3175Spacing = hasOuter3175Spacing,
|
||||
Outer3175XSpacing = outer3175XSpacing,
|
||||
Outer3175YSpacing = outer3175YSpacing
|
||||
};
|
||||
|
||||
// 叠板计算用的最小刀径独立遍历 Tools 计算,包含 0.749mm
|
||||
CalculateStackMinDiameters(viewModel.Tools, selectionViewModel);
|
||||
|
||||
var selectionWindow = new StartupSelectionWindow(
|
||||
filePath,
|
||||
selectionViewModel,
|
||||
canClearParameters,
|
||||
canGeneratePpDrillTape,
|
||||
canScaleDrillTape,
|
||||
minDrill,
|
||||
minSlot,
|
||||
minEA,
|
||||
isPpDrillTape,
|
||||
ppXSpacing,
|
||||
ppYSpacing,
|
||||
hasOuter3175Spacing,
|
||||
outer3175XSpacing,
|
||||
outer3175YSpacing);
|
||||
canScaleDrillTape);
|
||||
selectionWindow.ShowDialog();
|
||||
|
||||
switch (selectionWindow.SelectedAction)
|
||||
@@ -290,5 +299,48 @@ namespace DrillTools
|
||||
|
||||
return supportedExtensions.Contains(extension);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从 MainWindowViewModel.Tools 独立遍历计算叠板用最小刀径
|
||||
/// 分类逻辑与 UpdateMinDiameterInfo 一致,但不排除 0.749mm
|
||||
/// 槽刀分类映射:Slot/DustSlot/DeburrSlot → 槽刀,EASlot/EASlot2 → EA刀,Drill → 钻针
|
||||
/// </summary>
|
||||
private static void CalculateStackMinDiameters(
|
||||
ObservableCollection<ToolItem> tools,
|
||||
StartupSelectionViewModel selectionViewModel)
|
||||
{
|
||||
double minDrill = 0;
|
||||
double minSlot = 0;
|
||||
double minEA = 0;
|
||||
|
||||
foreach (var tool in tools)
|
||||
{
|
||||
// 机台码刀具(ToolType.MachineCode)是固定孔位,不参与叠板计算
|
||||
if (tool.ToolType == ToolType.MachineCode)
|
||||
continue;
|
||||
|
||||
var category = ToolItem.GetToolCategory(tool.ToolSuffixType);
|
||||
|
||||
switch (category)
|
||||
{
|
||||
case ToolCategory.Drill:
|
||||
if (minDrill == 0 || tool.Diameter < minDrill)
|
||||
minDrill = tool.Diameter;
|
||||
break;
|
||||
case ToolCategory.Slot:
|
||||
if (minSlot == 0 || tool.Diameter < minSlot)
|
||||
minSlot = tool.Diameter;
|
||||
break;
|
||||
case ToolCategory.EA:
|
||||
if (minEA == 0 || tool.Diameter < minEA)
|
||||
minEA = tool.Diameter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
selectionViewModel.StackCalcMinDrill = minDrill;
|
||||
selectionViewModel.StackCalcMinSlot = minSlot;
|
||||
selectionViewModel.StackCalcMinEA = minEA;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user