#include #include #include #include #include #include namespace mbgl { void FillLayer::Impl::parsePaints(const JSValue& layer) { paint.parse(layer); } void FillLayer::Impl::cascade(const StyleCascadeParameters& parameters) { paint.cascade(parameters); } bool FillLayer::Impl::recalculate(const StyleCalculationParameters& parameters) { bool hasTransitions = paint.recalculate(parameters); passes = RenderPass::None; if (paint.fillAntialias) { passes |= RenderPass::Translucent; } if (!paint.fillPattern.value.from.empty() || (paint.fillColor.value[3] * paint.fillOpacity) < 1.0f) { passes |= RenderPass::Translucent; } else { passes |= RenderPass::Opaque; } return hasTransitions; } std::unique_ptr FillLayer::Impl::createBucket(StyleBucketParameters& parameters) const { auto bucket = std::make_unique(); auto& name = bucketName(); parameters.eachFilteredFeature(filter, [&] (const auto& feature, std::size_t index, const std::string& layerName) { auto geometries = feature.getGeometries(); bucket->addGeometry(geometries); parameters.featureIndex.insert(geometries, index, layerName, name); }); return std::move(bucket); } float FillLayer::Impl::getQueryRadius() const { const std::array& translate = paint.fillTranslate; return util::length(translate[0], translate[1]); } bool FillLayer::Impl::queryIntersectsGeometry( const GeometryCollection& queryGeometry, const GeometryCollection& geometry, const float bearing, const float pixelsToTileUnits) const { auto translatedQueryGeometry = FeatureIndex::translateQueryGeometry( queryGeometry, paint.fillTranslate, paint.fillTranslateAnchor, bearing, pixelsToTileUnits); return util::multiPolygonIntersectsMultiPolygon(translatedQueryGeometry.value_or(queryGeometry), geometry); } } // namespace mbgl