diff options
Diffstat (limited to 'include/mbgl/style/function/camera_function.hpp')
-rw-r--r-- | include/mbgl/style/function/camera_function.hpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/include/mbgl/style/function/camera_function.hpp b/include/mbgl/style/function/camera_function.hpp index c44002e8c1..721d3083e1 100644 --- a/include/mbgl/style/function/camera_function.hpp +++ b/include/mbgl/style/function/camera_function.hpp @@ -1,7 +1,9 @@ #pragma once #include <mbgl/style/expression/expression.hpp> -#include <mbgl/style/expression/curve.hpp> +#include <mbgl/style/expression/interpolate.hpp> +#include <mbgl/style/expression/step.hpp> +#include <mbgl/style/expression/find_zoom_curve.hpp> #include <mbgl/style/expression/value.hpp> #include <mbgl/style/expression/is_constant.hpp> #include <mbgl/style/function/convert.hpp> @@ -17,7 +19,7 @@ namespace style { template <class T> class CameraFunction { public: - using Curve = expression::Curve<typename expression::ValueConverter<T>::ExpressionType>; + using ExpressionType = typename expression::ValueConverter<T>::ExpressionType; using Stops = std::conditional_t< util::Interpolatable<T>::value, @@ -29,7 +31,7 @@ public: CameraFunction(std::unique_ptr<expression::Expression> expression_) : expression(std::move(expression_)), - zoomCurve(*Curve::findZoomCurve(expression.get())) + zoomCurve(*expression::findZoomCurve<ExpressionType>(expression.get())) { assert(!isZoomConstant(expression.get())); assert(isFeatureConstant(expression.get())); @@ -40,7 +42,7 @@ public: expression(stops.match([&] (const auto& s) { return expression::Convert::toExpression(s); })), - zoomCurve(*Curve::findZoomCurve(expression.get())) + zoomCurve(*expression::findZoomCurve<ExpressionType>(expression.get())) {} T evaluate(float zoom) const { @@ -53,11 +55,18 @@ public: } float interpolationFactor(const Range<float>& inputLevels, const float inputValue) const { - return zoomCurve->interpolationFactor(Range<double> { inputLevels.min, inputLevels.max }, inputValue); + return zoomCurve.match( + [&](expression::Interpolate<ExpressionType>* z) { + return z->interpolationFactor(Range<double> { inputLevels.min, inputLevels.max }, inputValue); + }, + [&](expression::Step*) { return 0.0f; } + ); } Range<float> getCoveringStops(const float lower, const float upper) const { - return zoomCurve->getCoveringStops(lower, upper); + return zoomCurve.match( + [&](auto z) { return z->getCoveringStops(lower, upper); } + ); } friend bool operator==(const CameraFunction& lhs, @@ -72,7 +81,7 @@ public: private: std::shared_ptr<expression::Expression> expression; - const Curve* zoomCurve; + const variant<expression::Interpolate<ExpressionType>*, expression::Step*> zoomCurve; }; } // namespace style |