diff --git a/Resource/Images/UserControl/Bottom@3x.png b/Resource/Images/UserControl/Bottom@3x.png
new file mode 100644
index 0000000..90231de
Binary files /dev/null and b/Resource/Images/UserControl/Bottom@3x.png differ
diff --git a/Resource/Images/UserControl/Top@3x.png b/Resource/Images/UserControl/Top@3x.png
new file mode 100644
index 0000000..9bc8fee
Binary files /dev/null and b/Resource/Images/UserControl/Top@3x.png differ
diff --git a/Resource/Images/UserControl/arrow.png b/Resource/Images/UserControl/arrow.png
new file mode 100644
index 0000000..0402534
Binary files /dev/null and b/Resource/Images/UserControl/arrow.png differ
diff --git a/Resource/Images/UserControl/biaochi1@3x.png b/Resource/Images/UserControl/biaochi1@3x.png
new file mode 100644
index 0000000..dc08e80
Binary files /dev/null and b/Resource/Images/UserControl/biaochi1@3x.png differ
diff --git a/Resource/Images/UserControl/biaochi2@3x.png b/Resource/Images/UserControl/biaochi2@3x.png
new file mode 100644
index 0000000..3291b3e
Binary files /dev/null and b/Resource/Images/UserControl/biaochi2@3x.png differ
diff --git a/Resource/Images/UserControl/zuanshi@1x.png b/Resource/Images/UserControl/zuanshi@1x.png
new file mode 100644
index 0000000..f808965
Binary files /dev/null and b/Resource/Images/UserControl/zuanshi@1x.png differ
diff --git a/Resource/Images/UserControl/zuanshi@3x.png b/Resource/Images/UserControl/zuanshi@3x.png
new file mode 100644
index 0000000..e51dbfd
Binary files /dev/null and b/Resource/Images/UserControl/zuanshi@3x.png differ
diff --git a/SparkClient.csproj b/SparkClient.csproj
index a920f72..abc6cc5 100644
--- a/SparkClient.csproj
+++ b/SparkClient.csproj
@@ -95,6 +95,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Views/Grading/GradingResult.xaml b/Views/Grading/GradingResult.xaml
index 7e0d8df..f0925a1 100644
--- a/Views/Grading/GradingResult.xaml
+++ b/Views/Grading/GradingResult.xaml
@@ -6,6 +6,7 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:SparkClient.Views.Grading"
xmlns:hx="http://helix-toolkit.org/wpf/SharpDX"
+ xmlns:userControl="clr-namespace:SparkClient.Views.UserControl"
mc:Ignorable="d"
d:DesignWidth="1000"
d:DesignHeight="600"
@@ -134,39 +135,39 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/Views/Grading/GradingResult.xaml.cs b/Views/Grading/GradingResult.xaml.cs
index 63db910..0487d9a 100644
--- a/Views/Grading/GradingResult.xaml.cs
+++ b/Views/Grading/GradingResult.xaml.cs
@@ -22,21 +22,21 @@ public partial class GradingResult
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);
- };
+ // 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);
+ // };
}
@@ -47,77 +47,77 @@ public partial class GradingResult
///
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");
- }
+ // // 获取鼠标点击位置
+ // 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 DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
diff --git a/Views/UserControl/Viewport3D.xaml b/Views/UserControl/Viewport3D.xaml
new file mode 100644
index 0000000..c7e5dec
--- /dev/null
+++ b/Views/UserControl/Viewport3D.xaml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs
new file mode 100644
index 0000000..c4372eb
--- /dev/null
+++ b/Views/UserControl/Viewport3D.xaml.cs
@@ -0,0 +1,12 @@
+using System.Windows.Controls;
+
+namespace SparkClient.Views.UserControl;
+
+public partial class Viewport3D
+{
+ public Viewport3D()
+ {
+ InitializeComponent();
+ DataContext = this;
+ }
+}
\ No newline at end of file