+ auto detect paths orientation

+ not need to set clip box on rasterizer it's
  already set (fixes gap when label is overlapping border)
This commit is contained in:
Artem Pavlenko 2010-11-10 14:40:05 +00:00
parent e53b490167
commit d5f0a497a8
4 changed files with 6 additions and 8 deletions

View file

@ -61,19 +61,17 @@ public:
Scanline& sl, Scanline& sl,
Renderer& ren, Renderer& ren,
agg::trans_affine const& mtx, agg::trans_affine const& mtx,
agg::rect_i const& cb,
double opacity=1.0) double opacity=1.0)
{ {
using namespace agg; using namespace agg;
ras.clip_box(cb.x1, cb.y1, cb.x2, cb.y2);
trans_affine transform; trans_affine transform;
curved_stroked_trans_type curved_stroked_trans(curved_stroked_,transform); curved_stroked_trans_type curved_stroked_trans(curved_stroked_,transform);
curved_trans_type curved_trans(curved_,transform); curved_trans_type curved_trans(curved_,transform);
curved_trans_contour_type curved_trans_contour(curved_trans); curved_trans_contour_type curved_trans_contour(curved_trans);
curved_trans_contour.auto_detect_orientation(false); curved_trans_contour.auto_detect_orientation(true);
for(unsigned i = 0; i < attributes_.size(); ++i) for(unsigned i = 0; i < attributes_.size(); ++i)
{ {
@ -81,7 +79,7 @@ public:
transform = attr.transform; transform = attr.transform;
transform *= mtx; transform *= mtx;
double scl = transform.scale(); double scl = transform.scale();
//m_curved.approximation_method(curve_inc); //curved_.approximation_method(curve_inc);
curved_.approximation_scale(scl); curved_.approximation_scale(scl);
curved_.angle_tolerance(0.0); curved_.angle_tolerance(0.0);

View file

@ -111,7 +111,7 @@ void agg_renderer<T>::process(markers_symbolizer const& sym,
while (placement.get_point(&x, &y, &angle)) while (placement.get_point(&x, &y, &angle))
{ {
agg::trans_affine matrix = recenter * tr *agg::trans_affine_rotation(angle) * agg::trans_affine_translation(x, y); agg::trans_affine matrix = recenter * tr *agg::trans_affine_rotation(angle) * agg::trans_affine_translation(x, y);
svg_renderer.render(*ras_ptr, sl, ren, matrix, renb.clip_box(), sym.get_opacity()); svg_renderer.render(*ras_ptr, sl, ren, matrix, sym.get_opacity());
if (writer.first) if (writer.first)
//writer.first->add_box(label_ext, feature, t_, writer.second); //writer.first->add_box(label_ext, feature, t_, writer.second);
std::clog << "### Warning metawriter not yet supported for LINE placement\n"; std::clog << "### Warning metawriter not yet supported for LINE placement\n";

View file

@ -113,7 +113,7 @@ void agg_renderer<T>::process(point_symbolizer const& sym,
if (sym.get_allow_overlap() || if (sym.get_allow_overlap() ||
detector_.has_placement(extent)) detector_.has_placement(extent))
{ {
svg_renderer.render(*ras_ptr, sl, ren, tr, renb.clip_box(), sym.get_opacity()); svg_renderer.render(*ras_ptr, sl, ren, tr, sym.get_opacity());
if (!sym.get_ignore_placement()) if (!sym.get_ignore_placement())
detector_.insert(extent); detector_.insert(extent);
metawriter_with_properties writer = sym.get_metawriter(); metawriter_with_properties writer = sym.get_metawriter();

View file

@ -194,7 +194,7 @@ void agg_renderer<T>::process(shield_symbolizer const& sym,
if ( sym.get_allow_overlap() || detector_.has_placement(label_ext) ) if ( sym.get_allow_overlap() || detector_.has_placement(label_ext) )
{ {
agg::trans_affine matrix = recenter * tr * agg::trans_affine_translation(label_x, label_y); agg::trans_affine matrix = recenter * tr * agg::trans_affine_translation(label_x, label_y);
svg_renderer.render(*ras_ptr, sl, ren, matrix, renb.clip_box(), sym.get_opacity()); svg_renderer.render(*ras_ptr, sl, ren, matrix, sym.get_opacity());
box2d<double> dim = text_ren.prepare_glyphs(&text_placement.placements[0]); box2d<double> dim = text_ren.prepare_glyphs(&text_placement.placements[0]);
text_ren.render(x,y); text_ren.render(x,y);
detector_.insert(label_ext); detector_.insert(label_ext);
@ -220,7 +220,7 @@ void agg_renderer<T>::process(shield_symbolizer const& sym,
double x = floor(text_placement.placements[ii].starting_x); double x = floor(text_placement.placements[ii].starting_x);
double y = floor(text_placement.placements[ii].starting_y); double y = floor(text_placement.placements[ii].starting_y);
agg::trans_affine matrix = recenter * tr * agg::trans_affine_translation(x, y); agg::trans_affine matrix = recenter * tr * agg::trans_affine_translation(x, y);
svg_renderer.render(*ras_ptr, sl, ren, matrix, renb.clip_box(), sym.get_opacity()); svg_renderer.render(*ras_ptr, sl, ren, matrix, sym.get_opacity());
if (writer.first) writer.first->add_box(box2d<double>(x,y,x+w,y+h), feature, t_, writer.second); if (writer.first) writer.first->add_box(box2d<double>(x,y,x+w,y+h), feature, t_, writer.second);
box2d<double> dim = text_ren.prepare_glyphs(&text_placement.placements[ii]); box2d<double> dim = text_ren.prepare_glyphs(&text_placement.placements[ii]);
text_ren.render(x,y); text_ren.render(x,y);