fix:网格线矫正

master
sunhonglei 5 months ago
parent 6e7946b3aa
commit 21226ffe47
  1. 1
      Language/zh_CN.xaml
  2. 22
      ViewModel/Grading/DiamondSelectVM.cs
  3. 12
      ViewModel/Grading/GradingResultVM.cs
  4. 1
      Views/UserControl/Viewport3D.xaml
  5. 3
      Views/UserControl/Viewport3D.xaml.cs
  6. 10
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  7. 25
      Views/UserControl/ViewportData/Helper/ViewportManager.cs

@ -148,6 +148,7 @@
<sys:String x:Key="ViewportSaveSucceed">保存成功</sys:String> <sys:String x:Key="ViewportSaveSucceed">保存成功</sys:String>
<sys:String x:Key="ViewportSaveFail">保存失败</sys:String> <sys:String x:Key="ViewportSaveFail">保存失败</sys:String>
<sys:String x:Key="ViewportSelectPath">选择路径</sys:String> <sys:String x:Key="ViewportSelectPath">选择路径</sys:String>
<sys:String x:Key="ViewportRightMenuReset">重置网格线</sys:String>
<!-- 登录页 --> <!-- 登录页 -->
<sys:String x:Key="LoginWindowTitle">星辉钻石检测系统</sys:String> <sys:String x:Key="LoginWindowTitle">星辉钻石检测系统</sys:String>

@ -21,6 +21,7 @@ using Newtonsoft.Json.Linq;
using SparkClient.Model.Common; using SparkClient.Model.Common;
using Color = System.Windows.Media.Color; using Color = System.Windows.Media.Color;
using MessageBox = SparkClient.Views.Dialog.MessageBox; using MessageBox = SparkClient.Views.Dialog.MessageBox;
using System.Runtime.CompilerServices;
namespace SparkClient.ViewModel.Grading; namespace SparkClient.ViewModel.Grading;
@ -276,6 +277,11 @@ public class DiamondSelectVM : BaseViewModel
}); });
} }
} }
catch (DirectoryNotFoundException ex)
{
loading.Close();
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
}
finally { finally {
} }
@ -315,6 +321,8 @@ public class DiamondSelectVM : BaseViewModel
/// <param name="param"></param> /// <param name="param"></param>
public async void DoStartGrading(object param) public async void DoStartGrading(object param)
{ {
LoadingDialog loading = new LoadingDialog();
try {
if (param != null) if (param != null)
{ {
AlgorithmResultEntity parameter = new AlgorithmResultEntity(); AlgorithmResultEntity parameter = new AlgorithmResultEntity();
@ -337,7 +345,7 @@ public class DiamondSelectVM : BaseViewModel
{ {
return; return;
} }
LoadingDialog loading = new LoadingDialog();
var tcs = new TaskCompletionSource<bool>(); var tcs = new TaskCompletionSource<bool>();
var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => { var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => {
loading.Closed += (s, e) => tcs.SetResult(true); loading.Closed += (s, e) => tcs.SetResult(true);
@ -380,7 +388,17 @@ public class DiamondSelectVM : BaseViewModel
await Task.Delay(5); await Task.Delay(5);
loading.Close(); loading.Close();
} }
}
catch (DirectoryNotFoundException ex)
{
loading.Close();
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
}
catch (Exception ex)
{
new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}");
Logger.Error($"全局异常捕获:{ex.Message}", ex);
}
} }
/// <summary> /// <summary>
/// 处理算法调用失败时的逻辑,包括保存图片到历史记录文件夹 /// 处理算法调用失败时的逻辑,包括保存图片到历史记录文件夹

@ -190,8 +190,8 @@ public class GradingResultVM : BaseViewModel
} }
catch (Exception ex) catch (Exception ex)
{ {
new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}");
Logger.Error($"全局异常捕获:{ex.Message}", ex); Logger.Error($"全局异常捕获:{ex.Message}", ex);
throw ex;
} }
} }
@ -749,10 +749,11 @@ public class GradingResultVM : BaseViewModel
} }
else else
{ {
if (!File.Exists(getFilePath())) if (!Directory.Exists(getFilePath()))
{ {
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists")); //new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
return; //return;
throw new DirectoryNotFoundException(getFilePath());
} }
string fullPath = Path.Combine(getFilePath(), this.DiamondCode); string fullPath = Path.Combine(getFilePath(), this.DiamondCode);
if (FileSaveEnabled("Txt")) if (FileSaveEnabled("Txt"))
@ -796,7 +797,7 @@ public class GradingResultVM : BaseViewModel
} }
private string getFilePath() private string getFilePath()
{ {
string defultFilePath = "D://DTest//"; string defultFilePath = "";
string sql = $"SELECT SETTING_P FROM SETTING WHERE SETTING_ID = 'FilePath'"; string sql = $"SELECT SETTING_P FROM SETTING WHERE SETTING_ID = 'FilePath'";
DataTable data = DataBaseHelper.ExecuteQuery(sql); DataTable data = DataBaseHelper.ExecuteQuery(sql);
if (data!= null && data.Rows.Count>0) if (data!= null && data.Rows.Count>0)
@ -813,7 +814,6 @@ public class GradingResultVM : BaseViewModel
} }
catch (Exception ex) catch (Exception ex)
{ {
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
Logger.Error($"全局异常捕获:{ex.Message}", ex); Logger.Error($"全局异常捕获:{ex.Message}", ex);
} }
return defultFilePath; return defultFilePath;

