fix: 789 不含自动评估时间

master
tongg 5 months ago
parent caac05598b
commit 47d2ab2535
  1. 5
      App.config
  2. 1
      Model/Services/AlgorithmServer.cs
  3. 6
      SparkClient.csproj
  4. 13
      SparkClient.sln.DotSettings.user
  5. 426
      ViewModel/Grading/DiamondSelectVM.cs
  6. 270
      ViewModel/Grading/GradingLoadingVM.cs
  7. 16
      Views/BaseWindow/BaseControl.xaml.cs
  8. 6
      Views/Grading/GradingLoading.xaml
  9. 148
      Views/UserControl/ViewportData/Helper/RayHelper.cs

@ -2,7 +2,7 @@
<configuration> <configuration>
<appSettings> <appSettings>
<!-- 切工仪URL --> <!-- 切工仪URL -->
<add key="BaseUrl" value="http://192.168.10.111:5000/api/SoC"/> <add key="BaseUrl" value="http://192.168.2.168:5000/api/SoC"/>
<!-- <add key="BaseUrl" value="http://192.168.3.100:8080"/> --> <!-- <add key="BaseUrl" value="http://192.168.3.100:8080"/> -->
<!-- SOC下载图片目录 --> <!-- SOC下载图片目录 -->
<add key="ImageFileBasePath" value="D:\diamond_images"/> <add key="ImageFileBasePath" value="D:\diamond_images"/>
@ -18,7 +18,8 @@
<add key="DSSet" value="NA"/> <add key="DSSet" value="NA"/>
<!-- 检测预估耗时:毫秒 --> <!-- 检测预估耗时:毫秒 -->
<add key="ProgressTime" value="50000"/> <add key="ProgressTime" value="50000"/>
<add key="RunModel" value="999" />
</appSettings> </appSettings>
<connectionStrings> <connectionStrings>
<add name="" connectionString=""/> <add name="" connectionString=""/>

@ -39,6 +39,7 @@ namespace SparkClient.Model.Services
bool half_circle = boolResult; bool half_circle = boolResult;
//算法配置参数,初始化算法配置数据并获取 AlgorithmConfigJson //算法配置参数,初始化算法配置数据并获取 AlgorithmConfigJson
_algorithmConfigVM.InitAlgorithmData(null); _algorithmConfigVM.InitAlgorithmData(null);
string algo_config = _algorithmConfigVM.AlgorithmConfigJson; string algo_config = _algorithmConfigVM.AlgorithmConfigJson;

@ -274,4 +274,10 @@
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="SparkDotNetCore">
<HintPath>bin\Debug\net8.0-windows\SparkDotNetCore.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

