make ``simplify_algorithm
`` an expression
This commit is contained in:
parent
dd9365a817
commit
504c6fdabd
3 changed files with 27 additions and 27 deletions
|
@ -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; \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 },
|
||||
|
|
Loading…
Add table
Reference in a new issue