public override void Build(Graph g, out S2Error error) { var degeneracies = PolygonDegeneracy.FindPolygonDegeneracies(g, out error); // Convert the output into a human-readable format. List <TestDegeneracy> actual = new(); foreach (var degeneracy in degeneracies) { var edge = g.GetEdge((int)degeneracy.EdgeId); var points = new S2Point[] { g.Vertex(edge.ShapeId), g.Vertex(edge.EdgeId) }; actual.Add(new TestDegeneracy(S2TextFormat.ToDebugString(points), degeneracy.IsHole)); } actual = new SortedSet <TestDegeneracy>(actual).ToList(); Assert.True(expected_.SequenceEqual(actual)); Assert.Equal(PolygonDegeneracy.IsFullyDegenerate(g), degeneracies.Count == g.NumEdges); }
// Assembles a graph of snapped edges into the geometry type implemented by // this layer. If an error is encountered, sets "error" appropriately. // // Note that when there are multiple layers, the Graph objects passed to all // layers are guaranteed to be valid until the last Build() method returns. // This makes it easier to write algorithms that gather the output graphs // from several layers and process them all at once (such as // s2builderutil.ClosedSetNormalizer). public abstract void Build(Graph g, out S2Error error);