@ -72,6 +72,7 @@
<!-- <MenuItem Header="{StaticResource ViewportRightMenuSelectFaceAngleText}" x:Name="ViewportRightMenuSelectFaceAngleText" IsCheckable="True" StaysOpenOnClick="True" Checked="MenuItem_OnCheckedChanged" Unchecked="MenuItem_OnCheckedChanged"/> --> <!-- <MenuItem Header="{StaticResource ViewportRightMenuSelectFaceAngleText}" x:Name="ViewportRightMenuSelectFaceAngleText" IsCheckable="True" StaysOpenOnClick="True" Checked="MenuItem_OnCheckedChanged" Unchecked="MenuItem_OnCheckedChanged"/> -->
<MenuItem Header="{StaticResource ViewportRightMenuSelectFaceKind}" x:Name="ViewportRightMenuSelectFaceKind" IsCheckable="True" StaysOpenOnClick="True" Checked="MenuItem_OnCheckedChanged" Unchecked="MenuItem_OnCheckedChanged"/> <MenuItem Header="{StaticResource ViewportRightMenuSelectFaceKind}" x:Name="ViewportRightMenuSelectFaceKind" IsCheckable="True" StaysOpenOnClick="True" Checked="MenuItem_OnCheckedChanged" Unchecked="MenuItem_OnCheckedChanged"/>
<MenuItem Header="{StaticResource ViewportRightMenuShowMeshLines}" x:Name="ViewportRightMenuShowMeshLines" IsCheckable="True" StaysOpenOnClick="True" Checked="MenuItem_OnCheckedChanged" Unchecked="MenuItem_OnCheckedChanged"/> <MenuItem Header="{StaticResource ViewportRightMenuShowMeshLines}" x:Name="ViewportRightMenuShowMeshLines" IsCheckable="True" StaysOpenOnClick="True" Checked="MenuItem_OnCheckedChanged" Unchecked="MenuItem_OnCheckedChanged"/>
<MenuItem Header="{StaticResource ViewportRightMenuReset}" x:Name="ViewportRightMenuReset" Click="MenuItem_OnClick"/>
</ContextMenu> </ContextMenu>
</Border.ContextMenu> </Border.ContextMenu>
<hx:Viewport3DX x:Name="Viewport3Dx" ShowCoordinateSystem="True" <hx:Viewport3DX x:Name="Viewport3Dx" ShowCoordinateSystem="True"

@ -487,6 +487,9 @@ public partial class Viewport3D
} }
break;
case "ViewportRightMenuReset":
ViewportManager.ResetMeshLines();
break; break;
} }
} }

