From 499f5c3be0bf9454b424b42663bc31b1df9acfd8 Mon Sep 17 00:00:00 2001 From: sunhonglei Date: Wed, 15 Jan 2025 23:18:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=BD=91=E6=A0=BC=E7=BA=BF=E9=80=89?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Views/UserControl/Viewport3D.xaml.cs | 14 +++++ .../ViewportData/Helper/ViewportHelperPro.cs | 56 +++++++++++++++++-- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs index 6b6f033..3672c7e 100644 --- a/Views/UserControl/Viewport3D.xaml.cs +++ b/Views/UserControl/Viewport3D.xaml.cs @@ -16,6 +16,7 @@ using SharpDX; using SharpDX.Direct3D11; using SharpDX.DXGI; using MathNet.Numerics; +using System.Windows.Media; namespace SparkClient.Views.UserControl; @@ -605,5 +606,18 @@ public partial class Viewport3D ViewportManager.ClearDicModels(); return; } + var hit = hits[0]; + // 检查是否是 MeshGeometryModel3D + if (hit.ModelHit is LineGeometryModel3D modelHit) + { + // 获取几何信息 + if (modelHit != null) + { + } + } + else + { + ViewportManager.ClearDicModels(); + } } } \ No newline at end of file diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs index 9a01f11..d1397a3 100644 --- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs +++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs @@ -23,6 +23,7 @@ using Color = SharpDX.Color; using GeometryModel3D = HelixToolkit.Wpf.SharpDX.GeometryModel3D; using NPOI.SS.Formula.Functions; using MeshGeometry3D = HelixToolkit.Wpf.SharpDX.MeshGeometry3D; +using NPOI.SS.UserModel; namespace SparkClient.Views.UserControl.ViewportData.Helper; @@ -1289,7 +1290,7 @@ public class ViewportHelperPro var lineCal = new LineCalculationHelper(firstPoint.Point1, center); var edgeLines = new List>(); - Color4 XlineColor =new Color4(255f, 0f, 0f, 1f); + Color4 XlineColor =new Color4(80f, 0f, 0f, 1f); var x1 = 5; var z1 = lineCal.calZ(x1); var x2 = -5; @@ -1297,27 +1298,74 @@ public class ViewportHelperPro edgeLines.Add(new Tuple(new Vector3(x1, Y, z1), new Vector3(x2, Y, z2))); lines.Add(DisplayLineModel3D(edgeLines, XlineColor)); + edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(new Tuple(new Vector3(x1, Y, z1), new Vector3(x2, Y, z2)),2)); - lines.Add(DisplayLineModel3D(edgeLines, XlineColor)); + var lineA = DisplayLineModel3D(edgeLines, Color4.Black); + lines.Add(lineA); + edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(new Tuple(new Vector3(x1, Y, z1), new Vector3(x2, Y, z2)), -2)); - lines.Add(DisplayLineModel3D(edgeLines, XlineColor)); + var lineB = DisplayLineModel3D(edgeLines, XlineColor); + lines.Add(lineB); + lineA.MouseDown3D += LineA_MouseDown3D; + lineA.MouseUp3D += LineA_MouseUp3D; + lineA.MouseMove3D += LineA_MouseMove3D; - Color4 YlineColor = new Color4(0F, 255f, 0f, 1f); + Color4 YlineColor = new Color4(0F, 80f, 0f, 1f); var x3 = 5; var z3 = lineCal.calZVertical(x3); var x4 = -5; var z4 = lineCal.calZVertical(x4); + + edgeLines = new List>(); edgeLines.Add(new Tuple(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4))); lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); + edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(new Tuple(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4)), 2)); lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); + edgeLines = new List>(); edgeLines.Add(lineCal.calLineOfOffset(new Tuple(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4)), -2)); lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); return lines; } + private static bool isDrawing = false; + private static Vector3 startpoint; + private static void LineA_MouseMove3D(object sender, RoutedEventArgs e) + { + if (isDrawing) + { + if (e is HelixToolkit.Wpf.SharpDX.MouseMove3DEventArgs ev) + { + var line = sender as LineGeometryModel3D; + var newPoint = ev.HitTestResult.PointHit; + var moveDirection = newPoint - startpoint; + var lineDirection = line.Geometry.Positions[1] - line.Geometry.Positions[0]; + + var perpendicularDirection = Vector3.Cross(lineDirection, Vector3.Cross(moveDirection, lineDirection)); + perpendicularDirection.Normalize(); + + line.Geometry.Positions[0] += perpendicularDirection * Vector3.Dot(moveDirection, perpendicularDirection); + line.Geometry.Positions[1] += perpendicularDirection * Vector3.Dot(moveDirection, perpendicularDirection); + } + } + } + + private static void LineA_MouseUp3D(object sender, RoutedEventArgs e) + { + isDrawing = false; + } + + private static void LineA_MouseDown3D(object sender, RoutedEventArgs e) + { + isDrawing = true; + if(e is HelixToolkit.Wpf.SharpDX.MouseDown3DEventArgs ev){ + startpoint = ev.HitTestResult.PointHit; + } + } + + public static LineGeometryModel3D ShowCircleLine(double radius = 1.0, double thickness = 1.0) { var Y = -0.01F;