From 5d0c9325a139297cc7291f4c0fa1415cc13a43c6 Mon Sep 17 00:00:00 2001 From: sunhonglei Date: Wed, 22 Jan 2025 17:25:36 +0800 Subject: [PATCH] fix: --- ViewModel/Grading/GradingResultVM.cs | 14 ++++++- Views/UserControl/Viewport3D.xaml.cs | 27 ++++++++----- .../ViewportData/Helper/VideoHelper.cs | 3 +- .../ViewportData/Helper/ViewportHelperPro.cs | 40 +++++++++++-------- .../ViewportData/Helper/ViewportManager.cs | 30 +++++++++----- 5 files changed, 77 insertions(+), 37 deletions(-) diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs index 986bda2..f0c7643 100644 --- a/ViewModel/Grading/GradingResultVM.cs +++ b/ViewModel/Grading/GradingResultVM.cs @@ -751,6 +751,11 @@ public class GradingResultVM : BaseViewModel } else { + if (!File.Exists(getFilePath())) + { + new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists")); + return; + } string fullPath = Path.Combine(getFilePath(), this.DiamondCode); if (FileSaveEnabled("Txt")) { @@ -805,7 +810,14 @@ public class GradingResultVM : BaseViewModel } else { - Directory.CreateDirectory(defultFilePath); + try { + Directory.CreateDirectory(defultFilePath); + } + catch (Exception ex) + { + new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists")); + Logger.Error($"全局异常捕获:{ex.Message}", ex); + } return defultFilePath; } } diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs index 7ec18d9..45df875 100644 --- a/Views/UserControl/Viewport3D.xaml.cs +++ b/Views/UserControl/Viewport3D.xaml.cs @@ -174,9 +174,7 @@ public partial class Viewport3D { var directionName = ((Button)sender).Name.ToString(); var directionValue = (int) TbCustomizeRevolve.Value; - - - + switch (directionName) { case "BtnFcuntion1View": @@ -189,17 +187,28 @@ public partial class Viewport3D break; case "BtnFcuntion3View": //低 + //var center = ViewportManager.ModelBounds.Center; + //var maxDimension = ViewportManager.ModelBounds.Size.Length(); + //var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内 + //var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera; + //camera.Position = new Point3D(center.X, center.Y, center.Z); // 从前面看,Z轴正方向 + //camera.Width = ViewportManager.calCameraWidth(); + //camera.UpDirection = new Vector3D(0, -1, 0); + //camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z); var center = ViewportManager.ModelBounds.Center; + ViewportManager.ClearMeshLines(ViewportRightMenuShowMeshLines); var maxDimension = ViewportManager.ModelBounds.Size.Length(); - var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内 + var distance = maxDimension * 1.2; // 调整相机到模型的距离,保证视野范围内 var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera; - camera.Position = new Point3D(center.X, center.Y, center.Z); // 从前面看,Z轴正方向 - camera.Width = ViewportManager.calCameraWidth(); - camera.UpDirection = new Vector3D(0, -1, 0); - camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z); + camera.Position = new Point3D(center.X, center.Y, center.Z + distance); // 从前面看,Z轴正方向 + camera.UpDirection = new Vector3D(0, -1, 0); + camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z); + await Task.Delay(100); ViewportHelperPro.RotateModel(new Vector3D(0,-1,0)); - await Task.Delay(5000); + await Task.Delay(7000); ViewportHelperPro.RotateModel(new Vector3D(-1,0,0)); + await Task.Delay(7000); + ViewportManager.DoubleClickSelect = !false; break; } diff --git a/Views/UserControl/ViewportData/Helper/VideoHelper.cs b/Views/UserControl/ViewportData/Helper/VideoHelper.cs index 645e1b3..9696ecd 100644 --- a/Views/UserControl/ViewportData/Helper/VideoHelper.cs +++ b/Views/UserControl/ViewportData/Helper/VideoHelper.cs @@ -212,7 +212,8 @@ public class VideoHelper { ViewportHelperPro.RotateModel(new Vector3D(-1, 0, 0)); }); - + ViewportManager.DoubleClickSelect = !false; + } public static PngBitmapEncoder CutPng(Viewport3DX viewport) diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs index e742caf..c6466b8 100644 --- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs +++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs @@ -178,7 +178,7 @@ public class ViewportHelperPro { if (viewport == null) viewport = ViewportManager.GetViewport3D(); - + var generationTask = VideoHelper.StartGenerationAndRotation(viewport); List pngList = await generationTask; @@ -900,6 +900,8 @@ public class ViewportHelperPro public static void RotateModel(Vector3D axis, bool hasLine = true, int speed = 7, int to = 360) { ViewportManager.ClearDicModels(); + ViewportManager.DoubleClickSelect = false; + // 设置旋转的中心点和旋转轴 var rotateTransform = new RotateTransform3D(); var rotation = new AxisAngleRotation3D(axis, 0); @@ -1284,7 +1286,7 @@ public class ViewportHelperPro /// /// /// - public static List ShowMeshLines(List entities, bool isCrown = true, double thickness = 1.0) + public static List ShowMeshLines(bool isCrown = true, double thickness = 0.2) { if (isCrown) { @@ -1298,7 +1300,7 @@ public class ViewportHelperPro } var center = ViewportManager.CenterVector; center.Y = Y; - Viewport3DTriangleEntity firstPoint = entities.Where(x => x.PlaneType == PlaneType.TableFacet).FirstOrDefault(); + Viewport3DTriangleEntity firstPoint = ViewportManager.ViewportTriangle.Where(x => x.PlaneType == PlaneType.TableFacet).FirstOrDefault(); //var b = ((center.Z * firstPoint.Point1.X) - (firstPoint.Point1.Z * center.X)) / (firstPoint.Point1.X - center.X); //var a = (firstPoint.Point1.Z - b) / firstPoint.Point1.X; @@ -1321,27 +1323,27 @@ public class ViewportHelperPro edgeLines = new List>(); var XLine = lineCal.calXline(r); edgeLines.Add(XLine); - lines.Add(DisplayLineModel3D(edgeLines, XlineColor)); + lines.Add(DisplayLineModel3D(edgeLines, XlineColor, thickness)); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(XLine, 2)); - var lineA = DisplayLineModel3D(edgeLines, XlineColor); + var lineA = DisplayLineModel3D(edgeLines, XlineColor, thickness); lines.Add(lineA); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(XLine, -2)); - var lineB = DisplayLineModel3D(edgeLines, XlineColor); + var lineB = DisplayLineModel3D(edgeLines, XlineColor, thickness); lines.Add(lineB); bindingMoveLine(lineA, lineB); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(XLine, 4)); - var lineE = DisplayLineModel3D(edgeLines, XlineColor); + var lineE = DisplayLineModel3D(edgeLines, XlineColor, thickness); lines.Add(lineE); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(XLine, -4)); - var lineF = DisplayLineModel3D(edgeLines, XlineColor); + var lineF = DisplayLineModel3D(edgeLines, XlineColor, thickness); lines.Add(lineF); bindingMoveLine(lineE, lineF); @@ -1358,31 +1360,32 @@ public class ViewportHelperPro edgeLines = new List>(); var YLine = lineCal.calYline(r); edgeLines.Add(YLine); - lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); + lines.Add(DisplayLineModel3D(edgeLines, YlineColor, thickness)); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(YLine, 2)); - var lineC = DisplayLineModel3D(edgeLines, YlineColor); + var lineC = DisplayLineModel3D(edgeLines, YlineColor, thickness); lines.Add(lineC); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(YLine, -2)); - var lineD = DisplayLineModel3D(edgeLines, YlineColor); + var lineD = DisplayLineModel3D(edgeLines, YlineColor, thickness); lines.Add(lineD); bindingMoveLine(lineC, lineD); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(YLine, 4)); - var lineG = DisplayLineModel3D(edgeLines, YlineColor); + var lineG = DisplayLineModel3D(edgeLines, YlineColor, thickness); lines.Add(lineG); edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(YLine, -4)); - var lineH = DisplayLineModel3D(edgeLines, YlineColor); + var lineH = DisplayLineModel3D(edgeLines, YlineColor, thickness); lines.Add(lineH); bindingMoveLine(lineG, lineH); return lines; } + private static readonly double HitTestThickness = 5; /// /// 网状参考线 对向移动绑定 /// @@ -1390,10 +1393,12 @@ public class ViewportHelperPro /// private static void bindingMoveLine(LineGeometryModel3D lineA, LineGeometryModel3D lineB) { + lineA.HitTestThickness = HitTestThickness; lineA.MouseDown3D += LineA_MouseDown3D; lineA.MouseUp3D += LineA_MouseUp3D; lineA.MouseMove3D += LineA_MouseMove3D; moveLines.Add(lineA.GUID, lineB.GUID); + lineB.HitTestThickness = HitTestThickness; lineB.MouseDown3D += LineA_MouseDown3D; lineB.MouseUp3D += LineA_MouseUp3D; lineB.MouseMove3D += LineA_MouseMove3D; @@ -1648,7 +1653,7 @@ public class ViewportHelperPro /// /// /// - public static LineGeometryModel3D ShowCircleLine(bool isCrown = true, double radius = 1.0, double thickness = 1.0) + public static LineGeometryModel3D ShowCircleLine(bool isCrown = true, double radius = 1.0, double thickness = 0.2) { var Y = -0.01F; if (!isCrown) @@ -1657,9 +1662,9 @@ public class ViewportHelperPro } var center = ViewportManager.CenterVector; center.Y = Y; - return UpdateCircleGeometry(center, initialRadius); + return UpdateCircleGeometry(center, initialRadius, thickness); } - private static LineGeometryModel3D UpdateCircleGeometry(Vector3 center, double radius = 1.0) + private static LineGeometryModel3D UpdateCircleGeometry(Vector3 center, double radius = 1.0, double thickness = 1.0) { // 生成圆形线的点 int segments = 100; // 圆的细分段数 @@ -1677,7 +1682,8 @@ public class ViewportHelperPro indices.Add(i); indices.Add((i + 1) % segments); } - var Circle = DisplayLineModel3D(positions, Color4.Black); + var Circle = DisplayLineModel3D(positions, Colors.Orange.ToColor4(),thickness); + Circle.HitTestThickness = HitTestThickness; Circle.MouseDown3D += Circle_MouseDown3D; Circle.MouseUp3D += Circle_MouseUp3D; Circle.MouseMove3D += Circle_MouseMove3D; diff --git a/Views/UserControl/ViewportData/Helper/ViewportManager.cs b/Views/UserControl/ViewportData/Helper/ViewportManager.cs index e8280c9..8efb773 100644 --- a/Views/UserControl/ViewportData/Helper/ViewportManager.cs +++ b/Views/UserControl/ViewportData/Helper/ViewportManager.cs @@ -156,6 +156,15 @@ public class ViewportManager ChooseAddModels.Clear(); } + public static void ResetMeshLines() + { + 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); + } /// /// 模拟面选中 /// @@ -289,12 +298,7 @@ public class ViewportManager _viewport.Camera.UpDirection = new Vector3D(0, -1, 0); _viewport.RenderHost.MSAA = MSAALevel.Maximum; // TODO: - MainModelMeshLines_C.Clear(); - MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines(entities)); - MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine(); - MainModelMeshLines_P.Clear(); - MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(entities, false)); - MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false); + ResetMeshLines(); } /// @@ -470,12 +474,20 @@ public class ViewportManager _viewport.Items.Remove(MainModelCircleLine_C); MainModelMeshLines_P.ForEach(e => _viewport.Items.Remove(e)); _viewport.Items.Remove(MainModelCircleLine_P); + ResetMeshLines(); } } + + public static void ClearMeshLines(MenuItem menuItem) + { + ViewportManager.ShowMeshLines(false, true); + ViewportManager.ShowMeshLines(false, false); + menuItem.IsChecked = false; + } #endregion - - - #region 预制颜色 + + + #region 预制颜色 /// /// 材质:半透明蓝 ///