Add startup PP drill tape generation
This commit is contained in:
@@ -30,6 +30,8 @@ namespace DrillTools
|
||||
private double _minDrillDiameter;
|
||||
private double _minSlotDiameter;
|
||||
private double _minEADiameter;
|
||||
private bool _isStartupDrillTapeFile;
|
||||
private bool _canGeneratePpDrillTape;
|
||||
|
||||
/// <summary>
|
||||
/// 刀具列表
|
||||
@@ -104,6 +106,8 @@ namespace DrillTools
|
||||
{
|
||||
FileNameWithoutExtension = string.Empty;
|
||||
}
|
||||
|
||||
UpdatePpDrillTapeState();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,6 +126,30 @@ namespace DrillTools
|
||||
/// </summary>
|
||||
public bool HasOriginalFile => !string.IsNullOrEmpty(OriginalFilePath);
|
||||
|
||||
/// <summary>
|
||||
/// 当前文件是否来自启动参数
|
||||
/// </summary>
|
||||
public bool IsStartupDrillTapeFile
|
||||
{
|
||||
get => _isStartupDrillTapeFile;
|
||||
set
|
||||
{
|
||||
if (SetProperty(ref _isStartupDrillTapeFile, value))
|
||||
{
|
||||
UpdatePpDrillTapeState();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否可以生成 PP 钻带
|
||||
/// </summary>
|
||||
public bool CanGeneratePpDrillTape
|
||||
{
|
||||
get => _canGeneratePpDrillTape;
|
||||
private set => SetProperty(ref _canGeneratePpDrillTape, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗口是否置顶
|
||||
/// </summary>
|
||||
@@ -291,15 +319,19 @@ namespace DrillTools
|
||||
{
|
||||
CheckAndApplySortFile(OriginalFilePath, Tools);
|
||||
}
|
||||
|
||||
UpdatePpDrillTapeState();
|
||||
}
|
||||
else
|
||||
{
|
||||
System.Windows.MessageBox.Show($"解析钻带失败: {result.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
UpdatePpDrillTapeState();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Windows.MessageBox.Show($"解析钻带时发生异常: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
UpdatePpDrillTapeState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1081,6 +1113,82 @@ M30";
|
||||
OpenFileExplorerAndSelectFile(outputFilePath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成 PP 钻带文件
|
||||
/// </summary>
|
||||
/// <returns>生成的文件路径</returns>
|
||||
public string GeneratePpDrillTape()
|
||||
{
|
||||
var sourceTool = GetPpSourceTool();
|
||||
if (sourceTool == null)
|
||||
throw new InvalidOperationException("当前钻带不满足生成 PP 钻带条件");
|
||||
|
||||
var locations = sourceTool.HoleLocations
|
||||
.Where(location => !string.IsNullOrWhiteSpace(location))
|
||||
.Take(2)
|
||||
.Select(location => location.Trim())
|
||||
.ToList();
|
||||
|
||||
if (locations.Count < 2)
|
||||
throw new InvalidOperationException("3.203 刀具坐标不足,无法生成 PP 钻带");
|
||||
|
||||
string outputFilePath = GetPpDrillTapeOutputPath();
|
||||
var ppDrillTape = new StringBuilder();
|
||||
ppDrillTape.AppendLine("M48");
|
||||
ppDrillTape.AppendLine("T01C4.");
|
||||
ppDrillTape.AppendLine("%");
|
||||
ppDrillTape.AppendLine("T01");
|
||||
ppDrillTape.AppendLine(locations[0]);
|
||||
ppDrillTape.AppendLine(locations[1]);
|
||||
ppDrillTape.AppendLine("M30");
|
||||
|
||||
File.WriteAllText(outputFilePath, ppDrillTape.ToString(), CreateGb2312Encoding());
|
||||
OpenFileExplorerAndSelectFile(outputFilePath);
|
||||
|
||||
return outputFilePath;
|
||||
}
|
||||
|
||||
private void UpdatePpDrillTapeState()
|
||||
{
|
||||
CanGeneratePpDrillTape = GetPpSourceTool() != null;
|
||||
}
|
||||
|
||||
private ToolItem? GetPpSourceTool()
|
||||
{
|
||||
if (!IsStartupDrillTapeFile || !HasOriginalFile || OriginalTools.Count < 2)
|
||||
return null;
|
||||
|
||||
var sourceTool = OriginalTools[OriginalTools.Count - 2];
|
||||
if (Math.Abs(sourceTool.Diameter - 3.203) >= 0.001)
|
||||
return null;
|
||||
|
||||
if (sourceTool.TotalHoles != 3)
|
||||
return null;
|
||||
|
||||
if (sourceTool.HoleLocations == null || sourceTool.HoleLocations.Count < 2)
|
||||
return null;
|
||||
|
||||
return sourceTool;
|
||||
}
|
||||
|
||||
private string GetPpDrillTapeOutputPath()
|
||||
{
|
||||
string directory = Path.GetDirectoryName(OriginalFilePath) ?? string.Empty;
|
||||
string partNumber = ExtractPpPartNumber(FileNameWithoutExtension);
|
||||
return Path.Combine(directory, $"{partNumber}-pp.drl");
|
||||
}
|
||||
|
||||
private static string ExtractPpPartNumber(string fileNameWithoutExtension)
|
||||
{
|
||||
var parts = fileNameWithoutExtension
|
||||
.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Where(part => !part.Equals("cs", StringComparison.OrdinalIgnoreCase)
|
||||
&& !part.Equals("jp", StringComparison.OrdinalIgnoreCase))
|
||||
.ToList();
|
||||
|
||||
return parts.Count > 0 ? string.Join("-", parts) : fileNameWithoutExtension;
|
||||
}
|
||||
|
||||
private static void ConfirmOverwriteReport(string outputFilePath)
|
||||
{
|
||||
if (!File.Exists(outputFilePath))
|
||||
|
||||
Reference in New Issue
Block a user