add extend parameter of text symbolizer

This commit is contained in:
Jiri Drbalek 2016-09-07 10:33:46 +00:00
parent 8733622885
commit 6e489a95a3
7 changed files with 35 additions and 1 deletions

View file

@ -369,6 +369,13 @@ struct symbolizer_default<value_bool, keys::avoid_edges>
// font-feature-settings
// extend
template <>
struct symbolizer_default<value_double, keys::extend>
{
static value_double value() { return 0.0; }
};
} // namespace mapnik
#endif // MAPNIK_SYMBOLIZER_DEFAULT_VALUES_HPP

View file

@ -92,6 +92,7 @@ enum class keys : std::uint8_t
direction,
avoid_edges,
ff_settings,
extend,
MAX_SYMBOLIZER_KEY
};

View file

@ -59,7 +59,7 @@ struct placement_finder_adapter
};
using vertex_converter_type = vertex_converter<clip_line_tag, transform_tag, affine_transform_tag, simplify_tag, smooth_tag>;
using vertex_converter_type = vertex_converter<clip_line_tag, transform_tag, affine_transform_tag, extend_tag, simplify_tag, smooth_tag>;
class base_symbolizer_helper
{

View file

@ -36,6 +36,7 @@
#include <mapnik/symbolizer_enumerations.hpp>
#include <mapnik/symbolizer_keys.hpp>
#include <mapnik/symbolizer.hpp>
#include <mapnik/extend_converter.hpp>
#pragma GCC diagnostic push
#include <mapnik/warning_ignore_agg.hpp>
@ -65,6 +66,7 @@ struct stroke_tag {};
struct dash_tag {};
struct affine_transform_tag {};
struct offset_transform_tag {};
struct extend_tag {};
namespace detail {
@ -254,6 +256,23 @@ struct converter_traits<T,mapnik::offset_transform_tag>
}
};
template <typename T>
struct converter_traits<T, mapnik::extend_tag>
{
using geometry_type = T;
using conv_type = extend_converter<geometry_type>;
template <typename Args>
static void setup(geometry_type & geom, Args const& args)
{
auto const& sym = args.sym;
auto const& feat = args.feature;
auto const& vars = args.vars;
double extend = get<value_double, keys::extend>(sym, feat, vars);
geom.set_extend(extend * args.scale_factor);
}
};
template <typename T0, typename T1>
struct is_switchable

View file

@ -895,6 +895,7 @@ void map_parser::parse_symbolizer_base(symbolizer_base &sym, xml_node const& nod
set_symbolizer_property<symbolizer_base,composite_mode_e>(sym, keys::comp_op, node);
set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::geometry_transform, node);
set_symbolizer_property<symbolizer_base,simplify_algorithm_e>(sym, keys::simplify_algorithm, node);
set_symbolizer_property<symbolizer_base,double>(sym, keys::extend, node);
}
void map_parser::parse_point_symbolizer(rule & rule, xml_node const & node)

View file

@ -158,6 +158,7 @@ static const property_meta_type key_meta[const_max_key] =
property_types::target_direction},
property_meta_type{ "avoid-edges",nullptr, property_types::target_bool },
property_meta_type{ "font-feature-settings", nullptr, property_types::target_font_feature_settings },
property_meta_type{ "extend", nullptr, property_types::target_double},
};

View file

@ -318,10 +318,12 @@ text_symbolizer_helper::text_symbolizer_helper(
value_bool clip = mapnik::get<value_bool, keys::clip>(sym_, feature_, vars_);
value_double simplify_tolerance = mapnik::get<value_double, keys::simplify_tolerance>(sym_, feature_, vars_);
value_double smooth = mapnik::get<value_double, keys::smooth>(sym_, feature_, vars_);
value_double extend = mapnik::get<value_double, keys::extend>(sym_, feature_, vars_);
if (clip) converter_.template set<clip_line_tag>();
converter_.template set<transform_tag>(); //always transform
converter_.template set<affine_transform_tag>();
if (extend > 0.0) converter_.template set<extend_tag>();
if (simplify_tolerance > 0.0) converter_.template set<simplify_tag>(); // optional simplify converter
if (smooth > 0.0) converter_.template set<smooth_tag>(); // optional smooth converter
@ -443,12 +445,15 @@ text_symbolizer_helper::text_symbolizer_helper(
value_bool clip = mapnik::get<value_bool, keys::clip>(sym_, feature_, vars_);
value_double simplify_tolerance = mapnik::get<value_double, keys::simplify_tolerance>(sym_, feature_, vars_);
value_double smooth = mapnik::get<value_double, keys::smooth>(sym_, feature_, vars_);
value_double extend = mapnik::get<value_double, keys::extend>(sym_, feature_, vars_);
if (clip) converter_.template set<clip_line_tag>();
converter_.template set<transform_tag>(); //always transform
converter_.template set<affine_transform_tag>();
if (extend > 0.0) converter_.template set<extend_tag>();
if (simplify_tolerance > 0.0) converter_.template set<simplify_tag>(); // optional simplify converter
if (smooth > 0.0) converter_.template set<smooth_tag>(); // optional smooth converter
if (geometries_to_process_.size())
{
init_marker();