fix:网格线选中

master
sunhonglei 5 months ago
parent 15a4723c5c
commit 499f5c3be0
  1. 14
      Views/UserControl/Viewport3D.xaml.cs
  2. 56
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs

@ -16,6 +16,7 @@ using SharpDX;
using SharpDX.Direct3D11; using SharpDX.Direct3D11;
using SharpDX.DXGI; using SharpDX.DXGI;
using MathNet.Numerics; using MathNet.Numerics;
using System.Windows.Media;
namespace SparkClient.Views.UserControl; namespace SparkClient.Views.UserControl;
@ -605,5 +606,18 @@ public partial class Viewport3D
ViewportManager.ClearDicModels(); ViewportManager.ClearDicModels();
return; return;
} }
var hit = hits[0];
// 检查是否是 MeshGeometryModel3D
if (hit.ModelHit is LineGeometryModel3D modelHit)
{
// 获取几何信息
if (modelHit != null)
{
}
}
else
{
ViewportManager.ClearDicModels();
}
} }
} }

@ -23,6 +23,7 @@ using Color = SharpDX.Color;
using GeometryModel3D = HelixToolkit.Wpf.SharpDX.GeometryModel3D; using GeometryModel3D = HelixToolkit.Wpf.SharpDX.GeometryModel3D;
using NPOI.SS.Formula.Functions; using NPOI.SS.Formula.Functions;
using MeshGeometry3D = HelixToolkit.Wpf.SharpDX.MeshGeometry3D; using MeshGeometry3D = HelixToolkit.Wpf.SharpDX.MeshGeometry3D;
using NPOI.SS.UserModel;
namespace SparkClient.Views.UserControl.ViewportData.Helper; namespace SparkClient.Views.UserControl.ViewportData.Helper;
@ -1289,7 +1290,7 @@ public class ViewportHelperPro
var lineCal = new LineCalculationHelper(firstPoint.Point1, center); var lineCal = new LineCalculationHelper(firstPoint.Point1, center);
var edgeLines = new List<Tuple<Vector3, Vector3>>(); var edgeLines = new List<Tuple<Vector3, Vector3>>();
Color4 XlineColor =new Color4(255f, 0f, 0f, 1f); Color4 XlineColor =new Color4(80f, 0f, 0f, 1f);
var x1 = 5; var x1 = 5;
var z1 = lineCal.calZ(x1); var z1 = lineCal.calZ(x1);
var x2 = -5; var x2 = -5;
@ -1297,27 +1298,74 @@ public class ViewportHelperPro
edgeLines.Add(new Tuple<Vector3, Vector3>(new Vector3(x1, Y, z1), new Vector3(x2, Y, z2))); edgeLines.Add(new Tuple<Vector3, Vector3>(new Vector3(x1, Y, z1), new Vector3(x2, Y, z2)));
lines.Add(DisplayLineModel3D(edgeLines, XlineColor)); lines.Add(DisplayLineModel3D(edgeLines, XlineColor));
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(new Vector3(x1, Y, z1), new Vector3(x2, Y, z2)),2)); edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(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<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(new Vector3(x1, Y, z1), new Vector3(x2, Y, z2)), -2)); edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(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 x3 = 5;
var z3 = lineCal.calZVertical(x3); var z3 = lineCal.calZVertical(x3);
var x4 = -5; var x4 = -5;
var z4 = lineCal.calZVertical(x4); var z4 = lineCal.calZVertical(x4);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(new Tuple<Vector3, Vector3>(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4))); edgeLines.Add(new Tuple<Vector3, Vector3>(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4)));
lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); lines.Add(DisplayLineModel3D(edgeLines, YlineColor));
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4)), 2)); edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4)), 2));
lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); lines.Add(DisplayLineModel3D(edgeLines, YlineColor));
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4)), -2)); edgeLines.Add(lineCal.calLineOfOffset(new Tuple<Vector3, Vector3>(new Vector3(x3, Y, z3), new Vector3(x4, Y, z4)), -2));
lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); lines.Add(DisplayLineModel3D(edgeLines, YlineColor));
return lines; 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) public static LineGeometryModel3D ShowCircleLine(double radius = 1.0, double thickness = 1.0)
{ {
var Y = -0.01F; var Y = -0.01F;

Loading…
Cancel
Save