@ -1,9 +1,12 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=F_003A_005CWorkSpace_005CRider_005CSparkClient_005Cbin_005CDebug_005Cnet8_002E0_002Dwindows_005CSparkDotNetCore_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncStreamReader_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4a26a752ec6249c4a090905d31c0cdfa528a0_003F4d_003Fa3eda23d_003FAsyncStreamReader_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncStreamReader_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4a26a752ec6249c4a090905d31c0cdfa528a0_003F4d_003Fa3eda23d_003FAsyncStreamReader_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncStreamReader_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F5657934e169f1e03f1713934a999de82e80b02c892c78df9913e46e2e681e_003FAsyncStreamReader_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncStreamReader_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F5657934e169f1e03f1713934a999de82e80b02c892c78df9913e46e2e681e_003FAsyncStreamReader_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncTaskMethodBuilder_00601_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F93_003F031cf753_003FAsyncTaskMethodBuilder_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncTaskMethodBuilder_00601_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F93_003F031cf753_003FAsyncTaskMethodBuilder_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncTaskMethodBuilder_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F243a037ca7a04510a506adfdd94befbac90930_003F84_003F376f943b_003FAsyncTaskMethodBuilder_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncVoidMethodBuilder_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F18_003Feb00c5a4_003FAsyncVoidMethodBuilder_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAsyncVoidMethodBuilder_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F18_003Feb00c5a4_003FAsyncVoidMethodBuilder_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABaseUriHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fbfd90ad81939493b96034353abcd1045825908_003Fdc_003Fff55e936_003FBaseUriHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABaseUriHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fbfd90ad81939493b96034353abcd1045825908_003Fdc_003Fff55e936_003FBaseUriHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABitmapDecoder_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F07bfb99174b741c3b7fe42eda0be362a825938_003Ff4_003F7111d5e4_003FBitmapDecoder_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABrushes_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F96a561fe76144633acef44f09d0dcb8a825920_003F7e_003F126cf976_003FBrushes_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABrushes_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F96a561fe76144633acef44f09d0dcb8a825920_003F7e_003F126cf976_003FBrushes_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AButtonBase_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003Ffb_003F3185652c_003FButtonBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AButtonBase_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003Ffb_003F3185652c_003FButtonBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AButtonBase_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003Ffb_003F3185652c_003FButtonBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AButtonBase_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003Ffb_003F3185652c_003FButtonBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@ -20,7 +23,9 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADependencyObject_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Fca_003F09e9dbc0_003FDependencyObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADependencyObject_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Fca_003F09e9dbc0_003FDependencyObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F387238ef9c8f8c6b1dccf4dcba4eed0e459454919b2e4b9cad11a5071789df_003FDictionary_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F387238ef9c8f8c6b1dccf4dcba4eed0e459454919b2e4b9cad11a5071789df_003FDictionary_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcherOperation_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Fd8_003F13c94a2a_003FDispatcherOperation_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcherOperation_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Fd8_003F13c94a2a_003FDispatcherOperation_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcherOperation_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F09fbc1bf68d246cebb5d616191a1b5b5226918_003Fe0_003F8d2a4875_003FDispatcherOperation_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcherOperation_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Fd8_003F13c94a2a_003FDispatcherOperation_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcherOperation_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Fd8_003F13c94a2a_003FDispatcherOperation_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcher_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F09fbc1bf68d246cebb5d616191a1b5b5226918_003Fa2_003F6dbb8418_003FDispatcher_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcher_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Ff6_003F1c45f799_003FDispatcher_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcher_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Ff6_003F1c45f799_003FDispatcher_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcher_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Ff6_003F1c45f799_003FDispatcher_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcher_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F60b63c019ead4a238340b47a1c0010d5226910_003Ff6_003F1c45f799_003FDispatcher_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcher_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F9ac32f819d6853e0a6eda168c52b7f38eef9ae75936fb85d96a15c39d115245_003FDispatcher_002Ecs_002Fz_003A2_002D0/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADispatcher_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F9ac32f819d6853e0a6eda168c52b7f38eef9ae75936fb85d96a15c39d115245_003FDispatcher_002Ecs_002Fz_003A2_002D0/@EntryIndexedValue">ForceIncluded</s:String>
@ -33,7 +38,9 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fbd1d5c50194fea68ff3559c160230b0ab50f5acf4ce3061bffd6d62958e2182_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fbd1d5c50194fea68ff3559c160230b0ab50f5acf4ce3061bffd6d62958e2182_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8a03fcac5714437e83949a44ecf2e771c90920_003F6e_003F464f2557_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8a03fcac5714437e83949a44ecf2e771c90920_003F6e_003F464f2557_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fbd1d5c50194fea68ff3559c160230b0ab50f5acf4ce3061bffd6d62958e2182_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fbd1d5c50194fea68ff3559c160230b0ab50f5acf4ce3061bffd6d62958e2182_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionWrapper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F09fbc1bf68d246cebb5d616191a1b5b5226918_003F7a_003F4473075a_003FExceptionWrapper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExecutionContext_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F35_003F053c62c1_003FExecutionContext_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExecutionContext_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F35_003F053c62c1_003FExecutionContext_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExecutionContext_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F243a037ca7a04510a506adfdd94befbac90930_003F13_003F371ed1af_003FExecutionContext_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExporter_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F876888135b7d44baac30e9ec038e9f39f200_003F56_003F10f4418e_003FExporter_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExporter_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F876888135b7d44baac30e9ec038e9f39f200_003F56_003F10f4418e_003FExporter_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFileSystem_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4c69bf2d25bb4f2497b2dbd14727a7811308b0_003F9b_003F7ca26691_003FFileSystem_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFileSystem_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4c69bf2d25bb4f2497b2dbd14727a7811308b0_003F9b_003F7ca26691_003FFileSystem_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFile_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F00_003Fb0994fb0_003FFile_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFile_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F00_003Fb0994fb0_003FFile_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@ -63,8 +70,11 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodBaseInvoker_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fd882146b4f265f10bcbec2663fce248db9ffec5fa1aeaf76e32a11ba5eafcd6_003FMethodBaseInvoker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodBaseInvoker_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fd882146b4f265f10bcbec2663fce248db9ffec5fa1aeaf76e32a11ba5eafcd6_003FMethodBaseInvoker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObjExporter_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F68d37d16685244cf9996bf767117a771210200_003Fb5_003F8d39bfb2_003FObjExporter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObjExporter_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F68d37d16685244cf9996bf767117a771210200_003Fb5_003F8d39bfb2_003FObjExporter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APictureBoxSizeMode_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F1f2f0b08d2574f1aa35973d1cd0ae347cef920_003Fb2_003F76f4e66c_003FPictureBoxSizeMode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APictureBoxSizeMode_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F1f2f0b08d2574f1aa35973d1cd0ae347cef920_003Fb2_003F76f4e66c_003FPictureBoxSizeMode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APortableThreadPool_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F243a037ca7a04510a506adfdd94befbac90930_003Fc7_003Fe24f8349_003FPortableThreadPool_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APrintController_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb6416db4533e4255bc43c1cfd556a910175930_003Fd9_003Fccfaf320_003FPrintController_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APrintController_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb6416db4533e4255bc43c1cfd556a910175930_003Fd9_003Fccfaf320_003FPrintController_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APrintDocument_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fd36f5542a36946fd848d7e2cc5ad4b96175928_003Fb9_003F07399a56_003FPrintDocument_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APrintPreviewDialog_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F1f2f0b08d2574f1aa35973d1cd0ae347cef920_003F07_003Fd26ee918_003FPrintPreviewDialog_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APrintPreviewDialog_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F1f2f0b08d2574f1aa35973d1cd0ae347cef920_003F07_003Fd26ee918_003FPrintPreviewDialog_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AProcess_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fdf65fa90bd99487685aab638b8da0da252928_003F6c_003Fc1aa1dce_003FProcess_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APropertyChangedEventArgs_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4a37508f5f72412da47f18c02ce8145313928_003F27_003F53f616d3_003FPropertyChangedEventArgs_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APropertyChangedEventArgs_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4a37508f5f72412da47f18c02ce8145313928_003F27_003F53f616d3_003FPropertyChangedEventArgs_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AResizeMode_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003F5d_003Fbab92bb0_003FResizeMode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AResizeMode_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003F5d_003Fbab92bb0_003FResizeMode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARougamoPool_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe6791e39471d4d42a4a2478530abe7195a00_003F5e_003Fc0560022_003FRougamoPool_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARougamoPool_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe6791e39471d4d42a4a2478530abe7195a00_003F5e_003Fc0560022_003FRougamoPool_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@ -80,8 +90,10 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATask_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F72_003F6381d5d3_003FTask_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATask_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F72_003F6381d5d3_003FTask_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATask_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003Fc7_003F4331ea58_003FTask_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATask_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003Fc7_003F4331ea58_003FTask_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATextInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F68d37d16685244cf9996bf767117a771210200_003F3a_003Ff14dd285_003FTextInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATextInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F68d37d16685244cf9996bf767117a771210200_003F3a_003Ff14dd285_003FTextInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThreadPoolWorkQueue_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F243a037ca7a04510a506adfdd94befbac90930_003F64_003F7f8a3e7c_003FThreadPoolWorkQueue_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fcca5cfb955e146648d91eb22ffe4627a84930_003F7a_003F2d86be72_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fcca5cfb955e146648d91eb22ffe4627a84930_003F7a_003F2d86be72_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fc7da56581ee7b20208f09e80b735961e4d5d7b9e5562bfdec94a75c57b391_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fc7da56581ee7b20208f09e80b735961e4d5d7b9e5562bfdec94a75c57b391_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F243a037ca7a04510a506adfdd94befbac90930_003F46_003Ff8b18c4b_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fcca5cfb955e146648d91eb22ffe4627a84930_003F7a_003F2d86be72_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fcca5cfb955e146648d91eb22ffe4627a84930_003F7a_003F2d86be72_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fdad8a84eb59b44ebb2ed26202283a85984920_003F4b_003F3f166652_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fdad8a84eb59b44ebb2ed26202283a85984920_003F4b_003F3f166652_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F2c8e7ca976f350cba9836d5565dac56b11e0b56656fa786460eb1395857a6fa_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F2c8e7ca976f350cba9836d5565dac56b11e0b56656fa786460eb1395857a6fa_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@ -93,6 +105,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUndoStack_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F85eb3e3af2ef415e8072243864dec55a97e00_003F18_003F3f9ef08f_003FUndoStack_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUndoStack_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F85eb3e3af2ef415e8072243864dec55a97e00_003F18_003F3f9ef08f_003FUndoStack_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUnsafeNativeMethodsCLR_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F2e8b8aa5d488ba9b46d9ca2a747d6895994b3519f2f231f4e3d1af87b86320_003FUnsafeNativeMethodsCLR_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUnsafeNativeMethodsCLR_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F2e8b8aa5d488ba9b46d9ca2a747d6895994b3519f2f231f4e3d1af87b86320_003FUnsafeNativeMethodsCLR_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUnwrapPromise_00601_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F9d_003F0ea6b8e2_003FUnwrapPromise_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUnwrapPromise_00601_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F211e6f3b24fa438a92f1815153647ce2c8f908_003F9d_003F0ea6b8e2_003FUnwrapPromise_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUri_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F71da7403ef224ae98be9940699b0fcce3f938_003Fc9_003Fbf936118_003FUri_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector3_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc45597e5b7ab42d99b3882b94d97e64034a00_003F78_003F89f75558_003FVector3_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector3_002Ecs_002Fl_003AC_0021_003FUsers_003Ftongg_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc45597e5b7ab42d99b3882b94d97e64034a00_003F78_003F89f75558_003FVector3_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AWindowChromeWorker_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003Ff9_003F2f1adeba_003FWindowChromeWorker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AWindowChromeWorker_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F6412d4331611499aab4eb63809a2a83bf60910_003Ff9_003F2f1adeba_003FWindowChromeWorker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AWindow_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fd0db11e55b76dc7f234163f6cee32b297b8ddb591fb0b5cbad1b46ed17343e18_003FWindow_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AWindow_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fd0db11e55b76dc7f234163f6cee32b297b8ddb591fb0b5cbad1b46ed17343e18_003FWindow_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

