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