Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/LineHelper.cs =================================================================== diff -u -r3893 -r4000 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/LineHelper.cs (.../LineHelper.cs) (revision 3893) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/LineHelper.cs (.../LineHelper.cs) (revision 4000) @@ -45,13 +45,14 @@ var point4 = new Point2D(line2.EndPoint.X, line2.EndPoint.Z); Point2D ip; - var res = Routines2D.DetermineIf2DLinesIntersectStrickly(point1, point2, point3, - point4, out ip); + LineIntersection res = Routines2D.DetermineIf2DLinesIntersectStrickly(point1, point2, point3, + point4, out ip); if (ip != null) { intersectPoint.X = ip.X; intersectPoint.Z = ip.Z; } + return res == LineIntersection.Intersects; } @@ -67,20 +68,30 @@ /// Intersections of this line extrapolated to the negative and positive X with the circle. public static List ExtendedSurfaceIntersectionPointsWithCircle(double xMid, double zMid, double radius, IList pointss) { - var points = pointss.Where(p => !double.IsNaN(p.X)).ToList(); + List points = pointss.Where(p => !double.IsNaN(p.X)).ToList(); if (points.Count >= 2) { - var requiredMinSurfacePointX = xMid - radius; - var requiredMaxSurfacePointX = xMid + radius; + double requiredMinSurfacePointX = xMid - radius; + double requiredMaxSurfacePointX = xMid + radius; if (requiredMinSurfacePointX < points[0].X) { - points.Insert(0, new Point2D{ X = requiredMinSurfacePointX, Z = points[0].Z}); + points.Insert(0, new Point2D + { + X = requiredMinSurfacePointX, + Z = points[0].Z + }); } + if (requiredMaxSurfacePointX > points[points.Count - 1].X) { - points.Insert(points.Count, new Point2D{ X = requiredMaxSurfacePointX, Z = points[points.Count - 1].Z}); + points.Insert(points.Count, new Point2D + { + X = requiredMaxSurfacePointX, + Z = points[points.Count - 1].Z + }); } } + return IntersectionPointsWithCircle(xMid, zMid, radius, points); } @@ -97,27 +108,34 @@ var result = new List(); if (points.Count >= 2) { - for (int pointIndex = 0; pointIndex < points.Count - 1; pointIndex++) + for (var pointIndex = 0; pointIndex < points.Count - 1; pointIndex++) { - var start = points[pointIndex]; - var end = points[pointIndex + 1]; - var outOfReach = ((Math.Max(start.X, end.X) < xMid - radius) || + Point2D start = points[pointIndex]; + Point2D end = points[pointIndex + 1]; + bool outOfReach = ((Math.Max(start.X, end.X) < xMid - radius) || (Math.Min(start.X, end.X) > xMid + radius) || (Math.Max(start.Z, end.Z) < zMid - radius) || (Math.Min(start.Z, end.Z) > zMid + radius)); if (!outOfReach) { var line = new Line - { - BeginPoint = start, EndPoint = end - }; + { + BeginPoint = start, + EndPoint = end + }; result.AddRange(Intersect_Circle_line(xMid, zMid, radius, line)); } } } + return result; } + public static GeometryPoint GetIntersectionPointWithExtrapolation(GeometryPoint p1, GeometryPoint p2, GeometryPoint p3, GeometryPoint p4) + { + return IntersectionPointWithExtrapolation(p1, p2, p3, p4); + } + /// /// Intersects the circle line. /// @@ -131,11 +149,6 @@ return Routines2D.IntersectCircleline(xm, ym, r, line.BeginPoint.X, line.EndPoint.X, line.BeginPoint.Z, line.EndPoint.Z); } - public static GeometryPoint GetIntersectionPointWithExtrapolation(GeometryPoint p1, GeometryPoint p2, GeometryPoint p3, GeometryPoint p4) - { - return IntersectionPointWithExtrapolation(p1, p2, p3, p4); - } - /// /// Determines the intersection point of two lines, allowing the intersection point being extrapolated. /// @@ -153,11 +166,12 @@ var point3 = new Point2D(p3.X, p3.Z); var point4 = new Point2D(p4.X, p4.Z); - Routines2D.DetermineIf2DLinesIntersectWithExtrapolation(point1, point2, point3, point4, out var ip); + Routines2D.DetermineIf2DLinesIntersectWithExtrapolation(point1, point2, point3, point4, out Point2D ip); if (ip != null) { intersectPoint = new GeometryPoint(ip.X, ip.Z); } + return intersectPoint; } }