From cc5e86b1866163de04e10bae7ecaf62a92d1aae5 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Tue, 10 Mar 2020 12:12:33 +0200 Subject: [PATCH] [core][tile mode] Fix assertion at `line-center` placement handling The `symbolIntersectsTileEdges` algorithm should not be applied to the symbols with `line-center` placement --- src/mbgl/text/placement.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 73a6d9d22..d6d6e269b 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -174,11 +174,12 @@ void Placement::placeSymbolBucket(const BucketPlacementData& params, std::set tileBorders; optional avoidEdges; - if (mapMode == MapMode::Tile) tileBorders = collisionIndex.projectTileBoundaries(posMatrix); - - if (tileBorders && (layout.get() || - layout.get() == style::SymbolPlacementType::Line)) { - avoidEdges = tileBorders; + if (mapMode == MapMode::Tile) { + tileBorders = collisionIndex.projectTileBoundaries(posMatrix); + if (layout.get() || + layout.get() == style::SymbolPlacementType::Line) { + avoidEdges = tileBorders; + } } const bool textAllowOverlap = layout.get(); @@ -559,7 +560,8 @@ void Placement::placeSymbolBucket(const BucketPlacementData& params, std::set() == style::SymbolPlacementType::Point) { // In this case we first try to place symbols, which intersects the tile borders, so that // those symbols will remain even if each tile is handled independently. SymbolInstanceReferences symbolInstances = bucket.getSymbols(params.sortKeyRange);