text_symbolizer - ``geometry-transform
`` support
This commit is contained in:
parent
9835057b0f
commit
0490b7887c
9 changed files with 69 additions and 41 deletions
|
@ -56,7 +56,7 @@ struct placement_finder_adapter
|
|||
|
||||
};
|
||||
|
||||
using conv_types = boost::mpl::vector<clip_line_tag , transform_tag, simplify_tag, smooth_tag>;
|
||||
using conv_types = boost::mpl::vector<clip_line_tag , transform_tag, affine_transform_tag, simplify_tag, smooth_tag>;
|
||||
using vertex_converter_type = vertex_converter<box2d<double>, placement_finder_adapter<placement_finder> , symbolizer_base,
|
||||
CoordTransform, proj_transform, agg::trans_affine,
|
||||
conv_types, feature_impl>;
|
||||
|
@ -122,7 +122,8 @@ public:
|
|||
CoordTransform const& t,
|
||||
FaceManagerT & font_manager,
|
||||
DetectorT & detector,
|
||||
box2d<double> const& query_extent);
|
||||
box2d<double> const& query_extent,
|
||||
agg::trans_affine const&);
|
||||
|
||||
template <typename FaceManagerT, typename DetectorT>
|
||||
text_symbolizer_helper(shield_symbolizer const& sym,
|
||||
|
@ -135,7 +136,8 @@ public:
|
|||
CoordTransform const& t,
|
||||
FaceManagerT & font_manager,
|
||||
DetectorT & detector,
|
||||
box2d<double> const& query_extent);
|
||||
box2d<double> const& query_extent,
|
||||
agg::trans_affine const&);
|
||||
|
||||
// Return all placements.
|
||||
placements_list const& get();
|
||||
|
@ -144,6 +146,7 @@ protected:
|
|||
bool next_line_placement(bool clipped);
|
||||
|
||||
placement_finder finder_;
|
||||
|
||||
placement_finder_adapter<placement_finder> adapter_;
|
||||
vertex_converter_type converter_;
|
||||
//ShieldSymbolizer only
|
||||
|
@ -151,4 +154,5 @@ protected:
|
|||
};
|
||||
|
||||
} //namespace
|
||||
|
||||
#endif // SYMBOLIZER_HELPERS_HPP
|
||||
|
|
|
@ -34,16 +34,19 @@ namespace mapnik {
|
|||
|
||||
template <typename T0, typename T1>
|
||||
void agg_renderer<T0,T1>::process(shield_symbolizer const& sym,
|
||||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
{
|
||||
box2d<double> clip_box = clipping_extent(common_);
|
||||
agg::trans_affine tr;
|
||||
auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
|
||||
if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
|
||||
text_symbolizer_helper helper(
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box);
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box, tr);
|
||||
|
||||
halo_rasterizer_enum halo_rasterizer = get<halo_rasterizer_enum>(sym, keys::halo_rasterizer, feature, common_.vars_, HALO_RASTERIZER_FULL);
|
||||
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
|
||||
|
|
|
@ -33,17 +33,20 @@ namespace mapnik {
|
|||
|
||||
template <typename T0, typename T1>
|
||||
void agg_renderer<T0,T1>::process(text_symbolizer const& sym,
|
||||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
{
|
||||
|
||||
box2d<double> clip_box = clipping_extent(common_);
|
||||
agg::trans_affine tr;
|
||||
auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
|
||||
if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
|
||||
text_symbolizer_helper helper(
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box);
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box, tr);
|
||||
|
||||
halo_rasterizer_enum halo_rasterizer = get<halo_rasterizer_enum>(sym, keys::halo_rasterizer,feature, common_.vars_, HALO_RASTERIZER_FULL);
|
||||
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
|
||||
|
@ -55,13 +58,16 @@ void agg_renderer<T0,T1>::process(text_symbolizer const& sym,
|
|||
common_.scale_factor_,
|
||||
common_.font_manager_.get_stroker());
|
||||
|
||||
agg::trans_affine halo_transform;
|
||||
auto transform = get_optional<transform_type>(sym, keys::halo_transform);
|
||||
if (transform)
|
||||
{
|
||||
evaluate_transform(halo_transform, feature, common_.vars_, *transform);
|
||||
ren.set_halo_transform(halo_transform);
|
||||
{ // halo transform
|
||||
agg::trans_affine halo_transform;
|
||||
auto transform = get_optional<transform_type>(sym, keys::halo_transform);
|
||||
if (transform)
|
||||
{
|
||||
evaluate_transform(halo_transform, feature, common_.vars_, *transform);
|
||||
ren.set_halo_transform(halo_transform);
|
||||
}
|
||||
}
|
||||
|
||||
placements_list const& placements = helper.get();
|
||||
for (glyph_positions_ptr glyphs : placements)
|
||||
{
|
||||
|
|
|
@ -573,12 +573,15 @@ void cairo_renderer_base::process(shield_symbolizer const& sym,
|
|||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
{
|
||||
agg::trans_affine tr;
|
||||
auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
|
||||
if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
|
||||
text_symbolizer_helper helper(
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
common_.query_extent_);
|
||||
common_.query_extent_, tr);
|
||||
|
||||
cairo_save_restore guard(context_);
|
||||
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
|
||||
|
@ -969,12 +972,15 @@ void cairo_renderer_base::process(text_symbolizer const& sym,
|
|||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
{
|
||||
agg::trans_affine tr;
|
||||
auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
|
||||
if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
|
||||
text_symbolizer_helper helper(
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
common_.query_extent_);
|
||||
common_.query_extent_, tr);
|
||||
|
||||
cairo_save_restore guard(context_);
|
||||
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
|
@ -43,12 +42,16 @@ void grid_renderer<T>::process(shield_symbolizer const& sym,
|
|||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
{
|
||||
agg::trans_affine tr;
|
||||
auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
|
||||
if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
|
||||
|
||||
text_symbolizer_helper helper(
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
common_.query_extent_);
|
||||
common_.query_extent_, tr);
|
||||
bool placement_found = false;
|
||||
|
||||
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
|
||||
|
@ -60,12 +63,12 @@ void grid_renderer<T>::process(shield_symbolizer const& sym,
|
|||
|
||||
placements_list const& placements = helper.get();
|
||||
value_integer feature_id = feature.id();
|
||||
|
||||
|
||||
for (glyph_positions_ptr glyphs : placements)
|
||||
{
|
||||
if (glyphs->marker())
|
||||
{
|
||||
render_marker(feature,
|
||||
render_marker(feature,
|
||||
pixmap_.get_resolution(),
|
||||
glyphs->marker_pos(),
|
||||
*(glyphs->marker()->marker),
|
||||
|
|
|
@ -36,12 +36,15 @@ void grid_renderer<T>::process(text_symbolizer const& sym,
|
|||
mapnik::feature_impl & feature,
|
||||
proj_transform const& prj_trans)
|
||||
{
|
||||
agg::trans_affine tr;
|
||||
auto transform = get_optional<transform_type>(sym, keys::geometry_transform);
|
||||
if (transform) evaluate_transform(tr, feature, common_.vars_, *transform, common_.scale_factor_);
|
||||
text_symbolizer_helper helper(
|
||||
sym, feature, common_.vars_, prj_trans,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_ * (1.0/pixmap_.get_resolution()),
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
common_.query_extent_);
|
||||
common_.query_extent_, tr);
|
||||
bool placement_found = false;
|
||||
|
||||
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
|
||||
|
@ -55,7 +58,7 @@ void grid_renderer<T>::process(text_symbolizer const& sym,
|
|||
|
||||
for (glyph_positions_ptr glyphs : placements)
|
||||
{
|
||||
ren.render(*glyphs, feature_id);
|
||||
ren.render(*glyphs, feature_id);
|
||||
placement_found = true;
|
||||
}
|
||||
if (placement_found)
|
||||
|
|
|
@ -104,7 +104,7 @@ void render_thunk_extractor::operator()(text_symbolizer const& sym) const
|
|||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box);
|
||||
clip_box, agg::trans_affine());
|
||||
|
||||
extract_text_thunk(helper, sym);
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ void render_thunk_extractor::operator()(shield_symbolizer const& sym) const
|
|||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box);
|
||||
clip_box, agg::trans_affine());
|
||||
|
||||
extract_text_thunk(helper, sym);
|
||||
}
|
||||
|
|
|
@ -178,11 +178,12 @@ text_symbolizer_helper::text_symbolizer_helper(
|
|||
proj_transform const& prj_trans,
|
||||
unsigned width, unsigned height, double scale_factor,
|
||||
CoordTransform const& t, FaceManagerT & font_manager,
|
||||
DetectorT &detector, box2d<double> const& query_extent)
|
||||
DetectorT &detector, box2d<double> const& query_extent,
|
||||
agg::trans_affine const& affine_trans)
|
||||
: base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent),
|
||||
finder_(feature, vars, detector, dims_, *placement_, font_manager, scale_factor),
|
||||
adapter_(finder_,false),
|
||||
converter_(query_extent_, adapter_, sym_, t, prj_trans, agg::trans_affine(), feature, vars, scale_factor)
|
||||
converter_(query_extent_, adapter_, sym_, t, prj_trans, affine_trans, feature, vars, scale_factor)
|
||||
{
|
||||
|
||||
// setup vertex converter
|
||||
|
@ -270,13 +271,13 @@ text_symbolizer_helper::text_symbolizer_helper(
|
|||
proj_transform const& prj_trans,
|
||||
unsigned width, unsigned height, double scale_factor,
|
||||
CoordTransform const& t, FaceManagerT & font_manager,
|
||||
DetectorT & detector, box2d<double> const& query_extent)
|
||||
DetectorT & detector, box2d<double> const& query_extent, agg::trans_affine const& affine_trans)
|
||||
: base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent),
|
||||
finder_(feature, vars, detector, dims_, *placement_, font_manager, scale_factor),
|
||||
adapter_(finder_,true),
|
||||
converter_(query_extent_, adapter_, sym_, t, prj_trans, agg::trans_affine(), feature, vars, scale_factor)
|
||||
converter_(query_extent_, adapter_, sym_, t, prj_trans, affine_trans, feature, vars, scale_factor)
|
||||
{
|
||||
// setup vertex converter
|
||||
// setup vertex converter
|
||||
bool clip = mapnik::get<bool>(sym_, keys::clip, feature_, vars_, false);
|
||||
double simplify_tolerance = mapnik::get<double>(sym_, keys::simplify_tolerance, feature_, vars_, 0.0);
|
||||
double smooth = mapnik::get<double>(sym_, keys::smooth, feature_, vars_, 0.0);
|
||||
|
@ -342,7 +343,8 @@ template text_symbolizer_helper::text_symbolizer_helper(
|
|||
CoordTransform const& t,
|
||||
face_manager<freetype_engine> &font_manager,
|
||||
label_collision_detector4 &detector,
|
||||
box2d<double> const& query_extent);
|
||||
box2d<double> const& query_extent,
|
||||
agg::trans_affine const&);
|
||||
|
||||
template text_symbolizer_helper::text_symbolizer_helper(
|
||||
shield_symbolizer const& sym,
|
||||
|
@ -355,5 +357,6 @@ template text_symbolizer_helper::text_symbolizer_helper(
|
|||
CoordTransform const& t,
|
||||
face_manager<freetype_engine> &font_manager,
|
||||
label_collision_detector4 &detector,
|
||||
box2d<double> const& query_extent);
|
||||
box2d<double> const& query_extent,
|
||||
agg::trans_affine const&);
|
||||
} //namespace
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="rgb(255,100,100)">
|
||||
<Style name="road">
|
||||
<Rule>
|
||||
<LineSymbolizer stroke="rgb(255,255,255)" stroke-opacity="0.7"/>
|
||||
<LineSymbolizer stroke="rgb(255,255,255)" stroke-opacity="0.7" smooth="4"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<TextSymbolizer placement="line" label-position-tolerance="50" spacing="20" minimum-distance="5" face-name="DejaVu Sans Book" size="20" halo-radius="1" halo-fill="rgb(255,255,0)">[NAME]</TextSymbolizer>
|
||||
|
|
Loading…
Add table
Reference in a new issue