using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using SparkClient.ViewModel.Grading; using GeometryModel3D = HelixToolkit.Wpf.SharpDX.GeometryModel3D; namespace SparkClient.Views.Grading; public partial class GradingResult { // List triangles = new List(); List mouseAddModels = new List(); public GradingResult() { InitializeComponent(); //DataContext = new GradingResultVM(null); // this.Viewport3Dx.EffectsManager = new DefaultEffectsManager(); // this.Viewport3Dx.Camera = new PerspectiveCamera() // { // Position = new Point3D(0, 0, 5), // LookDirection = new Vector3D(0, 0, -1), // UpDirection = new Vector3D(0, 1, 0), // FarPlaneDistance = 1000, // NearPlaneDistance = 0.1 // }; // Loaded += (sender, args) => // { // var entities = Viewport3DHelper.InitDemo(Viewport3Dx); // triangles.AddRange(entities); // }; } /// /// 点击模型 /// /// /// private void Viewport3Dx_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // // 获取鼠标点击位置 // var mousePosition = e.GetPosition(Viewport3Dx); // // // 查找鼠标点击的 3D 对象 // var hits = Viewport3Dx.FindHits(mousePosition); // // // 如果没有命中任何 3D 对象 // if (hits == null || hits.Count == 0) // { // Console.WriteLine("未点击到任何模型"); // foreach (var item in mouseAddModels) // { // Viewport3Dx.Items.Remove(item); // } // mouseAddModels.Clear(); // return; // } // // // 获取第一个命中的对象 // var hit = hits[0]; // // // 检查是否是 MeshGeometryModel3D // if (hit.ModelHit is MeshGeometryModel3D modelHit) // { // foreach (var item in mouseAddModels) // { // Viewport3Dx.Items.Remove(item); // } // mouseAddModels.Clear(); // // 获取几何信息 // var geometry = modelHit.Geometry as MeshGeometry3D; // if (geometry != null) // { // // 获取命中的三角形索引 // var triangleIndex = hit.TriangleIndices; // // // 获取三角形顶点 // var vertex1 = geometry.Positions[triangleIndex.Item1]; // var vertex2 = geometry.Positions[triangleIndex.Item2]; // var vertex3 = geometry.Positions[triangleIndex.Item3]; // // string strPoint = vertex1.X + ","+ vertex1.Y+","+ vertex1.Z + ";"+ vertex2.X + ","+ vertex2.Y + ","+ vertex2.Z+";"+vertex3.X + ","+ vertex3.Y + ","+ vertex3.Z; // string triangleCode = Viewport3DTriangleEntity.GenerateMD5Hash(strPoint); // // //命中实体 // Viewport3DTriangleEntity res = triangles.Find(e => triangleCode.Equals(e.TriangleCode)); // // if (res == null) // return; // // //命中面 // List facet = triangles.Where(e => res.PlaneCode.Equals(e.PlaneCode)).ToList(); // var colorFacet = new Color4(1.0f, 1.0f, 0.0f, 1.0f); // var data1 = Viewport3DHelper.GenerateEmissiveModelByEntity(Viewport3Dx,facet,colorFacet); // mouseAddModels.AddRange(data1); // //命中面标线 // var data2 = Viewport3DHelper.GenerateLineTextModelByEntity(Viewport3Dx, facet); // mouseAddModels.AddRange(data2); // //命中同类面 // List facetType = triangles.Where(e => res.PlaneType.Equals(e.PlaneType)).ToList(); // //排除自己 // facet.ForEach(e=>facetType.Remove(e)); // var colorFacetType = new Color4(0.9f, 0.9f, 0.7f, 1.0f); // var data3 = Viewport3DHelper.GenerateEmissiveModelByEntity(Viewport3Dx,facetType,colorFacetType); // mouseAddModels.AddRange(data3); // } // } // else // { // Console.WriteLine("点击的对象不是 MeshGeometryModel3D"); // } } private void ChangSymLevel(object sender, SelectionChangedEventArgs e) { var d = DataContext as GradingResultVM; d.ChangeSym(null); } private void dataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { detailPopup.IsOpen = false; // 获取点击的目标元素 var element = sender as FrameworkElement; var cell = FindVisualParent(element); if (cell == null) return; var row = FindVisualParent(cell); if (row == null) return; if (element != null) { // 将 firstCell 的边界转换为屏幕坐标系 var firstCellBounds = cell.PointToScreen(new Point(0, 0)); // 计算Popup的位置 var popupPosition = new Point(firstCellBounds.X + cell.RenderSize.Width, firstCellBounds.Y + cell.RenderSize.Height); var selectObject = row.Item as DataInfo; string testItemId = selectObject.TestItemId; var d = DataContext as GradingResultVM; RowDetail rowDetail = d.getSelectData(testItemId); // 设置Popup的位置 detailPopup.HorizontalOffset = popupPosition.X; detailPopup.VerticalOffset = popupPosition.Y; detailPopup.IsOpen = true; RowDetail.Items.Clear(); RowDetail.Items.Add(rowDetail); } } // 辅助方法:查找父元素 private T FindVisualParent(DependencyObject child) where T : DependencyObject { var parentObject = VisualTreeHelper.GetParent(child); if (parentObject == null) return null; if (parentObject is T parent) { return parent; } else { return FindVisualParent(parentObject); } } private void Window_MouseDown(object sender, MouseButtonEventArgs e) { detailPopup.IsOpen = false; } private void Window_MouseDown(object sender, RoutedEventArgs e) { detailPopup.IsOpen = false; } }