Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs
===================================================================
diff -u -r5256 -r5487
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 5256)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 5487)
@@ -66,7 +66,7 @@
{
return false;
}
-
+
GeometryCurve beginCurve = CurveList[0];
GeometryCurve endCurve = CurveList[^1];
// Just check that the first and last curve are connected
@@ -141,7 +141,6 @@
/// True if continuous, false if not
public bool IsContinuous()
{
-
for (var i = 0; i < CurveList.Count - 1; i++)
{
if ((CurveList[i].EndPoint != CurveList[i + 1].HeadPoint) &&
@@ -167,6 +166,31 @@
}
///
+ /// Creates a clone of the geometry loop
+ ///
+ /// The cloned GeometryLoop
+ public override GeometryLoop Clone()
+ {
+ // Note: explicit use of CalcPoints to ensure calcPoints are populated
+ List p = CalcPoints;
+ if (p.Count > 0)
+ {
+ SyncPoints();
+ }
+
+ GeometryPointString clonedGeometryPointString = base.Clone();
+ var clonedGeometryLoop = new GeometryLoop();
+ clonedGeometryLoop.Points.AddRange(clonedGeometryPointString.Points);
+ clonedGeometryLoop.SyncCalcPoints();
+ foreach (GeometryCurve curve in CurveList)
+ {
+ clonedGeometryLoop.CurveList.Add(curve.Clone(clonedGeometryLoop.CalcPoints));
+ }
+
+ return clonedGeometryLoop;
+ }
+
+ ///
/// Gets the local 2D Points List.
///
///
@@ -195,34 +219,51 @@
}
else
{
- // TODO why not compare by value instead of reference
- if (CurveList[index].HeadPoint == calcPoints[calcPoints.Count - 1])
+ // Compare by reference (is faster then by value)
+ // if (CurveList[index].HeadPoint == calcPoints[calcPoints.Count - 1])
+ // {
+ // calcPoints.Add(CurveList[index].EndPoint);
+ // }
+ // else if (CurveList[index].EndPoint == calcPoints[calcPoints.Count - 1])
+ // {
+ // calcPoints.Add(CurveList[index].HeadPoint);
+ // }
+ //else
+ if (!AddEitherHeadOrEndPointOfCurveToCalcPoints(index))
+
{
- calcPoints.Add(CurveList[index].EndPoint);
- }
- else if (CurveList[index].EndPoint == calcPoints[calcPoints.Count - 1])
- {
- calcPoints.Add(CurveList[index].HeadPoint);
- }
- else
- {
if (calcPoints.Count == 2)
{
calcPoints.Reverse();
}
- if (CurveList[index].HeadPoint == calcPoints[calcPoints.Count - 1])
- {
- calcPoints.Add(CurveList[index].EndPoint);
- }
- else if (CurveList[index].EndPoint == calcPoints[calcPoints.Count - 1])
- {
- calcPoints.Add(CurveList[index].HeadPoint);
- }
+ AddEitherHeadOrEndPointOfCurveToCalcPoints(index);
}
}
}
+ RemoveDoubleClosingPointWhenNeeded();
+ }
+
+ private bool AddEitherHeadOrEndPointOfCurveToCalcPoints(int index)
+ {
+ if (CurveList[index].HeadPoint == calcPoints[calcPoints.Count - 1])
+ {
+ calcPoints.Add(CurveList[index].EndPoint);
+ return true;
+ }
+
+ if (CurveList[index].EndPoint != calcPoints[calcPoints.Count - 1])
+ {
+ return false;
+ }
+
+ calcPoints.Add(CurveList[index].HeadPoint);
+ return true;
+ }
+
+ private void RemoveDoubleClosingPointWhenNeeded()
+ {
if (calcPoints.Count > 0)
{
if (calcPoints[0] == calcPoints[calcPoints.Count - 1])
@@ -243,27 +284,4 @@
public NotEnoughUniquePointsException()
: base("At least 3 unique points are required to determine if the loop is running clockwise.") {}
}
-
- ///
- /// Creates a clone of the geometry loop
- ///
- /// The cloned GeometryLoop
- public override GeometryLoop Clone()
- {
- // Note: explicit use of CalcPoints to ensure calcPoints are populated
- var p = CalcPoints;
- if (p.Count > 0)
- {
- SyncPoints();
- }
- GeometryPointString clonedGeometryPointString = base.Clone();
- var clonedGeometryLoop = new GeometryLoop();
- clonedGeometryLoop.Points.AddRange(clonedGeometryPointString.Points);
- clonedGeometryLoop.SyncCalcPoints();
- foreach (GeometryCurve curve in CurveList)
- {
- clonedGeometryLoop.CurveList.Add(curve.Clone(clonedGeometryLoop.CalcPoints));
- }
- return clonedGeometryLoop;
- }
}
\ No newline at end of file