Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryGenerator.cs =================================================================== diff -u -r4134 -r4158 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryGenerator.cs (.../GeometryGenerator.cs) (revision 4134) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryGenerator.cs (.../GeometryGenerator.cs) (revision 4158) @@ -19,7 +19,6 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using Deltares.DamEngine.Data.Standard; using System; using System.Collections.Generic; using System.Diagnostics; @@ -452,7 +451,7 @@ point4.X = attachedCurveList[index2].GetEndPoint().X; point4.Z = attachedCurveList[index2].GetEndPoint().Z; - double angle = FindAngle(point1, point2, point3, point4); + double angle = Routines2D.FindAngle(point1, point2, point3, point4); if (angle < minAngle) { @@ -849,7 +848,7 @@ // check if it is an inner loop for (var innerIndex = 0; innerIndex < newPointCount; innerIndex++) { - PointInPolygon location = CheckIfPointIsInPolygon(loop, newPolygon[innerIndex].X, newPolygon[innerIndex].Z); + PointInPolygon location = Routines2D.CheckIfPointIsInPolygon(loop, newPolygon[innerIndex].X, newPolygon[innerIndex].Z); if (location == PointInPolygon.InsidePolygon) { @@ -864,7 +863,7 @@ // check if it has an inner loop for (var innerIndex1 = 0; innerIndex1 < existingLoopPointCount; innerIndex1++) { - PointInPolygon location = CheckIfPointIsInPolygon(newLoop, polygon[innerIndex1].X, polygon[innerIndex1].Z); + PointInPolygon location = Routines2D.CheckIfPointIsInPolygon(newLoop, polygon[innerIndex1].X, polygon[innerIndex1].Z); if (location == PointInPolygon.InsidePolygon) { @@ -899,142 +898,6 @@ aNewSurfaceList.AddRange(newlyDetectedSurfaceList); } - /// - /// Find if points Ax,ay are between a boundary polygon. - /// - /// The polygon. - /// The x. - /// The z. - /// - private PointInPolygon CheckIfPointIsInPolygon(GeometryLoop polygon, double x, double z) - { - // This is done by calculating and adding the angles from the point to all points - // of the polygon (using the ArcTan2 function). If the sum of these angles is - // aproximate zero the point lies outside the polygon. - // If the sum in aproximate + or - 2Pi the point lies in the polygon; - // Performance tests have proven that this algorithm performs better than the - // polynomial winding number algorithm described at: - // http://geomalgorithms.com/a03-_inclusion.html - - const double epsilon = 1e-10; - var result = PointInPolygon.OutsidePolygon; - - // add the last point at the end, cos the polygon must be closed, so the last node equals the first - var pointAdded = false; - if (polygon.CalcPoints.Count > 0) - { - if (!polygon.CalcPoints[0].LocationEquals(polygon.CalcPoints[polygon.CalcPoints.Count - 1])) - { - polygon.CalcPoints.Add(polygon.CalcPoints[0]); - pointAdded = true; - } - } - - if (polygon.CalcPoints.Count > 2) - { - double deltaX = polygon[0].X - x; - double deltaZ = polygon[0].Z - z; - double absX = Math.Abs(deltaX); - double absZ = Math.Abs(deltaZ); - if ((absX < epsilon) && (absZ < epsilon)) - { - UndoAddIfNeeded(polygon, pointAdded); - return PointInPolygon.OnPolygonEdge; - } - - double al1 = Math.Atan2(deltaZ, deltaX); - double som = 0; - var index = 1; - - while (index < polygon.CalcPoints.Count) - { - deltaX = polygon[index].X - x; - deltaZ = polygon[index].Z - z; - absX = Math.Abs(deltaX); - absZ = Math.Abs(deltaZ); - if ((absX < epsilon) && (absZ < epsilon)) - { - UndoAddIfNeeded(polygon, pointAdded); - return PointInPolygon.OnPolygonEdge; - } - - double al2 = Math.Atan2(deltaZ, deltaX); - double al3 = al2 - al1; - - if (al3 < -Math.PI) - { - al3 = al3 + (2.0 * Math.PI); - } - - if (al3 > Math.PI) - { - al3 = al3 - (2.0 * Math.PI); - } - - if (((Math.PI - al3) < epsilon) || ((Math.PI + al3) < epsilon)) - { - UndoAddIfNeeded(polygon, pointAdded); - return PointInPolygon.OnPolygonEdge; - } - - som = som + al3; - al1 = al2; - index++; - } - - if ((som > (1.9 * Math.PI)) || (som < (-1.9 * Math.PI))) - { - result = PointInPolygon.InsidePolygon; - } - else - { - result = PointInPolygon.OutsidePolygon; - } - } - - UndoAddIfNeeded(polygon, pointAdded); - return result; - } - - private void UndoAddIfNeeded(GeometryLoop polygon, bool needed) - { - if (needed) - { - polygon.CalcPoints.Remove(polygon.CalcPoints[polygon.CalcPoints.Count - 1]); - } - } - - /// - /// Determines angle between 2 lines. - /// Clockwise Input: point1, commonpoint, point2, commonpoint, normalvect(ex [0,0,-1]), validate - /// - /// - /// - /// - /// - /// - private double FindAngle(Point2D line1Point1, Point2D line1Point2, Point2D line2Point1, - Point2D line2Point2) - { - double x1 = line1Point2.X - line1Point1.X; - double z1 = line1Point2.Z - line1Point1.Z; - - double x2 = line2Point2.X - line2Point1.X; - double z2 = line2Point2.Z - line2Point1.Z; - - double angle1 = GeneralMathRoutines.RadianToDegree(Math.Atan2(z1, x1)); - double angle2 = GeneralMathRoutines.RadianToDegree(Math.Atan2(z2, x2)); - - double angle = angle2 - angle1; - - if (angle < 0) - { - angle += 360; - } - - return angle; - } - #region Nested type: DirectionCurve internal struct DirectionCurve Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MultiCoreMacroStabilityTests.cs =================================================================== diff -u -r4135 -r4158 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MultiCoreMacroStabilityTests.cs (.../MultiCoreMacroStabilityTests.cs) (revision 4135) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MultiCoreMacroStabilityTests.cs (.../MultiCoreMacroStabilityTests.cs) (revision 4158) @@ -67,7 +67,7 @@ Assert.IsNotNull(engineInterface.DamProjectData); engineInterface.DamProjectData.ProjectPath = @"MultiCore\"; string result = engineInterface.Validate(); - Assert.IsTrue(result == null, "Validation must succeed but does not, see output xml in debugger"); + Assert.IsNull(result, "Validation must succeed but does not, see output xml in debugger"); string outputString = engineInterface.Run(); File.WriteAllText("Output.xml", outputString); Output output = DamXmlSerialization.LoadOutputFromXmlString(outputString); @@ -117,7 +117,7 @@ Output output = DamXmlSerialization.LoadOutputFromXmlString(outputString); if (engineInterface.DamProjectData.DamProjectType == DamProjectType.Design) { - Assert.AreNotEqual(null, output.Results.CalculationResults); + Assert.IsNotNull(output.Results.CalculationResults); } else {