From 54b2880e53788503e54f98a18d1130c6195e4d7c Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Sat, 6 Sep 2014 21:27:15 -0700 Subject: [PATCH] markers: support offset, geometry-transform, and simplify - closes #2108 --- deps/agg/include/agg_conv_transform.h | 2 + include/mapnik/offset_converter.hpp | 5 + .../process_markers_symbolizer.hpp | 63 +++--- include/mapnik/simplify_converter.hpp | 5 + src/load_map.cpp | 5 +- ...-placement-600-400-1.0-grid-reference.json | 200 +++++++++--------- ...ne-placement-600-400-1.0-agg-reference.png | Bin 3749 -> 11602 bytes ...-placement-600-400-1.0-cairo-reference.png | Bin 3608 -> 11499 bytes ...ne-placement-600-400-2.0-agg-reference.png | Bin 3842 -> 12570 bytes ...-placement-600-400-2.0-cairo-reference.png | Bin 3742 -> 12389 bytes .../marker-on-line-and-line-placement.xml | 12 +- 11 files changed, 162 insertions(+), 130 deletions(-) diff --git a/deps/agg/include/agg_conv_transform.h b/deps/agg/include/agg_conv_transform.h index b57fb07fa..886acb35b 100644 --- a/deps/agg/include/agg_conv_transform.h +++ b/deps/agg/include/agg_conv_transform.h @@ -54,6 +54,8 @@ namespace agg m_trans = &tr; } + unsigned type() const { return m_source->type(); } + private: conv_transform(const conv_transform&); const conv_transform& diff --git a/include/mapnik/offset_converter.hpp b/include/mapnik/offset_converter.hpp index e7316d0f9..28f690276 100644 --- a/include/mapnik/offset_converter.hpp +++ b/include/mapnik/offset_converter.hpp @@ -64,6 +64,11 @@ struct MAPNIK_DECL offset_converter process }; + unsigned type() const + { + return static_cast(geom_.type()); + } + double get_offset() const { return offset_; diff --git a/include/mapnik/renderer_common/process_markers_symbolizer.hpp b/include/mapnik/renderer_common/process_markers_symbolizer.hpp index 70f639f39..fcfa404b0 100644 --- a/include/mapnik/renderer_common/process_markers_symbolizer.hpp +++ b/include/mapnik/renderer_common/process_markers_symbolizer.hpp @@ -49,11 +49,18 @@ void render_markers_symbolizer(markers_symbolizer const& sym, using raster_dispatch_type = T1; using renderer_context_type = T2; - using conv_types = boost::mpl::vector; using svg_attribute_type = agg::pod_bvector; + using conv_types = boost::mpl::vector; std::string filename = get(sym, keys::file, feature, common.vars_, "shape://ellipse"); bool clip = get(sym, keys::clip, feature, common.vars_, false); + double offset = get(sym, keys::offset, feature, common.vars_, 0.0); + double simplify_tolerance = get(sym, keys::simplify_tolerance, feature, common.vars_, 0.0); double smooth = get(sym, keys::smooth, feature, common.vars_, false); // https://github.com/mapnik/mapnik/issues/1316 @@ -63,7 +70,10 @@ void render_markers_symbolizer(markers_symbolizer const& sym, boost::optional mark = mapnik::marker_cache::instance().find(filename, true); if (mark && *mark) { - agg::trans_affine tr = agg::trans_affine_scaling(common.scale_factor_); + agg::trans_affine geom_tr; + auto transform = get_optional(sym, keys::geometry_transform); + if (transform) evaluate_transform(geom_tr, feature, common.vars_, *transform, common.scale_factor_); + agg::trans_affine image_tr = agg::trans_affine_scaling(common.scale_factor_); if ((*mark)->is_vector()) { @@ -84,12 +94,12 @@ void render_markers_symbolizer(markers_symbolizer const& sym, svg_attribute_type attributes; bool result = push_explicit_style( (*stock_vector_marker)->attributes(), attributes, sym, feature, common.vars_); auto image_transform = get_optional(sym, keys::image_transform); - if (image_transform) evaluate_transform(tr, feature, common.vars_, *image_transform); + if (image_transform) evaluate_transform(image_tr, feature, common.vars_, *image_transform); box2d bbox = marker_ellipse.bounding_box(); vector_dispatch_type rasterizer_dispatch(svg_path, result ? attributes : (*stock_vector_marker)->attributes(), bbox, - tr, + image_tr, sym, *common.detector_, common.scale_factor_, @@ -100,27 +110,28 @@ void render_markers_symbolizer(markers_symbolizer const& sym, vertex_converter, vector_dispatch_type, markers_symbolizer, view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> - converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,tr,feature,common.vars_,common.scale_factor_); + converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,geom_tr,feature,common.vars_,common.scale_factor_); if (clip && feature.paths().size() > 0) // optional clip (default: true) { geometry_type::types type = feature.paths()[0].type(); if (type == geometry_type::types::Polygon) converter.template set(); - // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426 - //else if (type == LineString) - // converter.template set(); - // don't clip if type==Point + else if (type == geometry_type::types::LineString) + converter.template set(); } converter.template set(); //always transform + if (std::fabs(offset) > 0.0) converter.template set(); // parallel offset + converter.template set(); // optional affine transform + if (simplify_tolerance > 0.0) converter.template set(); // optional simplify converter if (smooth > 0.0) converter.template set(); // optional smooth converter apply_markers_multi(feature, common.vars_, converter, sym); } else { box2d const& bbox = (*mark)->bounding_box(); - setup_transform_scaling(tr, bbox.width(), bbox.height(), feature, common.vars_, sym); + setup_transform_scaling(image_tr, bbox.width(), bbox.height(), feature, common.vars_, sym); auto image_transform = get_optional(sym, keys::image_transform); - if (image_transform) evaluate_transform(tr, feature, common.vars_, *image_transform); + if (image_transform) evaluate_transform(image_tr, feature, common.vars_, *image_transform); vertex_stl_adapter stl_storage((*stock_vector_marker)->source()); svg_path_adapter svg_path(stl_storage); svg_attribute_type attributes; @@ -128,7 +139,7 @@ void render_markers_symbolizer(markers_symbolizer const& sym, vector_dispatch_type rasterizer_dispatch(svg_path, result ? attributes : (*stock_vector_marker)->attributes(), bbox, - tr, + image_tr, sym, *common.detector_, common.scale_factor_, @@ -139,33 +150,34 @@ void render_markers_symbolizer(markers_symbolizer const& sym, vertex_converter, vector_dispatch_type, markers_symbolizer, view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> - converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,tr,feature,common.vars_,common.scale_factor_); + converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,geom_tr,feature,common.vars_,common.scale_factor_); if (clip && feature.paths().size() > 0) // optional clip (default: true) { geometry_type::types type = feature.paths()[0].type(); if (type == geometry_type::types::Polygon) converter.template set(); - // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426 - //else if (type == LineString) - // converter.template set(); - // don't clip if type==Point + else if (type == geometry_type::types::LineString) + converter.template set(); } converter.template set(); //always transform + if (std::fabs(offset) > 0.0) converter.template set(); // parallel offset + converter.template set(); // optional affine transform + if (simplify_tolerance > 0.0) converter.template set(); // optional simplify converter if (smooth > 0.0) converter.template set(); // optional smooth converter apply_markers_multi(feature, common.vars_, converter, sym); } } else // raster markers { - setup_transform_scaling(tr, (*mark)->width(), (*mark)->height(), feature, common.vars_, sym); + setup_transform_scaling(image_tr, (*mark)->width(), (*mark)->height(), feature, common.vars_, sym); auto image_transform = get_optional(sym, keys::image_transform); - if (image_transform) evaluate_transform(tr, feature, common.vars_, *image_transform); + if (image_transform) evaluate_transform(image_tr, feature, common.vars_, *image_transform); box2d const& bbox = (*mark)->bounding_box(); boost::optional marker = (*mark)->get_bitmap_data(); // - clamp sizes to > 4 pixels of interactivity coord2d center = bbox.center(); agg::trans_affine_translation recenter(-center.x, -center.y); - agg::trans_affine marker_trans = recenter * tr; + agg::trans_affine marker_trans = recenter * image_tr; raster_dispatch_type rasterizer_dispatch(**marker, marker_trans, sym, @@ -177,19 +189,20 @@ void render_markers_symbolizer(markers_symbolizer const& sym, vertex_converter, raster_dispatch_type, markers_symbolizer, view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> - converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,tr,feature,common.vars_,common.scale_factor_); + converter(clip_box, rasterizer_dispatch, sym,common.t_,prj_trans,geom_tr,feature,common.vars_,common.scale_factor_); if (clip && feature.paths().size() > 0) // optional clip (default: true) { geometry_type::types type = feature.paths()[0].type(); if (type == geometry_type::types::Polygon) converter.template set(); - // line clipping disabled due to https://github.com/mapnik/mapnik/issues/1426 - //else if (type == geometry_type::types::LineString) - // converter.template set(); - // don't clip if type==geometry_type::types::Point + else if (type == geometry_type::types::LineString) + converter.template set(); } converter.template set(); //always transform + if (std::fabs(offset) > 0.0) converter.template set(); // parallel offset + converter.template set(); // optional affine transform + if (simplify_tolerance > 0.0) converter.template set(); // optional simplify converter if (smooth > 0.0) converter.template set(); // optional smooth converter apply_markers_multi(feature, common.vars_, converter, sym); } diff --git a/include/mapnik/simplify_converter.hpp b/include/mapnik/simplify_converter.hpp index b2fbca00c..5fa53b815 100644 --- a/include/mapnik/simplify_converter.hpp +++ b/include/mapnik/simplify_converter.hpp @@ -109,6 +109,11 @@ public: cache }; + unsigned type() const + { + return static_cast(geom_.type()); + } + simplify_algorithm_e get_simplify_algorithm() { return algorithm_; diff --git a/src/load_map.cpp b/src/load_map.cpp index ce3eaead2..70bcfd540 100644 --- a/src/load_map.cpp +++ b/src/load_map.cpp @@ -969,6 +969,8 @@ void map_parser::parse_markers_symbolizer(rule & rule, xml_node const& node) set_symbolizer_property(sym, keys::avoid_edges, node); // ignore-placement set_symbolizer_property(sym, keys::ignore_placement, node); + // offset + set_symbolizer_property(sym, keys::offset, node); // width //set_symbolizer_property(sym, keys::width, node); // height @@ -1025,8 +1027,7 @@ void map_parser::parse_line_pattern_symbolizer(rule & rule, xml_node const & nod set_symbolizer_property(sym, keys::opacity, node); // offset value - optional offset = node.get_opt_attr("offset"); - if (offset) put(sym, keys::offset, *offset); + set_symbolizer_property(sym, keys::offset, node); // image transform set_symbolizer_property(sym, keys::image_transform, node); rule.append(std::move(sym)); diff --git a/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-1.0-grid-reference.json b/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-1.0-grid-reference.json index 13b79ad2e..6d60c0905 100644 --- a/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-1.0-grid-reference.json +++ b/tests/visual_tests/grids/marker-on-line-and-line-placement-600-400-1.0-grid-reference.json @@ -5,105 +5,105 @@ ], "data": {}, "grid": [ - " !!! ", - " !!! ", - " !!!! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " !! ! ", - " !! !!! ", - " ! !!! ", - " ! !! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " !! ! ", - " !!! ! ", - " !! !!! ", - " ! !!! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " !! ! ", - " !!! ", - " !!! !!! ", - " ! !!! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ", - " ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " !!! ! ", - " !!! !! !! ", - " !! !! !!! ", - " ! !! !!! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! ! ! ", - " ! ! ", - " ! !! " + " !!!!!! ", + " ! !! !!!! !! ", + " ! ! !!! ! ! ", + " ! ! !! ! !!! ", + " ! ! !!! ! !! ", + " ! ! ! ! ! ", + " ! ! ! ! !! ", + " ! ! ! ! ! ! ", + " ! ! ! ! ", + " ! ! ! !!! ! !! ", + " !! ! !!! !! ", + " ! !! ! ! ! ", + " ! ! ! !! ", + " ! ! ! ! ! !!! ", + " ! ! ! ! !!! ", + " ! ! ! ! ! ! !! ! ", + " ! ! ! ! !!! ", + " !! ! ! ! ! ! !!! ", + " !! ! ! ! !! ! ", + " ! !! ! ! !!! ! ", + " ! !!!!! ! !! ! ", + " !! !! ! ! ! ", + " ! ! ! !! !! ! ", + " ! ! !!! ! ! ", + " ! ! ! ! ", + " ! ! ! ! ! ", + " ! ! ! ! ! ! ", + " ! ! ! ", + " ! ! ! ! ! ", + " ! ! ! ! ! ", + " ! ! ! ! ! ", + " ! ! !! ! ! ", + " ! ! ! ! !!! ! ! ! ", + " ! ! ! !! ! ! ", + " ! ! ! ! ", + " ! ! ! ! ! ! ", + " ! ! !!! ", + " ! ! ! ! !!!! ", + " ! ! !!! ! ", + " !! ! ! ! !!!! ", + " !!! ! ! !!!!! ", + " !! !!! ! ! !! ", + " ! !!!!!! ! !!! ", + " !!!!! !! !!!! ! ", + " ! ! ! !!! ! ! ", + " ! ! ! !! !!!! ", + " ! ! ! !!!!! ! ", + " ! ! ! ! ! ", + " ! ! ! ! ! ! ", + " ! ! ! ! ", + " ! ! ! ! ! ", + " ! ! ! !! ! ", + " ! ! ! ", + " ! ! ! !! ", + " ! ! !! ! ", + " ! ! ! !!!! ", + " ! ! ! ! ", + " !! ! ! ! ", + " ! ! ! !! ", + " ! ! ! ! ", + " !! ! !! ", + " ! ! !!!! ", + " ! !! ! !!! ", + " !! !! ! !!!! ", + " !! !!! ! !!!! ", + " !! !!! !! !!! ", + " ! !!! !!! !! ", + " !!! !!! !!!! ", + " ! ! ! !!! ", + " ! ! ! ! ! ", + " ! ! ! ! ", + " ! ! !! ", + " ! ! ! ! ", + " ! ! !! ", + " ! !! ", + " ! ! ! ! !! !! ", + " ! ! ! !!! !!! ", + " ! ! ! !!! !!! ", + " ! ! ! ! !!! ", + " ! ! ! !! ! ! ! ", + " !!! ! ! ! !! ", + " ! !! ! ! !! ! ", + " ! !!! ! ! ! !!! ", + " ! !!! !! ! ! !!! ! ", + " ! !!!! ! ! !! ", + " ! ! ! !!! ! !! ! ! !!! ", + " ! ! !!!! !!! ! ! !!! ", + " !!! ! !!!! !!! ! ! ", + " !!!!! !! ! ! ", + " !!!!! !! !! !! ! ! ! ", + " !!!!! !!! !!! ! ! ! ", + " !!!! !!!! !!! ! ! ! ", + " ! !! ! ! ! ! ", + " !!! ! ! ! ! ", + " !! ! ! ! !!! ! ", + " !! ! !!! ! !! ! ! ", + " ! ! ! !! ! ", + " !! ! !! ! ! ! ! ", + " ! ! !! ! ! ! ! ", + " ! ! !!! ! ! ! " ] } \ No newline at end of file diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-agg-reference.png index d91c2f035e2350e7257b070bb058c23374c9e0dc..63fa8a641235857b4ac09f035b4b4fac0602efb7 100644 GIT binary patch literal 11602 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 Si2AK9KwVkq`3FTP?Ee6C`-W5i literal 3749 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 diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-1.0-cairo-reference.png index 9f027d55663f4bee394385945448ee40032378e6..baf6176a21ebaed859e040cfb8930285b620001e 100644 GIT binary patch literal 11499 zcmX|nbzD?kxb@K8-Q7b-hk_!FbPYY|fFK|xB~nUAmkiQUQX>pQN{%2fbfX|4-5?;+ z@EzWJ@AuE1z1OqWQ>XUtoQW~i*CZomCI*2(WZGJ4#vl+j1O&oLCd2^{^_~3+VDZuL ziK#lU1i?U{NKgVW2?v3kK_FAxyUBA<+<(a3=!ylpSMUuB1abrxx1cakJMgRj3=jg= zQ(*1_1_fcafk4J&U;aM_TlllO$({3ffZ)r}2#jH%9b7>FUqmBIz}5fG!$2U$QBW{8 zkb~e$P(45ZSUyZ8SP(!03c|T%0wi*GWcefjxl8F4J?J&w9nHcBL_LcH5LaQ4a3#o> z{*DH^H3yf=!$2QFpi*EZ7eoIJ1Tr$X&Al^$v^}mtAQRjdAh`q({WyT!mVzeeLH#&b zIZh5B0iZXxw(sxq+yG`Jcau96-3W+eCl?2L$NvvM^2D~LEXsQd6(XBf;Ooixa7Xsi zOaR8cOln{(a<)Ey2^xP72Iha@#K1TlEe4F|c{sqh38z2L!2$Y%WkU*bAOaam-_`Yh z&ZCyBfk>dRSH}7#Aa+W2F++9(Pd%>}i6S~>6v<}J^~qw%9WO{5I%Ri7s$K07+!nYj2%TzXiwvp>{GHTlQx zZ|_pyme|CP^R3^T+lCqYpH6p{y!Ml8O4m308^$rmKXx|G&h~>gfP*ajR$J|nX+X|i z?)5Wfv*}(B!h51$(#y10bn51N%x58V39jy% z*JmSELUD%mGh2<7RUXu|ax$~memEVN9}TEgVuI!0+;4fA7% zNA%Ap8gr~g%;)tZs-29RI*<5xNY(;{;C6N+#r^Zs@&`1u;(;!Pf#S>kB$aE@p}ciF%OD$nqS)*@X)O`~-p*KM>VD(oNMZFu$u^WM#UQp(eO=U(1`VFb=yWVF znWbfl+=HQN@mp+PdcuMseT({h)GzC^+wscEt9yn7@I=HLTklq5lAXoJu<+I_ty&rF zq18yuD0_+U5-uR(s{dAfX!wrAUd6vx&B>*$gBPkgHuu6yc;XlwZA3U!VS0^E7Ktv6 z%hT)YLc8(7Y?cZNOs`*Wbv^I;`p6J$CX?emnD^I_$iff0g-N|nQ1M(PhhpjG;o%1+ zizcgngvdPyAPMjTrosc2LC(=v{nQrcvpkg|LTjmP5PZ~M*!z%kPlvi+INhf3rv9mX z$d67gLWm;D&`39GZE+f|*`#D>;}}!vws!8@CQXbD4@bC(R)@5WS>rkB<%7K!(Ihi{4x9F?( zcj1nlBxZFNY`)pYl$H}b);4Yb)Tgg{0GxZEY;oY)dmWVmebi@K>k6LGsSYjZ!Y9Lr zM>xsi z$`+OMq$wQDmmTjhw>FJmzEOK8f~dWZyg8~~b7j7)xR$hvTF@V#l4K`rYwF)hry6?* zwZtKDr>j3W3W04)o)!0*7nL3mz6;%;dq9uG#~GkNxQ?q&cyF3f0XDd0Q)#QFY?p)p zGbvbl0B0xS%@mTA*)~GbiG}(DV|qe5jk6=u49yZHTGctFXDY7ts2gz@F>{i~fcDWs zD)ulty4k(_MZF|}K6-`CLe5gV-JQB0vvl#Go*bi7k!9P4?j-8ZBaFtTpWZ#RYZ$gONQ+M)2A{0h_ONA{!ERiNtjH%Y zE)mqYVTXW$SrM9h0<8Yau*)Ib@sWAE)8#n{fa|TtUtU@DFQ=NY(L?BAOl_NfG>@JO z1WH;()b&37ds0SDf>=skGqXIdjJ~FL$1Tc3^%>KQ2~u0CU1~;iF5yy z2g{Wc#eDf>5eJo8sP}*hwIukgHFDb-%^ZOsr$7Xkp;EaYP#<#rQo)eqs8w;Vwr1zJV>m?kiF^=-GGC>}5R!+T6C73QT3T4EEGq+t| zzkJ9|ielElhm%=m*_!XE4B@!?PjcXAwOS1(n2H^3Tya)905yaohIJnz&UDV^yc4=< z3cljzxx9kTB$t%T_naC&>$WId6KNrPBR(2d9%UHjXpJmdpO+ko%=ld{5wd-Z-oE@1 zz)gCj@fZv4ZdnHpu>R7Ec7I=~2KDXc%Ok{T8}kfvw4}EkVIVdJTU3E^V{R1Wi7_y<`^=I>t!7Idkcm9aQkmW)=0i zH2o=8;7?kgLi{2c_UTPhN|x=KXfU`{`uTyf2eQlaWppqDPVyA5-r%Ge67{qQ)sP!> zQJ-d@66oEt5FBEYLvm{R^R$3Rm&_GTlHp+V%B{GXm)1Al&ekE9Cj7+v=jpxQVVC56 zkuLHkoMPh^)UlF1iegedXjLVp(}Tq{H&WlTwnsrYqcMqbR@>(^?L;m(^oo4gJBLV* z)wXCgi|=^8ZR7)yP{(dHM>5DVL&k(fqVeH!FwZWF!fmpPwvDkx-#8TkkXvB`F*x)s znix!B$+CiC34qSiWlTDvzzkK7#NyxmCDwIQrvrf_#6lXpf>zc_!m8PAPXnRnGOf+} z@Ptc8PKKUG%t%ZPzZw>rxI-7?NCb9o)6c%o(D|*>E14YJF0lcEMlSHdnt>bkgWIeZ zsVEyl_gqFT9CHnX#YcJMXsTr^k7=sj_>i)K7Nh>(gm!7@x%p!;s1o83i=;qAx~h&& z=_uGRiFQ_TECV0B$dh#+d0%vXe&%cC%t3#`Xb9I6K}|bmO{_?)LiRD*T)DgP=$S@RY9?9g_cJLpTySW@dV)WEv>kA>m@s zuo%Mw+&0%tv)>=z6mABXd?WIs!OuV0Gg_)M0XquX-f%IYw>FGszzQF=8VPk%<8XRj zSniB7@H5?1c`T!7^~PXCy3eRb=J%4xSV z7T{E+aB!ab=XWk+<6k3^$lcOj1sr($X-g8=Ngn+)S5R9@lMiY+oX_cv2aZR~tkf>& z0t!+BM#IEZQ=iFv*H}*ED0pFYZlCLc1!&Beqibxmg_(DW|1}S zpaUiHU2&|0%}p&C&61Tm?BNYxB7}N-(!STlg26OGKSJZxtKzJp8zSz&ox@fPA97TN z9rAoDXweHAh4b+sCB-T6B4I9e4WSFppqsY0f}V>CG~lt^SzaVw&_AOMkBmnj^-_NG zd=HoQnG_FcEFu6$3?HGFMQIHSdx(Z(r!{r&)@2mn0)7kEie8jTUe zuqG%XO<{+DDiW-Pg@E}8Ag5Q>G5|TLJz94j4YPk0R>B>ZaUcrlx!k=?Y1_haLdLM* zv0%Hq{K#Z*_%+|*Ulrm4H|hJn9&eW@iSROu9^r%-VgJYRXZZ^Wl3=ybIbnVSq+`c# zg*Hy^?myKC4eeN*!|nR^MNwyKKl@HGcBk+j844~WXC&7z8InPq3zW}xsJs9akprFE z$|fYF1R2J<{)?<+FH|(iAjGIY@7&@D%sKuCK4hW*Uw{uKkCwxOIr7LeW=U3B)4{__r< zg)hS+^35e%aKM}0S#@Ji`{m%XU$Y+$+G#OUSamOEyvDTeUfk#wa z6_RftF>#Oj!Pa)wXY*}zynQk*m_J?&34^U^Gxvh?zN+E4o)))UW+|t)sTNm)hp9?} zk`e_{ z_J@7ouzm>Vk42P+o-tRBvB2$$K|{rp+qJrp<07RVz^f!POyReYg_9{sk$qQTC{%X@Os4P_} zp(v$&_{}qq$ZN~)Cl6{GGDZN8K(OApnub)R%6Wpu}-U8Z5_9mwO3@!1cRn2WBLdLqxe^%Zt2@NQ7 zvRp|N`=qtDr10+gADDEuD7qTL^fa~+mvj3i^HKuOTS*Ho_Da7Wx_dpQFJ#d~#Z!;7A zZ99uDcWH2KbNjUBk>Q~^?rBAG0nqM^n&h5z2FoVc>aV#@ayOck*Ss|OzKwc`dChD} z&^;vjbyI}@hU3QeLyPC!+x?k_gU!|gnl7-m`!OxVn!5L^*xREU2OTsdcG0p# zC~AW(ue*avhaa>{-vklsc|!x&g3?cBe-vPtJ0>Sg#cRjs|1iH_p5TL};*i|tLQ?RG zq-c^+zElR({~S*anOrHGcYZ)VcJ5-y*Y2J*e12%GL~y=P5S;#EH*Ae-M>(NVCq4m%nxv#+d80sLJYyXt( zarK+%s^N&@2A=>U*AwQaL}32udvn5ns>tJq<1KZRqMxg_{Gc>}Qr&~CiHuHV#!o)M zaKI7PXWdK?Y|9htH;<$l$)Baq4m;e=`c-ocqp2~%@J-pq(J7|d4}Rn-OW(I;zOz7B zEoT&u-%S7)g?{-SYr~iDV3Lji99>S=OZwxzPZ;J>#2#zq4@!Ti*Z+hG1J*lBBVGjX zjijf0B+f6$sz*bVniY~w?;|ht9_+zc zW-ES|11qZD2VwU(^-g?Vy($x*lKA+AQZ$@JwwlWl{SOMA3h`{qKD$++)rDkt_{0g2`|s=TJmFK0}eo{#<8H#RtbCjyV1b;WfOW zu+`x&{*QMb;9VcF1rkL){%I`5CHmCeRWOwR*bLi?wFj(V2?>1jB((mI{40b^8+Uq_ zdnWzQEEv0s>y1!ma)Zwiyp1c35TV|Xv~78XPa5r6;-oq|d~diwOAz^edW6vuDjy*t zLz5c4Z!>?@z>B@pM2MgvB#lM_yd!5AleRuLvKVdk-2;eY@`9iDwxL1RfjXS8r1SQ7 zBcK%mw6>(+fqWVwVAFwWYSvTMxr252>)h($TF^jDv&LRjKBi|BKm~RArIV6%g^{fo z#h|@vSC)|zkCbUaM)IY;R3cHD5F$MKF|cCC#7k;TM$+g%Feg>rtvm?y-u$J1>H8oE z;DKM4ADrdh$%{j>b2WUki0LH)Qib(JIAu$0p^uWMT$2^JBv?CBGw$o#N-{BW0xyDq~<9kvjOqIrERMGV(s`+K8{756A*D7_lC)C=DVh$iLCc zivmhkcjB*ma;Araq`WvaC?*Wk<9VEtNi;N(Uy1{9_POOKenZg3MVgs8n)4@{9LhC$ zz2)(78tDQfl$0u%;m@H4psOwJDsjNoBPV`ofveAWkh0muZwB9iVmNtdfLhA2=vCWt z;{r4#Bv>`zfODdbax8f7LFmEnZf&T1JXnf`nI-%Q71FTC=Rlzv2z*1fu zS`juy8$PwVfq0k5y^=Zl@lUoeR6G2H4DhI>5QqI-wMb9i46W)&1z8MVl8F6KE7%&U z-R1gG3}}Lb*NMpkxsL4%r)7~7Q+{z8X7|o5Z2J0|`@Xk_`P_`;ni<~8Ty`LY!I>Tl zaC*FW)!as|D!1+I8{*V+viIF+P2;gb{^-D6;&oVY#46)CxBoIr{r$yrBSsYwR=DS8 zw{J6uP7)q|rhu3>{k=L1ZGkXwqR2~S<*?83s?B9|PPcIB>k~$HjdQ(%r4Cb(AC<0R z0Yy>!XF5pJm`vjU9!4?VsuL+RK{BJ{!SGjhsScY&jyEv|t+;;S^t7ab5Fs3xzu0B0 zizvsVAC3%x4t;IUglO~7CsejQaD+L%4v%D>XVQw)G=BW0<^>q}uNWrZjaJRRK1u^u z+4%>H-=i6beAUd=yP~5XWkL!*$S<|LO8Y*Q9|V_jdh~6Uw=emG_!@oWvm}i}ve9|5 zz~Fz=dK_ua9)@4}!_9oFGIPTIO$qhRWce08z3?r+vMZct^dSMp<6(YlM2f-VIQim@ zm$xUt>w&p>E84$Bgy7>a^3g}sWShOtDHk2p^2nE?I1go=*cNhqWZG*#m)U>2wHPEn-*#Ku}$@Ygo4THAGr{`Ld_gCZ&^9%d__2ETA74-2);d1eq*5q)$`?e8XzR{X<}!)`C@CI`r^o&3wN5U1Q9lTWt;1p zzb{r$9O4_(OJ{n}rEQ7Tb`dp>CV+Yca&)wSkqbV-;)ls7Y(?J_SI1StukS^6_>Fb@qhtrfVFxH->iyw6TL2&*olKcPyEEK-(%-hRVP46vo z^!Q})+UC%6kmb7)=}(JqEMDWF$Gg3kc02%Kk{ZxWA0ghz1 zauoYdEK8hXxBC~vEaNO7xO$y^=mifhMiCM_^9M7ec`XM5XAAzGkUI`Tyes*+KQfU0 z7ld?sN+Mw&$dK%doJGxeZUo-SfCj{7Yewe!uu$Y5a)^B7O1c<85I>{urBxXqO9JhC zEDOQip=4;{QT~%_^9~F)iagm(7N(-O*MSAai}4edJfH=5TCyy}a@RcPAV_$jiDmgt zKKDcOPqej56F;tgfDq6VOtjZ|8Y`!WA!;W15~K2uG0Zn?({%bOn-Ac@Y773xh8ik? zc0l(;c8)A8ADSl@_eJggxX}h)GviDZtX*2;Jv0x4)pFf_iwz({D;km=jli4j9*2Qj zV6_gHzFt|fAlEQwf!AwktXLGO z2Ub0Kkh2isCi`K*c10Wu@=on`$=IT!KQO;@BatI%SbuFs@z=b9%2`maK%X0C+JK}M zOBfMexPRGc%@;AeWV>Y-uj8D~?G+XUlU)_5oO1&~$>@C-Cw5MDx#u;Ht<<<(t#dvt zd8@n@qIucDIfxIMrYxM=nr-noX0sY;Zs)1cp~cpfWI>$-zLW(aqo}@cONQP;+|1d@ zU@@i;p8%TF8AGtBPc2rMOnm=$D}CDpD`;CkPNf8p5`Ujt+1m6B3 z&Fu&sxMp%pok^}P{yGCfGwatm$lp>YRWjHvQcj;=>Xz&swBFxLwLr}v%`g&oei6=H ze~x76A-%SX6x?3v)n?~j)~4m3JlON!)N)ymc>ga)qV~$`!?LjTh*0G-N~>Iov;D)q zk%;auv{Eb}NLQRRsfop6$mRFtLqX|ptxc-Gx+_pZbXoSfXTe%dk41ZjfYSdIl66H+ z1Xx@Vk}CXe5;mO_z03s-$gz0Ke81}qml{XN_|C5;W4}Z&tHsyXRR}Cs(ap(2Q#;>90BDb)EnzsOO{U>9+$K z6{7*l8XW{5InCAtS*C9t&&?zQA-XCar<}+xFfX#9v}_zj)RXAao_2L-F@B?D`3GTSpH8Mci(EHI&fraI9Yu~IO&Cv#c3FP zDBGh~Nmum(n7?T>u(788>0?HSPR1w^vVWOfI8g1beMV{*ikWM~eylc}aXoaiJ!W>A zc+;J4_bB2mJKZo-R5HMU(4^klDW10HbY_5TR~-w|>GpGYqSP2PouZzcZYPk~rIymYQepVZ zO`2sW@u>SloTjP@TiR;82UeIbY%KbXQ>s3t<^3w}lab5IyxD$>c~E8Rhz{7M`Ptp+ z_7?MwQc7DO8q97nGb?v#>aElp6Akpa>6HM`XII=Yjs9&K8g=?45!2c2TJ&u7g}vVx zpW4k>Mxa|LVi*UhK~s)ex9H>Dib&>L7Pfc&(=>Z}ZKR2QdKnd15)`fs$3|)x2X;&x zG$63xox ztXlF~FI{H(BQhLFn!T=8_k}|7D}(Agvt@DNfj#=Ra76>oVF5G8Kg1j*oXTjTm#=d~ zuV~XOLC^$#AtXJ27!YC;LE6bwHd|&4860HG9%#a*-`PkWpV#dLvaJ((Q%s+o$0UF% zZsM+$)MC=gYpL7WsyVzq!%R>Vdfxuk zwjyoi;*cPgB5C?h@K7}fsWIggluxIyb;5x8J1Czl6DQ}Fwj9dTLLVug(N4S%RiFU-+F~KA7XTW@JDmuH@n{9x^X7jBAai-{?9|Uy9XE@m2E!4F2%1+ujlXWhE5Dz5W#Ff>5zr@iS~ZteVIw=K z8*&X&?RO%-Ca1^@oEF)vTKw^TE$qS>*y94NG5d*UObS~dfJT;hSHF(Gwi6$Wh(oB? zyc28TB=+~^Ja_qbEdI5u<|l^K*T$}S{Wp1Pg~lnVK+l$Eim&;vECmtS>UmTA)bd}y zaUoOq!SW>~N*901`xaHbPvW%HIn3MLte_H8OUz&3a=aOmXLwd>-M_6(ABJ*SQ8T=s>+S7x4 z?2!E3y?J69%l^E@x|1ixUxNK)7kfpQy~FP#?A|OIHAf*Q|@ToCjY>At>4xK1J^;d`-f2J+=?MIql#GR;Q>XBC#~)AkZEzGy1BOeQ+Fe z(zVbi{k&s$T|c$5hvMq*7aPdG7G?{)rFiD_mdbFLOZ&>Nwzk_*_HX0ARqz$#LvChO zf<vCX-hAO$@Shr0^OMt9`6*FSz^LAM`)ORn|2a-yURH!91x9oG z86l#kY^r~KF(C3{V@fk`G6S5Axp>2pRUFrV`#2-fK(st zd1UpQuplwrQ;yfop~Vpahk2)(2X>|_I>K`a{lO0Bf-3yr`gVtsHHOgT-sKKin}sK; zk&VIH9shjc-RY$~5$L31Fk(1Dz;OKYmR^sQp9+JJyadxUD`7E+g5Xa7|Cxh&ota|&PI_a5`9CFvk_`4 z?~uB}{Dw*GB z1L-A~AZGhAh8GwA=-lMzR8(z%&4PhL?$N{db-`}77W=OxP$Z0ZPITe2h}#4|4Z#;B;fG)%C$G~5j$(XmFS1&8=(;2v&4ew z-b41)xbYU?>wa_9T%VX!02SVhUC)r;&_t1UN4VqxtIIJHPn9s=`IkJx|BZT+xjX&) zWzSQch(^Ma0tVjS2h3~7s)l=zX9c(jMvvk_Zr*qpn1 zBl{nSQYlu?^-(*wzJCjfW1l8rEWYenpf_@fwultvn~>^z4@ zRx6i+Qx^l-JDAx4C*>ONG6{1n_E#0~IC3AKc3JtbZg_QgL@RuU%boeuEeKwVhkzCfvbpA6rPVImz>~H)u5K@BfZz9-~E}N}Z z_C6+(2BQX>j1%w=v`us)G6_HQCy+0MX1k}f?kbO#swOO~)5vi=>f#!BFH+Z5(mECG z$eluXh#53bIoM*4WXU29bey)XE-Fao>ou#YGwUx(eJcG4Wd|+cP6lXC8uA>`I`)2V zq)d3K2VZ~S?Fz@FuDpmFOtN^PW0Q$zPD{m*UtnwXhI| zEkYebnE^?^uM+VT??Qpbr0DcKcfy$xwc6BwWOfmRiZq)dK}=fFQWsb}UE2&a724@#g|c*6D`?7m1r1xbx@ zq=k%WMcBoh1U~4cCUwpkK&A(nN9uk`3GR@ z6vwzqLawiqA!4yk3~>fy#`mdnDbc=W2* z9>GAL)}E}9g~a~w`gQTh_W?Pa?>}j1fy&K_M=CL(jiCu>gE{~88axs{@`_}pxETq> z0pRm+-|4x02iK2Hu^3YNA4w`_=(myf`@DE?dW-YdV`uwtCJSdiD<7c_UG!V(fr9Td z!}h{n>GM^LYi3`6ja^r2frH>?*VksZWFH{p-6{12-^~i_q{pH4rKbc`c}xkTI0dC1 z>{=e5zI&HjdK+(F_Fjw3s1AKkx3JrKhsj&-Rg${6O)EJvd}#0!4g50}q^+*6R;3Dk G`~LtX`|#NS literal 3608 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 diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-agg-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-agg-reference.png index 4f4fc7526e84f10b6ede0d5b181cbb1d6cff458d..754d22092965f88705e77b131aff1959784b8f46 100644 GIT binary patch literal 12570 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 diff --git a/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-cairo-reference.png b/tests/visual_tests/images/marker-on-line-and-line-placement-600-400-2.0-cairo-reference.png index a2846c175d01e60a7db69236a9802da9913669c0..81322150c0055da268254abfd44414fea43f661a 100644 GIT binary patch literal 12389 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 RUEB-oIvNJ*m8yua{{!=EOVR)U literal 3742 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 N=pKIVqFpTZ{{RTGjZ**s diff --git a/tests/visual_tests/styles/marker-on-line-and-line-placement.xml b/tests/visual_tests/styles/marker-on-line-and-line-placement.xml index 3469cc24b..6cbdcebd4 100644 --- a/tests/visual_tests/styles/marker-on-line-and-line-placement.xml +++ b/tests/visual_tests/styles/marker-on-line-and-line-placement.xml @@ -1,13 +1,19 @@