diff --git a/generator/feature_sorter.cpp b/generator/feature_sorter.cpp index 7c9c54ca50..123458d719 100644 --- a/generator/feature_sorter.cpp +++ b/generator/feature_sorter.cpp @@ -172,13 +172,12 @@ namespace feature void WriteOuterTriangles(polygons_t const & polys, int i) { - m_buffer.m_trgMask |= (1 << i); - m_buffer.m_trgOffset.push_back(m_rMain.GetFileSize(*m_rMain.m_trgFile[i])); - // tesselation tesselator::TrianglesInfo info; tesselator::TesselateInterior(polys, info); + if (info.IsEmpty()) return; + serial::TrianglesChainSaver saver(m_codingParams); // points conversion @@ -197,6 +196,8 @@ namespace feature //CHECK_LESS_OR_EQUAL(saver.GetBufferSize(), checkSaver.GetBufferSize(), ()); // saving to file + m_buffer.m_trgMask |= (1 << i); + m_buffer.m_trgOffset.push_back(m_rMain.GetFileSize(*m_rMain.m_trgFile[i])); saver.Save(*m_rMain.m_trgFile[i]); } diff --git a/indexer/feature_data.hpp b/indexer/feature_data.hpp index 0b57aefbd4..861f095e0b 100644 --- a/indexer/feature_data.hpp +++ b/indexer/feature_data.hpp @@ -148,7 +148,7 @@ public: m_geomTypes[0] = m_geomTypes[1] = m_geomTypes[2] = false; } - bool IsValid() const { return !m_Types.empty(); } + inline bool IsValid() const { return !m_Types.empty(); } inline void SetGeomType(feature::EGeomType t) { m_geomTypes[t] = true; } inline void RemoveGeomType(feature::EGeomType t) { m_geomTypes[t] = false; } diff --git a/indexer/indexer_tests/indexer_tests.pro b/indexer/indexer_tests/indexer_tests.pro index 9e5b971e87..0a15358af6 100644 --- a/indexer/indexer_tests/indexer_tests.pro +++ b/indexer/indexer_tests/indexer_tests.pro @@ -34,6 +34,3 @@ SOURCES += \ scales_test.cpp \ test_polylines.cpp \ geometry_serialization_test.cpp \ - - - diff --git a/indexer/tesselator.cpp b/indexer/tesselator.cpp index d97f527a81..c585482c34 100644 --- a/indexer/tesselator.cpp +++ b/indexer/tesselator.cpp @@ -255,6 +255,8 @@ namespace tesselator void TrianglesInfo::Add(uintptr_t const * arr) { + // This checks are useless. We don't care about triangle orientation. + // When adding triangles, check that they all have identical orientation! /* m2::PointD arrP[] = { m_points[arr[0]], m_points[arr[1]], m_points[arr[2]] }; diff --git a/indexer/tesselator.hpp b/indexer/tesselator.hpp index d5ca0148c4..27f847e8a6 100644 --- a/indexer/tesselator.hpp +++ b/indexer/tesselator.hpp @@ -130,7 +130,9 @@ namespace tesselator void Reserve(size_t count) { m_triangles.push_back(ListInfo(count)); } void Add(uintptr_t const * arr); - //@{ + //@} + + inline bool IsEmpty() const { return m_triangles.empty(); } // Convert points from double to uint. void GetPointsInfo(m2::PointU const & baseP, m2::PointU const & maxP,