From f1cffaeb1fc2bafe74ce352ecc53c365ec9a0b2c Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 30 Jul 2014 21:57:16 -0700 Subject: [PATCH] Start fixing placement of raster markers with cairo renderer --- src/cairo/cairo_renderer.cpp | 28 ++++++++---------- ...ssions-all-256-256-1.0-cairo-reference.png | Bin 2137 -> 2881 bytes ...ssions-all-256-256-2.0-cairo-reference.png | Bin 774 -> 4293 bytes 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/cairo/cairo_renderer.cpp b/src/cairo/cairo_renderer.cpp index 8befa09a0..41d5eab85 100644 --- a/src/cairo/cairo_renderer.cpp +++ b/src/cairo/cairo_renderer.cpp @@ -50,7 +50,7 @@ #include #include #include -#include +#include // todo - only need some of this expensive header #include #include #include @@ -839,10 +839,10 @@ struct markers_dispatch : mapnik::noncopyable cairo_context & ctx_; }; -template +template struct raster_markers_dispatch : mapnik::noncopyable { - raster_markers_dispatch(ImageMarker & marker, + raster_markers_dispatch(mapnik::image_data_32 & src, agg::trans_affine const& marker_trans, markers_symbolizer const& sym, Detector & detector, @@ -850,10 +850,9 @@ struct raster_markers_dispatch : mapnik::noncopyable feature_impl const& feature, mapnik::attributes const& vars, RendererContext const& renderer_context) - :marker_(marker), + : src_(src), detector_(detector), sym_(sym), - bbox_(std::get<1>(renderer_context)), marker_trans_(marker_trans), scale_factor_(scale_factor), feature_(feature), @@ -869,6 +868,7 @@ struct raster_markers_dispatch : mapnik::noncopyable double max_error = get(sym_, keys::max_error, feature_, vars_, 0.2); bool allow_overlap = get(sym_, keys::allow_overlap, feature_, vars_, false); bool ignore_placement = get(sym_, keys::ignore_placement, feature_, vars_, false); + box2d bbox_(0,0, src_.width(),src_.height()); markers_placement_finder placement_finder( placement_method, path, @@ -881,20 +881,16 @@ struct raster_markers_dispatch : mapnik::noncopyable double x, y, angle = .0; while (placement_finder.get_point(x, y, angle, ignore_placement)) { - coord2d center = bbox_.center(); - agg::trans_affine matrix = agg::trans_affine_translation( - -center.x, -center.y); - matrix *= marker_trans_; - matrix *= agg::trans_affine_rotation(angle); - matrix *= agg::trans_affine_translation(x, y); - ctx_.add_image(matrix, marker_, opacity); + agg::trans_affine matrix = marker_trans_; + matrix.rotate(angle); + matrix.translate(x, y); + ctx_.add_image(matrix, src_, opacity); } } - ImageMarker & marker_; + image_data_32 & src_; Detector & detector_; markers_symbolizer const& sym_; - box2d const& bbox_; agg::trans_affine const& marker_trans_; double scale_factor_; feature_impl const& feature_; @@ -914,14 +910,14 @@ void cairo_renderer_base::process(markers_symbolizer const& sym, context_.set_operator(comp_op); box2d clip_box = common_.query_extent_; - auto renderer_context = std::tie(context_, clip_box); + auto renderer_context = std::tie(context_); using RendererContextType = decltype(renderer_context); using vector_dispatch_type = detail::markers_dispatch >, svg_attribute_type,label_collision_detector4>; - using raster_dispatch_type = detail::raster_markers_dispatch; diff --git a/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/marker-symbolizer-expressions-all-256-256-1.0-cairo-reference.png index 3cdbd4c9c23f2ee3331a73b098ac5f32703b7274..eb8cb98f1a9013808d63f5af54bebab9094053ea 100644 GIT binary patch literal 2881 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 Ks+Or(hx`i**0=Ql literal 774 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Flk1;1lA?!0?}i<$WAo0&PSrlz@}p`p9GJ1p#HLBaR>`fq2?ez<%0{kwPXHtN}>FfcH6 zd%8G=RLpsM{jA?@2L`u`nk_S?&2RZ$e{)i3a^h9(nwHx4MNd59`{sBU+wtAIz+A%k zf^iqa7lv4dss=p8YliceO>FZw zux#Zsm@6lLe!uyQq$qZa|5A@N8+ez^V2Y?!YG7dEP-tKCU_Q|5d+O zEYA9sm72@w$ItfrZrfuhm!|%__57b3$BtjWmw*4K{a)RgXUD}39J=}R>%Plx?GwsA z?fZEuKZo-{)z0^CKi5{wof~5w|Fc(@@yzbO3T0m}o#zG`4z($w31kxklZC~B)co)J rD_=8Q-+TA}v$f1`_7Im`-s$VUmQ?+__T7G9!e;Pv^>bP0l+XkKqoyVB