// Converts a 2-dimensional S2Shape into an S2Polygon. Each chain is converted // to an S2Loop and the vector of loops is used to construct the S2Polygon. public static S2Polygon ShapeToS2Polygon(S2Shape poly) { if (poly.IsFull()) { return new S2Polygon(S2Loop.kFull); } System.Diagnostics.Debug.Assert(poly.Dimension() == 2); List<S2Loop> loops = new(); for (int i = 0; i < poly.NumChains(); ++i) { S2.GetChainVertices(poly, i, out var vertices); loops.Add(new S2Loop(vertices)); } var output_poly = new S2Polygon(loops, initOriented: true); return output_poly; }