@ -145,204 +145,250 @@ public class DiamondSelectVM : BaseViewModel
DiamondCode = ""; DiamondCode = "";
} }
var loadingView = new GradingLoadingVM(param.ToString(), DiamondCode); string runModel = ConfigurationHelper.ReadConfigValue("RunModel")??"1";
BaseControlVM vm = new BaseControlVM(loadingView, MultilingualHelper.getString("DetectionResult"));
vm.WindowTitle = string.IsNullOrWhiteSpace(DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {DiamondCode}";
WindowManager.mainViewModel.Content = vm;
WindowManager.openContent.Add(vm);
int res = await loadingView.Start();
if (res < 0) if("0".Equals(runModel))
//json模式
DoStartGrading(param);
else if ("1".Equals(runModel))
{ {
//返回 //Image模式
loadingView.Dispose(); var loadingView = new GradingLoadingVM(param.ToString(), DiamondCode);
WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); BaseControlVM vm = new BaseControlVM(loadingView, MultilingualHelper.getString("wait"));
; vm.WindowTitle = string.IsNullOrWhiteSpace(DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {DiamondCode}";
return; WindowManager.mainViewModel.Content = vm;
WindowManager.openContent.Add(vm);
int res = await loadingView.Start(1);
if (res > -100 && res < 0)
{
//返回
loadingView.Dispose();
WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
;
return;
}
else if ( res <= -100)
{
return;
}
else
{
GradingResult(loadingView.Parameter);
loadingView.Dispose();
}
} }
else else
{ {
//获取结果,下一步 //正常模式
} var loadingView = new GradingLoadingVM(param.ToString(), DiamondCode);
#if DEBUG BaseControlVM vm = new BaseControlVM(loadingView, MultilingualHelper.getString("wait"));
//DoStartGrading(param); vm.WindowTitle = string.IsNullOrWhiteSpace(DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {DiamondCode}";
//#else WindowManager.mainViewModel.Content = vm;
LoadingDialog loading = new LoadingDialog(DiamondCode); WindowManager.openContent.Add(vm);
try
{ int res = await loadingView.Start();
if (param != null)
{
string progTime = ConfigurationHelper.ReadConfigValue("ProgressTime");
int iProgTime = 50000;
int.TryParse(progTime, out iProgTime);
int setpTime = iProgTime / 97;
var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => loading.ShowDialog()));
await Task.Run(async () =>
{
bool isEnd = false;
int progress = 0;
// 更新进度条的值(需要在UI线程上执行)
loading.Dispatcher.Invoke(async () =>
{
for (int i = 0; i <= 97; i++)
{
if (isEnd)
{
break;
}
// 模拟耗时操作
//System.Threading.Thread.Sleep(50); // 休眠50毫秒
await Task.Delay(setpTime);
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)
{
parameter.Shape = value.Split(" ")[0];
parameter.CrownType = value.Split(" ")[1];
parameter.PavType = value.Split(" ")[2];
}
// 初始化SOC客户端服务,传入SOC端的地址和认证Token
_socClientService = new SOCClientService();
// 启动soc
socResolt = await _socClientService.ProcessImageCollectionAsync();
switch (socResolt.Status)
{
case StatusCodes.OpenOfTheHatch:
ShowErrorMessage(MultilingualHelper.getString("OpenOfTheHatch"), loading);
return;
case StatusCodes.DeviceNotFound:
ShowErrorMessage(MultilingualHelper.getString("DeviceNotFound"), loading);
return;
case StatusCodes.InProgress:
ShowErrorMessage(MultilingualHelper.getString("InProgress"), loading);
return;
case StatusCodes.CacheCleared:
ShowErrorMessage(MultilingualHelper.getString("CacheCleared"), loading);
return;
case StatusCodes.CannotSendCommand:
ShowErrorMessage(MultilingualHelper.getString("CannotSendCommand"), loading);
return;
case StatusCodes.MicrocontrollerTimeout:
ShowErrorMessage(MultilingualHelper.getString("MicrocontrollerTimeout"), loading);
return;
case StatusCodes.MicrocontrollerError:
ShowErrorMessage(MultilingualHelper.getString("MicrocontrollerError"), loading);
return;
case StatusCodes.CameraNotConnected:
ShowErrorMessage(MultilingualHelper.getString("CameraNotConnected"), loading);
return;
}
_algorithmServer = new AlgorithmServer();
// //图片集合
string image_files = JsonConvert.SerializeObject(socResolt.Images, Formatting.Indented);
// string image_files =$"[ \"image_0.bmp\", \"image_1.bmp\", \"image_2.bmp\", \"image_3.bmp\", \"image_4.bmp\", \"image_5.bmp\", \"image_6.bmp\", \"image_7.bmp\", \"image_8.bmp\", \"image_9.bmp\", \"image_10.bmp\", \"image_11.bmp\", \"image_12.bmp\", \"image_13.bmp\", \"image_14.bmp\", \"image_15.bmp\", \"image_16.bmp\", \"image_17.bmp\", \"image_18.bmp\", \"image_19.bmp\", \"image_20.bmp\", \"image_21.bmp\", \"image_22.bmp\", \"image_23.bmp\", \"image_24.bmp\", \"image_25.bmp\", \"image_26.bmp\", \"image_27.bmp\", \"image_28.bmp\", \"image_29.bmp\", \"image_30.bmp\", \"image_31.bmp\", \"image_32.bmp\", \"image_33.bmp\", \"image_34.bmp\", \"image_35.bmp\", \"image_36.bmp\", \"image_37.bmp\", \"image_38.bmp\", \"image_39.bmp\", \"image_40.bmp\", \"image_41.bmp\", \"image_42.bmp\", \"image_43.bmp\", \"image_44.bmp\", \"image_45.bmp\", \"image_46.bmp\", \"image_47.bmp\", \"image_48.bmp\", \"image_49.bmp\", \"image_50.bmp\", \"image_51.bmp\", \"image_52.bmp\", \"image_53.bmp\", \"image_54.bmp\", \"image_55.bmp\", \"image_56.bmp\", \"image_57.bmp\", \"image_58.bmp\", \"image_59.bmp\", \"image_60.bmp\", \"image_61.bmp\", \"image_62.bmp\", \"image_63.bmp\", \"image_64.bmp\", \"image_65.bmp\", \"image_66.bmp\", \"image_67.bmp\", \"image_68.bmp\", \"image_69.bmp\", \"image_70.bmp\", \"image_71.bmp\", \"image_72.bmp\", \"image_73.bmp\", \"image_74.bmp\", \"image_75.bmp\", \"image_76.bmp\", \"image_77.bmp\", \"image_78.bmp\", \"image_79.bmp\", \"image_80.bmp\", \"image_81.bmp\", \"image_82.bmp\", \"image_83.bmp\", \"image_84.bmp\", \"image_85.bmp\", \"image_86.bmp\", \"image_87.bmp\", \"image_88.bmp\", \"image_89.bmp\", \"image_90.bmp\", \"image_91.bmp\", \"image_92.bmp\", \"image_93.bmp\", \"image_94.bmp\", \"image_95.bmp\", \"image_96.bmp\", \"image_97.bmp\", \"image_98.bmp\", \"image_99.bmp\"]" ;
// 保存图片到历史记录文件夹
HandleAlgorithmFailure(image_files, DiamondCode);
// 启动算法
parameter = _algorithmServer.CallParseJsonAndReturnActions(parameter.Shape, parameter.CrownType, image_files);
//机器号
parameter.DeviceId = socResolt.DeviceId;
switch (parameter.status)
{
case StatusCodes.AlgorithmFailed:
ShowErrorMessage(MultilingualHelper.getString("AlgorithmFailed"), loading);
return;
case StatusCodes.ImageFileReadFailure:
ShowErrorMessage(MultilingualHelper.getString("ImageFileReadFailure"), loading);
return;
case StatusCodes.JsonParseFailure:
ShowErrorMessage(MultilingualHelper.getString("JsonParseFailure"), loading);
return;
case StatusCodes.NoDiamond:
ShowErrorMessage(MultilingualHelper.getString("NoDiamond"), loading);
return;
}
parameter.Standard = getStandardName();
parameter.Shape = value.Split(" ")[0];
parameter.CrownType = value.Split(" ")[1];
parameter.PavType = value.Split(" ")[2];
parameter.DiamondCode = DiamondCode;
if (!parameter.status.Equals(StatusCodes.Ok))
parameter.error_msg = MultilingualHelper.getString(StatusCodes.GetConstantNameByValue(parameter.status));
//参数实体转json输出
try
{
string parameterJson = JsonConvert.SerializeObject(parameter);
parameterJson = JToken.Parse(parameterJson).ToString();
string outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs", "result");
if (!Directory.Exists(outputPath))
Directory.CreateDirectory(outputPath);
string outputFilePath = $"{outputPath}/{DiamondCode}-{DateTime.Now:yyyyMMdd_HHmmss}.json";
using (var file = File.Create(outputFilePath))
using (StreamWriter stream = new StreamWriter(file))
{
stream.Write(parameterJson);
}
}
catch (Exception ex)
{
Logger.Error("output输出失败:"+ex.Message);
}
isEnd = true; if (res > -100 && res < 0)
//GradingResult(parameter); {
await loading.Dispatcher.Invoke(async () => //返回
{ loadingView.Dispose();
for (int i = progress; progress <= 100; i++) WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
{ ;
Random random = new Random(); int minValue = 20; int maxValue = 100; // 生成50到150之间的随机整数 return;
int randomNumber = random.Next(minValue, maxValue + 1); }
await Task.Delay(randomNumber); else if ( res <= -100)
loading.setValue(i); {
if (loading.ProgressBar.Value == 98) return;
{ }
GradingResult(parameter); else
} {
if(loading.ProgressBar.Value >= 100) GradingResult(loadingView.Parameter);
{ loadingView.Dispose();
loading.Close();
break;
}
}
// 检测到钻石需进行清洁
if (parameter.status == StatusCodes.Recheck)
{
ShowErrorMessage(MultilingualHelper.getString("Recheck"), loading);
}
});
});
} }
} }
catch (DirectoryNotFoundException ex)
{
loading.Close();
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
} /**
catch (IOException ex)
{ LoadingDialog loading = new LoadingDialog(DiamondCode);
loading.Close(); try
new MessageBox().Show($"{MultilingualHelper.getString("FileOpened")}:{ex.Message}"); {
} if (param != null)
finally { {
string progTime = ConfigurationHelper.ReadConfigValue("ProgressTime");
}
#endif int iProgTime = 50000;
int.TryParse(progTime, out iProgTime);
int setpTime = iProgTime / 97;
var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => loading.ShowDialog()));
await Task.Run(async () =>
{
bool isEnd = false;
int progress = 0;
// 更新进度条的值(需要在UI线程上执行)
loading.Dispatcher.Invoke(async () =>
{
for (int i = 0; i <= 97; i++)
{
if (isEnd)
{
break;
}
// 模拟耗时操作
//System.Threading.Thread.Sleep(50); // 休眠50毫秒
await Task.Delay(setpTime);
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)
{
parameter.Shape = value.Split(" ")[0];
parameter.CrownType = value.Split(" ")[1];
parameter.PavType = value.Split(" ")[2];
}
// 初始化SOC客户端服务,传入SOC端的地址和认证Token
_socClientService = new SOCClientService();
// 启动soc
socResolt = await _socClientService.ProcessImageCollectionAsync();
switch (socResolt.Status)
{
case StatusCodes.OpenOfTheHatch:
ShowErrorMessage(MultilingualHelper.getString("OpenOfTheHatch"), loading);
return;
case StatusCodes.DeviceNotFound:
ShowErrorMessage(MultilingualHelper.getString("DeviceNotFound"), loading);
return;
case StatusCodes.InProgress:
ShowErrorMessage(MultilingualHelper.getString("InProgress"), loading);
return;
case StatusCodes.CacheCleared:
ShowErrorMessage(MultilingualHelper.getString("CacheCleared"), loading);
return;
case StatusCodes.CannotSendCommand:
ShowErrorMessage(MultilingualHelper.getString("CannotSendCommand"), loading);
return;
case StatusCodes.MicrocontrollerTimeout:
ShowErrorMessage(MultilingualHelper.getString("MicrocontrollerTimeout"), loading);
return;
case StatusCodes.MicrocontrollerError:
ShowErrorMessage(MultilingualHelper.getString("MicrocontrollerError"), loading);
return;
case StatusCodes.CameraNotConnected:
ShowErrorMessage(MultilingualHelper.getString("CameraNotConnected"), loading);
return;
}
_algorithmServer = new AlgorithmServer();
// //图片集合
string image_files = JsonConvert.SerializeObject(socResolt.Images, Formatting.Indented);
// string image_files =$"[ \"image_0.bmp\", \"image_1.bmp\", \"image_2.bmp\", \"image_3.bmp\", \"image_4.bmp\", \"image_5.bmp\", \"image_6.bmp\", \"image_7.bmp\", \"image_8.bmp\", \"image_9.bmp\", \"image_10.bmp\", \"image_11.bmp\", \"image_12.bmp\", \"image_13.bmp\", \"image_14.bmp\", \"image_15.bmp\", \"image_16.bmp\", \"image_17.bmp\", \"image_18.bmp\", \"image_19.bmp\", \"image_20.bmp\", \"image_21.bmp\", \"image_22.bmp\", \"image_23.bmp\", \"image_24.bmp\", \"image_25.bmp\", \"image_26.bmp\", \"image_27.bmp\", \"image_28.bmp\", \"image_29.bmp\", \"image_30.bmp\", \"image_31.bmp\", \"image_32.bmp\", \"image_33.bmp\", \"image_34.bmp\", \"image_35.bmp\", \"image_36.bmp\", \"image_37.bmp\", \"image_38.bmp\", \"image_39.bmp\", \"image_40.bmp\", \"image_41.bmp\", \"image_42.bmp\", \"image_43.bmp\", \"image_44.bmp\", \"image_45.bmp\", \"image_46.bmp\", \"image_47.bmp\", \"image_48.bmp\", \"image_49.bmp\", \"image_50.bmp\", \"image_51.bmp\", \"image_52.bmp\", \"image_53.bmp\", \"image_54.bmp\", \"image_55.bmp\", \"image_56.bmp\", \"image_57.bmp\", \"image_58.bmp\", \"image_59.bmp\", \"image_60.bmp\", \"image_61.bmp\", \"image_62.bmp\", \"image_63.bmp\", \"image_64.bmp\", \"image_65.bmp\", \"image_66.bmp\", \"image_67.bmp\", \"image_68.bmp\", \"image_69.bmp\", \"image_70.bmp\", \"image_71.bmp\", \"image_72.bmp\", \"image_73.bmp\", \"image_74.bmp\", \"image_75.bmp\", \"image_76.bmp\", \"image_77.bmp\", \"image_78.bmp\", \"image_79.bmp\", \"image_80.bmp\", \"image_81.bmp\", \"image_82.bmp\", \"image_83.bmp\", \"image_84.bmp\", \"image_85.bmp\", \"image_86.bmp\", \"image_87.bmp\", \"image_88.bmp\", \"image_89.bmp\", \"image_90.bmp\", \"image_91.bmp\", \"image_92.bmp\", \"image_93.bmp\", \"image_94.bmp\", \"image_95.bmp\", \"image_96.bmp\", \"image_97.bmp\", \"image_98.bmp\", \"image_99.bmp\"]" ;
// 保存图片到历史记录文件夹
HandleAlgorithmFailure(image_files, DiamondCode);
// 启动算法
parameter = _algorithmServer.CallParseJsonAndReturnActions(parameter.Shape, parameter.CrownType, image_files);
//机器号
parameter.DeviceId = socResolt.DeviceId;
switch (parameter.status)
{
case StatusCodes.AlgorithmFailed:
ShowErrorMessage(MultilingualHelper.getString("AlgorithmFailed"), loading);
return;
case StatusCodes.ImageFileReadFailure:
ShowErrorMessage(MultilingualHelper.getString("ImageFileReadFailure"), loading);
return;
case StatusCodes.JsonParseFailure:
ShowErrorMessage(MultilingualHelper.getString("JsonParseFailure"), loading);
return;
case StatusCodes.NoDiamond:
ShowErrorMessage(MultilingualHelper.getString("NoDiamond"), loading);
return;
}
parameter.Standard = getStandardName();
parameter.Shape = value.Split(" ")[0];
parameter.CrownType = value.Split(" ")[1];
parameter.PavType = value.Split(" ")[2];
parameter.DiamondCode = DiamondCode;
if (!parameter.status.Equals(StatusCodes.Ok))
parameter.error_msg = MultilingualHelper.getString(StatusCodes.GetConstantNameByValue(parameter.status));
//参数实体转json输出
try
{
string parameterJson = JsonConvert.SerializeObject(parameter);
parameterJson = JToken.Parse(parameterJson).ToString();
string outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs", "result");
if (!Directory.Exists(outputPath))
Directory.CreateDirectory(outputPath);
string outputFilePath = $"{outputPath}/{DiamondCode}-{DateTime.Now:yyyyMMdd_HHmmss}.json";
using (var file = File.Create(outputFilePath))
using (StreamWriter stream = new StreamWriter(file))
{
stream.Write(parameterJson);
}
}
catch (Exception ex)
{
Logger.Error("output输出失败:"+ex.Message);
}
isEnd = true;
//GradingResult(parameter);
await loading.Dispatcher.Invoke(async () =>
{
for (int i = progress; progress <= 100; i++)
{
Random random = new Random(); int minValue = 20; int maxValue = 100; // 生成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;
}
}
// 检测到钻石需进行清洁
if (parameter.status == StatusCodes.Recheck)
{
ShowErrorMessage(MultilingualHelper.getString("Recheck"), loading);
}
});
});
}
}
catch (DirectoryNotFoundException ex)
{
loading.Close();
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
}
catch (IOException ex)
{
loading.Close();
new MessageBox().Show($"{MultilingualHelper.getString("FileOpened")}:{ex.Message}");
}
finally {
}
**/
} }
[Log] [Log]

