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="ViewportSaveFail">保存失败</sys:String>
<sys:String x:Key="ViewportSelectPath">选择路径</sys:String>
<sys:String x:Key="ViewportRightMenuReset">重置网格线</sys:String>
<!-- 登录页 -->
<sys:String x:Key="LoginWindowTitle">星辉钻石检测系统</sys:String>

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

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

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

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

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

Loading…
Cancel
Save