fix serialization of missing shield symbolizer properties

This commit is contained in:
Dane Springmeyer 2010-12-11 02:07:47 +00:00
parent c81cff7b6c
commit ed22d073c3
4 changed files with 46 additions and 19 deletions

View file

@ -27,9 +27,6 @@
#include <mapnik/svg/svg_path_parser.hpp>
#include <mapnik/value_error.hpp>
// boost
#include <boost/format.hpp>
// agg
#include "agg_trans_affine.h"
@ -39,9 +36,7 @@ using namespace boost::python;
template <class T>
const std::string get_svg_transform(T& symbolizer)
{
mapnik::transform_type matrix = symbolizer.get_transform();
std::string s = (boost::format("matrix(%f, %f, %f, %f, %f, %f)") % matrix[0] % matrix[1] % matrix[2] % matrix[3] % matrix[4] % matrix[5]).str();
return s;
return symbolizer.get_transform_string();
};
template <class T>

View file

@ -83,6 +83,7 @@ public:
void set_filename(path_expression_ptr filename);
void set_transform(transform_type const& );
transform_type const& get_transform() const;
std::string const& get_transform_string() const;
void set_opacity(float opacity);
float get_opacity() const;
protected:

View file

@ -194,18 +194,31 @@ public:
// repeating the default values here.
// maybe add a real, explicit default-ctor?
//FIXME pls
/*
shield_symbolizer sym_dfl("<no default>", "<no default>", 0, color(0,0,0), "<no default>", "<no default>");
if (sym.get_unlock_image() != sym_dfl.get_unlock_image() || explicit_defaults_ )
{
set_attr( sym_node, "unlock_image", sym.get_unlock_image() );
}
if (sym.get_no_text() != sym_dfl.get_no_text() || explicit_defaults_ )
{
set_attr( sym_node, "no_text", sym.get_no_text() );
}
*/
shield_symbolizer dfl(expression_ptr(), "<no default>", 0, color(0,0,0), path_expression_ptr());
if (sym.get_unlock_image() != dfl.get_unlock_image() || explicit_defaults_ )
{
set_attr( sym_node, "unlock_image", sym.get_unlock_image() );
}
if (sym.get_no_text() != dfl.get_no_text() || explicit_defaults_ )
{
set_attr( sym_node, "no_text", sym.get_no_text() );
}
if (sym.get_text_opacity() != dfl.get_text_opacity() || explicit_defaults_ )
{
set_attr( sym_node, "text-opacity", sym.get_text_opacity() );
}
position displacement = sym.get_shield_displacement();
if ( displacement.get<0>() != dfl.get_shield_displacement().get<0>() || explicit_defaults_ )
{
set_attr( sym_node, "shield_dx", displacement.get<0>() );
}
if ( displacement.get<1>() != dfl.get_shield_displacement().get<1>() || explicit_defaults_ )
{
set_attr( sym_node, "shield_dy", displacement.get<1>() );
}
}
void operator () ( const text_symbolizer & sym )
@ -373,8 +386,17 @@ private:
if ( ! filename.empty() ) {
set_attr( node, "file", filename );
}
if (sym.get_opacity() != 1.0 || explicit_defaults_ )
{
set_attr( node, "opacity", sym.get_opacity() );
}
// TODO !!!
std::string tr_str = sym.get_transform_string();
if (tr_str != "matrix(1, 0, 0, 1, 0, 0)" || explicit_defaults_ )
{
set_attr( node, "transform", tr_str );
}
}
void add_font_attributes(ptree & node, const text_symbolizer & sym)
{
@ -481,6 +503,7 @@ private:
{
set_attr( node, "avoid_edges", sym.get_avoid_edges() );
}
// for shield_symbolizer this is later overridden
if (sym.get_text_opacity() != dfl.get_text_opacity() || explicit_defaults_ )
{
set_attr( node, "opacity", sym.get_text_opacity() );

View file

@ -94,6 +94,14 @@ transform_type const& symbolizer_with_image::get_transform() const
return matrix_;
}
std::string const& symbolizer_with_image::get_transform_string() const
{
std::stringstream ss;
ss << "matrix(" << matrix_[0] << ", " << matrix_[1] << ", " << matrix_[2] << ", " << matrix_[3] << ", " << matrix_[4] << ", " << matrix_[5] << ")";
return ss.str();
}
void symbolizer_with_image::set_opacity(float opacity)
{
opacity_ = opacity;