#include #include #include #include #include #include namespace mbgl { namespace style { void FillLayer::Impl::cascade(const CascadeParameters& parameters) { paint.cascade(parameters); } bool FillLayer::Impl::evaluate(const PropertyEvaluationParameters& parameters) { paint.evaluate(parameters); passes = RenderPass::None; if (paint.evaluated.get()) { passes |= RenderPass::Translucent; } if (!paint.evaluated.get().from.empty() || (paint.evaluated.get().a * paint.evaluated.get()) < 1.0f) { passes |= RenderPass::Translucent; } else { passes |= RenderPass::Opaque; } return paint.hasTransition(); } std::unique_ptr FillLayer::Impl::createBucket(BucketParameters& parameters, const GeometryTileLayer& layer) const { auto bucket = std::make_unique(); parameters.eachFilteredFeature(filter, layer, [&] (const auto& feature, std::size_t index, const std::string& layerName) { auto geometries = feature.getGeometries(); bucket->addGeometry(geometries); parameters.featureIndex.insert(geometries, index, layerName, id); }); return std::move(bucket); } float FillLayer::Impl::getQueryRadius() const { const std::array& translate = paint.evaluated.get(); return util::length(translate[0], translate[1]); } bool FillLayer::Impl::queryIntersectsGeometry( const GeometryCoordinates& queryGeometry, const GeometryCollection& geometry, const float bearing, const float pixelsToTileUnits) const { auto translatedQueryGeometry = FeatureIndex::translateQueryGeometry( queryGeometry, paint.evaluated.get(), paint.evaluated.get(), bearing, pixelsToTileUnits); return util::polygonIntersectsMultiPolygon(translatedQueryGeometry.value_or(queryGeometry), geometry); } } // namespace style } // namespace mbgl