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 0000000..b068b2e Binary files /dev/null and b/Resource/Images/UIResource/cut_mst_dtl.png differ diff --git a/SparkClient.csproj b/SparkClient.csproj index 21de682..6583d71 100644 --- a/SparkClient.csproj +++ b/SparkClient.csproj @@ -224,6 +224,8 @@ 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(); }