make ``simplify_algorithm`` an expression

This commit is contained in:
artemp 2014-07-02 10:15:44 +01:00
parent dd9365a817
commit 504c6fdabd
3 changed files with 27 additions and 27 deletions

View file

@ -222,7 +222,8 @@ enum class property_types : std::uint8_t
target_colorizer,
target_repeat_key,
target_group_symbolizer_properties,
target_halo_comp_op
target_halo_comp_op,
target_simplify_algorithm
};
inline bool operator==(symbolizer_base const& lhs, symbolizer_base const& rhs)
@ -277,6 +278,16 @@ struct enum_traits<composite_mode_e>
}
};
template <>
struct enum_traits<simplify_algorithm_e>
{
typedef boost::optional<simplify_algorithm_e> result_type;
static result_type from_string(std::string const& str)
{
return simplify_algorithm_from_string(str);
}
};
#define ENUM_FROM_STRING( e ) \
template <> struct enum_traits<e> { \
typedef boost::optional<e> result_type; \

View file

@ -864,7 +864,7 @@ struct set_symbolizer_property_impl
{
// try parsing as an expression
optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name);
if (val) put(sym, key, *val);
if (val && *val) put(sym, key, *val);
else
{
ex.append_context(std::string("set_symbolizer_property '") + name + "'", node);
@ -895,7 +895,11 @@ struct set_symbolizer_property_impl<Symbolizer, T, true>
else
{
optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name);
if (val) put(sym, key, *val);
if (val && *val)
{
std::cerr << *val << std::endl;
put(sym, key, *val);
}
else
{
throw config_error("failed to parse symbolizer property: '" + name + "'");
@ -913,43 +917,28 @@ struct set_symbolizer_property_impl<Symbolizer, T, true>
} // namespace detail
template <typename Symbolizer, typename T>
void set_symbolizer_property(Symbolizer & sym, keys key, xml_node const & node)
void set_symbolizer_property(Symbolizer & sym, keys key, xml_node const& node)
{
detail::set_symbolizer_property_impl<Symbolizer,T, std::is_enum<T>::value>::apply(sym,key,node);
}
void map_parser::parse_symbolizer_base(symbolizer_base &sym, xml_node const &pt)
void map_parser::parse_symbolizer_base(symbolizer_base &sym, xml_node const& node)
{
set_symbolizer_property<symbolizer_base,composite_mode_e>(sym, keys::comp_op, pt);
optional<std::string> geometry_transform_wkt = pt.get_opt_attr<std::string>("geometry-transform");
set_symbolizer_property<symbolizer_base,composite_mode_e>(sym, keys::comp_op, node);
optional<std::string> geometry_transform_wkt = node.get_opt_attr<std::string>("geometry-transform");
if (geometry_transform_wkt)
{
put(sym, keys::geometry_transform, mapnik::parse_transform(*geometry_transform_wkt));
}
// clip
set_symbolizer_property<symbolizer_base, boolean>(sym, keys::clip, pt);
set_symbolizer_property<symbolizer_base, boolean>(sym, keys::clip, node);
// simplify algorithm
optional<std::string> simplify_algorithm_name = pt.get_opt_attr<std::string>("simplify-algorithm");
if (simplify_algorithm_name)
{
optional<simplify_algorithm_e> simplify_algorithm = simplify_algorithm_from_string(*simplify_algorithm_name);
if (simplify_algorithm)
{
put(sym, keys::simplify_algorithm, *simplify_algorithm);
}
else
{
throw config_error("failed to parse simplify-algorithm: '" + *simplify_algorithm_name + "'");
}
}
set_symbolizer_property<symbolizer_base, simplify_algorithm_e>(sym, keys::simplify_algorithm, node);
// simplify value
set_symbolizer_property<symbolizer_base,double>(sym, keys::simplify_tolerance, pt);
set_symbolizer_property<symbolizer_base,double>(sym, keys::simplify_tolerance, node);
// smooth value
set_symbolizer_property<symbolizer_base,double>(sym, keys::smooth, pt);
set_symbolizer_property<symbolizer_base,double>(sym, keys::smooth, node);
}
void map_parser::parse_point_symbolizer(rule & rule, xml_node const & node)

View file

@ -78,7 +78,7 @@ static const property_meta_type key_meta[to_integral(keys::MAX_SYMBOLIZER_KEY)]
property_meta_type{ "premultiplied", false, nullptr, property_types::target_bool },
property_meta_type{ "smooth", false, nullptr, property_types::target_double },
property_meta_type{ "simplify-algorithm", enumeration_wrapper(radial_distance),
[](enumeration_wrapper e) { return *simplify_algorithm_to_string(simplify_algorithm_e(e.value));}, property_types::target_double },
[](enumeration_wrapper e) { return *simplify_algorithm_to_string(simplify_algorithm_e(e.value));}, property_types::target_simplify_algorithm },
property_meta_type{ "simplify-tolerance", 0.0, nullptr, property_types::target_double },
property_meta_type{ "halo-rasterizer", enumeration_wrapper(HALO_RASTERIZER_FULL),
[](enumeration_wrapper e) { return enumeration<halo_rasterizer_enum,halo_rasterizer_enum_MAX>(halo_rasterizer_enum(e.value)).as_string();}, property_types::target_double },