+ move 'clip' property to symbolizer_base
+ support 'clip' accross relevant symbolizer (agg)
This commit is contained in:
parent
eb16d2867f
commit
c26ad5706e
9 changed files with 45 additions and 46 deletions
|
@ -46,8 +46,6 @@ struct MAPNIK_DECL polygon_symbolizer : public symbolizer_base
|
|||
gamma_method_e get_gamma_method() const;
|
||||
void set_smooth(double smooth);
|
||||
double smooth() const;
|
||||
void set_clip(bool clip);
|
||||
bool clip() const;
|
||||
private:
|
||||
color fill_;
|
||||
double opacity_;
|
||||
|
|
|
@ -47,7 +47,8 @@ public:
|
|||
: properties_(),
|
||||
properties_complete_(),
|
||||
writer_name_(),
|
||||
writer_ptr_()
|
||||
writer_ptr_(),
|
||||
clip_(true)
|
||||
{
|
||||
affine_transform_[0] = 1.0;
|
||||
affine_transform_[1] = 0.0;
|
||||
|
@ -59,7 +60,8 @@ public:
|
|||
|
||||
symbolizer_base(symbolizer_base const& other)
|
||||
: comp_op_(other.comp_op_),
|
||||
affine_transform_(other.affine_transform_) {}
|
||||
affine_transform_(other.affine_transform_),
|
||||
clip_(other.clip_) {}
|
||||
|
||||
/** Add a metawriter to this symbolizer using a name. */
|
||||
void add_metawriter(std::string const& name, metawriter_properties const& properties);
|
||||
|
@ -94,12 +96,13 @@ public:
|
|||
metawriter_properties const& get_metawriter_properties_overrides() const { return properties_; }
|
||||
/** Get metawriter name. */
|
||||
std::string const& get_metawriter_name() const { return writer_name_; }
|
||||
|
||||
void set_comp_op(composite_mode_e comp_op);
|
||||
boost::optional<composite_mode_e> comp_op() const;
|
||||
void set_transform(transform_type const& );
|
||||
transform_type const& get_transform() const;
|
||||
std::string get_transform_string() const;
|
||||
void set_clip(bool clip);
|
||||
bool clip() const;
|
||||
private:
|
||||
metawriter_properties properties_;
|
||||
metawriter_properties properties_complete_;
|
||||
|
@ -107,6 +110,7 @@ private:
|
|||
metawriter_ptr writer_ptr_;
|
||||
boost::optional<composite_mode_e> comp_op_;
|
||||
transform_type affine_transform_;
|
||||
bool clip_;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -90,9 +90,9 @@ void agg_renderer<T>::process(line_pattern_symbolizer const& sym,
|
|||
vertex_converter<box2d<double>,rasterizer_type,line_pattern_symbolizer, proj_transform, CoordTransform, conv_types>
|
||||
converter(ext,ras,sym,t_,prj_trans);
|
||||
|
||||
converter.set<clip_line_tag>(); //FIXME make an optinal clip (default: true)
|
||||
if (sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
|
||||
converter.set<transform_tag>(); //always transform
|
||||
//if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter FIXME !
|
||||
//if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // FIXME optional smooth converter
|
||||
|
||||
BOOST_FOREACH(geometry_type & geom, feature->paths())
|
||||
{
|
||||
|
|
|
@ -107,8 +107,7 @@ void agg_renderer<T>::process(line_symbolizer const& sym,
|
|||
vertex_converter<box2d<double>,rasterizer,line_symbolizer, proj_transform, CoordTransform,conv_types>
|
||||
converter(ext,*ras_ptr,sym,t_,prj_trans);
|
||||
|
||||
//if (sym.clip())
|
||||
converter.set<clip_line_tag>(); //FIXME make an optinal clip (default: true)
|
||||
if (sym.clip()) converter.set<clip_line_tag>(); //optional clip (default: true)
|
||||
converter.set<transform_tag>(); //always transform
|
||||
converter.set<affine_transform_tag>(); // optional affine transform
|
||||
if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
|
||||
|
|
|
@ -53,11 +53,10 @@ void agg_renderer<T>::process(polygon_pattern_symbolizer const& sym,
|
|||
{
|
||||
typedef agg::conv_clip_polygon<geometry_type> clipped_geometry_type;
|
||||
typedef coord_transform2<CoordTransform,clipped_geometry_type> path_type;
|
||||
typedef agg::renderer_base<agg::pixfmt_rgba32> ren_base;
|
||||
|
||||
|
||||
|
||||
agg::rendering_buffer buf(current_buffer_->raw_data(), width_, height_, width_ * 4);
|
||||
agg::pixfmt_rgba32 pixf(buf);
|
||||
ren_base renb(pixf);
|
||||
agg::pixfmt_rgba32_plain pixf(buf);
|
||||
|
||||
agg::scanline_u8 sl;
|
||||
ras_ptr->reset();
|
||||
|
@ -89,19 +88,18 @@ void agg_renderer<T>::process(polygon_pattern_symbolizer const& sym,
|
|||
|
||||
typedef agg::wrap_mode_repeat wrap_x_type;
|
||||
typedef agg::wrap_mode_repeat wrap_y_type;
|
||||
|
||||
typedef agg::pixfmt_alpha_blend_rgba<agg::blender_rgba32,
|
||||
agg::row_accessor<agg::int8u>, agg::pixel32_type> rendering_buffer;
|
||||
typedef agg::image_accessor_wrap<rendering_buffer,
|
||||
wrap_x_type,
|
||||
wrap_y_type> img_source_type;
|
||||
|
||||
typedef agg::span_pattern_rgba<img_source_type> span_gen_type;
|
||||
|
||||
typedef agg::renderer_base<agg::pixfmt_rgba32_plain> ren_base;
|
||||
typedef agg::renderer_scanline_aa<ren_base,
|
||||
agg::span_allocator<agg::rgba8>,
|
||||
span_gen_type> renderer_type;
|
||||
|
||||
|
||||
ren_base renb(pixf);
|
||||
unsigned w=(*pat)->width();
|
||||
unsigned h=(*pat)->height();
|
||||
agg::row_accessor<agg::int8u> pattern_rbuf((agg::int8u*)(*pat)->getBytes(),w,h,w*4);
|
||||
|
@ -109,17 +107,17 @@ void agg_renderer<T>::process(polygon_pattern_symbolizer const& sym,
|
|||
rendering_buffer pixf_pattern(pattern_rbuf);
|
||||
pixf_pattern.premultiply();
|
||||
img_source_type img_src(pixf_pattern);
|
||||
|
||||
|
||||
unsigned num_geometries = feature->num_geometries();
|
||||
|
||||
pattern_alignment_e align = sym.get_alignment();
|
||||
unsigned offset_x=0;
|
||||
unsigned offset_y=0;
|
||||
|
||||
|
||||
if (align == LOCAL_ALIGNMENT)
|
||||
{
|
||||
double x0=0,y0=0;
|
||||
if (num_geometries>0) // FIXME: hmm...?
|
||||
if (num_geometries>0)
|
||||
{
|
||||
clipped_geometry_type clipped(feature->get_geometry(0));
|
||||
clipped.clip_box(query_extent_.minx(),query_extent_.miny(),query_extent_.maxx(),query_extent_.maxy());
|
||||
|
@ -137,22 +135,21 @@ void agg_renderer<T>::process(polygon_pattern_symbolizer const& sym,
|
|||
|
||||
box2d<double> inflated_extent = query_extent_ * 1.1;
|
||||
typedef boost::mpl::vector<clip_poly_tag,transform_tag,smooth_tag> conv_types;
|
||||
vertex_converter<box2d<double>,rasterizer,polygon_pattern_symbolizer, proj_transform, CoordTransform,conv_types>
|
||||
vertex_converter<box2d<double>,rasterizer,polygon_pattern_symbolizer, proj_transform, CoordTransform,conv_types>
|
||||
converter(inflated_extent,*ras_ptr,sym,t_,prj_trans);
|
||||
|
||||
//if (sym.clip())
|
||||
converter.set<clip_poly_tag>(); //optional clip (default: true)
|
||||
converter.set<transform_tag>(); //always transform
|
||||
if (sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
|
||||
converter.set<transform_tag>(); //always transform
|
||||
if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
|
||||
|
||||
BOOST_FOREACH( geometry_type & geom, feature->paths())
|
||||
{
|
||||
if (geom.num_points() > 2)
|
||||
{
|
||||
converter.apply(geom);
|
||||
converter.apply(geom);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
agg::render_scanlines(*ras_ptr, sl, rp);
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ void agg_renderer<T>::process(polygon_symbolizer const& sym,
|
|||
vertex_converter<box2d<double>,rasterizer,polygon_symbolizer, proj_transform, CoordTransform,conv_types>
|
||||
converter(inflated_extent,*ras_ptr,sym,t_,prj_trans);
|
||||
|
||||
if (sym.clip()) converter.set<clip_poly_tag>(); //optinal clip (default: true)
|
||||
if (sym.clip()) converter.set<clip_poly_tag>(); //optional clip (default: true)
|
||||
converter.set<transform_tag>(); //always transform
|
||||
converter.set<affine_transform_tag>();
|
||||
if (sym.smooth() > 0.0) converter.set<smooth_tag>(); // optional smooth converter
|
||||
|
|
|
@ -805,6 +805,9 @@ void map_parser::parse_metawriter_in_symbolizer(symbolizer_base &sym, xml_node c
|
|||
sym.set_transform(matrix);
|
||||
}
|
||||
|
||||
optional<boolean> clip = pt.get_opt_attr<boolean>("clip");
|
||||
if (clip) sym.set_clip(*clip);
|
||||
|
||||
optional<std::string> writer = pt.get_opt_attr<std::string>("meta-writer");
|
||||
if (!writer) return;
|
||||
optional<std::string> output = pt.get_opt_attr<std::string>("meta-output");
|
||||
|
@ -1379,11 +1382,7 @@ void map_parser::parse_polygon_symbolizer(rule & rule, xml_node const & sym)
|
|||
// smooth value
|
||||
optional<double> smooth = sym.get_opt_attr<double>("smooth");
|
||||
if (smooth) poly_sym.set_smooth(*smooth);
|
||||
|
||||
// to clip or not to clip value
|
||||
//optional<bool> clip = sym.get_opt_attr<bool>("clip");
|
||||
//if (clip) poly_sym.set_clip(*clip);
|
||||
|
||||
|
||||
parse_metawriter_in_symbolizer(poly_sym, sym);
|
||||
rule.append(poly_sym);
|
||||
}
|
||||
|
|
|
@ -32,9 +32,8 @@ polygon_symbolizer::polygon_symbolizer()
|
|||
fill_(color(128,128,128)),
|
||||
opacity_(1.0),
|
||||
gamma_(1.0),
|
||||
gamma_method_(GAMMA_POWER),
|
||||
smooth_(0.0),
|
||||
clip_(true) {}
|
||||
gamma_method_(GAMMA_POWER)
|
||||
{}
|
||||
|
||||
polygon_symbolizer::polygon_symbolizer(color const& fill)
|
||||
: symbolizer_base(),
|
||||
|
@ -42,8 +41,8 @@ polygon_symbolizer::polygon_symbolizer(color const& fill)
|
|||
opacity_(1.0),
|
||||
gamma_(1.0),
|
||||
gamma_method_(GAMMA_POWER),
|
||||
smooth_(0.0),
|
||||
clip_(true) {}
|
||||
smooth_(0.0)
|
||||
{}
|
||||
|
||||
color const& polygon_symbolizer::get_fill() const
|
||||
{
|
||||
|
@ -95,13 +94,4 @@ double polygon_symbolizer::smooth() const
|
|||
return smooth_;
|
||||
}
|
||||
|
||||
void polygon_symbolizer::set_clip(bool clip)
|
||||
{
|
||||
clip_ = clip;
|
||||
}
|
||||
|
||||
bool polygon_symbolizer::clip() const
|
||||
{
|
||||
return clip_;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,6 +99,18 @@ std::string symbolizer_base::get_transform_string() const
|
|||
return ss.str();
|
||||
}
|
||||
|
||||
void symbolizer_base::set_clip(bool clip)
|
||||
{
|
||||
clip_ = clip;
|
||||
}
|
||||
|
||||
bool symbolizer_base::clip() const
|
||||
{
|
||||
return clip_;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
symbolizer_with_image::symbolizer_with_image(path_expression_ptr file)
|
||||
: image_filename_( file ),
|
||||
|
|
Loading…
Add table
Reference in a new issue