diff --git a/generator/tesselator.cpp b/generator/tesselator.cpp index 73ae2a07fb..0db93073cd 100644 --- a/generator/tesselator.cpp +++ b/generator/tesselator.cpp @@ -17,46 +17,51 @@ namespace tesselator { - int TesselateInterior(PolygonsT const & polys, TrianglesInfo & info) +int TesselateInterior(PolygonsT const & polys, TrianglesInfo & info) +{ + int const kCoordinatesPerVertex = 2; + int const kVerticesInPolygon = 3; + + auto const deleter = [](TESStesselator * tess) {tessDeleteTess(tess);}; + unique_ptr tess(tessNewTess(nullptr), deleter); + + for (auto const & contour : polys) { - int const kCoordinatesPerVertex = 2; - int const kVerticesInPolygon = 3; - - auto const deleter = [](TESStesselator * tess){ tessDeleteTess(tess); }; - unique_ptr tess(tessNewTess(nullptr), deleter); - for (auto const & contour : polys) - tessAddContour(tess.get(), kCoordinatesPerVertex, &contour[0], sizeof(contour[0]), contour.size()); - if (0 == tessTesselate(tess.get(), TESS_WINDING_ODD, TESS_CONSTRAINED_DELAUNAY_TRIANGLES, - kVerticesInPolygon, kCoordinatesPerVertex, nullptr)) - { - LOG(LERROR, ("Tesselator error for polygon", polys)); - return 0; - } - - int const elementCount = tessGetElementCount(tess.get()); - if (elementCount) - { - int const vertexCount = tessGetVertexCount(tess.get()); - TESSreal const * vertices = tessGetVertices(tess.get()); - m2::PointD const * points = reinterpret_cast(vertices); - info.AssignPoints(points, points + vertexCount); - - // Elements are triplets of vertex indices. - TESSindex const * elements = tessGetElements(tess.get()); - info.Reserve(elementCount); - for (int i = 0; i < elementCount; ++i) - info.Add(elements[i * 3], elements[i * 3 + 1], elements[i * 3 + 2]); - } - return elementCount; + tessAddContour(tess.get(), kCoordinatesPerVertex, &contour[0], sizeof(contour[0]), + static_cast(contour.size())); } + if (0 == tessTesselate(tess.get(), TESS_WINDING_ODD, TESS_CONSTRAINED_DELAUNAY_TRIANGLES, + kVerticesInPolygon, kCoordinatesPerVertex, nullptr)) + { + LOG(LERROR, ("Tesselator error for polygon", polys)); + return 0; + } + + int const elementCount = tessGetElementCount(tess.get()); + if (elementCount) + { + int const vertexCount = tessGetVertexCount(tess.get()); + TESSreal const * vertices = tessGetVertices(tess.get()); + m2::PointD const * points = reinterpret_cast(vertices); + info.AssignPoints(points, points + vertexCount); + + // Elements are triplets of vertex indices. + TESSindex const * elements = tessGetElements(tess.get()); + info.Reserve(elementCount); + for (int i = 0; i < elementCount; ++i) + info.Add(elements[i * 3], elements[i * 3 + 1], elements[i * 3 + 2]); + } + return elementCount; +} + /////////////////////////////////////////////////////////////////////////////////////////////////////////// // TrianglesInfo::ListInfo implementation /////////////////////////////////////////////////////////////////////////////////////////////////////////// int TrianglesInfo::ListInfo::empty_key = -1; - void TrianglesInfo::ListInfo::AddNeighbour(int p1, int p2, size_t trg) + void TrianglesInfo::ListInfo::AddNeighbour(int p1, int p2, int trg) { // find or insert element for key pair ret = m_neighbors.insert(make_pair(make_pair(p1, p2), trg)); @@ -69,7 +74,7 @@ namespace tesselator { m_triangles.emplace_back(p0, p1, p2); - size_t const trg = m_triangles.size() - 1; + int const trg = static_cast(m_triangles.size()) - 1; AddNeighbour(p0, p1, trg); AddNeighbour(p1, p2, trg); AddNeighbour(p2, p0, trg); diff --git a/generator/tesselator.hpp b/generator/tesselator.hpp index cd11cc6900..1fc5ac2b1a 100644 --- a/generator/tesselator.hpp +++ b/generator/tesselator.hpp @@ -72,10 +72,10 @@ namespace tesselator } }; - typedef unordered_map, size_t, HashPair> TNeighbours; + typedef unordered_map, int, HashPair> TNeighbours; TNeighbours m_neighbors; - void AddNeighbour(int p1, int p2, size_t trg); + void AddNeighbour(int p1, int p2, int trg); void GetNeighbors( Triangle const & trg, Triangle const & from, int * nb) const;