From f0bc1064c6c0ba6da1e9f5f4495126ad59fed4fa Mon Sep 17 00:00:00 2001 From: Artem Pavlenko Date: Wed, 14 Mar 2012 17:38:27 +0000 Subject: [PATCH] + supprt polygon smoothing in cairo backend --- src/cairo_renderer.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/cairo_renderer.cpp b/src/cairo_renderer.cpp index c900491a6..7f10d8cba 100644 --- a/src/cairo_renderer.cpp +++ b/src/cairo_renderer.cpp @@ -53,6 +53,7 @@ // agg #include "agg_conv_clip_polyline.h" #include "agg_conv_clip_polygon.h" +#include "agg_conv_smooth_poly1.h" // stl #ifdef MAPNIK_DEBUG @@ -725,23 +726,37 @@ void cairo_renderer_base::start_map_processing(Map const& map) proj_transform const& prj_trans) { - typedef agg::conv_clip_polygon clipped_geometry_type; - typedef coord_transform2 path_type; - cairo_context context(context_); - context.set_color(sym.get_fill(), sym.get_opacity()); - + box2d inflated_extent = query_extent_ * 1.1; for (unsigned i = 0; i < feature->num_geometries(); ++i) { geometry_type & geom = feature->get_geometry(i); if (geom.num_points() > 2) { - clipped_geometry_type clipped(geom); - clipped.clip_box(query_extent_.minx(),query_extent_.miny(),query_extent_.maxx(),query_extent_.maxy()); - path_type path(t_,clipped,prj_trans); - context.add_path(path); - context.fill(); + if (sym.smooth() > 0.0) + { + typedef agg::conv_clip_polygon clipped_geometry_type; + typedef coord_transform2 path_type; + typedef agg::conv_smooth_poly1_curve smooth_type; + clipped_geometry_type clipped(geom); + clipped.clip_box(inflated_extent.minx(),inflated_extent.miny(),inflated_extent.maxx(),inflated_extent.maxy()); + path_type path(t_,clipped,prj_trans); + smooth_type smooth(path); + smooth.smooth_value(sym.smooth()); + context.add_agg_path(smooth); + context.fill(); + } + else + { + typedef agg::conv_clip_polygon clipped_geometry_type; + typedef coord_transform2 path_type; + clipped_geometry_type clipped(geom); + clipped.clip_box(query_extent_.minx(),query_extent_.miny(),query_extent_.maxx(),query_extent_.maxy()); + path_type path(t_,clipped,prj_trans); + context.add_path(path); + context.fill(); + } } } }