private static void FlipScanEdgeEvent(DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle flipTriangle, DelaunayTriangle t, TriangulationPoint p) { DelaunayTriangle delaunayTriangle = t.NeighborAcross(p); TriangulationPoint triangulationPoint = delaunayTriangle.OppositePoint(t, p); bool flag = delaunayTriangle == null; if (flag) { throw new Exception("[BUG:FIXME] FLIP failed due to missing triangle"); } bool flag2 = TriangulationUtil.InScanArea(eq, flipTriangle.PointCCW(eq), flipTriangle.PointCW(eq), triangulationPoint); bool flag3 = flag2; if (flag3) { DTSweep.FlipEdgeEvent(tcx, eq, triangulationPoint, delaunayTriangle, triangulationPoint); } else { TriangulationPoint p2 = DTSweep.NextFlipPoint(ep, eq, delaunayTriangle, triangulationPoint); DTSweep.FlipScanEdgeEvent(tcx, ep, eq, flipTriangle, delaunayTriangle, p2); } }
private static void FlipEdgeEvent(DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle t, TriangulationPoint p) { DelaunayTriangle delaunayTriangle = t.NeighborAcross(p); TriangulationPoint triangulationPoint = delaunayTriangle.OppositePoint(t, p); bool flag = delaunayTriangle == null; if (flag) { throw new InvalidOperationException("[BUG:FIXME] FLIP failed due to missing triangle"); } bool constrainedEdgeAcross = t.GetConstrainedEdgeAcross(p); if (constrainedEdgeAcross) { throw new Exception("Intersecting Constraints"); } bool flag2 = TriangulationUtil.InScanArea(p, t.PointCCW(p), t.PointCW(p), triangulationPoint); bool flag3 = flag2; if (flag3) { DTSweep.RotateTrianglePair(t, p, delaunayTriangle, triangulationPoint); tcx.MapTriangleToNodes(t); tcx.MapTriangleToNodes(delaunayTriangle); bool flag4 = p == eq && triangulationPoint == ep; if (flag4) { bool flag5 = eq == tcx.EdgeEvent.ConstrainedEdge.Q && ep == tcx.EdgeEvent.ConstrainedEdge.P; if (flag5) { bool isDebugEnabled = tcx.IsDebugEnabled; if (isDebugEnabled) { Console.WriteLine("[FLIP] - constrained edge done"); } t.MarkConstrainedEdge(ep, eq); delaunayTriangle.MarkConstrainedEdge(ep, eq); DTSweep.Legalize(tcx, t); DTSweep.Legalize(tcx, delaunayTriangle); } else { bool isDebugEnabled2 = tcx.IsDebugEnabled; if (isDebugEnabled2) { Console.WriteLine("[FLIP] - subedge done"); } } } else { bool isDebugEnabled3 = tcx.IsDebugEnabled; if (isDebugEnabled3) { Console.WriteLine("[FLIP] - flipping and continuing with triangle still crossing edge"); } Orientation o = TriangulationUtil.Orient2d(eq, triangulationPoint, ep); t = DTSweep.NextFlipTriangle(tcx, o, t, delaunayTriangle, p, triangulationPoint); DTSweep.FlipEdgeEvent(tcx, ep, eq, t, p); } } else { TriangulationPoint p2 = DTSweep.NextFlipPoint(ep, eq, delaunayTriangle, triangulationPoint); DTSweep.FlipScanEdgeEvent(tcx, ep, eq, t, delaunayTriangle, p2); DTSweep.EdgeEvent(tcx, ep, eq, t, p); } }