#include #include #include #include #include #include namespace mbgl { namespace style { void CircleLayer::Impl::cascade(const CascadeParameters& parameters) { paint.cascade(parameters); } bool CircleLayer::Impl::evaluate(const PropertyEvaluationParameters& parameters) { paint.evaluate(parameters); passes = (paint.evaluated.get() > 0 && paint.evaluated.get().a > 0 && paint.evaluated.get() > 0) ? RenderPass::Translucent : RenderPass::None; return paint.hasTransition(); } std::unique_ptr CircleLayer::Impl::createBucket(BucketParameters& parameters, const GeometryTileLayer& layer) const { auto bucket = std::make_unique(parameters.mode); 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 CircleLayer::Impl::getQueryRadius() const { const std::array& translate = paint.evaluated.get(); return paint.evaluated.get() + util::length(translate[0], translate[1]); } bool CircleLayer::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); auto circleRadius = paint.evaluated.get() * pixelsToTileUnits; return util::polygonIntersectsBufferedMultiPoint( translatedQueryGeometry.value_or(queryGeometry), geometry, circleRadius); } } // namespace style } // namespace mbgl