aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp50
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 7841a3883..1161ae770 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;
}