#include #include #include #include #include #include namespace mbgl { RenderFillExtrusionLayer::RenderFillExtrusionLayer(const style::FillExtrusionLayer::Impl& _impl) : RenderLayer(style::LayerType::FillExtrusion, _impl), impl(&_impl) { } std::unique_ptr RenderFillExtrusionLayer::clone() const { return std::make_unique(*this); } std::unique_ptr RenderFillExtrusionLayer::createBucket(const BucketParameters& parameters, const std::vector& layers) const { return std::make_unique(parameters, layers); } void RenderFillExtrusionLayer::cascade(const style::CascadeParameters& parameters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } bool RenderFillExtrusionLayer::evaluate(const style::PropertyEvaluationParameters& parameters) { evaluated = unevaluated.evaluate(parameters); passes = (evaluated.get() > 0) ? RenderPass::Translucent : RenderPass::None; return unevaluated.hasTransition(); } bool RenderFillExtrusionLayer::queryIntersectsFeature( const GeometryCoordinates& queryGeometry, const GeometryTileFeature& feature, const float, const float bearing, const float pixelsToTileUnits) const { auto translatedQueryGeometry = FeatureIndex::translateQueryGeometry( queryGeometry, evaluated.get(), evaluated.get(), bearing, pixelsToTileUnits); return util::polygonIntersectsMultiPolygon(translatedQueryGeometry.value_or(queryGeometry), feature.getGeometries()); } } // namespace mbgl