diff --git a/App.xaml.cs b/App.xaml.cs index 5e3e68e..198550f 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -301,9 +301,9 @@ namespace DrillTools } /// - /// 从 MainWindowViewModel.Tools 独立遍历计算叠板用最小刀径 - /// 分类逻辑与 UpdateMinDiameterInfo 一致,但不排除 0.749mm - /// 槽刀分类映射:Slot/DustSlot/DeburrSlot → 槽刀,EASlot/EASlot2 → EA刀,Drill → 钻针 + /// 从 MainWindowViewModel.Tools 独立遍历计算叠板用最小刀径。 + /// 分类逻辑与 UpdateMinDiameterInfo 一致(按 ToolType 区分圆孔/槽孔),不排除 0.749mm; + /// 特殊固定孔径(3.203 等)不参与叠板计算。 /// private static void CalculateStackMinDiameters( ObservableCollection tools, @@ -315,26 +315,30 @@ namespace DrillTools foreach (var tool in tools) { - // 机台码刀具(ToolType.MachineCode)是固定孔位,不参与叠板计算 if (tool.ToolType == ToolType.MachineCode) continue; - var category = ToolItem.GetToolCategory(tool.ToolSuffixType); + if (ToolItem.IsSpecialFixedDiameter(tool.Diameter)) + continue; - switch (category) + if (tool.ToolType == ToolType.Regular) { - case ToolCategory.Drill: - if (minDrill == 0 || tool.Diameter < minDrill) - minDrill = tool.Diameter; - break; - case ToolCategory.Slot: + if (minDrill == 0 || tool.Diameter < minDrill) + minDrill = tool.Diameter; + } + else if (tool.ToolType == ToolType.Slot) + { + if (tool.ToolSuffixType != ToolSuffixType.EASlot && tool.ToolSuffixType != ToolSuffixType.EASlot2) + { if (minSlot == 0 || tool.Diameter < minSlot) minSlot = tool.Diameter; - break; - case ToolCategory.EA: - if (minEA == 0 || tool.Diameter < minEA) - minEA = tool.Diameter; - break; + } + + if ((tool.ToolSuffixType == ToolSuffixType.EASlot || tool.ToolSuffixType == ToolSuffixType.EASlot2) + && (minEA == 0 || tool.Diameter < minEA)) + { + minEA = tool.Diameter; + } } } diff --git a/StartupSelectionViewModel.cs b/StartupSelectionViewModel.cs index 63c1ae9..2099ab6 100644 --- a/StartupSelectionViewModel.cs +++ b/StartupSelectionViewModel.cs @@ -175,7 +175,7 @@ namespace DrillTools public double StackCalcMinDrill { get; set; } /// - /// 叠板计算用的最小槽刀直径(包含 0.749mm 的槽刀,由调用方独立计算) + /// 叠板计算用的最小槽刀直径(仅真实槽孔刀,由调用方独立计算) /// public double StackCalcMinSlot { get; set; } diff --git a/ToolItem.cs b/ToolItem.cs index 3df5ed4..91665af 100644 --- a/ToolItem.cs +++ b/ToolItem.cs @@ -218,6 +218,18 @@ namespace DrillTools PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } + /// + /// PP定位孔(3.203)、外围参考孔(3.175)、Mark孔(1.049)、机台码(0.499)等特殊孔径。 + /// 不按尾号归类,且不参与叠板块数计算。 + /// + public static bool IsSpecialFixedDiameter(double diameter) + { + return Math.Abs(diameter - 1.049) < 0.001 + || Math.Abs(diameter - 3.175) < 0.001 + || Math.Abs(diameter - 3.203) < 0.001 + || Math.Abs(diameter - 0.499) < 0.001; + } + /// /// 根据孔径尾号判断刀具尾号类型 /// @@ -226,9 +238,7 @@ namespace DrillTools public static ToolSuffixType GetToolSuffixType(double diameter) { // 特殊孔径优先判断 - if (Math.Abs(diameter - 1.049) < 0.001 || - Math.Abs(diameter - 3.175) < 0.001 || - Math.Abs(diameter - 0.499) < 0.001) + if (IsSpecialFixedDiameter(diameter)) { System.Diagnostics.Debug.WriteLine($"[尾号类型判断] 直径={diameter:F3}: 特殊孔径,尾号类型=钻针"); return ToolSuffixType.Drill; // 固定为圆孔