Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs =================================================================== diff -u -r7041 -r7042 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs (.../GeometryHelper.cs) (revision 7041) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs (.../GeometryHelper.cs) (revision 7042) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Deltares.DamEngine.Data.Standard; namespace Deltares.DamEngine.Data.Geometry; @@ -85,26 +86,28 @@ var p1 = new Point2D(geometryCurve.HeadPoint.X, geometryCurve.HeadPoint.Z); var p2 = new Point2D(geometryCurve.EndPoint.X, geometryCurve.EndPoint.Z); // If head or endpoint is at atX, add this existing point to the local list - if (Math.Abs(p1.X - atX) < GeometryConstants.Accuracy) + if (p1.X.AlmostEquals(atX)) { splitPoints.Add(p1); } - if (Math.Abs(p2.X - atX) < GeometryConstants.Accuracy) + else { - splitPoints.Add(p2); - } - - if (Math.Abs(p1.X - atX) > GeometryConstants.Accuracy && Math.Abs(p2.X - atX) > GeometryConstants.Tolerance) - { - var p3 = new Point2D(intersectionCurve.HeadPoint.X, intersectionCurve.HeadPoint.Z); - var p4 = new Point2D(intersectionCurve.EndPoint.X, intersectionCurve.EndPoint.Z); - LineIntersection res = Routines2D.DetermineIf2DLinesIntersectStrickly(p1, p2, p3, p4, out Point2D resPoint); - if (res == LineIntersection.Intersects) + if (p2.X.AlmostEquals(atX)) { - var splitPoint = new Point2D(resPoint.X, resPoint.Z); - // Add SplitPoint to the local list - splitPoints.Add(splitPoint); + splitPoints.Add(p2); } + else + { + var p3 = new Point2D(intersectionCurve.HeadPoint.X, intersectionCurve.HeadPoint.Z); + var p4 = new Point2D(intersectionCurve.EndPoint.X, intersectionCurve.EndPoint.Z); + LineIntersection res = Routines2D.DetermineIf2DLinesIntersectStrickly(p1, p2, p3, p4, out Point2D resPoint); + if (res == LineIntersection.Intersects) + { + var splitPoint = new Point2D(resPoint.X, resPoint.Z); + // Add SplitPoint to the local list + splitPoints.Add(splitPoint); + } + } } } @@ -149,27 +152,29 @@ { var p1 = new Point2D(geometryCurve.HeadPoint.X, geometryCurve.HeadPoint.Z); var p2 = new Point2D(geometryCurve.EndPoint.X, geometryCurve.EndPoint.Z); - // If head or endpoint is at atX, add this existing point to the local list - if (Math.Abs(p1.X - atX) < GeometryConstants.Accuracy) + + if (p1.X.AlmostEquals(atX)) { splitPoints.Add(p1); } - if (Math.Abs(p2.X - atX) < GeometryConstants.Accuracy) + else { - splitPoints.Add(p2); - } - - if (Math.Abs(p1.X - atX) > GeometryConstants.Accuracy && Math.Abs(p2.X - atX) > GeometryConstants.Accuracy) - { - var p3 = new Point2D(intersectionCurve.HeadPoint.X, intersectionCurve.HeadPoint.Z); - var p4 = new Point2D(intersectionCurve.EndPoint.X, intersectionCurve.EndPoint.Z); - LineIntersection res = Routines2D.DetermineIf2DLinesIntersectStrickly(p1, p2, p3, p4, out Point2D resPoint); - if (res == LineIntersection.Intersects) + if (p2.X.AlmostEquals(atX)) { - var splitPoint = new Point2D(resPoint.X, resPoint.Z); - // Add SplitPoint to the local list - splitPoints.Add(splitPoint); + splitPoints.Add(p2); } + else + { + var p3 = new Point2D(intersectionCurve.HeadPoint.X, intersectionCurve.HeadPoint.Z); + var p4 = new Point2D(intersectionCurve.EndPoint.X, intersectionCurve.EndPoint.Z); + LineIntersection res = Routines2D.DetermineIf2DLinesIntersectStrickly(p1, p2, p3, p4, out Point2D resPoint); + if (res == LineIntersection.Intersects) + { + var splitPoint = new Point2D(resPoint.X, resPoint.Z); + // Add SplitPoint to the local list + splitPoints.Add(splitPoint); + } + } } } @@ -350,8 +355,8 @@ private static bool IsCurveAnExistingCurve(GeometryCurve curve, GeometrySurface surface) { - if (((curve.SurfaceAtLeft == null ? (1) : (curve.SurfaceAtLeft == surface ? 1 : 0)) & - (curve.SurfaceAtRight == null ? 1 : (curve.SurfaceAtRight == surface ? 1 : 0))) != 0) + if (((curve.SurfaceAtLeft == null ? 1 : curve.SurfaceAtLeft == surface ? 1 : 0) & + (curve.SurfaceAtRight == null ? 1 : curve.SurfaceAtRight == surface ? 1 : 0)) != 0) { return true; }