From eec4864f41b4dd2924185634f2fb0d4ccaa97bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20L=C3=B3pez?= Date: Fri, 30 Jul 2010 22:15:50 +0000 Subject: [PATCH] SVG renderer now outputs path tags for polygons, with a fixed stroke color and size. --- include/mapnik/svg/svg_generator.hpp | 3 ++- .../mapnik/svg/svg_generator_path_grammar.hpp | 25 ++++++++++++------- src/svg/process_polygon_symbolizer.cpp | 2 +- src/svg/svg_generator.cpp | 5 +++- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/include/mapnik/svg/svg_generator.hpp b/include/mapnik/svg/svg_generator.hpp index dd5f6dedc..5589238bd 100644 --- a/include/mapnik/svg/svg_generator.hpp +++ b/include/mapnik/svg/svg_generator.hpp @@ -25,6 +25,7 @@ // mapnik #include +#include #include #include @@ -45,7 +46,7 @@ namespace mapnik { namespace svg { void generate_root(); void generate_rect(); - void generate_path(path_type const& path); + void generate_path(path_type const& path, color const& fill); private: OutputIterator& output_iterator_; diff --git a/include/mapnik/svg/svg_generator_path_grammar.hpp b/include/mapnik/svg/svg_generator_path_grammar.hpp index 0646e970c..17d67ce54 100644 --- a/include/mapnik/svg/svg_generator_path_grammar.hpp +++ b/include/mapnik/svg/svg_generator_path_grammar.hpp @@ -36,7 +36,7 @@ BOOST_FUSION_ADAPT_CLASS( mapnik::vertex_vector2::vertex_type, - (unsigned, unsigned, obj.get<2>(), /**/) +// (unsigned, unsigned, obj.get<2>(), /**/) (mapnik::vertex_vector2::value_type, mapnik::vertex_vector2::value_type, obj.get<0>(), /**/) (mapnik::vertex_vector2::value_type, mapnik::vertex_vector2::value_type, obj.get<1>(), /**/) (mapnik::vertex_vector2::value_type, mapnik::vertex_vector2::value_type, obj.get<0>(), /**/) @@ -131,21 +131,28 @@ namespace mapnik { namespace svg { { using karma::int_; using karma::double_; - using karma::eol; - using karma::omit; using karma::_1; using karma::_a; + using karma::eol; + using karma::omit; - svg_path = *(path_vertex); - path_vertex = int_ - << omit[path_vertex_component_x] << omit[path_vertex_component_y] + svg_path = + lit('M') + << *(path_vertex << lit(' ')) + << lit('Z'); + + path_vertex = + omit[path_vertex_component_x] << omit[path_vertex_component_y] << path_vertex_transformed_x - << ' ' - << path_vertex_transformed_y - << eol; + << lit(' ') + << path_vertex_transformed_y; + path_vertex_component_x = double_[_1 = _a][bind(&coordinate_transformer::set_current_x, &ct_, _a)][_a = _val]; + path_vertex_component_y = double_[_1 = _a][bind(&coordinate_transformer::set_current_y, &ct_, _a)][_a = _val]; + path_vertex_transformed_x = double_[_1 = _a][bind(&coordinate_transformer::current_x, &ct_, _a)]; + path_vertex_transformed_y = double_[_1 = _a][bind(&coordinate_transformer::current_y, &ct_, _a)]; } diff --git a/src/svg/process_polygon_symbolizer.cpp b/src/svg/process_polygon_symbolizer.cpp index a34960e86..ab5ad104d 100644 --- a/src/svg/process_polygon_symbolizer.cpp +++ b/src/svg/process_polygon_symbolizer.cpp @@ -39,7 +39,7 @@ namespace mapnik if(geom.num_points() > 2) { path_type path(t_, geom, prj_trans); - generator_.generate_path(path); + generator_.generate_path(path, sym.get_fill()); } } } diff --git a/src/svg/svg_generator.cpp b/src/svg/svg_generator.cpp index 4192387f2..2d5bdc0c7 100644 --- a/src/svg/svg_generator.cpp +++ b/src/svg/svg_generator.cpp @@ -46,10 +46,13 @@ namespace mapnik { namespace svg { void svg_generator::generate_rect() {} template - void svg_generator::generate_path(path_type const& path) + void svg_generator::generate_path(path_type const& path, color const& fill) { path_grammar grammar(path); + + karma::generate(output_iterator_, lit("\n")); } template class svg_generator >;