Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryGenerator.cs
===================================================================
diff -u -r5219 -r5220
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryGenerator.cs (.../GeometryGenerator.cs) (revision 5219)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryGenerator.cs (.../GeometryGenerator.cs) (revision 5220)
@@ -1039,418 +1039,231 @@
geometryData.NewlyEffectedPoints.Clear();
}
- ///
- /// Regenerates all the Parellel curves.
- ///
- ///
- ///
- ///
- ///
- private bool RegenerateParallelCurves(GeometryCurve line1, GeometryCurve line2, ref bool isCurveInserted)
+ private static double DetermineSlope(GeometryCurve line)
+ {
+ if (line.HeadPoint.Z.IsNearEqual(line.EndPoint.Z))
{
- const double accuracyAngle = 5E-12;
- // check if the lines are parallel and on
- // |----o------|----o or o----|------o----| or
- // |----o------o----| or o----|------|----o
- // |o----o----------| or |----------o----o|
- Point2D localPoint1 = line1.HeadPoint;
- Point2D localPoint2 = line1.EndPoint;
- Point2D localPoint3 = line2.HeadPoint;
- Point2D localPoint4 = line2.EndPoint;
+ return double.MaxValue;
+ }
+ else
+ {
+ return (line.HeadPoint.X - line.EndPoint.X)/(line.HeadPoint.Z - line.EndPoint.Z);
+ }
+ }
- bool isPoint3OnLine1 = Routines2D.DoesPointExistInLine(localPoint1, localPoint2, localPoint3, GeometryConstants.Accuracy);
- bool isPoint4OnLine1 = Routines2D.DoesPointExistInLine(localPoint1, localPoint2, localPoint4, GeometryConstants.Accuracy);
- bool isPoint1OnLine2 = Routines2D.DoesPointExistInLine(localPoint3, localPoint4, localPoint1, GeometryConstants.Accuracy);
- bool isPoint2OnLine2 = Routines2D.DoesPointExistInLine(localPoint3, localPoint4, localPoint2, GeometryConstants.Accuracy);
+ private static void DeterminePointClosestToLine(Point2D point1, Point2D point2, GeometryCurve line,
+ ref bool isPoint1ClosestToLine, ref bool isPoint2ClosestToLine)
+ {
+ double distance1 = Routines2D.CalculateDistanceToLine(point1.X, point1.Z,
+ line.HeadPoint.X, line.HeadPoint.Z,
+ line.EndPoint.X, line.EndPoint.Z);
+ double distance2 = Routines2D.CalculateDistanceToLine(point2.X, point2.Z,
+ line.HeadPoint.X, line.HeadPoint.Z,
+ line.EndPoint.X, line.EndPoint.Z);
+ if (distance1 > distance2)
+ isPoint1ClosestToLine = false;
+ else
+ isPoint2ClosestToLine = false;
+ }
- double slope1;
- double slope2;
+ private static void DeterminePointClosestToAnotherPoint(Point2D point1, Point2D point2, Point2D point3,
+ ref bool isPoint1ClosestToPoint3, ref bool isPoint2ClosestToPoint3)
+ {
+ double distance1 = Routines2D.Compute2DDistance(point1.X, point1.Z, point3.X, point3.Z);
+ double distance2 = Routines2D.Compute2DDistance(point2.X, point2.Z, point3.X, point3.Z);
+ if (distance1 > distance2)
+ isPoint1ClosestToPoint3 = false;
+ else
+ isPoint2ClosestToPoint3 = false;
+ }
+
+ ///
+ /// Regenerates all the Parallel curves.
+ ///
+ ///
+ ///
+ ///
+ ///
+ private bool RegenerateParallelCurves(GeometryCurve line1, GeometryCurve line2, ref bool isCurveInserted)
+ {
+ // check if the lines are parallel and on
+ // |----o------|----o or o----|------o----| or
+ // |----o------o----| or o----|------|----o
+ // |o----o----------| or |----------o----o|
+ Point2D localPoint1 = line1.HeadPoint;
+ Point2D localPoint2 = line1.EndPoint;
+ Point2D localPoint3 = line2.HeadPoint;
+ Point2D localPoint4 = line2.EndPoint;
- if (localPoint1.Z.IsNearEqual(localPoint2.Z))
+ bool isPoint3OnLine1 = Routines2D.DoesPointExistInLine(localPoint1, localPoint2, localPoint3, GeometryConstants.Accuracy);
+ bool isPoint4OnLine1 = Routines2D.DoesPointExistInLine(localPoint1, localPoint2, localPoint4, GeometryConstants.Accuracy);
+ bool isPoint1OnLine2 = Routines2D.DoesPointExistInLine(localPoint3, localPoint4, localPoint1, GeometryConstants.Accuracy);
+ bool isPoint2OnLine2 = Routines2D.DoesPointExistInLine(localPoint3, localPoint4, localPoint2, GeometryConstants.Accuracy);
+ bool isPoint1SameAsPoint3 = Routines2D.DetermineIfPointsCoincide(localPoint1.X, localPoint1.Z, localPoint3.X, localPoint3.Z,GeometryConstants.Accuracy);
+ bool isPoint1SameAsPoint4 = Routines2D.DetermineIfPointsCoincide(localPoint1.X, localPoint1.Z, localPoint4.X, localPoint4.Z, GeometryConstants.Accuracy);
+ bool isPoint2SameAsPoint3 = Routines2D.DetermineIfPointsCoincide(localPoint2.X, localPoint2.Z, localPoint3.X, localPoint3.Z, GeometryConstants.Accuracy);
+ bool isPoint2SameAsPoint4 = Routines2D.DetermineIfPointsCoincide(localPoint2.X, localPoint2.Z, localPoint4.X, localPoint4.Z, GeometryConstants.Accuracy);
+
+ double slope1 = DetermineSlope(line1);
+ double slope2 = DetermineSlope(line2);
+
+ const double accuracyAngle = 5E-12;
+ if (Math.Abs(Math.Abs(slope1) - Math.Abs(slope2)) > accuracyAngle)
+ {
+ // lines are not (exactly) parallel
+ if (isPoint1OnLine2 && isPoint2OnLine2)
{
- slope1 = double.MaxValue;
+ DeterminePointClosestToLine(localPoint1, localPoint2, line2, ref isPoint1OnLine2, ref isPoint2OnLine2);
}
- else
+ if (isPoint3OnLine1 && isPoint4OnLine1)
{
- slope1 = (localPoint1.X - localPoint2.X)/(localPoint1.Z - localPoint2.Z);
+ DeterminePointClosestToLine(localPoint3, localPoint4, line1, ref isPoint3OnLine1, ref isPoint4OnLine1);
}
-
- if (localPoint3.Z.IsNearEqual(localPoint4.Z))
+ if (isPoint1SameAsPoint3 && isPoint2SameAsPoint3)
{
- slope2 = double.MaxValue;
+ DeterminePointClosestToAnotherPoint(localPoint1, localPoint2, localPoint3, ref isPoint1SameAsPoint3, ref isPoint2SameAsPoint3);
}
- else
+ if (isPoint1SameAsPoint4 && isPoint2SameAsPoint4)
{
- slope2 = (localPoint3.X - localPoint4.X)/(localPoint3.Z - localPoint4.Z);
+ DeterminePointClosestToAnotherPoint(localPoint1, localPoint2, localPoint4, ref isPoint1SameAsPoint4, ref isPoint2SameAsPoint4);
}
+ }
- if (Math.Abs(Math.Abs(slope1) - Math.Abs(slope2)) > accuracyAngle)
+ // check for parallel
+ if ((isPoint1OnLine2 && isPoint2OnLine2) || (isPoint3OnLine1 && isPoint4OnLine1)
+ || ((isPoint3OnLine1 || isPoint4OnLine1) && (isPoint1OnLine2 || isPoint2OnLine2)))
+ {
+ // p1----p3------p2----p4
+ GeometryCurve newLine;
+ if (isPoint3OnLine1 && !isPoint4OnLine1 && !isPoint1SameAsPoint3 && !isPoint2SameAsPoint3)
{
- if (isPoint1OnLine2 && isPoint2OnLine2)
- {
- double distance1 = Routines2D.CalculateDistanceToLine(localPoint1.X, localPoint1.Z, localPoint3.X, localPoint3.Z, localPoint4.X, localPoint4.Z);
- double distance2 = Routines2D.CalculateDistanceToLine(localPoint2.X, localPoint2.Z, localPoint3.X, localPoint3.Z, localPoint4.X, localPoint4.Z);
- if (distance1 > distance2)
- {
- isPoint1OnLine2 = false;
- }
- else
- {
- isPoint2OnLine2 = false;
- }
- }
+ newLine = SplitCurve(line1, line2.HeadPoint);
- if (isPoint3OnLine1 && isPoint4OnLine1)
- {
- double distance1 = Routines2D.CalculateDistanceToLine(localPoint3.X, localPoint3.Z, localPoint1.X, localPoint1.Z, localPoint2.X, localPoint2.Z);
- double distance2 = Routines2D.CalculateDistanceToLine(localPoint4.X, localPoint4.Z, localPoint1.X, localPoint1.Z, localPoint2.X, localPoint2.Z);
- if (distance1 > distance2)
- {
- isPoint3OnLine1 = false;
- }
- else
- {
- isPoint4OnLine1 = false;
- }
- }
+ line2.HeadPoint = isPoint2OnLine2 ? newLine.EndPoint : line1.HeadPoint;
+ CheckAndAddToIntersectedCurveList(line2);
+
+ isCurveInserted = true;
+ return true;
}
- bool isPoint1SameAsPoint3 = Routines2D.DetermineIfPointsCoincide(localPoint1.X, localPoint1.Z, localPoint3.X, localPoint3.Z,GeometryConstants.Accuracy);
- bool isPoint1SameAsPoint4 = Routines2D.DetermineIfPointsCoincide(localPoint1.X, localPoint1.Z, localPoint4.X, localPoint4.Z, GeometryConstants.Accuracy);
- bool isPoint2SameAsPoint3 = Routines2D.DetermineIfPointsCoincide(localPoint2.X, localPoint2.Z, localPoint3.X, localPoint3.Z, GeometryConstants.Accuracy);
- bool isPoint2SameAsPoint4 = Routines2D.DetermineIfPointsCoincide(localPoint2.X, localPoint2.Z, localPoint4.X, localPoint4.Z, GeometryConstants.Accuracy);
-
- if (Math.Abs(Math.Abs(slope1) - Math.Abs(slope2)) > accuracyAngle)
+ // p1----p4------p2----p3
+ if (isPoint4OnLine1 && !isPoint3OnLine1 && !isPoint1SameAsPoint4 && !isPoint2SameAsPoint4)
{
- if (isPoint1SameAsPoint3 && isPoint2SameAsPoint3)
- {
- double distance1 = Routines2D.Compute2DDistance(localPoint1.X, localPoint1.Z, localPoint3.X, localPoint3.Z);
- double distance2 = Routines2D.Compute2DDistance(localPoint2.X, localPoint2.Z, localPoint3.X, localPoint3.Z);
- if (distance1 > distance2)
- {
- isPoint1SameAsPoint3 = false;
- }
- else
- {
- isPoint2SameAsPoint3 = false;
- }
- }
+ newLine = SplitCurve(line1, line2.EndPoint);
+ line2.EndPoint = isPoint2OnLine2 ? newLine.EndPoint : line1.HeadPoint;
+ CheckAndAddToIntersectedCurveList(line2);
- if (isPoint1SameAsPoint4 && isPoint2SameAsPoint4)
- {
- double distance1 = Routines2D.Compute2DDistance(localPoint1.X, localPoint1.Z, localPoint4.X, localPoint4.Z);
- double distance2 = Routines2D.Compute2DDistance(localPoint2.X, localPoint2.Z, localPoint4.X, localPoint4.Z);
- if (distance1 > distance2)
- {
- isPoint1SameAsPoint4 = false;
- }
- else
- {
- isPoint2SameAsPoint4 = false;
- }
- }
+ isCurveInserted = true;
+ return true;
}
- //check for parallel
- if ((isPoint1OnLine2 && isPoint2OnLine2) || (isPoint3OnLine1 && isPoint4OnLine1)
- || ((isPoint3OnLine1 || isPoint4OnLine1) && (isPoint1OnLine2 || isPoint2OnLine2)))
+ // p1----p3------p4----p2
+ if (isPoint3OnLine1 && isPoint4OnLine1 && !isPoint1SameAsPoint3 && !isPoint2SameAsPoint4 &&
+ !isPoint2SameAsPoint3 && !isPoint1SameAsPoint4)
{
- // p1----p3------p2----p4
- GeometryCurve newLine;
- if (isPoint3OnLine1 && !isPoint4OnLine1 && !isPoint1SameAsPoint3 && !isPoint2SameAsPoint3)
+ double distance1 = Routines2D.Compute2DDistance(localPoint1.X, localPoint1.Z, localPoint3.X, localPoint3.Z);
+ double distance2 = Routines2D.Compute2DDistance(localPoint1.X, localPoint1.Z, localPoint4.X, localPoint4.Z);
+
+ if (distance1 < distance2)
{
newLine = SplitCurve(line1, line2.HeadPoint);
-
- line2.HeadPoint = isPoint2OnLine2 ? newLine.EndPoint : line1.HeadPoint;
- CheckAndAddToIntersectedCurveList(line2);
-
- isCurveInserted = true;
- return true;
+ newLine.HeadPoint = line2.EndPoint;
}
-
- // p1----p4------p2----p3
- if (isPoint4OnLine1 && !isPoint3OnLine1 && !isPoint1SameAsPoint4 && !isPoint2SameAsPoint4)
+ else
{
newLine = SplitCurve(line1, line2.EndPoint);
- line2.EndPoint = isPoint2OnLine2 ? newLine.EndPoint : line1.HeadPoint;
- CheckAndAddToIntersectedCurveList(line2);
-
- isCurveInserted = true;
- return true;
+ newLine.HeadPoint = line2.HeadPoint;
}
+ CheckAndAddToIntersectedCurveList(line2);
- // p1----p3------p4----p2
- if (isPoint3OnLine1 && isPoint4OnLine1 && !isPoint1SameAsPoint3 && !isPoint2SameAsPoint4 &&
- !isPoint2SameAsPoint3 && !isPoint1SameAsPoint4)
- {
- double distance1 = Routines2D.Compute2DDistance(localPoint1.X, localPoint1.Z, localPoint3.X, localPoint3.Z);
- double distance2 = Routines2D.Compute2DDistance(localPoint1.X, localPoint1.Z, localPoint4.X, localPoint4.Z);
+ isCurveInserted = true;
+ return true;
+ }
- if (distance1 < distance2)
- {
- newLine = SplitCurve(line1, line2.HeadPoint);
- newLine.HeadPoint = line2.EndPoint;
- }
- else
- {
- newLine = SplitCurve(line1, line2.EndPoint);
- newLine.HeadPoint = line2.HeadPoint;
- }
- CheckAndAddToIntersectedCurveList(line2);
+ // p3----p1------p2----p4
+ if (isPoint1OnLine2 && isPoint2OnLine2 && !isPoint1SameAsPoint3 && !isPoint2SameAsPoint4 &&
+ !isPoint2SameAsPoint3 && !isPoint1SameAsPoint4)
+ {
+ double distance1 = Routines2D.Compute2DDistance(localPoint3.X, localPoint3.Z, localPoint1.X, localPoint1.Z);
+ double distance2 = Routines2D.Compute2DDistance(localPoint3.X, localPoint3.Z, localPoint2.X, localPoint2.Z);
- isCurveInserted = true;
- return true;
+ if (distance1 < distance2)
+ {
+ newLine = SplitCurve(line2, line1.HeadPoint);
+ newLine.HeadPoint = line1.EndPoint;
}
-
- // p3----p1------p2----p4
- if (isPoint1OnLine2 && isPoint2OnLine2 && !isPoint1SameAsPoint3 && !isPoint2SameAsPoint4 &&
- !isPoint2SameAsPoint3 && !isPoint1SameAsPoint4)
+ else
{
- double distance1 = Routines2D.Compute2DDistance(localPoint3.X, localPoint3.Z, localPoint1.X, localPoint1.Z);
- double distance2 = Routines2D.Compute2DDistance(localPoint3.X, localPoint3.Z, localPoint2.X, localPoint2.Z);
+ newLine = SplitCurve(line2, line1.EndPoint);
+ newLine.HeadPoint = line1.HeadPoint;
+ }
+ CheckAndAddToIntersectedCurveList(line1);
- if (distance1 < distance2)
- {
- newLine = SplitCurve(line2, line1.HeadPoint);
- newLine.HeadPoint = line1.EndPoint;
- }
- else
- {
- newLine = SplitCurve(line2, line1.EndPoint);
- newLine.HeadPoint = line1.HeadPoint;
- }
- CheckAndAddToIntersectedCurveList(line1);
+ isCurveInserted = true;
+ return true;
+ }
- isCurveInserted = true;
- return true;
+ // vertices coincidence cases - Line2 on Line1
+ if ((isPoint4OnLine1 && isPoint3OnLine1) &&
+ (!((isPoint2SameAsPoint3 && isPoint1SameAsPoint4) || (isPoint2SameAsPoint4 && isPoint1SameAsPoint3))))
+ {
+ if (isPoint1SameAsPoint3)
+ {
+ line1.HeadPoint = line2.EndPoint;
}
-
- // vertices coincidence cases - Line2 on Line1
- if ((isPoint4OnLine1 && isPoint3OnLine1) &&
- (!((isPoint2SameAsPoint3 && isPoint1SameAsPoint4) || (isPoint2SameAsPoint4 && isPoint1SameAsPoint3))))
+ else if (isPoint2SameAsPoint3)
{
- if (isPoint1SameAsPoint3)
- {
- line1.HeadPoint = line2.EndPoint;
- }
- else if (isPoint2SameAsPoint3)
- {
- line1.EndPoint = line2.EndPoint;
- }
- else if (isPoint2SameAsPoint4)
- {
- line1.EndPoint = line2.HeadPoint;
- }
- else
- {
- line1.HeadPoint = line2.HeadPoint;
- }
- CheckAndAddToIntersectedCurveList(line1);
- CheckAndAddToIntersectedCurveList(line2);
-
- return true;
+ line1.EndPoint = line2.EndPoint;
}
-
- // Line1 on Line2
- if ((isPoint1OnLine2 && isPoint2OnLine2) &&
- (!((isPoint2SameAsPoint3 && isPoint1SameAsPoint4) || (isPoint2SameAsPoint4 && isPoint1SameAsPoint3))))
+ else if (isPoint2SameAsPoint4)
{
- if (isPoint1SameAsPoint3)
- {
- line2.HeadPoint = line1.EndPoint;
- }
- else if (isPoint1SameAsPoint4)
- {
- line2.EndPoint = line1.EndPoint;
- }
- else if (isPoint2SameAsPoint4)
- {
- line2.EndPoint = line1.HeadPoint;
- }
- else
- {
- line2.HeadPoint = line1.HeadPoint;
- }
- CheckAndAddToIntersectedCurveList(line1);
- CheckAndAddToIntersectedCurveList(line2);
- return true;
+ line1.EndPoint = line2.HeadPoint;
}
+ else
+ {
+ line1.HeadPoint = line2.HeadPoint;
+ }
+ CheckAndAddToIntersectedCurveList(line1);
+ CheckAndAddToIntersectedCurveList(line2);
+
+ return true;
}
- // Line1 and Line2 are same
- if ((isPoint1SameAsPoint3 && isPoint2SameAsPoint4) || (isPoint1SameAsPoint4 && isPoint2SameAsPoint3))
+ // Line1 on Line2
+ if ((isPoint1OnLine2 && isPoint2OnLine2) &&
+ (!((isPoint2SameAsPoint3 && isPoint1SameAsPoint4) || (isPoint2SameAsPoint4 && isPoint1SameAsPoint3))))
{
+ if (isPoint1SameAsPoint3)
+ {
+ line2.HeadPoint = line1.EndPoint;
+ }
+ else if (isPoint1SameAsPoint4)
+ {
+ line2.EndPoint = line1.EndPoint;
+ }
+ else if (isPoint2SameAsPoint4)
+ {
+ line2.EndPoint = line1.HeadPoint;
+ }
+ else
+ {
+ line2.HeadPoint = line1.HeadPoint;
+ }
CheckAndAddToIntersectedCurveList(line1);
CheckAndAddToIntersectedCurveList(line2);
return true;
}
- return false;
}
-
-
-
- // private bool RegenerateParallelCurves(GeometryCurve line1, GeometryCurve line2, ref bool isCurveInserted)
- // {
- // Point2D headPoint1 = line1.HeadPoint;
- // Point2D endPoint1 = line1.EndPoint;
- // Point2D headPoint2 = line2.HeadPoint;
- // Point2D endPoint2 = line2.EndPoint;
- // bool flag1 = Routines2D.DoesPointExistInLine(headPoint1, endPoint1, headPoint2, 0.001);
- // bool flag2 = Routines2D.DoesPointExistInLine(headPoint1, endPoint1, endPoint2, 0.001);
- // bool flag3 = Routines2D.DoesPointExistInLine(headPoint2, endPoint2, headPoint1, 0.001);
- // bool flag4 = Routines2D.DoesPointExistInLine(headPoint2, endPoint2, endPoint1, 0.001);
- // double slope1 = !headPoint1.Z.IsNearEqual(endPoint1.Z) ? (headPoint1.X - endPoint1.X) / (headPoint1.Z - endPoint1.Z) : double.MaxValue;
- // double slope2 = !headPoint2.Z.IsNearEqual(endPoint2.Z) ? (headPoint2.X - endPoint2.X) / (headPoint2.Z - endPoint2.Z) : double.MaxValue;
- // if (Math.Abs(Math.Abs(slope1) - Math.Abs(slope2)) > 5E-12)
- // {
- // // The lines are not parallel
- // if (flag1 && flag2)
- // {
- // // When both headPoint2 and endPoint2 are (almost) on line1, then flag point that is closest to line1
- // // When the distance is the same, flag endPoint2
- // DetermineFlagValuesWithDistanceToLine(headPoint2, endPoint2, headPoint1, endPoint1, ref flag1, ref flag2);
- // }
- // if (flag3 && flag4)
- // {
- // // When both headPoint1 and endPoint1 are (almost) on line2, then flag point that is closest to line2
- // // When the distance is the same, flag endPoint1
- // DetermineFlagValuesWithDistanceToLine(headPoint1, endPoint1, headPoint2, endPoint2, ref flag3, ref flag4);
- // }
- // }
- //
- // bool flag5 = Routines2D.DetermineIfPointsCoincide(headPoint1.X, headPoint1.Z, headPoint2.X, headPoint2.Z, 0.001);
- // bool flag6 = Routines2D.DetermineIfPointsCoincide(headPoint1.X, headPoint1.Z, endPoint2.X, endPoint2.Z, 0.001);
- // bool flag7 = Routines2D.DetermineIfPointsCoincide(endPoint1.X, endPoint1.Z, headPoint2.X, headPoint2.Z, 0.001);
- // bool flag8 = Routines2D.DetermineIfPointsCoincide(endPoint1.X, endPoint1.Z, endPoint2.X, endPoint2.Z, 0.001);
- // if (Math.Abs(Math.Abs(slope1) - Math.Abs(slope2)) > 5E-12)
- // {
- // // The lines are not parallel
- // if (flag5 && flag7)
- // {
- // // When both headPoint1 and endPoint1 (almost) coincide with headPoint2, then flag point that is closest to headPoint2
- // // When the distance is the same, flag endPoint1
- // DetermineFlagValuesWithDistanceBetweenPoints(headPoint1, endPoint1, headPoint2, ref flag5, ref flag7);
- // }
- // if (flag6 && flag8)
- // {
- // // When both headPoint1 and endPoint1 (almost) coincide with endPoint2, then flag point that is closest to endPoint2
- // // When the distance is the same, flag endPoint1
- // DetermineFlagValuesWithDistanceBetweenPoints(headPoint1, endPoint1, endPoint2, ref flag6, ref flag8);
- // }
- // }
- //
- // //if (flag3 && flag4 || flag1 && flag2 || flag1 | flag2 && flag3 || flag4)
- // //ToDo bka: Check if the above condition is correct, was | operator intended instead of || operator?
- // //Next line is the same as above line, but with || operator instead of | operator
- // if (flag3 && flag4 || flag1 && flag2 || ((flag1 || flag2) && flag3) || flag4)
- // //The solo flag4 at the end is strange, because at the start there is flag3 && flag4, you could leave that out:
- // if (flag1 && flag2 || ((flag1 || flag2) && flag3) || flag4)
- // //Probably something else was meant, but that could give a different result, e.g.
- // if (flag3 && flag4 || flag1 && flag2 || (flag1 || flag2) && (flag3 || flag4))
- // {
- // if (flag1 && !flag2 && !flag5 && !flag7)
- // {
- // GeometryCurve geometryCurve = this.SplitCurve(line1, line2.HeadPoint);
- // line2.HeadPoint = flag4 ? geometryCurve.EndPoint : line1.HeadPoint;
- // CheckAndAddToIntersectedCurveList(line2);
- // isCurveInserted = true;
- // return true;
- // }
- //
- // if (flag2 && !flag1 && !flag6 && !flag8)
- // {
- // GeometryCurve geometryCurve = this.SplitCurve(line1, line2.EndPoint);
- // line2.EndPoint = flag4 ? geometryCurve.EndPoint : line1.HeadPoint;
- // CheckAndAddToIntersectedCurveList(line2);
- // isCurveInserted = true;
- // return true;
- // }
- //
- // if (flag1 && flag2 && !flag5 && !flag8 && !flag7 && !flag6)
- // {
- // if (Routines2D.Compute2DDistance(headPoint1.X, headPoint1.Z, headPoint2.X, headPoint2.Z) <
- // Routines2D.Compute2DDistance(headPoint1.X, headPoint1.Z, endPoint2.X, endPoint2.Z))
- // SplitCurve(line1, line2.HeadPoint).HeadPoint = line2.EndPoint;
- // else
- // SplitCurve(line1, line2.EndPoint).HeadPoint = line2.HeadPoint;
- // CheckAndAddToIntersectedCurveList(line2);
- // isCurveInserted = true;
- // return true;
- // }
- //
- // if (flag3 && flag4 && !flag5 && !flag8 && !flag7 && !flag6)
- // {
- // if (Routines2D.Compute2DDistance(headPoint2.X, headPoint2.Z, headPoint1.X, headPoint1.Z) <
- // Routines2D.Compute2DDistance(headPoint2.X, headPoint2.Z, endPoint1.X, endPoint1.Z))
- // SplitCurve(line2, line1.HeadPoint).HeadPoint = line1.EndPoint;
- // else
- // SplitCurve(line2, line1.EndPoint).HeadPoint = line1.HeadPoint;
- // CheckAndAddToIntersectedCurveList(line1);
- // isCurveInserted = true;
- // return true;
- // }
- //
- // if (flag2 && flag1 && !(flag7 && flag6) && !(flag8 && flag5))
- // {
- // if (flag5)
- // line1.HeadPoint = line2.EndPoint;
- // else if (flag7)
- // line1.EndPoint = line2.EndPoint;
- // else if (flag8)
- // line1.EndPoint = line2.HeadPoint;
- // else
- // line1.HeadPoint = line2.HeadPoint;
- // CheckAndAddToIntersectedCurveList(line1);
- // CheckAndAddToIntersectedCurveList(line2);
- // return true;
- // }
- //
- // if (flag3 & flag4 && !(flag7 & flag6) && !(flag8 & flag5))
- // {
- // if (flag5)
- // line2.HeadPoint = line1.EndPoint;
- // else if (flag6)
- // line2.EndPoint = line1.EndPoint;
- // else if (flag8)
- // line2.EndPoint = line1.HeadPoint;
- // else
- // line2.HeadPoint = line1.HeadPoint;
- // this.CheckAndAddToIntersectedCurveList(line1);
- // this.CheckAndAddToIntersectedCurveList(line2);
- // return true;
- // }
- // }
- //
- // if (!(flag5 & flag8) && !(flag6 & flag7))
- // return false;
- // this.CheckAndAddToIntersectedCurveList(line1);
- // this.CheckAndAddToIntersectedCurveList(line2);
- // return true;
- // }
- // private static void DetermineFlagValuesWithDistanceBetweenPoints(Point2D point1, Point2D point2, Point2D point3,
- // ref bool flagA, ref bool flagB)
- // {
- // double distancePoint1ToPoint3 = Routines2D.Compute2DDistance(point1.X, point1.Z, point3.X, point3.Z);
- // double distancePoint2ToPoint3 = Routines2D.Compute2DDistance(point2.X, point2.Z, point3.X, point3.Z);
- // if (distancePoint1ToPoint3 > distancePoint2ToPoint3)
- // flagA = false;
- // else
- // flagB = false;
- // }
- //
- // private static void DetermineFlagValuesWithDistanceToLine(Point2D point1, Point2D point2, Point2D linePoint1, Point2D linePoint2,
- // ref bool flagA, ref bool flagB)
- // {
- // double distancePoint1ToLine = Routines2D.CalculateDistanceToLine(point1.X, point1.Z,
- // linePoint1.X, linePoint1.Z, linePoint2.X, linePoint2.Z);
- // double distancePoint2ToLine = Routines2D.CalculateDistanceToLine(point2.X, point2.Z,
- // linePoint1.X, linePoint1.Z, linePoint2.X, linePoint2.Z);
- // if (distancePoint1ToLine > distancePoint2ToLine)
- // flagA = false;
- // else
- // flagB = false;
- // }
+ // Line1 and Line2 are same
+ if ((isPoint1SameAsPoint3 && isPoint2SameAsPoint4) || (isPoint1SameAsPoint4 && isPoint2SameAsPoint3))
+ {
+ CheckAndAddToIntersectedCurveList(line1);
+ CheckAndAddToIntersectedCurveList(line2);
+ return true;
+ }
+ return false;
+ }
private GeometryCurve SplitCurve(GeometryCurve curve, Point2D aPointOnCurve)
{