From 006603593f3b7b883f97b54bcf091e66a6b8e820 Mon Sep 17 00:00:00 2001 From: Tongg Date: Wed, 25 Dec 2024 17:28:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=203D=E8=85=B0=E7=AB=96=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Views/Grading/DiamondSelect.xaml | 7 +++++- .../ViewportData/Helper/ViewportHelperPro.cs | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Views/Grading/DiamondSelect.xaml b/Views/Grading/DiamondSelect.xaml index 8cad8df..288a9a0 100644 --- a/Views/Grading/DiamondSelect.xaml +++ b/Views/Grading/DiamondSelect.xaml @@ -7,11 +7,13 @@ xmlns:hc="https://handyorg.github.io/handycontrol" d:DesignWidth="1000" d:DesignHeight="600" + mc:Ignorable="d"> - + + @@ -100,4 +102,7 @@ + + + diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs index 2974f03..8541947 100644 --- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs +++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs @@ -346,6 +346,7 @@ public class ViewportHelperPro List selFaceVector = new List(); if (waistList.Count > 0) { + //顶线和底线 foreach (var entity in waistList) { selFaceVector.Add(entity.Point1); @@ -367,8 +368,20 @@ public class ViewportHelperPro } result.Add(DisplayLineModel3D( VectorClockwiseSort(ViewportManager.GirdleBottomLines), color??ViewportManager.LineColor, thickness)); result.Add(DisplayLineModel3D( VectorClockwiseSort(ViewportManager.GirdleTopLines), color??ViewportManager.LineColor, thickness)); + //找到所有平行于Y轴的线 + for (int i = 0; i < uniqueVectors.ToList().Count - 1; i++) + { + var nowItem = uniqueVectors.ToList()[i]; + var nextItem = uniqueVectors.ToList()[i + 1]; + var line = new Tuple(nowItem, nextItem); + if (IsLineSegmentParallelToYAxis(line)) + { + result.Add(DisplayLineModel3D(new List(){nowItem,nextItem }, color??ViewportManager.LineColor, thickness)); + } + } } + return result; } @@ -1009,6 +1022,17 @@ public class ViewportHelperPro var v = p2 - p0; return Vector3.Cross(u, v); } + private static bool IsLineSegmentParallelToYAxis(Tuple lineSegment,float epsilon = 1e-6f) + { + Vector3 nowItem = lineSegment.Item1; + Vector3 nextItem = lineSegment.Item2; + + if (Math.Abs(nowItem.X - nextItem.X) < epsilon && Math.Abs(nowItem.Z - nextItem.Z) < epsilon) + { + return true; // 平行于 Y 轴 + } + return false; // 不平行于 Y 轴 + } #endregion } \ No newline at end of file