feat:进度条修正

master
sunhonglei 7 months ago
parent 2bcd803218
commit cc731cfa89
  1. 10
      Model/Services/AlgorithmServer.cs
  2. 3
      SparkClient.csproj
  3. BIN
      SparkDB.db
  4. 99
      ViewModel/Grading/DiamondSelectVM.cs
  5. 73
      ViewModel/Grading/GradingResultVM.cs
  6. 26
      Views/Dialog/ExportDialog.xaml
  7. 34
      Views/Dialog/ExportDialog.xaml.cs
  8. 2
      Views/UserControl/ViewportData/Helper/VideoHelper.cs
  9. 2
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  10. 1
      Views/UserControl/ViewportData/ViewportData.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);

@ -142,6 +142,9 @@
</ItemGroup>
<ItemGroup>
<Compile Update="Views\Dialog\ExportDialog.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="Views\Dialog\SaveDialog.xaml.cs">
<SubType>Code</SubType>
</Compile>

Binary file not shown.

@ -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
/// <param name="param"></param>
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 {
}
}

@ -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<bool>();
//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;
}

@ -0,0 +1,26 @@
<Window x:Class="SparkClient.Views.Dialog.ExportDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SparkClient.Views.Dialog"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
Title="ExportDialog" Height="450" Width="800"
WindowStyle="None" AllowsTransparency="True" Background="Transparent"
WindowState="Maximized">
<Border Background="#9C7C5E" Opacity="0.8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Text="{DynamicResource wait}" FontFamily="PingFangSC-bold" FontSize="36" VerticalAlignment="Center" Background="Transparent" HorizontalAlignment="Center" Foreground="#FFFFFF"/>
<hc:CircleProgressBar x:Name="ProgressBar" IsIndeterminate="True" Grid.Row="2" />
<TextBlock Grid.Row="3" x:Name="Value" Text="准备开始" HorizontalAlignment="Center" Foreground="#FFFFFF"/>
</Grid>
</Border>
</Window>

@ -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
{
/// <summary>
/// LoadingDialog.xaml 的交互逻辑
/// </summary>
public partial class ExportDialog : Window
{
public ExportDialog()
{
InitializeComponent();
this.MinWidth = 1000;
this.MinHeight = 1000;
}
public void setValue(string content)
{
Value.Text = content;
}
}
}

@ -14,7 +14,7 @@ namespace SparkClient.Views.UserControl.ViewportData.Helper;
public class VideoHelper
{
public static async void CreateVideoFromPngList(List<PngBitmapEncoder> pngEncoders, string outputPath)
public static async Task CreateVideoFromPngList(List<PngBitmapEncoder> pngEncoders, string outputPath)
{
string tempDirectory = Path.Combine(System.Environment.CurrentDirectory, "PngFrames");
Directory.CreateDirectory(tempDirectory);

@ -174,7 +174,7 @@ public class ViewportHelperPro
List<PngBitmapEncoder> pngList = await generationTask;
VideoHelper.CreateVideoFromPngList(pngList, filePath);
await VideoHelper.CreateVideoFromPngList(pngList, filePath);
}
/// <summary>

@ -130,6 +130,7 @@ public class ViewportData
facetsFinal.Add(item);
}
ViewportManager.ViewportTriangle.Clear();
ViewportManager.ViewportTriangle.AddRange(facetsFinal);
// ViewportManager.LoadModelByEntities(facetsFinal);
}

Loading…
Cancel
Save