@ -1282,6 +1282,10 @@ public class ViewportHelperPro
lights.ForEach(item => viewport.Items.Remove(item)); lights.ForEach(item => viewport.Items.Remove(item));
} }
private static Dictionary<Guid, Guid> moveLines = new Dictionary<Guid, Guid>(); private static Dictionary<Guid, Guid> moveLines = new Dictionary<Guid, Guid>();
public static void InitMeshLines()
{
moveLines = new();
}
/// <summary> /// <summary>
/// 网状参考线 /// 网状参考线
/// </summary> /// </summary>
@ -1290,10 +1294,6 @@ public class ViewportHelperPro
/// <returns></returns> /// <returns></returns>
public static List<LineGeometryModel3D> ShowMeshLines(bool isCrown = true, double thickness = 0.2) public static List<LineGeometryModel3D> ShowMeshLines(bool isCrown = true, double thickness = 0.2)
{ {
if (isCrown)
{
moveLines = new();
}
List<LineGeometryModel3D> lines = new(); List<LineGeometryModel3D> lines = new();
var Y = -0.01F; var Y = -0.01F;
if (!isCrown) if (!isCrown)
@ -1438,7 +1438,7 @@ public class ViewportHelperPro
// 计算直线的新位置 // 计算直线的新位置
var transform = new TranslateTransform3D(projectedVector); var transform = new TranslateTransform3D(projectedVector);
var newTransform = new MatrixTransform3D(transform.Value * initialTransform.Value); var newTransform = new MatrixTransform3D(transform.Value * initialTransform.Value);
var newProjectedVector = new Vector3D(newTransform.Matrix.OffsetX ,Y, newTransform.Matrix.OffsetZ); var newProjectedVector = new Vector3D(newTransform.Matrix.OffsetX ,0, newTransform.Matrix.OffsetZ);
var newPosition1 = line.Geometry.Positions[0].ToVector3D(); var newPosition1 = line.Geometry.Positions[0].ToVector3D();
newPosition1.X += newTransform.Matrix.OffsetX; newPosition1.X += newTransform.Matrix.OffsetX;
newPosition1.Z += newTransform.Matrix.OffsetZ; newPosition1.Z += newTransform.Matrix.OffsetZ;

@ -1,3 +1,4 @@
using System.Linq;
using System.Text.Json.Nodes; using System.Text.Json.Nodes;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media.Media3D; using System.Windows.Media.Media3D;
@ -178,15 +179,34 @@ public class ViewportManager
} }
ChooseAddModels.Clear(); ChooseAddModels.Clear();
} }
public static void InitMeshLines()
{
ViewportHelperPro.InitMeshLines();
MainModelMeshLines_C.Clear();
MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines());
MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine();
MainModelMeshLines_P.Clear();
MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(false));
MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false);
}
public static void ResetMeshLines() public static void ResetMeshLines()
{ {
if (_viewport.Items.Contains(MainModelMeshLines_C[0]))
{
ViewportManager.ShowMeshLines(false, true);
MainModelMeshLines_C.Clear(); MainModelMeshLines_C.Clear();
MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines()); MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines());
MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine(); MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine();
ViewportManager.ShowMeshLines(true, true);
}
if (_viewport.Items.Contains(MainModelMeshLines_P[0]))
{
ViewportManager.ShowMeshLines(false, false);
MainModelMeshLines_P.Clear(); MainModelMeshLines_P.Clear();
MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(false)); MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(false));
MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false); MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false);
ViewportManager.ShowMeshLines(true, false);
}
} }
/// <summary> /// <summary>
/// 模拟面选中 /// 模拟面选中
@ -321,7 +341,7 @@ public class ViewportManager
_viewport.Camera.UpDirection = new Vector3D(0, -1, 0); _viewport.Camera.UpDirection = new Vector3D(0, -1, 0);
_viewport.RenderHost.MSAA = MSAALevel.Maximum; _viewport.RenderHost.MSAA = MSAALevel.Maximum;
// TODO: // TODO:
ResetMeshLines(); InitMeshLines();
} }
/// <summary> /// <summary>
@ -497,7 +517,6 @@ public class ViewportManager
_viewport.Items.Remove(MainModelCircleLine_C); _viewport.Items.Remove(MainModelCircleLine_C);
MainModelMeshLines_P.ForEach(e => _viewport.Items.Remove(e)); MainModelMeshLines_P.ForEach(e => _viewport.Items.Remove(e));
_viewport.Items.Remove(MainModelCircleLine_P); _viewport.Items.Remove(MainModelCircleLine_P);
ResetMeshLines();
} }
} }

Loading…
Cancel
Save