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); } } } }