From b6ae92c46b194cea90f9cbf9db630f0f48c4472c Mon Sep 17 00:00:00 2001 From: Tongg Date: Mon, 24 Mar 2025 15:34:48 +0800 Subject: [PATCH] feat: resultPage add Detail View --- App.config | 2 +- App.xaml.cs | 5 + MainWindow.xaml.cs | 8 +- Resource/Images/UIResource/cut_mst_dtl.png | Bin 0 -> 26141 bytes SparkClient.csproj | 2 + ViewModel/Grading/GradingResultVM.cs | 128 +++ Views/Grading/GradingResult.xaml | 1005 +++++++++-------- Views/Grading/GradingResult.xaml.cs | 14 + Views/UserControl/Viewport3D.xaml.cs | 10 + .../ViewportData/Helper/ViewportManager.cs | 4 +- 10 files changed, 730 insertions(+), 448 deletions(-) create mode 100644 Resource/Images/UIResource/cut_mst_dtl.png diff --git a/App.config b/App.config index 293721d..c53de5d 100644 --- a/App.config +++ b/App.config @@ -18,7 +18,7 @@ - + diff --git a/App.xaml.cs b/App.xaml.cs index d520b0c..fd34e5e 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -54,6 +54,11 @@ public partial class App : Application Logger.Info($"Load RunMode is {Common.RunMode}"); Logger.Info("App Client Start: App Initialize Succeed !!!"); + DispatcherUnhandledException += (s, ex) => + { + MessageBox.Show($"致命错误: {ex.Exception.Message}"); + ex.Handled = true; + }; Logger.Info("==== ==== ==== ==== ==== ==== ==== ===="); } } \ No newline at end of file diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 51e5b0e..af84ac6 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -143,7 +143,7 @@ public partial class MainWindow } - private async void MainWindow_OnClosing(object? sender, CancelEventArgs e) + private void MainWindow_OnClosing(object? sender, CancelEventArgs e) { var message = MultilingualHelper.getString("ExitAsk"); var title = MultilingualHelper.getString("ExitAskTitle"); @@ -153,10 +153,12 @@ public partial class MainWindow if (result == MessageBoxResult.OK) { - await SOCClientService.Service.OpenPump(false); + SOCClientService.Service.OpenPump(false); DataBaseHelper.CloseConnection(); // this.Close(); - Environment.Exit(0); + //Environment.Exit(0); + Console.WriteLine("Shutdown"); + Application.Current.Shutdown(); } e.Cancel = true; } diff --git a/Resource/Images/UIResource/cut_mst_dtl.png b/Resource/Images/UIResource/cut_mst_dtl.png new file mode 100644 index 0000000000000000000000000000000000000000..b068b2e3db561b40b4b5bd86b1db79d4cde152d6 GIT binary patch literal 26141 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 Always + + diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs index b3e483a..265ee16 100644 --- a/ViewModel/Grading/GradingResultVM.cs +++ b/ViewModel/Grading/GradingResultVM.cs @@ -717,6 +717,14 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_D(result.measurements.M2); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + info.Dtl1 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_1); + info.Dtl2 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_2); + info.Dtl3 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_3); + info.Dtl4 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_4); + info.Dtl5 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_5); + info.Dtl6 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_6); + info.Dtl7 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_7); + info.Dtl8 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_8); info.SymLevel = calGradeSym("DIAMETER", calSymValue(data.M1, data.M2, data.DIAMETER,false)); return info; } @@ -743,6 +751,11 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_P(result.measurements.TABLE_MAX); info.CutLevel = calGrade_TABLE(result.measurements.TABLE_MIN, result.measurements.TABLE_MAX); info.isEnabled = false; + var data = result.measurements; + info.Dtl1 = FormatDouble_P(data.TABLE_DETAIL.TABLE_1); + info.Dtl2 = FormatDouble_P(data.TABLE_DETAIL.TABLE_2); + info.Dtl3 = FormatDouble_P(data.TABLE_DETAIL.TABLE_3); + info.Dtl4 = FormatDouble_P(data.TABLE_DETAIL.TABLE_4); return info; } @@ -759,6 +772,14 @@ public class GradingResultVM : BaseViewModel info.CutLevel = calGrade_CROWN_ANGLE(result.measurements.CROWN_ANGLE_MIN, result.measurements.CROWN_ANGLE_MAX); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + info.Dtl1 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_1); + info.Dtl2 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_2); + info.Dtl3 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_3); + info.Dtl4 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_4); + info.Dtl5 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_5); + info.Dtl6 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_6); + info.Dtl7 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_7); + info.Dtl8 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_8); info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.CROWN_ANGLE_MIN, data.CROWN_ANGLE_MAX, data.CROWN_ANGLE,false)); return info; } @@ -776,6 +797,14 @@ public class GradingResultVM : BaseViewModel info.CutLevel = calGrade_CROWN_HEIGHT(result.measurements.CROWN_H_MIN, result.measurements.CROWN_H_MAX); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + info.Dtl1 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_1); + info.Dtl2 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_2); + info.Dtl3 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_3); + info.Dtl4 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_4); + info.Dtl5 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_5); + info.Dtl6 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_6); + info.Dtl7 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_7); + info.Dtl8 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_8); info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.CROWN_H_MIN, data.CROWN_H_MAX, data.CROWN_HEIGHT)); return info; } @@ -792,6 +821,14 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_P(result.measurements.GIRDLE_BEZEL_MAX); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + info.Dtl1 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_1); + info.Dtl2 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_2); + info.Dtl3 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_3); + info.Dtl4 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_4); + info.Dtl5 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_5); + info.Dtl6 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_6); + info.Dtl7 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_7); + info.Dtl8 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_8); info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.GIRDLE_BEZEL_MIN, data.GIRDLE_BEZEL_MAX, data.GIRDLE_BEZEL)); return info; } @@ -806,6 +843,15 @@ public class GradingResultVM : BaseViewModel info.Min = FormatDouble_P(result.measurements.GIRDLE_BONE_MIN); info.Max = FormatDouble_P(result.measurements.GIRDLE_BONE_MAX); info.isEnabled = false; + var data = result.measurements; + info.Dtl1 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_1); + info.Dtl2 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_2); + info.Dtl3 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_3); + info.Dtl4 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_4); + info.Dtl5 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_5); + info.Dtl6 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_6); + info.Dtl7 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_7); + info.Dtl8 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_8); return info; } @@ -822,6 +868,33 @@ public class GradingResultVM : BaseViewModel info.CutLevel = calGrade_GIRDLE(result.measurements.GIRDLE_VALLEY_MIN, result.measurements.GIRDLE_VALLEY_MAX); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + List doubles = new List(); + var girdleValleyDetail = data.GIRDLE_VALLEY_DETAIL; + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_1); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_2); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_3); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_4); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_5); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_6); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_7); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_8); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_9); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_10); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_11); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_12); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_13); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_14); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_15); + doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_16); + doubles.Sort(); + info.Dtl1= FormatDouble_P2(doubles[0]); + info.Dtl2 = FormatDouble_P2(doubles[1]); + info.Dtl3 = FormatDouble_P2(doubles[2]); + info.Dtl4 = FormatDouble_P2(doubles[3]); + info.Dtl5 = FormatDouble_P2(doubles[12]); + info.Dtl6 = FormatDouble_P2(doubles[13]); + info.Dtl7 = FormatDouble_P2(doubles[14]); + info.Dtl8 = FormatDouble_P2(doubles[15]); info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.GIRDLE_VALLEY_MIN, data.GIRDLE_VALLEY_MAX, data.GIRDLE_VALLEY)); return info; } @@ -839,6 +912,14 @@ public class GradingResultVM : BaseViewModel info.CutLevel = calGrade_PAV_ANGLE(result.measurements.PAV_ANGLE_MIN, result.measurements.PAV_ANGLE_MAX); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + info.Dtl1 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_1); + info.Dtl2 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_2); + info.Dtl3 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_3); + info.Dtl4 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_4); + info.Dtl5 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_5); + info.Dtl6 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_6); + info.Dtl7 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_7); + info.Dtl8 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_8); info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.PAV_ANGLE_MIN, data.PAV_ANGLE_MAX, data.PAV_ANGLE, false)); return info; } @@ -856,6 +937,14 @@ public class GradingResultVM : BaseViewModel info.CutLevel = calGrade_PAV_DEPTH(result.measurements.PAV_DEPTH_MIN, result.measurements.PAV_DEPTH_MAX); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + info.Dtl1 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_1); + info.Dtl2 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_2); + info.Dtl3 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_3); + info.Dtl4 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_4); + info.Dtl5 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_5); + info.Dtl6 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_6); + info.Dtl7 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_7); + info.Dtl8 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_8); info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.PAV_DEPTH_MIN, data.PAV_DEPTH_MAX, data.PAV_DEPTH)); return info; } @@ -871,6 +960,15 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_P(result.measurements.STAR_MAX); info.CutLevel = calGrade_STAR(result.measurements.STAR_MIN, result.measurements.STAR_MAX); info.isEnabled = false; + var data = result.measurements; + info.Dtl1 = FormatDouble_P(data.STAR_DETAIL.STAR_1); + info.Dtl2 = FormatDouble_P(data.STAR_DETAIL.STAR_2); + info.Dtl3 = FormatDouble_P(data.STAR_DETAIL.STAR_3); + info.Dtl4 = FormatDouble_P(data.STAR_DETAIL.STAR_4); + info.Dtl5 = FormatDouble_P(data.STAR_DETAIL.STAR_5); + info.Dtl6 = FormatDouble_P(data.STAR_DETAIL.STAR_6); + info.Dtl7 = FormatDouble_P(data.STAR_DETAIL.STAR_7); + info.Dtl8 = FormatDouble_P(data.STAR_DETAIL.STAR_8); return info; } @@ -885,6 +983,15 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_P(result.measurements.LOWER_HALVES_RATIO_MAX); info.CutLevel = calGrade_LOWER_HALVES_RATIO(result.measurements.LOWER_HALVES_RATIO_MIN, result.measurements.LOWER_HALVES_RATIO_MAX); info.isEnabled = false; + var data = result.measurements; + info.Dtl1 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_1); + info.Dtl2 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_2); + info.Dtl3 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_3); + info.Dtl4 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_4); + info.Dtl5 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_5); + info.Dtl6 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_6); + info.Dtl7 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_7); + info.Dtl8 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_8); return info; } @@ -897,6 +1004,7 @@ public class GradingResultVM : BaseViewModel info.Avg = FormatDouble_Avg(result.measurements.CULET * 100, Accuracy.ZD1); info.CutLevel = calGrade_CULET(result.measurements.CULET); info.isEnabled = false; + return info; } @@ -909,6 +1017,7 @@ public class GradingResultVM : BaseViewModel info.Avg = FormatDouble_Avg(result.measurements.TOC * 100, Accuracy.ZD1); var data = result.measurements; info.SymLevel = calGradeSym(info.TestItemId, data.TOC * 100); + return info; } @@ -922,6 +1031,7 @@ public class GradingResultVM : BaseViewModel var data = result.measurements; info.SymLevel = calGradeSym(info.TestItemId, data.COC * 100); return info; + } [Log] @@ -936,6 +1046,14 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_A(result.measurements.TWIST_MAX); info.Dev = calDev(info.Max, info.Min); var data = result.measurements; + info.Dtl1 = FormatDouble_A(data.TWIST_DETAIL.TWIST_1); + info.Dtl2 = FormatDouble_A(data.TWIST_DETAIL.TWIST_2); + info.Dtl3 = FormatDouble_A(data.TWIST_DETAIL.TWIST_3); + info.Dtl4 = FormatDouble_A(data.TWIST_DETAIL.TWIST_4); + info.Dtl5 = FormatDouble_A(data.TWIST_DETAIL.TWIST_5); + info.Dtl6 = FormatDouble_A(data.TWIST_DETAIL.TWIST_6); + info.Dtl7 = FormatDouble_A(data.TWIST_DETAIL.TWIST_7); + info.Dtl8 = FormatDouble_A(data.TWIST_DETAIL.TWIST_8); info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.TWIST_MIN, data.TWIST_MAX, data.TWIST)); return info; } @@ -2606,6 +2724,16 @@ public class DataInfo public string? Dev { get; set; } public string? Min { get; set; } public string? Max { get; set; } + + public string Dtl1 { get; set; } = string.Empty; + public string Dtl2 { get; set; } = string.Empty; + public string Dtl3 { get; set; } = string.Empty; + public string Dtl4 { get; set; } = string.Empty; + public string Dtl5 { get; set; } = string.Empty; + public string Dtl6 { get; set; } = string.Empty; + public string Dtl7 { get; set; } = string.Empty; + public string Dtl8 { get; set; } = string.Empty; + public string? CutLevel { get; set; } private Int64? _symLevel; //public int? SymLevel { get; set; } diff --git a/Views/Grading/GradingResult.xaml b/Views/Grading/GradingResult.xaml index 387dc0c..9c36690 100644 --- a/Views/Grading/GradingResult.xaml +++ b/Views/Grading/GradingResult.xaml @@ -327,459 +327,580 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - diff --git a/Views/Grading/GradingResult.xaml.cs b/Views/Grading/GradingResult.xaml.cs index 08db731..84dc182 100644 --- a/Views/Grading/GradingResult.xaml.cs +++ b/Views/Grading/GradingResult.xaml.cs @@ -295,4 +295,18 @@ public partial class GradingResult image.Source = new BitmapImage(new Uri(@"pack://application:,,,/Resource/Images/UIResource/01-8-1.png")); } } + + private void ButtonBase_OnClick(object sender, RoutedEventArgs e) + { + if (TabItemDefault.IsSelected == true) + { + TabItemDetail.IsSelected = true; + TabItemDefault.IsSelected = false; + } + else + { + TabItemDetail.IsSelected = false; + TabItemDefault.IsSelected = true; + } + } } \ No newline at end of file diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs index 7ee91fe..16d93eb 100644 --- a/Views/UserControl/Viewport3D.xaml.cs +++ b/Views/UserControl/Viewport3D.xaml.cs @@ -17,6 +17,7 @@ using SharpDX.Direct3D11; using SharpDX.DXGI; using MathNet.Numerics; using System.Windows.Media; +using NPOI.SS.Formula.Functions; using SparkClient.Model.Services; using MessageBox = SparkClient.Views.Dialog.MessageBox; using ObjExporter = SparkClient.Views.UserControl.ViewportData.Helper.ObjExporter; @@ -105,6 +106,15 @@ public partial class Viewport3D } + + ViewportManager.ShowMainModel3DByType(false); + ViewportManager.ShowMainModel3D(false); + ViewportManager.ShowMainModelLines(false); + ViewportManager.ShowMainModelLines(true); + ViewportManager.ShowMainModel3D(true); + ViewportManager.ShowMainModel3DByType(true); + + } diff --git a/Views/UserControl/ViewportData/Helper/ViewportManager.cs b/Views/UserControl/ViewportData/Helper/ViewportManager.cs index 61ad571..79a035d 100644 --- a/Views/UserControl/ViewportData/Helper/ViewportManager.cs +++ b/Views/UserControl/ViewportData/Helper/ViewportManager.cs @@ -393,8 +393,8 @@ public class ViewportManager camera.Position = new Point3D(center.X, center.Y - distance, center.Z); // 从底部看,Y轴负方向 camera.UpDirection = new Vector3D(0, 0, -1); camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z); - _viewport.RenderHost.MSAA = MSAALevel.Maximum; - // TODO: + _viewport.RenderHost.MSAA = MSAALevel.Maximum; + InitMeshLines(); }