@ -1,11 +1,21 @@
using System.Configuration;
using System.Data;
using System.IO; using System.IO;
using System.Windows;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SparkClient.Model.Common; using SparkClient.Model.Common;
using SparkClient.Model.Entity.ApiEntity;
using SparkClient.Model.Helper; using SparkClient.Model.Helper;
using SparkClient.Model.Services; using SparkClient.Model.Services;
using SparkClient.Views.Dialog; using SparkClient.ViewModel.BaseWindow;
using SparkClient.ViewModel.Configuration;
using SparkDotNetCore.DiamondScanner;
using SparkDotNetCore.DiamondScanner.Entity;
using MessageBox = SparkClient.Views.Dialog.MessageBox;
namespace SparkClient.ViewModel.Grading; namespace SparkClient.ViewModel.Grading;
@ -13,7 +23,7 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
{ {
private double _progress; private double _progress;
private SOCClientService _socClientService; private SOCClientService _socClientService;
public AlgorithmResultEntity Parameter;
/// <summary> /// <summary>
/// 进度 /// 进度
/// </summary> /// </summary>
@ -38,6 +48,10 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
private CancellationTokenSource _progressCts; private CancellationTokenSource _progressCts;
private CancellationTokenSource? _playbackCts; private CancellationTokenSource? _playbackCts;
private Diamond _diamond;
private Scanner _scanner;
private CancellationTokenSource _completionCts;
#region 图片播放控制 #region 图片播放控制
private PlayStatus _currentStatus = PlayStatus.Stopped; private PlayStatus _currentStatus = PlayStatus.Stopped;
public PlayStatus CurrentStatus public PlayStatus CurrentStatus
@ -57,7 +71,7 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
_ => "重播" // Stopped 状态 _ => "重播" // Stopped 状态
}; };
private CancellationTokenSource _cts; private CancellationTokenSource _cts;
private int _playDelay = 200; // 默认播放速度 private int _playDelay = 100; // 默认播放速度
public ICommand PlayControlCommand { get; } public ICommand PlayControlCommand { get; }
public ICommand PreviousCommand { get; } public ICommand PreviousCommand { get; }
@ -76,10 +90,27 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
} }
public string[] ImagePaths { get; set; } public string[] ImagePaths { get; set; }
public ImageSource CurrentImage { get; private set; } private ImageSource _currentImage;
public ImageSource CurrentImage
public bool ImageIsEnable { get; private set; } {
get => _currentImage;
private set
{
_currentImage = value;
OnPropertyChanged(nameof(CurrentImage));
}
}
private bool _imageIsEnable;
public bool ImageIsEnable
{
get => _imageIsEnable;
private set
{
_imageIsEnable = value;
OnPropertyChanged(nameof(ImageIsEnable)); // 触发通知
}
}
#endregion #endregion
public GradingLoadingVM(string diamnondType, string diamondCode) public GradingLoadingVM(string diamnondType, string diamondCode)
@ -94,52 +125,213 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
_progressCts = new CancellationTokenSource(); _progressCts = new CancellationTokenSource();
_playbackCts = new CancellationTokenSource(); _playbackCts = new CancellationTokenSource();
_completionCts = new CancellationTokenSource();
} }
/// <summary> /// <summary>
/// 开始检测 /// 开始检测
/// </summary> /// </summary>
public async Task<int> Start() public async Task<int> Start(int type = 0)
{ {
//开始显示进度条
//切工仪通讯 拉取图片 延时...5秒 try
//播放图片
//图片拉取完毕---|
// var configValue = ConfigurationHelper.ReadConfigValue("ProgressTime");
// int iProgTime = int.TryParse(configValue, out var result) ? result : 50000;
// int stepTime = iProgTime / 97;
//
// for (int i = 0; i <= 97; i++)
// {
// _progressCts.Token.ThrowIfCancellationRequested();
// Progress = i;
// await Task.Delay(stepTime, _progressCts.Token);
// }
var progress = RunProgressAsync(_progressCts.Token);
_socClientService = new SOCClientService();
var processImage = _socClientService.ProcessImageCollectionAsync();
//通知页面可以播放图片
await processImage;
if (!"ok".Equals(processImage.Result.Status))
{ {
_progressCts.Cancel();
new MessageBox().Show(MultilingualHelper.getString(StatusCodes.GetConstantNameByValue(processImage.Result.Status))); var progress = RunProgressAsync(_progressCts.Token);
return -1; if(type == 0){
_socClientService = new SOCClientService();
var processImage = _socClientService.ProcessImageCollectionAsync();
//通知页面可以播放图片
await processImage;
if (!("ok".Equals(processImage.Result.Status) || "S000".Equals(processImage.Result.Status)))
{
_progressCts.Cancel();
new MessageBox().Show(
MultilingualHelper.getString(StatusCodes.GetConstantNameByValue(processImage.Result.Status)));
return -1;
}
LoadImages(processImage.Result.Images);
}
if (type == 1)
{
List<string> mnFiles = new List<string>();
for (int i = 0; i < 100; i++)
{
mnFiles.Add($"{i}.bmp");
}
LoadImages(mnFiles);
}
ImageIsEnable = true;
StartPlayback();
Diamond diamond = new Diamond();
string circleSql = $"SELECT VALUE FROM CUTTER_CONFIG WHERE KEY = 'half_circle'";
DataTable circleTable = DataBaseHelper.ExecuteQuery(circleSql);
object halfCircleValue = circleTable.Rows[0][0];
bool.TryParse(halfCircleValue.ToString(), out bool boolResult);
bool half_circle = boolResult;
//算法配置参数,初始化算法配置数据并获取 AlgorithmConfigJson
var _algorithmConfigVM = new AlgorithmConfigVM();
_algorithmConfigVM.InitAlgorithmData(null);
string algo_config = _algorithmConfigVM.AlgorithmConfigJson;
//图片根目录
string? image_file_base_path = ConfigurationManager.AppSettings["ImageFileBasePath"];
if (string.IsNullOrEmpty(image_file_base_path))
{
throw new InvalidOperationException("ImageFileBasePath is not configured in AppSettings.");
}
// 获取 log4net 日志文件所在的目录
string? log4NetLogDirectory =
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
// 构建C++ DLL 日志文件路径
string algorithm_log_path = Path.Combine(log4NetLogDirectory, "logs");
// 将所有变量拼接成一个 JSON 对象
JObject jsonData = new JObject(
new JProperty("shape", _diamnondType.Split(" ")[0]),
new JProperty("shape_mode", _diamnondType.Split(" ")[1]),
new JProperty("image_file_base_path", image_file_base_path),
new JProperty("image_files", ImagePaths),
new JProperty("half_circle", half_circle),
new JProperty("algorithm_log_path", algorithm_log_path),
new JProperty("algo_config", JObject.Parse(algo_config))
);
_scanner = new Scanner(diamond);
var detectTask = _scanner.DetectAsyncByJsonStr(jsonData.ToString());
await detectTask;
if (detectTask.Status == TaskStatus.RanToCompletion)
{
return ReslutGen(detectTask);
}
await progress;
return ReslutGen(detectTask);
}
catch(Exception ex)
{
return -100;
} }
}
private int ReslutGen(Task<DiaResult> detectTask)
{
CompleteProgressQuicklyAsync();
LoadImages(processImage.Result.Images); switch (detectTask.Result.Status)
ImageIsEnable = true; {
case StatusCodes.AlgorithmFailed:
new MessageBox().Show(MultilingualHelper.getString("AlgorithmFailed"));
return -1;
case StatusCodes.ImageFileReadFailure:
new MessageBox().Show(MultilingualHelper.getString("ImageFileReadFailure"));
return -1;
case StatusCodes.JsonParseFailure:
new MessageBox().Show(MultilingualHelper.getString("JsonParseFailure"));
return -1;
case StatusCodes.NoDiamond:
new MessageBox().Show(MultilingualHelper.getString("NoDiamond"));
return -1;
}
Progress = 100;
await progress; string strParam = JsonConvert.SerializeObject(detectTask.Result);
return 0; AlgorithmResultEntity parameter = JsonConvert.DeserializeObject<AlgorithmResultEntity>(strParam);
if (parameter == null)
{
new MessageBox().Show(MultilingualHelper.getString("JsonParseFailure"));
return -1;
}
try
{
string parameterJson = JsonConvert.SerializeObject(parameter);
parameterJson = JToken.Parse(parameterJson).ToString();
string outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs", "result");
if (!Directory.Exists(outputPath))
Directory.CreateDirectory(outputPath);
string outputFilePath = $"{outputPath}/{_diamondCode}-{DateTime.Now:yyyyMMdd_HHmmss}.json";
using (var file = File.Create(outputFilePath))
using (StreamWriter stream = new StreamWriter(file))
{
stream.Write(parameterJson);
}
}
catch (Exception ex)
{
Logger.Error("output输出失败:" + ex.Message);
}
Parameter = parameter;
return 0;
}
private async Task CompleteProgressSlowlyAsync()
{
// 缓慢完成剩余3%(总耗时保持原速度的3倍)
const int remainingSteps = 3;
int stepTime = 500; // 自定义慢速步长
int current = (int)Progress;
for (int i = 1; i <= remainingSteps; i++)
{
if (_progressCts.IsCancellationRequested) break;
UpdateProgress(current + i);
await Task.Delay(stepTime);
}
} }
private async Task CompleteProgressQuicklyAsync()
{
// 取消原进度任务
_progressCts.Cancel();
// 快速完成剩余进度(0.5秒内完成)
int current = (int)Progress;
int remaining = 100 - current;
if (remaining <= 0) return;
int stepTime = Math.Max(50, 500 / remaining); // 动态计算步长
while (current < 100)
{
current = Math.Min(current + 1, 100);
UpdateProgress(current);
await Task.Delay(stepTime);
}
}
private void UpdateProgress(int value)
{
// UI线程安全更新
Application.Current.Dispatcher.Invoke(() =>
{
Progress = value;
});
}
private void Stop(object param) private void Stop(object param)
{ {
//询问?停止:忽略 //询问?停止:忽略
MessageBox messageBox = new MessageBox();
MessageBoxResult showAsk = messageBox.ShowAsk("正在计算钻石数据,是否终止?");
if (showAsk == MessageBoxResult.OK)
{
_scanner?.Cancel();
_progressCts.Cancel();
WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
this.Dispose();
}
} }
private async Task RunProgressAsync(CancellationToken token) private async Task RunProgressAsync(CancellationToken token)
@ -263,13 +455,13 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
{ {
if (ImagePaths == null || CurrentIndex < 0 || CurrentIndex >= ImagePaths.Length) if (ImagePaths == null || CurrentIndex < 0 || CurrentIndex >= ImagePaths.Length)
return; return;
string? savePath = ConfigurationManager.AppSettings["ImageFileBasePath"];
var bitmap = new BitmapImage(); var bitmap = new BitmapImage();
bitmap.BeginInit(); bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.UriSource = new Uri(ImagePaths[CurrentIndex]); bitmap.UriSource = new Uri(savePath + @"\" + ImagePaths[CurrentIndex]);
bitmap.EndInit(); bitmap.EndInit();
bitmap.Freeze(); // 确保跨线程安全 bitmap.Freeze(); // 确保跨线程安全#
CurrentImage = bitmap; CurrentImage = bitmap;
OnPropertyChanged(nameof(CurrentImage)); OnPropertyChanged(nameof(CurrentImage));

@ -20,10 +20,20 @@ public partial class BaseControl
FocusManager.SetFocusedElement(this, this); FocusManager.SetFocusedElement(this, this);
Keyboard.Focus(this); Keyboard.Focus(this);
string runModel = ConfigurationHelper.ReadConfigValue("RunModel");
if ("0".Equals(runModel))
//json模式
runModel = " -【Json模式】";
else if ("1".Equals(runModel))
{
runModel = " -【Image模式】";
}
else
{
runModel = string.Empty;
}
#if DEBUG tbTitle.Text = tbTitle.Text + runModel;
tbTitle.Text = tbTitle.Text + " -【测试版】";
#endif
} }
private void Border_Minimize_MouseEnter(object sender, MouseEventArgs e) private void Border_Minimize_MouseEnter(object sender, MouseEventArgs e)

@ -315,7 +315,7 @@
</Border> </Border>
<Border Grid.Row="2" Grid.Column="0" Style="{StaticResource BorderRowStyle}" > <Border Grid.Row="2" Grid.Column="0" Style="{StaticResource BorderRowStyle}" >
<Image x:Name="VideoImage" /> <Image x:Name="VideoImage" Source="{Binding CurrentImage}"/>
</Border> </Border>
<GridSplitter Grid.Row="2" Grid.Column="1" Width="5" HorizontalAlignment="Stretch" Background="Transparent" IsEnabled="False"></GridSplitter> <GridSplitter Grid.Row="2" Grid.Column="1" Width="5" HorizontalAlignment="Stretch" Background="Transparent" IsEnabled="False"></GridSplitter>
@ -336,7 +336,7 @@
<RowDefinition Height="*" /> <RowDefinition Height="*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBox Grid.Row="0" Text="{StaticResource GradingLoading}" BorderBrush="Transparent" BorderThickness="0" <TextBox Grid.Row="0" Text="{StaticResource GradingLoading}" BorderBrush="Transparent" BorderThickness="0"
TextAlignment="Center" FontSize="30"/> TextAlignment="Center" FontSize="30" IsEnabled="False"/>
<ProgressBar Grid.Row="1" Margin="50 0" Height="30" Value="{Binding Progress}" FontSize="24"/> <ProgressBar Grid.Row="1" Margin="50 0" Height="30" Value="{Binding Progress}" FontSize="24"/>
</Grid> </Grid>
@ -355,7 +355,7 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="1" Padding="0" Margin="0" Height="80" BorderThickness="0" <Button Grid.Row="0" Grid.Column="1" Padding="0" Margin="0" Height="80" BorderThickness="0"
Background="Transparent" FocusVisualStyle="{x:Null}" ForceCursor="True"> Background="Transparent" FocusVisualStyle="{x:Null}" ForceCursor="True" Command="{Binding StopCommand}">
<Border <Border
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"

@ -1,6 +1,8 @@
using System.Drawing; using System.Drawing;
using System.Text; using System.Text;
using SparkClient.Model.Helper; using SparkClient.Model.Helper;
using SparkDotNetCore.ArrowAndHeart;
using SparkDotNetCore.ArrowAndHeart.Entity;
namespace SparkClient.Views.UserControl.ViewportData.Helper; namespace SparkClient.Views.UserControl.ViewportData.Helper;
using System; using System;
@ -40,18 +42,22 @@ public class RayHelper
// 3. 导出模型为STL // 3. 导出模型为STL
ObjExporter.ExportToObj2(ViewportManager.ViewportTriangle, fullStlPath + ".obj"); ObjExporter.ExportToObj2(ViewportManager.ViewportTriangle, fullStlPath + ".obj");
// 4. 执行Unity渲染命令两次 // 4. 执行Unity渲染命令两次
ExecuteUnityRendering(fileName, 0); // 渲染心图 string fullObjPath = fullStlPath + ".obj";
ExecuteUnityRendering(fileName, 1); // 渲染箭图 string heartImagePath = _image_path + @"Heart.png";
string arrowImagePath = _image_path + @"Arrow.png";
// 5. 验证图片是否生成 RayTracingInput rayTracingInput = new RayTracingInput {
if (ValidateImages()) Obj = fullObjPath,
{ Arrow = arrowImagePath,
Heart = heartImagePath,
};
DiamondRayTracing diamondRayTracing = new DiamondRayTracing(rayTracingInput);
RayTracingResult result = diamondRayTracing.Render();
if (result!= null && "OK".Equals(result.Status)) {
ShowImages(); ShowImages();
} } else {
else
{
throw new Exception(MultilingualHelper.getString("RayTracingGenError")); throw new Exception(MultilingualHelper.getString("RayTracingGenError"));
} }
} }
private static string GenerateSignature(string modelInfo, string diamondCode) private static string GenerateSignature(string modelInfo, string diamondCode)
@ -69,69 +75,69 @@ public class RayHelper
Directory.CreateDirectory(path); Directory.CreateDirectory(path);
} }
private static void ExportModelsToStl(string path) // private static void ExportModelsToStl(string path)
{ // {
//
ViewportHelperPro.ExportModelsToStl(null, path); // ViewportHelperPro.ExportModelsToStl(null, path);
} // }
private static void ExecuteUnityRendering(string fileName, int type) // private static void ExecuteUnityRendering(string fileName, int type)
{ // {
string arguments = $@"--obj {_obj_path + @"\" + fileName + ".obj"} --output {_image_path}{type}.jpg --mode {type}"; // string arguments = $@"--obj {_obj_path + @"\" + fileName + ".obj"} --output {_image_path}{type}.jpg --mode {type}";
string exePath = Path.Combine(_unity_path, "hart.exe"); // string exePath = Path.Combine(_unity_path, "hart.exe");
//
if (!File.Exists(exePath)) // if (!File.Exists(exePath))
{ // {
throw new FileNotFoundException(MultilingualHelper.getString("RayTracingNoPlugin"), exePath); // throw new FileNotFoundException(MultilingualHelper.getString("RayTracingNoPlugin"), exePath);
} // }
//
using (Process process = new Process()) // using (Process process = new Process())
{ // {
process.StartInfo.FileName = exePath; // process.StartInfo.FileName = exePath;
process.StartInfo.Arguments = arguments; // process.StartInfo.Arguments = arguments;
process.StartInfo.UseShellExecute = false; // process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true; // process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true; // process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true; // process.StartInfo.RedirectStandardError = true;
//
// 使用StringBuilder来捕获输出和错误信息 // // 使用StringBuilder来捕获输出和错误信息
StringBuilder outputBuilder = new StringBuilder(); // StringBuilder outputBuilder = new StringBuilder();
StringBuilder errorBuilder = new StringBuilder(); // StringBuilder errorBuilder = new StringBuilder();
//
process.OutputDataReceived += (sender, e) => // process.OutputDataReceived += (sender, e) =>
{ // {
if (e.Data != null) // if (e.Data != null)
outputBuilder.AppendLine(e.Data); // outputBuilder.AppendLine(e.Data);
}; // };
process.ErrorDataReceived += (sender, e) => // process.ErrorDataReceived += (sender, e) =>
{ // {
if (e.Data != null) // if (e.Data != null)
errorBuilder.AppendLine(e.Data); // errorBuilder.AppendLine(e.Data);
}; // };
//
process.Start(); // process.Start();
//
// 开始异步读取输出和错误流 // // 开始异步读取输出和错误流
process.BeginOutputReadLine(); // process.BeginOutputReadLine();
process.BeginErrorReadLine(); // process.BeginErrorReadLine();
//
process.WaitForExit(); // process.WaitForExit();
//
// 获取完整的输出和错误信息 // // 获取完整的输出和错误信息
string outputMsg = outputBuilder.ToString(); // string outputMsg = outputBuilder.ToString();
string errorMsg = errorBuilder.ToString(); // string errorMsg = errorBuilder.ToString();
errorMsg = string.IsNullOrWhiteSpace(errorMsg)?outputMsg:errorMsg; // errorMsg = string.IsNullOrWhiteSpace(errorMsg)?outputMsg:errorMsg;
if (process.ExitCode != 0) // if (process.ExitCode != 0)
{ // {
throw new Exception($"{MultilingualHelper.getString("RayTracingFail")}{errorMsg}"); // throw new Exception($"{MultilingualHelper.getString("RayTracingFail")}{errorMsg}");
} // }
} // }
} // }
private static bool ValidateImages() private static bool ValidateImages()
{ {
string heartImage = Path.Combine(_image_path, "0.jpg"); string heartImage = Path.Combine(_image_path, @"Heart.png");
string arrowImage = Path.Combine(_image_path, "1.jpg"); string arrowImage = Path.Combine(_image_path, @"Arrow.png");
return File.Exists(heartImage) && File.Exists(arrowImage); return File.Exists(heartImage) && File.Exists(arrowImage);
} }
@ -152,7 +158,7 @@ public class RayHelper
PictureBox heartBox = new PictureBox PictureBox heartBox = new PictureBox
{ {
ImageLocation = Path.Combine(_image_path, "0.jpg"), ImageLocation = Path.Combine(_image_path, "Heart.png"),
SizeMode = PictureBoxSizeMode.Zoom, SizeMode = PictureBoxSizeMode.Zoom,
Dock = DockStyle.Left, Dock = DockStyle.Left,
Width = 400 Width = 400
@ -160,7 +166,7 @@ public class RayHelper
PictureBox arrowBox = new PictureBox PictureBox arrowBox = new PictureBox
{ {
ImageLocation = Path.Combine(_image_path, "1.jpg"), ImageLocation = Path.Combine(_image_path, "Arrow.png"),
SizeMode = PictureBoxSizeMode.Zoom, SizeMode = PictureBoxSizeMode.Zoom,
Dock = DockStyle.Right, Dock = DockStyle.Right,
Width = 400 Width = 400

Loading…
Cancel
Save