using System;
using System.Collections.Generic;
using System.IO;
using BITKit;
using BITKit.CommandPattern;
using BITKit.Mod;
using System.Linq;
using BITFactory.Cutting;
using BITKit.UX;
namespace BITFactory.Cutting.Mod
{
///
/// 该程序将自动保存导出的数据到同级目录下
///
public sealed class AutoSaveImage : MyMod
{
public override string PackageName { get; set; } = "iFactory.Cutting.Mod.auto_save_images";
public override string Name { get; set; } = "自动保存导出数据";
public override string Description { get; set; } =
"自动保存导出的数据到该程序所在目录下,并且在导出后弹出对话框提示\n导出的格式为export_{Timestamp}.cfg";
[Inject] private ICuttingTool _cuttingTool;
[Inject] private IUXDialogue _dialogue;
public override void OnInitialized()
{
base.OnInitialized();
_cuttingTool.OnRelease += OnRelease;
}
public override void OnDisposed()
{
base.OnDisposed();
_cuttingTool.OnRelease -= OnRelease;
}
private void OnRelease(ICommand[] obj)
{
var commands = obj.OfType().ToArray();
var stringBuilder = new System.Text.StringBuilder();
var path = Path.Combine(FolderPath, $"export_{DateTime.Now.Ticks}.cfg");
stringBuilder.AppendLine($"导出时间: {DateTime.Now},导出命令数量: {obj.Length},有效命名数量: {commands.Length}");
foreach (var command in commands)
{
switch (command)
{
case CuttingPointCommand pointCommand:
stringBuilder.AppendLine(
$"切削点: {pointCommand.PlanePoint.x} {pointCommand.PlanePoint.y} {pointCommand.PlanePoint.z}");
break;
case CuttingLineCommand lineCommand:
stringBuilder.AppendLine($"切削线:{lineCommand.Line.Length}");
foreach (var linePos in lineCommand.Line)
{
stringBuilder.AppendLine($"切削线点: {linePos.x} {linePos.y} {linePos.z}");
}
break;
default:
stringBuilder.AppendLine($"{command.Name}:{command.GetType().FullName}");
break;
}
}
File.WriteAllText(path, stringBuilder.ToString());
BIT4Log.Log($"导出数据已保存到:{path}");
_dialogue.Show($"导出数据已保存到\n{path}", $"数据已保存",OpenFile);
return;
void OpenFile()
{
//打开path的文件
System.Diagnostics.Process.Start(path);
}
}
}
}