fix interplay of point symbolizer/cairo/scale_factor

This commit is contained in:
Dane Springmeyer 2013-05-20 22:41:59 -07:00
parent b2fc3d7d57
commit 018bdc4f6d
5 changed files with 11 additions and 10 deletions

View file

@ -669,6 +669,15 @@ void cairo_renderer_base::process(point_symbolizer const& sym,
if (marker)
{
box2d<double> const& bbox = (*marker)->bounding_box();
coord2d center = bbox.center();
agg::trans_affine tr;
evaluate_transform(tr, feature, sym.get_image_transform());
agg::trans_affine_translation recenter(-center.x, -center.y);
agg::trans_affine recenter_tr = recenter * tr;
box2d<double> label_ext = bbox * recenter_tr * agg::trans_affine_scaling(scale_factor_);
for (unsigned i = 0; i < feature.num_geometries(); ++i)
{
geometry_type const& geom = feature.get_geometry(i);
@ -689,15 +698,7 @@ void cairo_renderer_base::process(point_symbolizer const& sym,
prj_trans.backward(x, y, z);
t_.forward(&x, &y);
double dx = 0.5 * (*marker)->width();
double dy = 0.5 * (*marker)->height();
agg::trans_affine tr;
evaluate_transform(tr, feature, sym.get_image_transform());
box2d<double> label_ext (-dx, -dy, dx, dy);
label_ext *= tr;
label_ext *= agg::trans_affine_translation(x,y);
label_ext *= agg::trans_affine_scaling(scale_factor_);
label_ext.re_center(x,y);
if (sym.get_allow_overlap() ||
detector_->has_placement(label_ext))
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -20,7 +20,7 @@ defaults = {
'sizes': [(500, 100)],
'scales':[1.0,2.0],
'agg': True,
'cairo': False,
'cairo': True,
# disabled for 2.2.x since cairo tests are unstable (springmeyer)
#'cairo': mapnik.has_cairo(),
'grid': True