diff options
author | Julian Rex <julian.rex@mapbox.com> | 2019-07-23 07:16:09 -0400 |
---|---|---|
committer | Julian Rex <julian.rex@mapbox.com> | 2019-07-23 07:16:09 -0400 |
commit | d2cf625d8fcc54ba7189a571d33bd4c884ef044c (patch) | |
tree | 583ff0a4df1a18b8562f3d40eadb6852d5c88982 | |
parent | e40a1c771f054a9b920f4914ffea08561990ae78 (diff) | |
download | qtlocation-mapboxgl-upstream/jrex/qrf-2.tar.gz |
Fix node-test fail.upstream/jrex/qrf-2
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.cpp | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 7841a3883b..1161ae7706 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -217,36 +217,34 @@ void RenderLineLayer::render(PaintParameters& parameters) { namespace { optional<GeometryCollection> offsetLine(const GeometryCollection& rings, const double offset) { - optional<GeometryCollection> newRings = nullopt; - Point<double> zero(0, 0); - for (const auto& ring : rings) { - if (offset == 0) { - break; - } else if (!newRings) { - newRings = {}; - } - - newRings->emplace_back(); - auto& newRing = newRings->back(); - - for (auto i = ring.begin(); i != ring.end(); i++) { - auto& p = *i; - - Point<double> aToB = i == ring.begin() ? - zero : - util::perp(util::unit(convertPoint<double>(p - *(i - 1)))); - Point<double> bToC = i + 1 == ring.end() ? - zero : - util::perp(util::unit(convertPoint<double>(*(i + 1) - p))); - Point<double> extrude = util::unit(aToB + bToC); + optional<GeometryCollection> newRings = {};//nullopt; + + if (offset != 0) { + Point<double> zero(0, 0); + newRings = GeometryCollection();//{}; + for (const auto& ring : rings) { - const double cosHalfAngle = extrude.x * bToC.x + extrude.y * bToC.y; - extrude *= (1.0 / cosHalfAngle); + newRings->emplace_back(); + auto& newRing = newRings->back(); - newRing.push_back(convertPoint<int16_t>(extrude * offset) + p); + for (auto i = ring.begin(); i != ring.end(); i++) { + auto& p = *i; + + Point<double> aToB = i == ring.begin() ? + zero : + util::perp(util::unit(convertPoint<double>(p - *(i - 1)))); + Point<double> bToC = i + 1 == ring.end() ? + zero : + util::perp(util::unit(convertPoint<double>(*(i + 1) - p))); + Point<double> extrude = util::unit(aToB + bToC); + + const double cosHalfAngle = extrude.x * bToC.x + extrude.y * bToC.y; + extrude *= (1.0 / cosHalfAngle); + + newRing.emplace_back(convertPoint<int16_t>(extrude * offset) + p); + } } } - return newRings; } |