using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media.Media3D; using HelixToolkit.Wpf.SharpDX; using SharpDX; using SparkClient.Model.Entity; using SparkClient.Model.Helper; using SparkClient.ViewModel.Grading; using GeometryModel3D = HelixToolkit.Wpf.SharpDX.GeometryModel3D; using MeshGeometry3D = HelixToolkit.Wpf.SharpDX.MeshGeometry3D; using PerspectiveCamera = HelixToolkit.Wpf.SharpDX.PerspectiveCamera; 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); } }