From 71230065e58e773eabf425a37fd0c233f18c1b93 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Tue, 23 Jul 2019 11:44:15 +0300 Subject: offset line returns geometrycollection --- src/mbgl/renderer/layers/render_line_layer.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 5c56826bd7..54e2faf962 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -214,16 +214,12 @@ void RenderLineLayer::render(PaintParameters& parameters) { } } -optional offsetLine(const GeometryCollection& rings, const double offset) { - if (offset == 0) return {}; +GeometryCollection offsetLine(GeometryCollection rings, const double offset) { + if (offset == 0 || rings.empty()) return rings; - GeometryCollection newRings; - Point zero(0, 0); - for (const auto& ring : rings) { - newRings.emplace_back(); - auto& newRing = newRings.back(); - - for (auto i = ring.begin(); i != ring.end(); i++) { + const Point zero(0, 0); + for (auto& ring : rings) { + for (auto i = ring.begin(); i != ring.end(); ++i) { auto& p = *i; Point aToB = i == ring.begin() ? @@ -237,11 +233,11 @@ optional offsetLine(const GeometryCollection& rings, const d const double cosHalfAngle = extrude.x * bToC.x + extrude.y * bToC.y; extrude *= (1.0 / cosHalfAngle); - newRing.push_back(convertPoint(extrude * offset) + p); + ring = {convertPoint(extrude * offset) + p}; } } - return newRings; + return rings; } bool RenderLineLayer::queryIntersectsFeature( @@ -264,14 +260,12 @@ bool RenderLineLayer::queryIntersectsFeature( auto offset = evaluated.get() .evaluate(feature, zoom, style::LineOffset::defaultValue()) * pixelsToTileUnits; - // Apply offset to geometry - auto offsetGeometry = offsetLine(feature.getGeometries(), offset); - // Test intersection const float halfWidth = getLineWidth(feature, zoom) / 2.0 * pixelsToTileUnits; return util::polygonIntersectsBufferedMultiLine( translatedQueryGeometry.value_or(queryGeometry), - offsetGeometry.value_or(feature.getGeometries()), + // Apply offset to geometry if offset is > 0; + offsetLine(feature.getGeometries(), offset), halfWidth); } -- cgit v1.2.1