309 lines
9.5 KiB
C#
309 lines
9.5 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Runtime.CompilerServices;
|
||
|
||
namespace DrillTools
|
||
{
|
||
/// <summary>
|
||
/// 刀具类型枚举
|
||
/// </summary>
|
||
public enum ToolType
|
||
{
|
||
Regular, // 圆孔刀具
|
||
Slot, // 槽孔刀具
|
||
MachineCode // 机台码刀具
|
||
}
|
||
|
||
/// <summary>
|
||
/// 刀具尾号类型枚举
|
||
/// </summary>
|
||
public enum ToolSuffixType
|
||
{
|
||
Drill, // 0 - 钻针
|
||
Slot, // 1 - 槽刀
|
||
EASlot, // 2 - EA型槽刀
|
||
DustSlot, // 3 - 粉尘刀(槽刀)
|
||
DeburrSlot, // 4 - 去毛刺刀(槽刀)
|
||
NonStandard, // 5 - 非标刀
|
||
EASlot2, // 6 - EA型槽刀
|
||
Special // 7 - 特殊刀具
|
||
}
|
||
|
||
/// <summary>
|
||
/// 刀具大类枚举
|
||
/// </summary>
|
||
public enum ToolCategory
|
||
{
|
||
Drill, // 钻针
|
||
Slot, // 槽刀(包含槽刀、粉尘刀、去毛刺刀)
|
||
EA, // EA刀(EA型槽刀)
|
||
NonStandard,// 非标刀
|
||
Special // 特殊刀具
|
||
}
|
||
|
||
/// <summary>
|
||
/// 刀具信息数据模型
|
||
/// </summary>
|
||
public class ToolItem : INotifyPropertyChanged
|
||
{
|
||
private int _toolNumber;
|
||
private double _diameter;
|
||
|
||
// private int _regularHoles; // 孔数功能已移除
|
||
// private int _slotHoles; // 孔数功能已移除
|
||
// private int _totalHoles; // 孔数功能已移除
|
||
private string _parameters = string.Empty;
|
||
|
||
private ToolType _toolType;
|
||
private string _machineCodeType = string.Empty;
|
||
private string _machineCodeCommand = string.Empty;
|
||
private ToolSuffixType _toolSuffixType;
|
||
private ToolCategory _toolCategory;
|
||
private List<string> _holeLocations = new();
|
||
|
||
/// <summary>
|
||
/// 刀具编号
|
||
/// </summary>
|
||
public int ToolNumber
|
||
{
|
||
get => _toolNumber;
|
||
set => SetProperty(ref _toolNumber, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 孔径(mm)
|
||
/// </summary>
|
||
public double Diameter
|
||
{
|
||
get => _diameter;
|
||
set => SetProperty(ref _diameter, value);
|
||
}
|
||
|
||
// /// <summary>
|
||
// /// 普通孔数
|
||
// /// </summary>
|
||
// public int RegularHoles
|
||
// {
|
||
// get => _regularHoles;
|
||
// set => SetProperty(ref _regularHoles, value);
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 槽孔数
|
||
// /// </summary>
|
||
// public int SlotHoles
|
||
// {
|
||
// get => _slotHoles;
|
||
// set => SetProperty(ref _slotHoles, value);
|
||
// }
|
||
|
||
// /// <summary>
|
||
// /// 总孔数
|
||
// /// </summary>
|
||
// public int TotalHoles
|
||
// {
|
||
// get => _totalHoles;
|
||
// set => SetProperty(ref _totalHoles, value);
|
||
// }
|
||
|
||
/// <summary>
|
||
/// 钻机参数
|
||
/// </summary>
|
||
public string Parameters
|
||
{
|
||
get => _parameters;
|
||
set => SetProperty(ref _parameters, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 刀具类型
|
||
/// </summary>
|
||
public ToolType ToolType
|
||
{
|
||
get => _toolType;
|
||
set => SetProperty(ref _toolType, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 机台码类型 (A或B)
|
||
/// </summary>
|
||
public string MachineCodeType
|
||
{
|
||
get => _machineCodeType;
|
||
set => SetProperty(ref _machineCodeType, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 机台码命令 (M97或M98)
|
||
/// </summary>
|
||
public string MachineCodeCommand
|
||
{
|
||
get => _machineCodeCommand;
|
||
set => SetProperty(ref _machineCodeCommand, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 刀具尾号类型
|
||
/// </summary>
|
||
public ToolSuffixType ToolSuffixType
|
||
{
|
||
get => _toolSuffixType;
|
||
set => SetProperty(ref _toolSuffixType, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 刀具大类
|
||
/// </summary>
|
||
public ToolCategory ToolCategory
|
||
{
|
||
get => _toolCategory;
|
||
set => SetProperty(ref _toolCategory, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 孔位数据列表
|
||
/// </summary>
|
||
public List<string> HoleLocations
|
||
{
|
||
get => _holeLocations;
|
||
set => SetProperty(ref _holeLocations, value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 刀具类型显示文本
|
||
/// </summary>
|
||
public string ToolTypeDisplay => ToolType switch
|
||
{
|
||
ToolType.Regular => "圆孔",
|
||
ToolType.Slot => "槽孔",
|
||
ToolType.MachineCode => "机台码",
|
||
_ => "未知"
|
||
};
|
||
|
||
/// <summary>
|
||
/// 刀具尾号类型显示文本
|
||
/// </summary>
|
||
public string ToolSuffixTypeDisplay => GetToolSuffixTypeDisplay(ToolSuffixType);
|
||
|
||
/// <summary>
|
||
/// 刀具大类显示文本
|
||
/// </summary>
|
||
public string ToolCategoryDisplay => GetToolCategoryDisplay(ToolCategory);
|
||
|
||
public event PropertyChangedEventHandler? PropertyChanged;
|
||
|
||
protected bool SetProperty<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
|
||
{
|
||
if (EqualityComparer<T>.Default.Equals(field, value))
|
||
return false;
|
||
|
||
field = value;
|
||
OnPropertyChanged(propertyName);
|
||
return true;
|
||
}
|
||
|
||
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
||
{
|
||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据孔径尾号判断刀具尾号类型
|
||
/// </summary>
|
||
/// <param name="diameter">孔径</param>
|
||
/// <returns>刀具尾号类型</returns>
|
||
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)
|
||
{
|
||
return ToolSuffixType.Drill; // 固定为圆孔
|
||
}
|
||
|
||
// 获取孔径的小数部分最后一位
|
||
string diameterStr = diameter.ToString("F3");
|
||
if (diameterStr.Length >= 4 && diameterStr.Contains('.'))
|
||
{
|
||
char lastChar = diameterStr[diameterStr.Length - 1];
|
||
int suffix = int.Parse(lastChar.ToString());
|
||
|
||
return suffix switch
|
||
{
|
||
0 => ToolSuffixType.Drill,
|
||
1 => ToolSuffixType.Slot,
|
||
2 => ToolSuffixType.EASlot,
|
||
3 => ToolSuffixType.DustSlot,
|
||
4 => ToolSuffixType.DeburrSlot,
|
||
5 => ToolSuffixType.NonStandard,
|
||
6 => ToolSuffixType.EASlot2,
|
||
7 => ToolSuffixType.Special,
|
||
8 => ToolSuffixType.Drill,
|
||
9 => ToolSuffixType.Drill,
|
||
_ => ToolSuffixType.NonStandard
|
||
};
|
||
}
|
||
|
||
return ToolSuffixType.NonStandard; // 默认为非标刀
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据刀具尾号类型获取刀具大类
|
||
/// </summary>
|
||
/// <param name="suffixType">刀具尾号类型</param>
|
||
/// <returns>刀具大类</returns>
|
||
public static ToolCategory GetToolCategory(ToolSuffixType suffixType)
|
||
{
|
||
return suffixType switch
|
||
{
|
||
ToolSuffixType.Drill => ToolCategory.Drill,
|
||
ToolSuffixType.Slot or ToolSuffixType.DustSlot or ToolSuffixType.DeburrSlot => ToolCategory.Slot,
|
||
ToolSuffixType.EASlot or ToolSuffixType.EASlot2 => ToolCategory.EA,
|
||
ToolSuffixType.NonStandard => ToolCategory.NonStandard,
|
||
ToolSuffixType.Special => ToolCategory.Special,
|
||
_ => ToolCategory.NonStandard
|
||
};
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取刀具尾号类型的显示文本
|
||
/// </summary>
|
||
/// <param name="suffixType">刀具尾号类型</param>
|
||
/// <returns>显示文本</returns>
|
||
public static string GetToolSuffixTypeDisplay(ToolSuffixType suffixType)
|
||
{
|
||
return suffixType switch
|
||
{
|
||
ToolSuffixType.Drill => "钻针",
|
||
ToolSuffixType.Slot => "槽刀",
|
||
ToolSuffixType.EASlot => "EA型槽刀",
|
||
ToolSuffixType.DustSlot => "粉尘刀",
|
||
ToolSuffixType.DeburrSlot => "去毛刺刀",
|
||
ToolSuffixType.NonStandard => "非标刀",
|
||
ToolSuffixType.EASlot2 => "EA型槽刀",
|
||
ToolSuffixType.Special => "特殊刀具",
|
||
_ => "未知"
|
||
};
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取刀具大类的显示文本
|
||
/// </summary>
|
||
/// <param name="category">刀具大类</param>
|
||
/// <returns>显示文本</returns>
|
||
public static string GetToolCategoryDisplay(ToolCategory category)
|
||
{
|
||
return category switch
|
||
{
|
||
ToolCategory.Drill => "钻针",
|
||
ToolCategory.Slot => "槽刀",
|
||
ToolCategory.EA => "EA刀",
|
||
ToolCategory.NonStandard => "非标刀",
|
||
ToolCategory.Special => "特殊刀",
|
||
_ => "未知"
|
||
};
|
||
}
|
||
}
|
||
} |