diff --git a/Model/Services/AlgorithmServer.cs b/Model/Services/AlgorithmServer.cs index 310dbcc..6291805 100644 --- a/Model/Services/AlgorithmServer.cs +++ b/Model/Services/AlgorithmServer.cs @@ -10,16 +10,16 @@ namespace SparkClient.Model.Services { // 导入 C++ DLL 中的 DetectDiamond 函数 - [DllImport("D:/workspace/dayuAI/SparkClient/bin/Debug/net8.0-windows/diamond_cut_inspector.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + [DllImport("diamond_cut_inspector.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] private static extern IntPtr DetectDiamond(string jsonData); // 导入 C++ DLL 中的 FreeMemory 函数 - [DllImport("D:/workspace/dayuAI/SparkClient/bin/Debug/net8.0-windows/diamond_cut_inspector.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + [DllImport("diamond_cut_inspector.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] private static extern void FreeString(IntPtr ptr); // 导入 C++ DLL 中的 Echo 函数 - [DllImport("D:/workspace/dayuAI/SparkClient/bin/Debug/net8.0-windows/diamond_cut_inspector.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + [DllImport("diamond_cut_inspector.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] private static extern string Echo(string jsonData); // 导入 C++ DLL 中的 ParseJsonAndReturnActions 函数 - [DllImport("D:/workspace/dayuAI/SparkClient/bin/Debug/net8.0-windows/AlgorithmServer.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + [DllImport("AlgorithmServer.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] private static extern IntPtr ParseJsonAndReturnActions(string jsonData); // 添加公共方法 @@ -41,7 +41,7 @@ namespace SparkClient.Model.Services // 调用 C++ DLL 函数解析 JSON IntPtr resultPtr = DetectDiamond(jsonDataString); - string resultJson = Marshal.PtrToStringAnsi(resultPtr); + string resultJson = Marshal.PtrToStringAnsi(resultPtr); // 释放 DLL 分配的内存 FreeString(resultPtr); Console.WriteLine("log999999999999999999"+resultJson); diff --git a/SparkClient.csproj b/SparkClient.csproj index 5f1fd7f..4ceff56 100644 --- a/SparkClient.csproj +++ b/SparkClient.csproj @@ -142,6 +142,9 @@ + + Code + Code diff --git a/SparkDB.db b/SparkDB.db index 42b229f..32bd5d6 100644 Binary files a/SparkDB.db and b/SparkDB.db differ diff --git a/ViewModel/Grading/DiamondSelectVM.cs b/ViewModel/Grading/DiamondSelectVM.cs index 9b6ec3b..130ba2c 100644 --- a/ViewModel/Grading/DiamondSelectVM.cs +++ b/ViewModel/Grading/DiamondSelectVM.cs @@ -16,6 +16,7 @@ using Microsoft.Data.Sqlite; using SparkClient.Model.Entity; using SparkClient.Model.Services; using MessageBox = System.Windows.MessageBox; +using System.Runtime.CompilerServices; namespace SparkClient.ViewModel.Grading; @@ -112,46 +113,82 @@ public class DiamondSelectVM : BaseViewModel /// public async void StartGrading(object param) { - if (param != null) + LoadingDialog loading = new LoadingDialog(); + try { - LoadingDialog loading = new LoadingDialog(); - var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => loading.ShowDialog())); - await Task.Run(async () => + if (param != null) { - for (int i = 0; i <= 100; i++) + var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => loading.ShowDialog())); + await Task.Run(async () => { - // 模拟耗时操作 - //System.Threading.Thread.Sleep(50); // 休眠50毫秒 - await Task.Delay(5); + bool isEnd = false; + int progress = 0; // 更新进度条的值(需要在UI线程上执行) - loading.Dispatcher.Invoke(() => + loading.Dispatcher.Invoke(async () => { - loading.setValue(i); + for (int i = 0; i <= 97; i++) + { + if (isEnd) + { + break; + } + // 模拟耗时操作 + //System.Threading.Thread.Sleep(50); // 休眠50毫秒 + await Task.Delay(1000); + loading.setValue(i); + progress = i; + } }); - - } - SocResultEntity socResolt = new SocResultEntity(); - AlgorithmResultEntity parameter = new AlgorithmResultEntity(); - parameter.Standard = "IGI 2024"; - string value = param.ToString()??""; - if (value!= null && value.Split(" ").Length==3) - { + + SocResultEntity socResolt = new SocResultEntity(); + AlgorithmResultEntity parameter = new AlgorithmResultEntity(); + parameter.Standard = "IGI 2024"; + string value = param.ToString() ?? ""; + if (value != null && value.Split(" ").Length == 3) + { + parameter.Shape = value.Split(" ")[0]; + parameter.CrownType = value.Split(" ")[1]; + parameter.PavType = value.Split(" ")[2]; + } + + // 启动soc + socResolt = await DoSoc(); + // 启动算法 + parameter = await DoAlgorithm(socResolt, parameter.Shape, parameter.CrownType); + + parameter.Standard = "IGI 2024"; parameter.Shape = value.Split(" ")[0]; parameter.CrownType = value.Split(" ")[1]; parameter.PavType = value.Split(" ")[2]; - } - - // 启动soc - socResolt = await DoSoc(); - // 启动算法 - parameter = await DoAlgorithm(socResolt, parameter.Shape, parameter.CrownType); - - - parameter.DiamondCode = DiamondCode; - GradingResult(parameter); - }); - await Task.Delay(5); - loading.Close(); + parameter.DiamondCode = DiamondCode; + isEnd = true; + //GradingResult(parameter); + await loading.Dispatcher.Invoke(async () => + { + for (int i = progress; progress <= 100; i++) + { + Random random = new Random(); int minValue = 50; int maxValue = 150; // 生成50到150之间的随机整数 + int randomNumber = random.Next(minValue, maxValue + 1); + await Task.Delay(randomNumber); + loading.setValue(i); + if (loading.ProgressBar.Value == 98) + { + GradingResult(parameter); + } + if(loading.ProgressBar.Value >= 100) + { + + loading.Close(); + break; + } + } + + }); + }); + } + } + finally { + } } diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs index 95539af..992e0f7 100644 --- a/ViewModel/Grading/GradingResultVM.cs +++ b/ViewModel/Grading/GradingResultVM.cs @@ -16,6 +16,8 @@ using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using SparkClient.Views.Dialog; using NPOI.HPSF; +using Application = System.Windows.Application; +using System.Runtime.CompilerServices; namespace SparkClient.ViewModel.Grading; public class GradingResultVM : BaseViewModel @@ -73,7 +75,7 @@ public class GradingResultVM : BaseViewModel } InitCombobox(); DS = "NA"; - AutoSave(); + // AutoSave(); } #region 画面初始化相关操作 @@ -573,11 +575,53 @@ public class GradingResultVM : BaseViewModel } private async void ExportFile(string filePath) { - TxtFile(filePath); - ExcelFile(filePath); - await DatFile(filePath); - STLFile(filePath); - DataConver(filePath); + ExportDialog exportDialog = new ExportDialog(); + var tcs = new TaskCompletionSource(); + //var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => { + // exportDialog.Closed += (s, e) => tcs.SetResult(true); + // exportDialog.ShowDialog(); + //} + // )); + await Task.Run(async () => + { + + exportDialog.Dispatcher.Invoke(() => + { + exportDialog.setValue("Txt File(1/4)"); + }); + TxtFile(filePath); + + exportDialog.Dispatcher.Invoke(() => + { + exportDialog.setValue("Excel File(2/4)"); + }); + ExcelFile(filePath); + + exportDialog.Dispatcher.Invoke(() => + { + exportDialog.setValue("DAT File(3/4)"); + }); + + await DatFile(filePath); + + exportDialog.Dispatcher.Invoke(() => + { + exportDialog.setValue("STL File(4/4)"); + }); + await Task.Delay(100); + STLFile(filePath); + exportDialog.Dispatcher.Invoke(() => + { + exportDialog.setValue("Success"); + }); + //DataConver(filePath); + //exportDialog.Dispatcher.Invoke(() => + //{ + // exportDialog.setValue("5/5"); + //}); + }); + await Task.Delay(500); + exportDialog.Close(); } private void TxtFile(string filePath) @@ -776,11 +820,24 @@ public class GradingResultVM : BaseViewModel } else if (isthin) { - girdleName = thinDic[order]; + if (order > 4) { + girdleName = "Extremely Thin"; + } + else + { + girdleName = thinDic[order]; + } } else if (isthick) { - girdleName = thickDic[order]; + if (order > 4) + { + girdleName = "VeryThick"; + } + else + { + girdleName = thickDic[order]; + } } return girdleName; } diff --git a/Views/Dialog/ExportDialog.xaml b/Views/Dialog/ExportDialog.xaml new file mode 100644 index 0000000..0b1ceab --- /dev/null +++ b/Views/Dialog/ExportDialog.xaml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + diff --git a/Views/Dialog/ExportDialog.xaml.cs b/Views/Dialog/ExportDialog.xaml.cs new file mode 100644 index 0000000..d129168 --- /dev/null +++ b/Views/Dialog/ExportDialog.xaml.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace SparkClient.Views.Dialog +{ + /// + /// LoadingDialog.xaml 的交互逻辑 + /// + public partial class ExportDialog : Window + { + public ExportDialog() + { + InitializeComponent(); + this.MinWidth = 1000; + this.MinHeight = 1000; + } + + public void setValue(string content) + { + Value.Text = content; + } + } +} diff --git a/Views/UserControl/ViewportData/Helper/VideoHelper.cs b/Views/UserControl/ViewportData/Helper/VideoHelper.cs index 6e744f8..9af1d9c 100644 --- a/Views/UserControl/ViewportData/Helper/VideoHelper.cs +++ b/Views/UserControl/ViewportData/Helper/VideoHelper.cs @@ -14,7 +14,7 @@ namespace SparkClient.Views.UserControl.ViewportData.Helper; public class VideoHelper { - public static async void CreateVideoFromPngList(List pngEncoders, string outputPath) + public static async Task CreateVideoFromPngList(List pngEncoders, string outputPath) { string tempDirectory = Path.Combine(System.Environment.CurrentDirectory, "PngFrames"); Directory.CreateDirectory(tempDirectory); diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs index a6052b7..9b96816 100644 --- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs +++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs @@ -174,7 +174,7 @@ public class ViewportHelperPro List pngList = await generationTask; - VideoHelper.CreateVideoFromPngList(pngList, filePath); + await VideoHelper.CreateVideoFromPngList(pngList, filePath); } /// diff --git a/Views/UserControl/ViewportData/ViewportData.cs b/Views/UserControl/ViewportData/ViewportData.cs index 5c1fa6e..a7e2e53 100644 --- a/Views/UserControl/ViewportData/ViewportData.cs +++ b/Views/UserControl/ViewportData/ViewportData.cs @@ -130,6 +130,7 @@ public class ViewportData facetsFinal.Add(item); } + ViewportManager.ViewportTriangle.Clear(); ViewportManager.ViewportTriangle.AddRange(facetsFinal); // ViewportManager.LoadModelByEntities(facetsFinal); }