From bebe5e9e3acbbf2ea33d4df8ccda1149eb21f0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20S=C3=A1nchez=20Ortega?= Date: Fri, 22 Aug 2014 16:26:02 +0200 Subject: [PATCH 01/16] Added test case for winding order of polygon rings. See mapnik/mapnik#2371 and mapbox/tilemill#2110. --- ...ding-order-300-300-1.0-grid-reference.json | 84 ++++++++++++++++++ ...inding-order-300-300-1.0-agg-reference.png | Bin 0 -> 423 bytes ...ding-order-300-300-1.0-cairo-reference.png | Bin 0 -> 488 bytes ...inding-order-300-300-2.0-agg-reference.png | Bin 0 -> 377 bytes ...ding-order-300-300-2.0-cairo-reference.png | Bin 0 -> 377 bytes .../styles/polygon-winding-order.xml | 61 +++++++++++++ 6 files changed, 145 insertions(+) create mode 100644 tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-1.0-cairo-reference.png create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-2.0-agg-reference.png create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png create mode 100644 tests/visual_tests/styles/polygon-winding-order.xml diff --git a/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json b/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json new file mode 100644 index 000000000..2d2a4af9f --- /dev/null +++ b/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json @@ -0,0 +1,84 @@ +{ + "keys": [ + "", + "1" + ], + "data": {}, + "grid": [ + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + ] +} \ No newline at end of file diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3e0b1910c58f0e6b546e2b2e303d5782633bda GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&7G|JGckpC4ASDst6XFV_8yFZ4Ffcp-A_av5 z4h{NpJR{H62dZOs&4*uSuX+(rmi`o zdilcCJ9QxIi3Ychap^8=zxE?|y4(gB_%~a$%0TVwo^v4g6e@Fa;|JNx*IY32PW!q% v7G}VP4O)>iy_YT2-ubtwwY7CC`!(^5n%!on-K-A-L!80W)z4*}Q$iB}5qq)1 literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-1.0-cairo-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-1.0-cairo-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..2003b05f6997ff95108affecd8090a731eb760c5 GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&7G|JGckpC4AY~BX6XFV_8yFZCF)-|AU^u|Q zaD;*3E(60OAd-{2tE6Spe{a#rbY1mk^P`7g;8e=h)ft=LJq=Rtin#pO@{(pj zc(D4Z2;b+jt3qESF850S8G#Sf8f1%Gf2!lyCY zFZbME*IZLBd$M=^x|?f0!mKBX)=Iu9I`!zU3;l8%VBp{E)bJ3o)i3urZ~fG-qJtl- zkxy04tIGnru*?P0BPwUKF sQ;D#Wchj%t_oh=5*Kz~FYNprB)qA<`T|N*w4;Y3Fp00i_>zopr06wvf_W%F@ literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..13651ed9351595608b6ddd76b337cf4976e0154f GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&7G|JGckpC4AjK2l6XFV_8yFb=14$q#oAVE- zNW;^`F{EP7+dBt24;u)$I&K#z7uemrP0BPwUKF sQ;D#Wchj%t_oh=5*Kz~FYNprB)qA<`T|N*w4;Y3Fp00i_>zopr06wvf_W%F@ literal 0 HcmV?d00001 diff --git a/tests/visual_tests/styles/polygon-winding-order.xml b/tests/visual_tests/styles/polygon-winding-order.xml new file mode 100644 index 000000000..e949e7d7a --- /dev/null +++ b/tests/visual_tests/styles/polygon-winding-order.xml @@ -0,0 +1,61 @@ + + + + + + + + frame + + csv + +wkt|name +Polygon((-75.0 -75.0, -75.0 75.0, 35.0 75.0, 35.0 -75.0, -75.0 -75.0))|bounds + + + + + + + + polygon + + geojson + { +"type": "FeatureCollection", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + +"features": [ +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": + [ [ [ 30, -20 ], [ -70, -20 ], [ -70, -70 ], [ 30, -70 ], [ 30, -20 ] ], + [ [ -60, -30 ], [ -30, -30 ], [ -30, -60 ], [ -60, -60 ], [ -60, -30 ] ], + [ [ -10, -30 ], [ -10, -60 ], [ 20, -60 ], [ 20, -30 ], [ -10, -30 ] ] + ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": + [ [ [ -70, 70 ], [ 30, 70 ], [ 30, 20 ], [ -70, 20 ], [ -70, 70 ] ], + [ [ -60, 60 ], [ -30, 60 ], [ -30, 30 ], [ -60, 30 ], [ -60, 60 ] ], + [ [ 20, 30 ], [ 20, 60 ], [ -10, 60 ], [ -10, 30 ], [ 20, 30 ] ] + ] } } +] +} + + + \ No newline at end of file From dd4e2336c4a9ff5ab2e79158ad8ab9fd6d213b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20S=C3=A1nchez=20Ortega?= Date: Fri, 22 Aug 2014 16:26:02 +0200 Subject: [PATCH 02/16] Added test case for winding order of polygon rings. See mapnik/mapnik#2371 and mapbox/tilemill#2110. --- ...ding-order-300-300-1.0-grid-reference.json | 84 ++++++++++++++++++ ...inding-order-300-300-1.0-agg-reference.png | Bin 0 -> 1220 bytes ...ding-order-300-300-1.0-cairo-reference.png | Bin 0 -> 1178 bytes ...inding-order-300-300-2.0-agg-reference.png | Bin 0 -> 1738 bytes ...ding-order-300-300-2.0-cairo-reference.png | Bin 0 -> 1754 bytes .../styles/polygon-winding-order.xml | 61 +++++++++++++ tests/visual_tests/test.py | 1 + 7 files changed, 146 insertions(+) create mode 100644 tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-1.0-cairo-reference.png create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-2.0-agg-reference.png create mode 100644 tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png create mode 100644 tests/visual_tests/styles/polygon-winding-order.xml diff --git a/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json b/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json new file mode 100644 index 000000000..2d2a4af9f --- /dev/null +++ b/tests/visual_tests/grids/polygon-winding-order-300-300-1.0-grid-reference.json @@ -0,0 +1,84 @@ +{ + "keys": [ + "", + "1" + ], + "data": {}, + "grid": [ + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ", + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + ] +} \ No newline at end of file diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-1.0-agg-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5bb8e17d807ea8c1185dcdbd2e59d2768122c0 GIT binary patch literal 1220 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4rZW;-{LxVAmtk16XFV_8yFatF)*xQVA#RH zaD;*33p!0;bPva&vqmp@`{y~D#}d1U0oyu8lx^2WNl zhK7dRlGuq13@lcjE{-7;bKc&4>-We(!XYt}JLtuhh7*6|UxiIL>lXRq<#mVZbNq&Z zna?>{O+L=uzP)X(T1;^Bv7>PpCUmk2ajS@BD6EN{;g?z}z`aFU=(WJ9zaInSms<5z zFXXvc7~gg}Ia^|l)|>r#c4etw1@ouw-O7LUXPLwrqZ<1~cKpEytlB=+So4H&d~HAK zvTL3D8a9Zb9y${u6gD~}H6CF?2rSTuSlw5DTlbSnTd2&M)bIOS^`AFQZJD5Zsp{zK zZRvAc1s-n{W!7H5c3)JUd9J@TcjffZ?K*5>g6rllU3=bIWNrPHTEh)aJ7jj0UjLo3 zVTayv0dJj+RR^=aA9K;!D3|Xf0M2K=?jar26ZqxT}YyN-FzIXP@##<$p&!s=- z9of~o^|!^{S>?*t-mm&4v}O`eEGa?MSM1kotaqZU*%P0*im#01^{Bau96p!o?2?b+iiLhuW1;@(^)`DK>OQ; z-*Q&@D>TA3AF>i$ovGO3`^!=&?9Iz3dqdvYAI*x}DbKF`sr1T5`Q59!OZ73*Pe;Vb ztgrw6?TdR}x$kDqw%fUZ6XLD9Y-aLb+w@yM^YqRH)vr;TO?)SN>-yPpKRnpKb=Pfc z*TbiruYJ91#?SFG}C7Ox6|4)pw>!QUfN~tfr^? z|8|+OgiTNGVC_>Bvp5!<&}+D3`TIqQy@o=ofYjXQM@n9O+^}(9ciU45>!z!jem*m9 zHXIT6!OUhCPDHGq7qLKaquNAJ4qTkzixG}MVPD>V4E?i(bw1zrZwD4f44$rjF6*2U FngDhL1t9DMF$2RJ28OQ;48Ir{{sT!iwtI?-N3E@QxVx_m4__J;)mc{7SXbB3&|rT1I#4Bx zq^FBxNX4ADcW)Lga*%L%c*5+Gfbz$`_e(kamMvSfSVk)2XtCZSSD|V8kHV(zzkkoI z>{dZCuiNxrEz^8-CPXM~bns5B-Qs)0!?!v{?6vJz$#b`VPl`BxL1tI-?YebUQ*}bh zGYPhz$?{ujZ*!OV6b5{%z##FqLC<$A6tY6{2f&u2j}PU$soWG_GCb`&yBR z)Dy}4*8Hh&)YPUht>*i9T=vzE+y_Aktp)c!KH0b3@X?c`Z;I0*lFl}nzHRM{NVge&tbK*i~Eqy{hGOfrOdZRjI?rKK*sJIbeTUVt4m`ccC>m z7(2ge^Lo@=!x}EIfLgG0W6S}ugujtemD;+yO+IaSQFiL`?9EHX@0MAXHX&LebkDGT+wZF z{@*cv+x3U%-k-JUYP9O%RZeo%Zz?tN|2v4jS~WvZM>5RzaC7a7{QCWN@oP6XsviEe zG5OxRf19)G=cc*-erj4PuitDM^J@7!=QV;6e8{SJrzck@zTLD*EL-PV zp7~cJ5y}%3I9UQy)xX>8BfJxizH!#sz`yZ;og7nk??Kz*={&1r5>>9;Q9Ug6?1)Qg z{f!$yW>Jsq!LC`tm&5m8YB-_}&7sJVec@EZ`FRlwL^qm&^V;f!TzxD#E}6HEdFvW^ VjnA(){R9>=44$rjF6*2UngF`6?)?ax{-J8 z)8ij1x>F>3xF#+8spTVuxYY3u5?dUgXnoJ9@mntAnXSs*Riv%SrAykY=fVlEl6ME( z^15`A_Z9>%v^VzP8>q*ZHkj&|&&~VXn zY02#atLsTal~cJlmiv7AAc~9M{m>0!dY>(OWKiuDzaI^zZLhC3dUEDL&{aK+vV+Wt zXH9V+QIAZ4JO$sUT1xD`aCQv5Jqz_!{x2|L!rsv;!U$Yvq)VJ^;ZtT3tS!t93t|-~ z=<;3OcCv;s2=isY=<7r(hbq?EsN9PVnjp4tLsyS#981?n*M357bs*O>vvTW-?Tc`> za7t0*kMj9eBPw(e?#V2~1U1;VFu62Bz8re!b0hiJ==mYqS~tf;v2`j6Ba}F&pEAQOu|!&%29%rShfR@I>E?T}7KpWzv&+IUjwhZ_ zca<@6&|ryZ0%qc_st$EUf5Bc z!qUjq2R_Q)?R)N>yrMh^PEYQ=;|-@DDiqRT0V%RDCct2GLAy0lC_Tty@^iIR!&~VWLm7Z&&VV z;-EuQ=6Ve5X4i@$9^P?gn-{m*G7dn=Dtvr8m0V%e{_>_RJS0J%;1NG?d%R?aZ literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png b/tests/visual_tests/images/polygon-winding-order-300-300-2.0-cairo-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..94dffb0a30ed76d434234d90109bfd5c572a6974 GIT binary patch literal 1754 zcmd6oYc$k(9L9ghrE$$EsnErx6QiTH&S0Y2NU|=8@fVtrHD%IRx$MLkw?a8M)ea)H z%c9I5|8X0Q+lY;fYoXGNIbnzifaV~xV7Fg9>}4JYz#jnQ08j`31As~Z>H+u%04@Oi0Pp}9 z17I3}c>tCHSd*!u;>v~%izw8by86tfO&_(iUZT-G78V_c54T%dwqmg*o}R_t-noH+ zso~*CQBl{a)OZ>#E-uc)-N+CCrG1We$2}!M*gznmCk>ueoMk<`0m z3Nwgjddwyu@zb25x86Ciex**+)z#tYixsqMEOTkm;)ouX>@g{Po{J+%@Dq?GvENnT z6ecM49!v~FOBv5nh^%JYRpPNE^3*$&xHX$7O0 zjPEOZW{T^A?uNjyU2;Gk-uIprM_v_;aO4^KP*&`owQUd~UNJKS&Noa{)LG9zE`xZ^ z3#XCy@7KhM5k<9agp80X+mXf@*JxfGp<`VysE<$I3&B!%KlO)ozgs|me1=L zO@86hLwjY=;7#6Lt=I6Tx{|UITI`?9j!Z6CZ5m7;*v774$B!m-nc!#IXPjA~TGc|- z=-+Dn>iVI>JdU=!lL~q_a{aqdqQ(8xrK{vL;!TblTv=xN!_Mmc@cmaPYfm zKhLW6lID)gpJWx|2jBC&K`+fLcRedm4IfyTjCj&f(n1RQR<8eF@Jta(d!xPLBbZ3t zDhf_@HYw=x+uO{}wvk4LUu=>gA}UB2#UiLG8}DmJmL6$xd*1c!kCtOlRFPY(4GhZR zS#ME!!mjs=QLD7I?nAn2NiF`mNoO|m1%ix|1(xY;j#tNZSc}7)NJ;%=Du(AWROMqR zZ6)!XSvD7}DoaKqXC5$@KOgLR_G``FO2>Pp9l;Rs?ZMovH!YnmL~-SxZ>PU};axeN zJ$tEvM7NIa!IqQZ*DD7!I?8t;I|NG$Cy3IfICG&o_dIk{!R*8x&EKbPW2Gr4EJC2$ zb)_a%EqPJ9hGv37DHHOYJ2GRoSU*7qWo?~`r>r>>^yo_SNpz~KuPv7Mcy?z@&S8S_ z#HYjv(uIZ=d%b{&=$5|5SJh!v1|n(Uun$#Gqz2=W$dEl^aa!tDq?;go7@f%1Bjhzt zjXm^IKv4d|ES$CyVGGCfbIWp?zwqHqvuVn}WLwjjxQJV3Z1L6#OiFcbfbwrvGM>Le z{ll`X3Z4E6y)Cn&Q!dj&8G5Qm*ccXPygnp*!PXixp?MhCI{o_9b<@}p_H|;e8{g`H zF*fX2zG%gNaqfyO`gw$*Lr5m}^Vr4Gqy6;J1Y@*DJ`Pdy(tT*fS-Fb2+IsD*!hax< q+DNqT+B=Xi(D)r&-)J)>ecUY^5VRQozyP#jfmULc+iN&Mfr+ literal 0 HcmV?d00001 diff --git a/tests/visual_tests/styles/polygon-winding-order.xml b/tests/visual_tests/styles/polygon-winding-order.xml new file mode 100644 index 000000000..e949e7d7a --- /dev/null +++ b/tests/visual_tests/styles/polygon-winding-order.xml @@ -0,0 +1,61 @@ + + + + + + + + frame + + csv + +wkt|name +Polygon((-75.0 -75.0, -75.0 75.0, 35.0 75.0, 35.0 -75.0, -75.0 -75.0))|bounds + + + + + + + + polygon + + geojson + { +"type": "FeatureCollection", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + +"features": [ +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": + [ [ [ 30, -20 ], [ -70, -20 ], [ -70, -70 ], [ 30, -70 ], [ 30, -20 ] ], + [ [ -60, -30 ], [ -30, -30 ], [ -30, -60 ], [ -60, -60 ], [ -60, -30 ] ], + [ [ -10, -30 ], [ -10, -60 ], [ 20, -60 ], [ 20, -30 ], [ -10, -30 ] ] + ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": + [ [ [ -70, 70 ], [ 30, 70 ], [ 30, 20 ], [ -70, 20 ], [ -70, 70 ] ], + [ [ -60, 60 ], [ -30, 60 ], [ -30, 30 ], [ -60, 30 ], [ -60, 60 ] ], + [ [ 20, 30 ], [ 20, 60 ], [ -10, 60 ], [ -10, 30 ], [ 20, 30 ] ] + ] } } +] +} + + + \ No newline at end of file diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index 3f8796d6f..43f4616c8 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -256,6 +256,7 @@ files = { 'marker-symbolizer-expressions-all':{'sizes':[(256,256)]}, 'polygon-symbolizer-expressions':{'sizes':[(256,256)]}, 'polygon-symbolizer-expressions-all':{'sizes':[(256,256)]}, + 'polygon-winding-order': {'sizes':[(300,300)]}, 'group-symbolizer-1':{'sizes':[(512,512)]}, 'group-symbolizer-2':{'sizes':[(512,512)]}, 'group-symbolizer-line-1':{'sizes':[(512,512)]}, From 0cfbd3c5e8ff6a4de2c2c4dc529665011c71a304 Mon Sep 17 00:00:00 2001 From: artemp Date: Tue, 26 Aug 2014 10:51:55 +0100 Subject: [PATCH 03/16] expression_string : implement function call support --- include/mapnik/function_call.hpp | 4 ++++ src/expression_string.cpp | 14 ++++++++++++-- src/function_call.cpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/include/mapnik/function_call.hpp b/include/mapnik/function_call.hpp index f7d3cf9cd..236ad0361 100644 --- a/include/mapnik/function_call.hpp +++ b/include/mapnik/function_call.hpp @@ -37,11 +37,15 @@ struct unary_function_types : qi::symbols { unary_function_types(); }; + struct binary_function_types : qi::symbols { binary_function_types(); }; +char const* unary_function_name(unary_function_impl const& fun); +char const* binary_function_name(binary_function_impl const& fun); + } // namespace mapnik #endif //MAPNIK_FUNCTION_CALL_HPP diff --git a/src/expression_string.cpp b/src/expression_string.cpp index 758916b8c..386a58901 100644 --- a/src/expression_string.cpp +++ b/src/expression_string.cpp @@ -129,11 +129,21 @@ struct expression_string : util::static_visitor void operator() (unary_function_call const& call) const { - str_ += "fun(arg)";// FIXME + str_ += unary_function_name(call.fun); + str_ += "("; + util::apply_visitor(expression_string(str_),call.arg); + str_ += ")"; + } void operator() (binary_function_call const& call) const { - str_ += "fun(arg1,arg2)";// FIXME + str_ += binary_function_name(call.fun); + str_ += "("; + util::apply_visitor(expression_string(str_),call.arg1); + str_ += ","; + util::apply_visitor(expression_string(str_),call.arg2); + str_ += ")"; + } private: std::string & str_; diff --git a/src/function_call.cpp b/src/function_call.cpp index 91857c963..33793fc46 100644 --- a/src/function_call.cpp +++ b/src/function_call.cpp @@ -69,6 +69,22 @@ unary_function_types::unary_function_types() ; } +char const* unary_function_name(unary_function_impl const& fun) +{ + value_type(*const* f_ptr)(value_type const&) = fun.target(); + + if (f_ptr) + { + if (*f_ptr == sin_impl) return "sin"; + else if(*f_ptr == cos_impl) return "cos"; + else if(*f_ptr == tan_impl) return "tan"; + else if(*f_ptr == atan_impl) return "atan"; + else if(*f_ptr == exp_impl) return "exp"; + else if(*f_ptr == abs_impl) return "abs"; + } + return ""; +} + // binary functions // min inline value_type min_impl(value_type const& arg1, value_type const& arg2) @@ -95,4 +111,18 @@ binary_function_types::binary_function_types() ; } +char const* binary_function_name(binary_function_impl const& fun) +{ + value_type(*const* f_ptr)(value_type const&, value_type const&) = + fun.target(); + if (f_ptr) + { + if (*f_ptr == min_impl) return "min"; + else if(*f_ptr == max_impl) return "max"; + else if(*f_ptr == pow_impl) return "pow"; + } + return ""; +} + } From 4fcbeaf7061d66bbd01444caccef17e1f8f93d38 Mon Sep 17 00:00:00 2001 From: artemp Date: Tue, 26 Aug 2014 11:00:42 +0100 Subject: [PATCH 04/16] avoid creating expression_string(str) visitor objects recursively --- src/expression_string.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/expression_string.cpp b/src/expression_string.cpp index 386a58901..568c79ed4 100644 --- a/src/expression_string.cpp +++ b/src/expression_string.cpp @@ -73,9 +73,9 @@ struct expression_string : util::static_visitor str_ += "("; } - util::apply_visitor(expression_string(str_),x.left); + util::apply_visitor(*this,x.left); str_ += x.type(); - util::apply_visitor(expression_string(str_),x.right); + util::apply_visitor(*this,x.right); if (x.type() != tags::mult::str() && x.type() != tags::div::str()) { str_ += ")"; @@ -87,13 +87,13 @@ struct expression_string : util::static_visitor { str_ += Tag::str(); str_ += "("; - util::apply_visitor(expression_string(str_),x.expr); + util::apply_visitor(*this,x.expr); str_ += ")"; } void operator() (regex_match_node const & x) const { - util::apply_visitor(expression_string(str_),x.expr); + util::apply_visitor(*this,x.expr); str_ +=".match('"; #if defined(BOOST_REGEX_HAS_ICU) std::string utf8; @@ -108,7 +108,7 @@ struct expression_string : util::static_visitor void operator() (regex_replace_node const & x) const { - util::apply_visitor(expression_string(str_),x.expr); + util::apply_visitor(*this,x.expr); str_ +=".replace("; str_ += "'"; #if defined(BOOST_REGEX_HAS_ICU) @@ -131,7 +131,7 @@ struct expression_string : util::static_visitor { str_ += unary_function_name(call.fun); str_ += "("; - util::apply_visitor(expression_string(str_),call.arg); + util::apply_visitor(*this,call.arg); str_ += ")"; } @@ -139,9 +139,9 @@ struct expression_string : util::static_visitor { str_ += binary_function_name(call.fun); str_ += "("; - util::apply_visitor(expression_string(str_),call.arg1); + util::apply_visitor(*this,call.arg1); str_ += ","; - util::apply_visitor(expression_string(str_),call.arg2); + util::apply_visitor(*this,call.arg2); str_ += ")"; } From bfa13152e3c0ffc90fa8a052c409d19636231bef Mon Sep 17 00:00:00 2001 From: artemp Date: Tue, 26 Aug 2014 11:41:26 +0100 Subject: [PATCH 05/16] implement unary functions as functors --- src/function_call.cpp | 101 ++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 37 deletions(-) diff --git a/src/function_call.cpp b/src/function_call.cpp index 33793fc46..4eba797c8 100644 --- a/src/function_call.cpp +++ b/src/function_call.cpp @@ -27,62 +27,89 @@ namespace mapnik { // functions // exp -inline value_type exp_impl (value_type const& val) +//template +struct exp_impl { - return std::exp(val.to_double()); -} + //using type = T; + static constexpr char const* name = "exp"; + value_type operator() (value_type const& val) const + { + return std::exp(val.to_double()); + } + +}; + // sin -inline value_type sin_impl (value_type const& val) +struct sin_impl { - return std::sin(val.to_double()); -} + static constexpr char const* name = "sin"; + value_type operator() (value_type const& val) const + { + return std::sin(val.to_double()); + } +}; + // cos -inline value_type cos_impl (value_type const& val) +struct cos_impl { - return std::cos(val.to_double()); -} + static constexpr char const* name = "cos"; + value_type operator() (value_type const& val) const + { + return std::cos(val.to_double()); + } +}; + // tan -inline value_type tan_impl (value_type const& val) +struct tan_impl { - return std::tan(val.to_double()); -} + static constexpr char const* name = "tan"; + value_type operator() (value_type const& val) const + { + return std::tan(val.to_double()); + } +}; + // atan -inline value_type atan_impl (value_type const& val) +struct atan_impl { - return std::atan(val.to_double()); -} + static constexpr char const* name = "atan"; + value_type operator()(value_type const& val) const + { + return std::atan(val.to_double()); + } +}; + // abs -inline value_type abs_impl (value_type const& val) +struct abs_impl { - return std::fabs(val.to_double()); -} + static constexpr char const* name = "abs"; + value_type operator() (value_type const& val) const + { + return std::fabs(val.to_double()); + } +}; unary_function_types::unary_function_types() { add - ("sin", unary_function_impl(sin_impl)) - ("cos", unary_function_impl(cos_impl)) - ("tan", unary_function_impl(tan_impl)) - ("atan", unary_function_impl(atan_impl)) - ("exp", unary_function_impl(exp_impl)) - ("abs", unary_function_impl(abs_impl)) + ("sin", sin_impl()) + ("cos", cos_impl()) + ("tan", tan_impl()) + ("atan", atan_impl()) + ("exp", exp_impl()) + ("abs", abs_impl()) ; } char const* unary_function_name(unary_function_impl const& fun) { - value_type(*const* f_ptr)(value_type const&) = fun.target(); - - if (f_ptr) - { - if (*f_ptr == sin_impl) return "sin"; - else if(*f_ptr == cos_impl) return "cos"; - else if(*f_ptr == tan_impl) return "tan"; - else if(*f_ptr == atan_impl) return "atan"; - else if(*f_ptr == exp_impl) return "exp"; - else if(*f_ptr == abs_impl) return "abs"; - } - return ""; + if (fun.target()) return "sin"; + else if (fun.target()) return "cos"; + else if (fun.target()) return "tan"; + else if (fun.target()) return "atan"; + else if (fun.target()) return "exp"; + else if (fun.target()) return "abs"; + else return "unknown"; } // binary functions @@ -122,7 +149,7 @@ char const* binary_function_name(binary_function_impl const& fun) else if(*f_ptr == max_impl) return "max"; else if(*f_ptr == pow_impl) return "pow"; } - return ""; + return "unknown"; } } From 0d098a0467c38e2e998264799a727632a4cc4074 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 26 Aug 2014 13:00:32 +0200 Subject: [PATCH 06/16] Bring postgis simplification factor back to 1/20 of a pixel This was the value in 2.2.x and was accidentally changed as part of a completely unrelated commit, see: http://github.com/mapnik/mapnik/issues/1639#issuecomment-53388951 --- plugins/input/postgis/postgis_datasource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/input/postgis/postgis_datasource.cpp b/plugins/input/postgis/postgis_datasource.cpp index 5ce128af3..c18103f7b 100644 --- a/plugins/input/postgis/postgis_datasource.cpp +++ b/plugins/input/postgis/postgis_datasource.cpp @@ -778,7 +778,7 @@ featureset_ptr postgis_datasource::features_with_context(query const& q,processo // 1/20 of pixel seems to be a good compromise to avoid // drop of collapsed polygons. // See https://github.com/mapnik/mapnik/issues/1639 - const double tolerance = std::min(px_gw, px_gh) / 2.0; + const double tolerance = std::min(px_gw, px_gh) / 20.0; s << ", " << tolerance << ")"; } From 6b86b10a3f64bbc9798b189de257b5cb1ff4e7f5 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 26 Aug 2014 08:43:57 -0700 Subject: [PATCH 07/16] ptree parser does not trim CDATA the same, so remove trailing whitespace to avoid test failures in save_map_test.py --- tests/visual_tests/styles/functional-expressions.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/visual_tests/styles/functional-expressions.xml b/tests/visual_tests/styles/functional-expressions.xml index 64a5777b9..dd45a0079 100644 --- a/tests/visual_tests/styles/functional-expressions.xml +++ b/tests/visual_tests/styles/functional-expressions.xml @@ -58,8 +58,7 @@ "type" : "Feature", } ] - } - ]]> + }]]> \ No newline at end of file From b6bfab99b8fe3e24c901832d86f06653e5958cda Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 26 Aug 2014 16:09:04 -0700 Subject: [PATCH 08/16] remove unneeded header --- include/mapnik/json/geometry_grammar_impl.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/include/mapnik/json/geometry_grammar_impl.hpp b/include/mapnik/json/geometry_grammar_impl.hpp index 484401c72..0f587cfc8 100644 --- a/include/mapnik/json/geometry_grammar_impl.hpp +++ b/include/mapnik/json/geometry_grammar_impl.hpp @@ -25,7 +25,6 @@ #include // boost -#include #include #include #include From cc970dea1cffe37f95acba19bcac15e9b257f787 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 26 Aug 2014 18:36:01 -0700 Subject: [PATCH 09/16] remove unused statistics member --- plugins/input/geojson/geojson_datasource.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/input/geojson/geojson_datasource.hpp b/plugins/input/geojson/geojson_datasource.hpp index 5121cf19f..4e35487c5 100644 --- a/plugins/input/geojson/geojson_datasource.hpp +++ b/plugins/input/geojson/geojson_datasource.hpp @@ -85,7 +85,6 @@ public: void parse_geojson(T & stream); private: mapnik::datasource::datasource_t type_; - std::map statistics_; mapnik::layer_descriptor desc_; std::string filename_; std::string inline_string_; From 4628dc3ff344fde0bd7051553a930d4f4cdd8d7e Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 28 Aug 2014 09:55:16 +0100 Subject: [PATCH 10/16] c++11 style --- include/mapnik/ctrans.hpp | 40 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/include/mapnik/ctrans.hpp b/include/mapnik/ctrans.hpp index ebbef2fa9..062b7279f 100644 --- a/include/mapnik/ctrans.hpp +++ b/include/mapnik/ctrans.hpp @@ -133,32 +133,28 @@ private: class CoordTransform { private: - int width_; - int height_; - box2d extent_; - double offset_x_; - double offset_y_; + const int width_; + const int height_; + const box2d extent_; + const double sx_; + const double sy_; + const double offset_x_; + const double offset_y_; int offset_; - double sx_; - double sy_; - public: - CoordTransform(int width, int height, const box2d& extent, + + CoordTransform(int width, int height, box2d const& extent, double offset_x = 0.0, double offset_y = 0.0) : width_(width), height_(height), extent_(extent), + sx_(extent_.width() > 0 ? static_cast(width_) / extent_.width() : 1.0), + sy_(extent_.height() > 0 ? static_cast(height_) / extent_.height() : 1.0), offset_x_(offset_x), offset_y_(offset_y), - offset_(0), - sx_(1.0), - sy_(1.0) - { - if (extent_.width() > 0) - sx_ = static_cast(width_) / extent_.width(); - if (extent_.height() > 0) - sy_ = static_cast(height_) / extent_.height(); - } + offset_(0) {} + + CoordTransform(CoordTransform const&) = default; inline int offset() const { @@ -224,7 +220,7 @@ public: return c; } - inline box2d forward(const box2d& e, + inline box2d forward(box2d const& e, proj_transform const& prj_trans) const { double x0 = e.minx(); @@ -239,7 +235,7 @@ public: return box2d(x0, y0, x1, y1); } - inline box2d forward(const box2d& e) const + inline box2d forward(box2d const& e) const { double x0 = e.minx(); double y0 = e.miny(); @@ -250,7 +246,7 @@ public: return box2d(x0, y0, x1, y1); } - inline box2d backward(const box2d& e, + inline box2d backward(box2d const& e, proj_transform const& prj_trans) const { double x0 = e.minx(); @@ -265,7 +261,7 @@ public: return box2d(x0, y0, x1, y1); } - inline box2d backward(const box2d& e) const + inline box2d backward(box2d const& e) const { double x0 = e.minx(); double y0 = e.miny(); From cc76ac4c6a74aadab42cb89f99064c443496199e Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 28 Aug 2014 09:57:24 +0100 Subject: [PATCH 11/16] c++ style - avoid implicit bool conversions in comparison + make note re:scale_denom *= p.scale_factor(); --- include/mapnik/feature_style_processor_impl.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/mapnik/feature_style_processor_impl.hpp b/include/mapnik/feature_style_processor_impl.hpp index ae31a2ef4..b684b9652 100644 --- a/include/mapnik/feature_style_processor_impl.hpp +++ b/include/mapnik/feature_style_processor_impl.hpp @@ -162,7 +162,7 @@ void feature_style_processor::apply(double scale_denom) projection proj(m_.srs(),true); if (scale_denom <= 0.0) scale_denom = mapnik::scale_denominator(m_.scale(),proj.is_geographic()); - scale_denom *= p.scale_factor(); + scale_denom *= p.scale_factor(); // FIXME - we might want to comment this out // Asynchronous query supports: // This is a two steps process, @@ -293,7 +293,7 @@ void feature_style_processor::prepare_layer(layer_rendering_material std::vector const& style_names = lay.styles(); unsigned int num_styles = style_names.size(); - if (! num_styles) + if (num_styles == 0) { MAPNIK_LOG_DEBUG(feature_style_processor) << "feature_style_processor: No style for layer=" << lay.name(); @@ -301,7 +301,7 @@ void feature_style_processor::prepare_layer(layer_rendering_material } mapnik::datasource_ptr ds = lay.datasource(); - if (! ds) + if (!ds) { MAPNIK_LOG_DEBUG(feature_style_processor) << "feature_style_processor: No datasource for layer=" << lay.name(); From de22d5900c70081658a655ba2a28cf2715ae565e Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 28 Aug 2014 10:17:15 +0100 Subject: [PATCH 12/16] rename CoordTransform to view_transform to better reflect its purpose and be consistent --- benchmark/test_polygon_clipping.cpp | 4 ++-- bindings/python/mapnik_map.cpp | 2 +- bindings/python/mapnik_view_transform.cpp | 18 +++++++++--------- demo/viewer/mapwidget.cpp | 8 ++++---- include/mapnik/agg_renderer.hpp | 2 +- include/mapnik/ctrans.hpp | 6 +++--- include/mapnik/grid/grid_renderer.hpp | 2 +- .../mapnik/group/group_symbolizer_helper.hpp | 2 +- include/mapnik/map.hpp | 4 ++-- include/mapnik/renderer_common.hpp | 13 ++++++------- .../process_markers_symbolizer.hpp | 6 +++--- include/mapnik/svg/geometry_svg_generator.hpp | 2 +- .../mapnik/svg/output/svg_path_iterator.hpp | 2 +- include/mapnik/svg/output/svg_renderer.hpp | 2 +- include/mapnik/text/symbolizer_helpers.hpp | 10 +++++----- include/mapnik/vertex_converters.hpp | 2 +- plugins/input/gdal/gdal_featureset.cpp | 4 ++-- plugins/input/raster/raster_datasource.cpp | 2 +- plugins/input/raster/raster_featureset.cpp | 15 ++++++--------- src/agg/process_building_symbolizer.cpp | 2 +- src/agg/process_line_pattern_symbolizer.cpp | 2 +- src/agg/process_line_symbolizer.cpp | 4 ++-- src/agg/process_polygon_pattern_symbolizer.cpp | 4 ++-- src/agg/process_polygon_symbolizer.cpp | 2 +- src/cairo/process_building_symbolizer.cpp | 2 +- src/cairo/process_line_pattern_symbolizer.cpp | 2 +- src/cairo/process_line_symbolizer.cpp | 2 +- .../process_polygon_pattern_symbolizer.cpp | 4 ++-- src/cairo/process_polygon_symbolizer.cpp | 2 +- src/grid/process_building_symbolizer.cpp | 2 +- src/grid/process_line_pattern_symbolizer.cpp | 2 +- src/grid/process_line_symbolizer.cpp | 2 +- .../process_polygon_pattern_symbolizer.cpp | 2 +- src/grid/process_polygon_symbolizer.cpp | 2 +- src/group/group_symbolizer_helper.cpp | 6 +++--- src/map.cpp | 6 +++--- src/renderer_common.cpp | 12 ++++++------ src/svg/output/process_symbolizers.cpp | 2 +- src/text/symbolizer_helpers.cpp | 10 +++++----- src/warp.cpp | 4 ++-- tests/cpp_tests/geometry_converters_test.cpp | 8 ++++---- 41 files changed, 93 insertions(+), 97 deletions(-) diff --git a/benchmark/test_polygon_clipping.cpp b/benchmark/test_polygon_clipping.cpp index cde27fbe4..e831420fb 100644 --- a/benchmark/test_polygon_clipping.cpp +++ b/benchmark/test_polygon_clipping.cpp @@ -34,14 +34,14 @@ void render(mapnik::geometry_type & geom, mapnik::box2d const& extent, std::string const& name) { - using path_type = mapnik::coord_transform; + using path_type = mapnik::coord_transform; using ren_base = agg::renderer_base; using renderer = agg::renderer_scanline_aa_solid; mapnik::image_32 im(256,256); im.set_background(mapnik::color("white")); mapnik::box2d padded_extent = extent; padded_extent.pad(10); - mapnik::CoordTransform tr(im.width(),im.height(),padded_extent,0,0); + mapnik::view_transform tr(im.width(),im.height(),padded_extent,0,0); agg::rendering_buffer buf(im.raw_data(),im.width(),im.height(), im.width() * 4); agg::pixfmt_rgba32_plain pixf(buf); ren_base renb(pixf); diff --git a/bindings/python/mapnik_map.cpp b/bindings/python/mapnik_map.cpp index b3c2c8d96..5c5ec062b 100644 --- a/bindings/python/mapnik_map.cpp +++ b/bindings/python/mapnik_map.cpp @@ -345,7 +345,7 @@ void export_map() ">>> m.scale_denominator()\n" ) - .def("view_transform",&Map::view_transform, + .def("view_transform",&Map::transform, "Return the map ViewTransform object\n" "which is used internally to convert between\n" "geographic coordinates and screen coordinates.\n" diff --git a/bindings/python/mapnik_view_transform.cpp b/bindings/python/mapnik_view_transform.cpp index 7e48381a3..23295502a 100644 --- a/bindings/python/mapnik_view_transform.cpp +++ b/bindings/python/mapnik_view_transform.cpp @@ -27,12 +27,12 @@ // mapnik #include -using mapnik::CoordTransform; +using mapnik::view_transform; struct view_transform_pickle_suite : boost::python::pickle_suite { static boost::python::tuple - getinitargs(const CoordTransform& c) + getinitargs(const view_transform& c) { using namespace boost::python; return boost::python::make_tuple(c.width(),c.height(),c.extent()); @@ -41,26 +41,26 @@ struct view_transform_pickle_suite : boost::python::pickle_suite namespace { -mapnik::coord2d forward_point(mapnik::CoordTransform const& t, mapnik::coord2d const& in) +mapnik::coord2d forward_point(mapnik::view_transform const& t, mapnik::coord2d const& in) { mapnik::coord2d out(in); t.forward(out); return out; } -mapnik::coord2d backward_point(mapnik::CoordTransform const& t, mapnik::coord2d const& in) +mapnik::coord2d backward_point(mapnik::view_transform const& t, mapnik::coord2d const& in) { mapnik::coord2d out(in); t.backward(out); return out; } -mapnik::box2d forward_envelope(mapnik::CoordTransform const& t, mapnik::box2d const& in) +mapnik::box2d forward_envelope(mapnik::view_transform const& t, mapnik::box2d const& in) { return t.forward(in); } -mapnik::box2d backward_envelope(mapnik::CoordTransform const& t, mapnik::box2d const& in) +mapnik::box2d backward_envelope(mapnik::view_transform const& t, mapnik::box2d const& in) { return t.backward(in); } @@ -72,14 +72,14 @@ void export_view_transform() using mapnik::box2d; using mapnik::coord2d; - class_("ViewTransform",init const& > ( + class_("ViewTransform",init const& > ( "Create a ViewTransform with a width and height as integers and extent")) .def_pickle(view_transform_pickle_suite()) .def("forward", forward_point) .def("backward",backward_point) .def("forward", forward_envelope) .def("backward",backward_envelope) - .def("scale_x",&CoordTransform::scale_x) - .def("scale_y",&CoordTransform::scale_y) + .def("scale_x",&view_transform::scale_x) + .def("scale_y",&view_transform::scale_y) ; } diff --git a/demo/viewer/mapwidget.cpp b/demo/viewer/mapwidget.cpp index f6cc222de..4bfe7cedf 100644 --- a/demo/viewer/mapwidget.cpp +++ b/demo/viewer/mapwidget.cpp @@ -48,7 +48,7 @@ using mapnik::box2d; using mapnik::coord2d; using mapnik::feature_ptr; using mapnik::geometry_ptr; -using mapnik::CoordTransform; +using mapnik::view_transform; using mapnik::projection; using mapnik::scale_denominator; using mapnik::feature_kv_iterator; @@ -159,7 +159,7 @@ void MapWidget::mousePressEvent(QMouseEvent* e) projection map_proj(map_->srs()); // map projection double scale_denom = scale_denominator(map_->scale(),map_proj.is_geographic()); - CoordTransform t(map_->width(),map_->height(),map_->get_current_extent()); + view_transform t(map_->width(),map_->height(),map_->get_current_extent()); for (unsigned index = 0; index < map_->layer_count();++index) { @@ -191,7 +191,7 @@ void MapWidget::mousePressEvent(QMouseEvent* e) std::get<1>(*itr).to_string().c_str())); } - using path_type = mapnik::coord_transform; + using path_type = mapnik::coord_transform; for (unsigned i=0; inum_geometries();++i) { @@ -264,7 +264,7 @@ void MapWidget::mouseReleaseEvent(QMouseEvent* e) drag_=false; if (map_) { - CoordTransform t(map_->width(),map_->height(),map_->get_current_extent()); + view_transform t(map_->width(),map_->height(),map_->get_current_extent()); box2d box = t.backward(box2d(start_x_,start_y_,end_x_,end_y_)); map_->zoom_to_box(box); updateMap(); diff --git a/include/mapnik/agg_renderer.hpp b/include/mapnik/agg_renderer.hpp index bade3b4c1..4bf39f819 100644 --- a/include/mapnik/agg_renderer.hpp +++ b/include/mapnik/agg_renderer.hpp @@ -30,7 +30,7 @@ #include // for rule, symbolizers #include // for box2d #include // for color -#include // for CoordTransform +#include // for view_transform #include // for composite_mode_e #include #include diff --git a/include/mapnik/ctrans.hpp b/include/mapnik/ctrans.hpp index 062b7279f..5329de3d9 100644 --- a/include/mapnik/ctrans.hpp +++ b/include/mapnik/ctrans.hpp @@ -130,7 +130,7 @@ private: proj_transform const* prj_trans_; }; -class CoordTransform +class view_transform { private: const int width_; @@ -143,7 +143,7 @@ private: int offset_; public: - CoordTransform(int width, int height, box2d const& extent, + view_transform(int width, int height, box2d const& extent, double offset_x = 0.0, double offset_y = 0.0) : width_(width), height_(height), @@ -154,7 +154,7 @@ public: offset_y_(offset_y), offset_(0) {} - CoordTransform(CoordTransform const&) = default; + view_transform(view_transform const&) = default; inline int offset() const { diff --git a/include/mapnik/grid/grid_renderer.hpp b/include/mapnik/grid/grid_renderer.hpp index 8e3dc0c10..86930e6a7 100644 --- a/include/mapnik/grid/grid_renderer.hpp +++ b/include/mapnik/grid/grid_renderer.hpp @@ -32,7 +32,7 @@ #include // for rule, symbolizers #include // for box2d #include // for color -#include // for CoordTransform +#include // for view_transform #include // for composite_mode_e #include #include diff --git a/include/mapnik/group/group_symbolizer_helper.hpp b/include/mapnik/group/group_symbolizer_helper.hpp index ef0330b7d..5c771012d 100644 --- a/include/mapnik/group/group_symbolizer_helper.hpp +++ b/include/mapnik/group/group_symbolizer_helper.hpp @@ -60,7 +60,7 @@ public: unsigned width, unsigned height, double scale_factor, - CoordTransform const &t, + view_transform const &t, DetectorType &detector, box2d const& query_extent); diff --git a/include/mapnik/map.hpp b/include/mapnik/map.hpp index c87f16bfb..da2ac10ce 100644 --- a/include/mapnik/map.hpp +++ b/include/mapnik/map.hpp @@ -48,7 +48,7 @@ namespace mapnik struct Featureset; using featureset_ptr = std::shared_ptr; class feature_type_style; -class CoordTransform; +class view_transform; class layer; class MAPNIK_DECL Map : boost::equality_comparable @@ -389,7 +389,7 @@ public: double scale_denominator() const; - CoordTransform view_transform() const; + view_transform transform() const; /*! * @brief Query a Map layer (by layer index) for features diff --git a/include/mapnik/renderer_common.hpp b/include/mapnik/renderer_common.hpp index 1e0af87cc..5ab8242c8 100644 --- a/include/mapnik/renderer_common.hpp +++ b/include/mapnik/renderer_common.hpp @@ -26,7 +26,7 @@ #include // for MAPNIK_DECL #include // for face_manager, etc #include // for box2d -#include // for CoordTransform +#include // for view_transform #include // fwd declarations to speed up compile @@ -41,12 +41,12 @@ namespace mapnik { struct renderer_common { - renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y, + renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y, unsigned width, unsigned height, double scale_factor); - renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y, + renderer_common(Map const &m, attributes const& vars, unsigned offset_x, unsigned offset_y, unsigned width, unsigned height, double scale_factor, std::shared_ptr detector); - renderer_common(request const &req, attributes const& vars, unsigned offset_x, unsigned offset_y, + renderer_common(request const &req, attributes const& vars, unsigned offset_x, unsigned offset_y, unsigned width, unsigned height, double scale_factor); renderer_common(renderer_common const& other); @@ -59,15 +59,14 @@ struct renderer_common freetype_engine &font_engine_; face_manager font_manager_; box2d query_extent_; - CoordTransform t_; + view_transform t_; std::shared_ptr detector_; private: renderer_common(unsigned width, unsigned height, double scale_factor, - attributes const& vars, CoordTransform &&t, std::shared_ptr detector); + attributes const& vars, view_transform &&t, std::shared_ptr detector); }; } #endif /* MAPNIK_RENDERER_COMMON_HPP */ - diff --git a/include/mapnik/renderer_common/process_markers_symbolizer.hpp b/include/mapnik/renderer_common/process_markers_symbolizer.hpp index 58ff2250c..70f639f39 100644 --- a/include/mapnik/renderer_common/process_markers_symbolizer.hpp +++ b/include/mapnik/renderer_common/process_markers_symbolizer.hpp @@ -99,7 +99,7 @@ void render_markers_symbolizer(markers_symbolizer const& sym, renderer_context); vertex_converter, vector_dispatch_type, markers_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + 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_); if (clip && feature.paths().size() > 0) // optional clip (default: true) { @@ -138,7 +138,7 @@ void render_markers_symbolizer(markers_symbolizer const& sym, renderer_context); vertex_converter, vector_dispatch_type, markers_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + 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_); if (clip && feature.paths().size() > 0) // optional clip (default: true) { @@ -176,7 +176,7 @@ void render_markers_symbolizer(markers_symbolizer const& sym, renderer_context); vertex_converter, raster_dispatch_type, markers_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + 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_); if (clip && feature.paths().size() > 0) // optional clip (default: true) diff --git a/include/mapnik/svg/geometry_svg_generator.hpp b/include/mapnik/svg/geometry_svg_generator.hpp index 6c9800cc6..eb5dfe678 100644 --- a/include/mapnik/svg/geometry_svg_generator.hpp +++ b/include/mapnik/svg/geometry_svg_generator.hpp @@ -49,7 +49,7 @@ namespace boost { namespace spirit { namespace traits { // TODO - this needs to be made generic to any path type -using path_type = mapnik::coord_transform; +using path_type = mapnik::coord_transform; template <> struct is_container : mpl::true_ {} ; diff --git a/include/mapnik/svg/output/svg_path_iterator.hpp b/include/mapnik/svg/output/svg_path_iterator.hpp index 5ef39b424..f216cc621 100644 --- a/include/mapnik/svg/output/svg_path_iterator.hpp +++ b/include/mapnik/svg/output/svg_path_iterator.hpp @@ -171,7 +171,7 @@ private: // The Value type is a std::tuple that holds 5 elements, the command and the x and y coordinate. // Each coordinate is stored twice to match the needs of the grammar. //using path_iterator_type = path_iterator, -// coord_transform >; +// coord_transform >; }} diff --git a/include/mapnik/svg/output/svg_renderer.hpp b/include/mapnik/svg/output/svg_renderer.hpp index 39b86f169..136f3663f 100644 --- a/include/mapnik/svg/output/svg_renderer.hpp +++ b/include/mapnik/svg/output/svg_renderer.hpp @@ -33,7 +33,7 @@ #include // for rule, symbolizers #include // for box2d #include // for color -#include // for CoordTransform +#include // for view_transform #include // for composite_mode_e #include #include diff --git a/include/mapnik/text/symbolizer_helpers.hpp b/include/mapnik/text/symbolizer_helpers.hpp index 2e9dbbdac..6b7b7fe0d 100644 --- a/include/mapnik/text/symbolizer_helpers.hpp +++ b/include/mapnik/text/symbolizer_helpers.hpp @@ -58,7 +58,7 @@ struct placement_finder_adapter using conv_types = boost::mpl::vector; using vertex_converter_type = vertex_converter, placement_finder_adapter , symbolizer_base, - CoordTransform, proj_transform, agg::trans_affine, + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl>; class base_symbolizer_helper @@ -71,7 +71,7 @@ public: unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, + view_transform const& t, box2d const& query_extent); protected: @@ -83,7 +83,7 @@ protected: feature_impl const& feature_; attributes const& vars_; proj_transform const& prj_trans_; - CoordTransform const& t_; + view_transform const& t_; box2d dims_; box2d const& query_extent_; float scale_factor_; @@ -119,7 +119,7 @@ public: unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, + view_transform const& t, FaceManagerT & font_manager, DetectorT & detector, box2d const& query_extent, @@ -133,7 +133,7 @@ public: unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, + view_transform const& t, FaceManagerT & font_manager, DetectorT & detector, box2d const& query_extent, diff --git a/include/mapnik/vertex_converters.hpp b/include/mapnik/vertex_converters.hpp index bb5ec4ec3..cf0012378 100644 --- a/include/mapnik/vertex_converters.hpp +++ b/include/mapnik/vertex_converters.hpp @@ -254,7 +254,7 @@ template struct converter_traits { using geometry_type = T; - using conv_type = coord_transform; + using conv_type = coord_transform; template static void setup(geometry_type & geom, Args const& args) diff --git a/plugins/input/gdal/gdal_featureset.cpp b/plugins/input/gdal/gdal_featureset.cpp index 7df8ebd04..198455175 100644 --- a/plugins/input/gdal/gdal_featureset.cpp +++ b/plugins/input/gdal/gdal_featureset.cpp @@ -43,7 +43,7 @@ using mapnik::query; using mapnik::coord2d; using mapnik::box2d; using mapnik::feature_ptr; -using mapnik::CoordTransform; +using mapnik::view_transform; using mapnik::geometry_type; using mapnik::datasource_exception; using mapnik::feature_factory; @@ -116,7 +116,7 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q) #endif */ - CoordTransform t(raster_width_, raster_height_, raster_extent_, 0, 0); + view_transform t(raster_width_, raster_height_, raster_extent_, 0, 0); box2d intersect = raster_extent_.intersect(q.get_bbox()); box2d box = t.forward(intersect); diff --git a/plugins/input/raster/raster_datasource.cpp b/plugins/input/raster/raster_datasource.cpp index 9f82ebe89..969e22974 100644 --- a/plugins/input/raster/raster_datasource.cpp +++ b/plugins/input/raster/raster_datasource.cpp @@ -173,7 +173,7 @@ layer_descriptor raster_datasource::get_descriptor() const featureset_ptr raster_datasource::features(query const& q) const { - mapnik::CoordTransform t(width_, height_, extent_, 0, 0); + mapnik::view_transform t(width_, height_, extent_, 0, 0); mapnik::box2d intersect = extent_.intersect(q.get_bbox()); mapnik::box2d ext = t.forward(intersect); diff --git a/plugins/input/raster/raster_featureset.cpp b/plugins/input/raster/raster_featureset.cpp index 912b8e27f..1843c6fae 100644 --- a/plugins/input/raster/raster_featureset.cpp +++ b/plugins/input/raster/raster_featureset.cpp @@ -82,7 +82,7 @@ feature_ptr raster_featureset::next() if (image_width > 0 && image_height > 0) { - mapnik::CoordTransform t(image_width, image_height, extent_, 0, 0); + mapnik::view_transform t(image_width, image_height, extent_, 0, 0); box2d intersect = bbox_.intersect(curIter_->envelope()); box2d ext = t.forward(intersect); box2d rem = policy_.transform(ext); @@ -95,14 +95,11 @@ feature_ptr raster_featureset::next() int end_y = static_cast(std::ceil(ext.maxy())); // clip to available data - if (x_off < 0) - x_off = 0; - if (y_off < 0) - y_off = 0; - if (end_x > image_width) - end_x = image_width; - if (end_y > image_height) - end_y = image_height; + if (x_off < 0) x_off = 0; + if (y_off < 0) y_off = 0; + if (end_x > image_width) end_x = image_width; + if (end_y > image_height) end_y = image_height; + int width = end_x - x_off; int height = end_y - y_off; diff --git a/src/agg/process_building_symbolizer.cpp b/src/agg/process_building_symbolizer.cpp index 7d28e95db..f7bff18d0 100644 --- a/src/agg/process_building_symbolizer.cpp +++ b/src/agg/process_building_symbolizer.cpp @@ -53,7 +53,7 @@ void agg_renderer::process(building_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans) { - using path_type = coord_transform; + using path_type = coord_transform; using ren_base = agg::renderer_base; using renderer = agg::renderer_scanline_aa_solid; diff --git a/src/agg/process_line_pattern_symbolizer.cpp b/src/agg/process_line_pattern_symbolizer.cpp index 8707a723c..18a2aa005 100644 --- a/src/agg/process_line_pattern_symbolizer.cpp +++ b/src/agg/process_line_pattern_symbolizer.cpp @@ -127,7 +127,7 @@ void agg_renderer::process(line_pattern_symbolizer const& sym, simplify_tag,smooth_tag, offset_transform_tag>; vertex_converter, rasterizer_type, line_pattern_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clip_box,ras,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (clip) converter.set(); //optional clip (default: true) diff --git a/src/agg/process_line_symbolizer.cpp b/src/agg/process_line_symbolizer.cpp index 01f6e1da6..110409484 100644 --- a/src/agg/process_line_symbolizer.cpp +++ b/src/agg/process_line_symbolizer.cpp @@ -171,7 +171,7 @@ void agg_renderer::process(line_symbolizer const& sym, set_join_caps_aa(sym, ras, feature, common_.vars_); vertex_converter, rasterizer_type, line_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clip_box,ras,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (clip) converter.set(); // optional clip (default: true) converter.set(); // always transform @@ -191,7 +191,7 @@ void agg_renderer::process(line_symbolizer const& sym, else { vertex_converter, rasterizer, line_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clip_box,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (clip) converter.set(); // optional clip (default: true) diff --git a/src/agg/process_polygon_pattern_symbolizer.cpp b/src/agg/process_polygon_pattern_symbolizer.cpp index 711ed63f4..7d1b6b2ef 100644 --- a/src/agg/process_polygon_pattern_symbolizer.cpp +++ b/src/agg/process_polygon_pattern_symbolizer.cpp @@ -80,7 +80,7 @@ void agg_renderer::process(polygon_pattern_symbolizer const& sym, if (!pat) return; using clipped_geometry_type = agg::conv_clip_polygon; - using path_type = coord_transform; + using path_type = coord_transform; agg::rendering_buffer buf(current_buffer_->raw_data(), current_buffer_->width(), current_buffer_->height(), current_buffer_->width() * 4); @@ -159,7 +159,7 @@ void agg_renderer::process(polygon_pattern_symbolizer const& sym, using conv_types = boost::mpl::vector; vertex_converter, rasterizer, polygon_pattern_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clip_box,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (prj_trans.equal() && clip) converter.set(); //optional clip (default: true) diff --git a/src/agg/process_polygon_symbolizer.cpp b/src/agg/process_polygon_symbolizer.cpp index b2c86a0fa..0af6c4f6b 100644 --- a/src/agg/process_polygon_symbolizer.cpp +++ b/src/agg/process_polygon_symbolizer.cpp @@ -51,7 +51,7 @@ void agg_renderer::process(polygon_symbolizer const& sym, { using conv_types = boost::mpl::vector; using vertex_converter_type = vertex_converter, rasterizer, polygon_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl>; ras_ptr->reset(); diff --git a/src/cairo/process_building_symbolizer.cpp b/src/cairo/process_building_symbolizer.cpp index 47f54b406..b1c42b903 100644 --- a/src/cairo/process_building_symbolizer.cpp +++ b/src/cairo/process_building_symbolizer.cpp @@ -41,7 +41,7 @@ void cairo_renderer::process(building_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans) { - using path_type = coord_transform; + using path_type = coord_transform; cairo_save_restore guard(context_); composite_mode_e comp_op = get(sym, keys::comp_op, feature, common_.vars_, src_over); mapnik::color fill = get(sym, keys::fill, feature, common_.vars_, mapnik::color(128,128,128)); diff --git a/src/cairo/process_line_pattern_symbolizer.cpp b/src/cairo/process_line_pattern_symbolizer.cpp index 55ca3c34b..b254573bc 100644 --- a/src/cairo/process_line_pattern_symbolizer.cpp +++ b/src/cairo/process_line_pattern_symbolizer.cpp @@ -112,7 +112,7 @@ void cairo_renderer::process(line_pattern_symbolizer const& sym, using rasterizer_type = line_pattern_rasterizer; rasterizer_type ras(context_, *pattern, width, height); vertex_converter, rasterizer_type, line_pattern_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clipping_extent, ras, sym, common_.t_, prj_trans, tr, feature, common_.vars_, common_.scale_factor_); if (clip) converter.set(); // optional clip (default: true) diff --git a/src/cairo/process_line_symbolizer.cpp b/src/cairo/process_line_symbolizer.cpp index 0b008cf57..b0cbbd9a2 100644 --- a/src/cairo/process_line_symbolizer.cpp +++ b/src/cairo/process_line_symbolizer.cpp @@ -85,7 +85,7 @@ void cairo_renderer::process(line_symbolizer const& sym, clipping_extent.pad(padding); } vertex_converter, cairo_context, line_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clipping_extent,context_,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (clip) converter.set(); // optional clip (default: true) diff --git a/src/cairo/process_polygon_pattern_symbolizer.cpp b/src/cairo/process_polygon_pattern_symbolizer.cpp index 662cb2852..16947ea27 100644 --- a/src/cairo/process_polygon_pattern_symbolizer.cpp +++ b/src/cairo/process_polygon_pattern_symbolizer.cpp @@ -70,7 +70,7 @@ void cairo_renderer::process(polygon_pattern_symbolizer const& sym, if (feature.num_geometries() > 0) { using clipped_geometry_type = agg::conv_clip_polygon; - using path_type = coord_transform; + using path_type = coord_transform; clipped_geometry_type clipped(feature.get_geometry(0)); clipped.clip_box(clip_box.minx(), clip_box.miny(), clip_box.maxx(), clip_box.maxy()); @@ -104,7 +104,7 @@ void cairo_renderer::process(polygon_pattern_symbolizer const& sym, using conv_types = boost::mpl::vector; vertex_converter, cairo_context, polygon_pattern_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clip_box, context_,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (prj_trans.equal() && clip) converter.set(); //optional clip (default: true) diff --git a/src/cairo/process_polygon_symbolizer.cpp b/src/cairo/process_polygon_symbolizer.cpp index 2680dafce..9db05f60f 100644 --- a/src/cairo/process_polygon_symbolizer.cpp +++ b/src/cairo/process_polygon_symbolizer.cpp @@ -40,7 +40,7 @@ void cairo_renderer::process(polygon_symbolizer const& sym, { using conv_types = boost::mpl::vector; using vertex_converter_type = vertex_converter, cairo_context, polygon_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl>; cairo_save_restore guard(context_); diff --git a/src/grid/process_building_symbolizer.cpp b/src/grid/process_building_symbolizer.cpp index c406b5d39..7784a0776 100644 --- a/src/grid/process_building_symbolizer.cpp +++ b/src/grid/process_building_symbolizer.cpp @@ -57,7 +57,7 @@ void grid_renderer::process(building_symbolizer const& sym, using pixfmt_type = typename grid_renderer_base_type::pixfmt_type; using color_type = typename grid_renderer_base_type::pixfmt_type::color_type; using renderer_type = agg::renderer_scanline_bin_solid; - using path_type = coord_transform; + using path_type = coord_transform; agg::scanline_bin sl; grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_); diff --git a/src/grid/process_line_pattern_symbolizer.cpp b/src/grid/process_line_pattern_symbolizer.cpp index 83573dc54..e442e1466 100644 --- a/src/grid/process_line_pattern_symbolizer.cpp +++ b/src/grid/process_line_pattern_symbolizer.cpp @@ -120,7 +120,7 @@ void grid_renderer::process(line_pattern_symbolizer const& sym, put(line, keys::smooth, value_double(smooth)); vertex_converter, grid_rasterizer, line_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clipping_extent,*ras_ptr,line,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (clip) converter.set(); // optional clip (default: true) converter.set(); // always transform diff --git a/src/grid/process_line_symbolizer.cpp b/src/grid/process_line_symbolizer.cpp index cecf96ed4..e9549894f 100644 --- a/src/grid/process_line_symbolizer.cpp +++ b/src/grid/process_line_symbolizer.cpp @@ -92,7 +92,7 @@ void grid_renderer::process(line_symbolizer const& sym, } vertex_converter, grid_rasterizer, line_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(clipping_extent,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (clip) converter.set(); // optional clip (default: true) converter.set(); // always transform diff --git a/src/grid/process_polygon_pattern_symbolizer.cpp b/src/grid/process_polygon_pattern_symbolizer.cpp index fee4e4c26..6d4e319d5 100644 --- a/src/grid/process_polygon_pattern_symbolizer.cpp +++ b/src/grid/process_polygon_pattern_symbolizer.cpp @@ -79,7 +79,7 @@ void grid_renderer::process(polygon_pattern_symbolizer const& sym, using conv_types = boost::mpl::vector; vertex_converter, grid_rasterizer, polygon_pattern_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(common_.query_extent_,*ras_ptr,sym,common_.t_,prj_trans,tr,feature,common_.vars_,common_.scale_factor_); if (prj_trans.equal() && clip) converter.set(); //optional clip (default: true) diff --git a/src/grid/process_polygon_symbolizer.cpp b/src/grid/process_polygon_symbolizer.cpp index e9fa8c1a0..2155c6fc4 100644 --- a/src/grid/process_polygon_symbolizer.cpp +++ b/src/grid/process_polygon_symbolizer.cpp @@ -55,7 +55,7 @@ void grid_renderer::process(polygon_symbolizer const& sym, using color_type = typename grid_renderer_base_type::pixfmt_type::color_type; using conv_types = boost::mpl::vector; using vertex_converter_type = vertex_converter, grid_rasterizer, polygon_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl>; ras_ptr->reset(); diff --git a/src/group/group_symbolizer_helper.cpp b/src/group/group_symbolizer_helper.cpp index be9b40a7a..52e4c3e81 100644 --- a/src/group/group_symbolizer_helper.cpp +++ b/src/group/group_symbolizer_helper.cpp @@ -42,7 +42,7 @@ group_symbolizer_helper::group_symbolizer_helper( attributes const& vars, const proj_transform &prj_trans, unsigned width, unsigned height, double scale_factor, - const CoordTransform &t, DetectorType &detector, + const view_transform &t, DetectorType &detector, const box2d &query_extent) : base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent), detector_(detector) @@ -66,7 +66,7 @@ pixel_position_list const& group_symbolizer_helper::get() if (clipped_) { using clipped_geometry_type = agg::conv_clip_polyline; - using path_type = coord_transform; + using path_type = coord_transform; clipped_geometry_type clipped(*geom); clipped.clip_box(query_extent_.minx(), query_extent_.miny(), @@ -76,7 +76,7 @@ pixel_position_list const& group_symbolizer_helper::get() } else { - using path_type = coord_transform; + using path_type = coord_transform; path_type path(t_, *geom, prj_trans_); find_line_placements(path); } diff --git a/src/map.cpp b/src/map.cpp index 5ee06e023..019f74fa1 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -612,9 +612,9 @@ double Map::scale_denominator() const return mapnik::scale_denominator( scale(), map_proj.is_geographic()); } -CoordTransform Map::view_transform() const +view_transform Map::transform() const { - return CoordTransform(width_,height_,current_extent_); + return view_transform(width_,height_,current_extent_); } featureset_ptr Map::query_point(unsigned index, double x, double y) const @@ -677,7 +677,7 @@ featureset_ptr Map::query_point(unsigned index, double x, double y) const featureset_ptr Map::query_map_point(unsigned index, double x, double y) const { - CoordTransform tr = view_transform(); + view_transform tr = transform(); tr.backward(&x,&y); return query_point(index,x,y); } diff --git a/src/renderer_common.cpp b/src/renderer_common.cpp index 3d886baae..c2792f617 100644 --- a/src/renderer_common.cpp +++ b/src/renderer_common.cpp @@ -30,7 +30,7 @@ namespace mapnik { renderer_common::renderer_common(unsigned width, unsigned height, double scale_factor, attributes const& vars, - CoordTransform && t, + view_transform && t, std::shared_ptr detector) : width_(width), height_(height), @@ -48,9 +48,9 @@ renderer_common::renderer_common(Map const &m, attributes const& vars, unsigned unsigned width, unsigned height, double scale_factor) : renderer_common(width, height, scale_factor, vars, - CoordTransform(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y), + view_transform(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y), std::make_shared( - box2d(-m.buffer_size(), -m.buffer_size(), + box2d(-m.buffer_size(), -m.buffer_size(), m.width() + m.buffer_size() ,m.height() + m.buffer_size()))) {} @@ -59,7 +59,7 @@ renderer_common::renderer_common(Map const &m, attributes const& vars, unsigned std::shared_ptr detector) : renderer_common(width, height, scale_factor, vars, - CoordTransform(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y), + view_transform(m.width(),m.height(),m.get_current_extent(),offset_x,offset_y), detector) {} @@ -67,9 +67,9 @@ renderer_common::renderer_common(request const &req, attributes const& vars, uns unsigned width, unsigned height, double scale_factor) : renderer_common(width, height, scale_factor, vars, - CoordTransform(req.width(),req.height(),req.extent(),offset_x,offset_y), + view_transform(req.width(),req.height(),req.extent(),offset_x,offset_y), std::make_shared( - box2d(-req.buffer_size(), -req.buffer_size(), + box2d(-req.buffer_size(), -req.buffer_size(), req.width() + req.buffer_size() ,req.height() + req.buffer_size()))) {} diff --git a/src/svg/output/process_symbolizers.cpp b/src/svg/output/process_symbolizers.cpp index 637f9d559..ab3495e21 100644 --- a/src/svg/output/process_symbolizers.cpp +++ b/src/svg/output/process_symbolizers.cpp @@ -74,7 +74,7 @@ bool svg_renderer::process(rule::symbolizers const& syms, proj_transform const& prj_trans) { // svg renderer supports processing of multiple symbolizers. - using path_type = coord_transform; + using path_type = coord_transform; bool process_path = false; // process each symbolizer to collect its (path) information. diff --git a/src/text/symbolizer_helpers.cpp b/src/text/symbolizer_helpers.cpp index 34330c9d9..7482468e4 100644 --- a/src/text/symbolizer_helpers.cpp +++ b/src/text/symbolizer_helpers.cpp @@ -45,7 +45,7 @@ base_symbolizer_helper::base_symbolizer_helper( attributes const& vars, proj_transform const& prj_trans, unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, + view_transform const& t, box2d const& query_extent) : sym_(sym), feature_(feature), @@ -177,7 +177,7 @@ text_symbolizer_helper::text_symbolizer_helper( attributes const& vars, proj_transform const& prj_trans, unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, FaceManagerT & font_manager, + view_transform const& t, FaceManagerT & font_manager, DetectorT &detector, box2d const& query_extent, agg::trans_affine const& affine_trans) : base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent), @@ -270,7 +270,7 @@ text_symbolizer_helper::text_symbolizer_helper( attributes const& vars, proj_transform const& prj_trans, unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, FaceManagerT & font_manager, + view_transform const& t, FaceManagerT & font_manager, DetectorT & detector, box2d const& query_extent, agg::trans_affine const& affine_trans) : base_symbolizer_helper(sym, feature, vars, prj_trans, width, height, scale_factor, t, query_extent), finder_(feature, vars, detector, dims_, *placement_, font_manager, scale_factor), @@ -340,7 +340,7 @@ template text_symbolizer_helper::text_symbolizer_helper( unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, + view_transform const& t, face_manager &font_manager, label_collision_detector4 &detector, box2d const& query_extent, @@ -354,7 +354,7 @@ template text_symbolizer_helper::text_symbolizer_helper( unsigned width, unsigned height, double scale_factor, - CoordTransform const& t, + view_transform const& t, face_manager &font_manager, label_collision_detector4 &detector, box2d const& query_extent, diff --git a/src/warp.cpp b/src/warp.cpp index 9983591c3..2b068fbb0 100644 --- a/src/warp.cpp +++ b/src/warp.cpp @@ -53,9 +53,9 @@ void reproject_and_scale_raster(raster & target, raster const& source, unsigned mesh_size, scaling_method_e scaling_method) { - CoordTransform ts(source.data_.width(), source.data_.height(), + view_transform ts(source.data_.width(), source.data_.height(), source.ext_); - CoordTransform tt(target.data_.width(), target.data_.height(), + view_transform tt(target.data_.width(), target.data_.height(), target.ext_, offset_x, offset_y); unsigned mesh_nx = std::ceil(source.data_.width()/double(mesh_size) + 1); diff --git a/tests/cpp_tests/geometry_converters_test.cpp b/tests/cpp_tests/geometry_converters_test.cpp index 7eef0f5b1..c3b7e5a8c 100644 --- a/tests/cpp_tests/geometry_converters_test.cpp +++ b/tests/cpp_tests/geometry_converters_test.cpp @@ -56,7 +56,7 @@ boost::optional linestring_bbox_clipping(mapnik::box2d bbox projection dst(MAPNIK_LONGLAT_PROJ); proj_transform prj_trans(src,dst); line_symbolizer sym; - CoordTransform t(bbox.width(),bbox.height(), bbox); + view_transform t(bbox.width(),bbox.height(), bbox); mapnik::geometry_container output_paths; output_geometry_backend backend(output_paths, mapnik::geometry_type::types::LineString); @@ -64,7 +64,7 @@ boost::optional linestring_bbox_clipping(mapnik::box2d bbox mapnik::context_ptr ctx = std::make_shared(); mapnik::feature_impl f(ctx,0); vertex_converter, output_geometry_backend, line_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(bbox, backend, sym, t, prj_trans, tr, f, attributes(), 1.0); converter.set(); @@ -100,7 +100,7 @@ boost::optional polygon_bbox_clipping(mapnik::box2d bbox, projection dst(MAPNIK_LONGLAT_PROJ); proj_transform prj_trans(src,dst); polygon_symbolizer sym; - CoordTransform t(bbox.width(),bbox.height(), bbox); + view_transform t(bbox.width(),bbox.height(), bbox); mapnik::geometry_container output_paths; output_geometry_backend backend(output_paths, mapnik::geometry_type::types::Polygon); @@ -108,7 +108,7 @@ boost::optional polygon_bbox_clipping(mapnik::box2d bbox, mapnik::context_ptr ctx = std::make_shared(); mapnik::feature_impl f(ctx,0); vertex_converter, output_geometry_backend, polygon_symbolizer, - CoordTransform, proj_transform, agg::trans_affine, conv_types, feature_impl> + view_transform, proj_transform, agg::trans_affine, conv_types, feature_impl> converter(bbox, backend, sym, t, prj_trans, tr, f, attributes(), 1.0); converter.set(); From ecfaec10274843c1cdebfca47bbe0f3609a6626e Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 28 Aug 2014 10:29:04 +0100 Subject: [PATCH 13/16] rename ctrans.hpp to view_transform.hpp --- benchmark/test_polygon_clipping.cpp | 2 +- bindings/python/mapnik_map.cpp | 2 +- bindings/python/mapnik_view_transform.cpp | 2 +- demo/viewer/mapwidget.cpp | 2 +- include/mapnik/agg_renderer.hpp | 2 +- include/mapnik/grid/grid_renderer.hpp | 2 +- include/mapnik/group/group_symbolizer_helper.hpp | 2 +- include/mapnik/markers_placements/line.hpp | 2 +- include/mapnik/renderer_common.hpp | 2 +- include/mapnik/svg/geometry_svg_generator.hpp | 2 +- include/mapnik/svg/output/svg_generator.hpp | 2 +- include/mapnik/svg/output/svg_path_iterator.hpp | 2 +- include/mapnik/svg/output/svg_renderer.hpp | 2 +- include/mapnik/text/placement_finder_impl.hpp | 2 +- include/mapnik/text/symbolizer_helpers.hpp | 2 +- include/mapnik/vertex_converters.hpp | 2 +- include/mapnik/{ctrans.hpp => view_transform.hpp} | 6 +++--- plugins/input/gdal/gdal_featureset.cpp | 2 +- plugins/input/pgraster/pgraster_featureset.cpp | 2 +- plugins/input/pgraster/pgraster_wkb_reader.cpp | 2 +- plugins/input/raster/raster_datasource.cpp | 2 +- plugins/input/raster/raster_featureset.cpp | 2 +- src/map.cpp | 2 +- src/text/placement_finder.cpp | 2 +- src/warp.cpp | 2 +- tests/cpp_tests/geometry_converters_test.cpp | 2 +- 26 files changed, 28 insertions(+), 28 deletions(-) rename include/mapnik/{ctrans.hpp => view_transform.hpp} (98%) diff --git a/benchmark/test_polygon_clipping.cpp b/benchmark/test_polygon_clipping.cpp index e831420fb..e8c245e2c 100644 --- a/benchmark/test_polygon_clipping.cpp +++ b/benchmark/test_polygon_clipping.cpp @@ -3,7 +3,7 @@ #include "agg_conv_clip_polygon.h" #include #include -#include +#include #include #include #include diff --git a/bindings/python/mapnik_map.cpp b/bindings/python/mapnik_map.cpp index 5c5ec062b..758df4109 100644 --- a/bindings/python/mapnik_map.cpp +++ b/bindings/python/mapnik_map.cpp @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include #include "mapnik_enumeration.hpp" diff --git a/bindings/python/mapnik_view_transform.cpp b/bindings/python/mapnik_view_transform.cpp index 23295502a..87a8aad23 100644 --- a/bindings/python/mapnik_view_transform.cpp +++ b/bindings/python/mapnik_view_transform.cpp @@ -25,7 +25,7 @@ #include // mapnik -#include +#include using mapnik::view_transform; diff --git a/demo/viewer/mapwidget.cpp b/demo/viewer/mapwidget.cpp index 4bfe7cedf..a106934c3 100644 --- a/demo/viewer/mapwidget.cpp +++ b/demo/viewer/mapwidget.cpp @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include //#include diff --git a/include/mapnik/agg_renderer.hpp b/include/mapnik/agg_renderer.hpp index 4bf39f819..4af527db9 100644 --- a/include/mapnik/agg_renderer.hpp +++ b/include/mapnik/agg_renderer.hpp @@ -30,7 +30,7 @@ #include // for rule, symbolizers #include // for box2d #include // for color -#include // for view_transform +#include // for view_transform #include // for composite_mode_e #include #include diff --git a/include/mapnik/grid/grid_renderer.hpp b/include/mapnik/grid/grid_renderer.hpp index 86930e6a7..fc760d029 100644 --- a/include/mapnik/grid/grid_renderer.hpp +++ b/include/mapnik/grid/grid_renderer.hpp @@ -32,7 +32,7 @@ #include // for rule, symbolizers #include // for box2d #include // for color -#include // for view_transform +#include // for view_transform #include // for composite_mode_e #include #include diff --git a/include/mapnik/group/group_symbolizer_helper.hpp b/include/mapnik/group/group_symbolizer_helper.hpp index 5c771012d..d5cb95b69 100644 --- a/include/mapnik/group/group_symbolizer_helper.hpp +++ b/include/mapnik/group/group_symbolizer_helper.hpp @@ -30,7 +30,7 @@ #include #include #include -#include +#include namespace mapnik { diff --git a/include/mapnik/markers_placements/line.hpp b/include/mapnik/markers_placements/line.hpp index 1ac2d353b..66cb88603 100644 --- a/include/mapnik/markers_placements/line.hpp +++ b/include/mapnik/markers_placements/line.hpp @@ -24,7 +24,7 @@ #define MAPNIK_MARKERS_PLACEMENTS_LINE_HPP #include -#include +#include #include #include //round diff --git a/include/mapnik/renderer_common.hpp b/include/mapnik/renderer_common.hpp index 5ab8242c8..71afadb12 100644 --- a/include/mapnik/renderer_common.hpp +++ b/include/mapnik/renderer_common.hpp @@ -26,7 +26,7 @@ #include // for MAPNIK_DECL #include // for face_manager, etc #include // for box2d -#include // for view_transform +#include // for view_transform #include // fwd declarations to speed up compile diff --git a/include/mapnik/svg/geometry_svg_generator.hpp b/include/mapnik/svg/geometry_svg_generator.hpp index eb5dfe678..04b409cba 100644 --- a/include/mapnik/svg/geometry_svg_generator.hpp +++ b/include/mapnik/svg/geometry_svg_generator.hpp @@ -27,7 +27,7 @@ // mapnik #include #include // for container stuff -#include // for container stuff +#include // for container stuff #include #include diff --git a/include/mapnik/svg/output/svg_generator.hpp b/include/mapnik/svg/output/svg_generator.hpp index 197d663ad..e9ff4bd24 100644 --- a/include/mapnik/svg/output/svg_generator.hpp +++ b/include/mapnik/svg/output/svg_generator.hpp @@ -24,7 +24,7 @@ #define MAPNIK_SVG_GENERATOR_HPP // mapnik -#include +#include #include #include #include diff --git a/include/mapnik/svg/output/svg_path_iterator.hpp b/include/mapnik/svg/output/svg_path_iterator.hpp index f216cc621..193e4fe14 100644 --- a/include/mapnik/svg/output/svg_path_iterator.hpp +++ b/include/mapnik/svg/output/svg_path_iterator.hpp @@ -25,7 +25,7 @@ // mapnik #include -#include +#include // boost #include diff --git a/include/mapnik/svg/output/svg_renderer.hpp b/include/mapnik/svg/output/svg_renderer.hpp index 136f3663f..e6f2f60ce 100644 --- a/include/mapnik/svg/output/svg_renderer.hpp +++ b/include/mapnik/svg/output/svg_renderer.hpp @@ -33,7 +33,7 @@ #include // for rule, symbolizers #include // for box2d #include // for color -#include // for view_transform +#include // for view_transform #include // for composite_mode_e #include #include diff --git a/include/mapnik/text/placement_finder_impl.hpp b/include/mapnik/text/placement_finder_impl.hpp index 530d8ecb3..6d7146b03 100644 --- a/include/mapnik/text/placement_finder_impl.hpp +++ b/include/mapnik/text/placement_finder_impl.hpp @@ -22,7 +22,7 @@ //mapnik #include #include -#include +#include #include #include #include diff --git a/include/mapnik/text/symbolizer_helpers.hpp b/include/mapnik/text/symbolizer_helpers.hpp index 6b7b7fe0d..96b61b854 100644 --- a/include/mapnik/text/symbolizer_helpers.hpp +++ b/include/mapnik/text/symbolizer_helpers.hpp @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include namespace mapnik { diff --git a/include/mapnik/vertex_converters.hpp b/include/mapnik/vertex_converters.hpp index cf0012378..57de83388 100644 --- a/include/mapnik/vertex_converters.hpp +++ b/include/mapnik/vertex_converters.hpp @@ -27,7 +27,7 @@ // mapnik #include #include -#include +#include #include #include #include diff --git a/include/mapnik/ctrans.hpp b/include/mapnik/view_transform.hpp similarity index 98% rename from include/mapnik/ctrans.hpp rename to include/mapnik/view_transform.hpp index 5329de3d9..992b22726 100644 --- a/include/mapnik/ctrans.hpp +++ b/include/mapnik/view_transform.hpp @@ -20,8 +20,8 @@ * *****************************************************************************/ -#ifndef MAPNIK_CTRANS_HPP -#define MAPNIK_CTRANS_HPP +#ifndef MAPNIK_VIEW_TRANSFORM_HPP +#define MAPNIK_VIEW_TRANSFORM_HPP // mapnik #include @@ -279,4 +279,4 @@ public: }; } -#endif // MAPNIK_CTRANS_HPP +#endif // MAPNIK_VIEW_TRANSFORM_HPP diff --git a/plugins/input/gdal/gdal_featureset.cpp b/plugins/input/gdal/gdal_featureset.cpp index 198455175..8252ac589 100644 --- a/plugins/input/gdal/gdal_featureset.cpp +++ b/plugins/input/gdal/gdal_featureset.cpp @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/plugins/input/pgraster/pgraster_featureset.cpp b/plugins/input/pgraster/pgraster_featureset.cpp index c761ee11f..056d997cf 100644 --- a/plugins/input/pgraster/pgraster_featureset.cpp +++ b/plugins/input/pgraster/pgraster_featureset.cpp @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/plugins/input/pgraster/pgraster_wkb_reader.cpp b/plugins/input/pgraster/pgraster_wkb_reader.cpp index e4c9de268..f67950a98 100644 --- a/plugins/input/pgraster/pgraster_wkb_reader.cpp +++ b/plugins/input/pgraster/pgraster_wkb_reader.cpp @@ -30,7 +30,7 @@ #include // for datasource_exception #include #include -#include +#include #include #include #include diff --git a/plugins/input/raster/raster_datasource.cpp b/plugins/input/raster/raster_datasource.cpp index 969e22974..13d996e9e 100644 --- a/plugins/input/raster/raster_datasource.cpp +++ b/plugins/input/raster/raster_datasource.cpp @@ -25,7 +25,7 @@ // mapnik #include #include -#include +#include #include #include #include diff --git a/plugins/input/raster/raster_featureset.cpp b/plugins/input/raster/raster_featureset.cpp index 1843c6fae..ead8a53a4 100644 --- a/plugins/input/raster/raster_featureset.cpp +++ b/plugins/input/raster/raster_featureset.cpp @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/map.cpp b/src/map.cpp index 019f74fa1..a58bb51f6 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/text/placement_finder.cpp b/src/text/placement_finder.cpp index 3bee0364d..0199679cf 100644 --- a/src/text/placement_finder.cpp +++ b/src/text/placement_finder.cpp @@ -22,7 +22,7 @@ //mapnik #include #include -#include +#include #include #include #include diff --git a/src/warp.cpp b/src/warp.cpp index 2b068fbb0..bb18bdabd 100644 --- a/src/warp.cpp +++ b/src/warp.cpp @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include diff --git a/tests/cpp_tests/geometry_converters_test.cpp b/tests/cpp_tests/geometry_converters_test.cpp index c3b7e5a8c..618c67c6e 100644 --- a/tests/cpp_tests/geometry_converters_test.cpp +++ b/tests/cpp_tests/geometry_converters_test.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include From 1ac0ebdd831fc3a5f2c119b721d29fe87d79138b Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 28 Aug 2014 10:59:08 +0100 Subject: [PATCH 14/16] rename coord_transform to transform_path_adapter and move implementation into separate header --- benchmark/test_polygon_clipping.cpp | 12 +- demo/viewer/mapwidget.cpp | 4 +- include/mapnik/svg/geometry_svg_generator.hpp | 3 +- .../mapnik/svg/output/svg_path_iterator.hpp | 4 +- include/mapnik/transform_path_adapter.hpp | 128 ++++++++++++++++++ include/mapnik/vertex_converters.hpp | 3 +- include/mapnik/view_transform.hpp | 94 ------------- src/agg/process_building_symbolizer.cpp | 4 +- .../process_polygon_pattern_symbolizer.cpp | 3 +- src/cairo/process_building_symbolizer.cpp | 3 +- .../process_polygon_pattern_symbolizer.cpp | 2 +- src/grid/process_building_symbolizer.cpp | 3 +- src/group/group_symbolizer_helper.cpp | 4 +- src/svg/output/process_symbolizers.cpp | 6 +- 14 files changed, 157 insertions(+), 116 deletions(-) create mode 100644 include/mapnik/transform_path_adapter.hpp diff --git a/benchmark/test_polygon_clipping.cpp b/benchmark/test_polygon_clipping.cpp index e8c245e2c..e72a0aa76 100644 --- a/benchmark/test_polygon_clipping.cpp +++ b/benchmark/test_polygon_clipping.cpp @@ -3,6 +3,7 @@ #include "agg_conv_clip_polygon.h" #include #include +#include #include #include #include @@ -11,15 +12,13 @@ #include #include #include - +#include +#include // agg #include "agg_conv_clip_polygon.h" // clipper #include "agg_conv_clipper.h" #include "agg_path_storage.h" -// boost -#include - // rendering #include "agg_basics.h" #include "agg_rendering_buffer.h" @@ -27,14 +26,15 @@ #include "agg_rasterizer_scanline_aa.h" #include "agg_scanline_u.h" #include "agg_renderer_scanline.h" -#include + +// stl #include void render(mapnik::geometry_type & geom, mapnik::box2d const& extent, std::string const& name) { - using path_type = mapnik::coord_transform; + using path_type = mapnik::transform_path_adapter; using ren_base = agg::renderer_base; using renderer = agg::renderer_scanline_aa_solid; mapnik::image_32 im(256,256); diff --git a/demo/viewer/mapwidget.cpp b/demo/viewer/mapwidget.cpp index a106934c3..a4266fb91 100644 --- a/demo/viewer/mapwidget.cpp +++ b/demo/viewer/mapwidget.cpp @@ -27,9 +27,9 @@ #include #include #include +#include #include #include -//#include #include #include @@ -191,7 +191,7 @@ void MapWidget::mousePressEvent(QMouseEvent* e) std::get<1>(*itr).to_string().c_str())); } - using path_type = mapnik::coord_transform; + using path_type = mapnik::transform_path_adapter; for (unsigned i=0; inum_geometries();++i) { diff --git a/include/mapnik/svg/geometry_svg_generator.hpp b/include/mapnik/svg/geometry_svg_generator.hpp index 04b409cba..98194b8fa 100644 --- a/include/mapnik/svg/geometry_svg_generator.hpp +++ b/include/mapnik/svg/geometry_svg_generator.hpp @@ -28,6 +28,7 @@ #include #include // for container stuff #include // for container stuff +#include #include #include @@ -49,7 +50,7 @@ namespace boost { namespace spirit { namespace traits { // TODO - this needs to be made generic to any path type -using path_type = mapnik::coord_transform; +using path_type = mapnik::transform_path_adapter; template <> struct is_container : mpl::true_ {} ; diff --git a/include/mapnik/svg/output/svg_path_iterator.hpp b/include/mapnik/svg/output/svg_path_iterator.hpp index 193e4fe14..73886aca3 100644 --- a/include/mapnik/svg/output/svg_path_iterator.hpp +++ b/include/mapnik/svg/output/svg_path_iterator.hpp @@ -26,7 +26,7 @@ // mapnik #include #include - +#include // boost #include #include @@ -171,7 +171,7 @@ private: // The Value type is a std::tuple that holds 5 elements, the command and the x and y coordinate. // Each coordinate is stored twice to match the needs of the grammar. //using path_iterator_type = path_iterator, -// coord_transform >; +// transform_path_adapter >; }} diff --git a/include/mapnik/transform_path_adapter.hpp b/include/mapnik/transform_path_adapter.hpp new file mode 100644 index 000000000..054a69c4f --- /dev/null +++ b/include/mapnik/transform_path_adapter.hpp @@ -0,0 +1,128 @@ +/***************************************************************************** + * + * This file is part of Mapnik (c++ mapping toolkit) + * + * Copyright (C) 2014 Artem Pavlenko + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + *****************************************************************************/ + +#ifndef MAPNIK_TRANSFORM_PATH_ADAPTER_HPP +#define MAPNIK_TRANSFORM_PATH_ADAPTER_HPP + +#include + +namespace mapnik { + +template +struct MAPNIK_DECL transform_path_adapter +{ + // SFINAE value_type detector + template + struct void_type + { + using type = void; + }; + + template + struct select_value_type + { + using type = D; + }; + + template + struct select_value_type::type> + { + using type = typename T::value_type; + }; + + using size_type = std::size_t; + using value_type = typename select_value_type::type; + + transform_path_adapter(Transform const& t, + Geometry & geom, + proj_transform const& prj_trans) + : t_(&t), + geom_(geom), + prj_trans_(&prj_trans) {} + + explicit transform_path_adapter(Geometry & geom) + : t_(0), + geom_(geom), + prj_trans_(0) {} + + void set_proj_trans(proj_transform const& prj_trans) + { + prj_trans_ = &prj_trans; + } + + void set_trans(Transform const& t) + { + t_ = &t; + } + + unsigned vertex(double *x, double *y) const + { + unsigned command; + bool ok = false; + bool skipped_points = false; + while (!ok) + { + command = geom_.vertex(x,y); + if (command == SEG_END) + { + return command; + } + double z=0; + ok = prj_trans_->backward(*x, *y, z); + if (!ok) { + skipped_points = true; + } + } + if (skipped_points && (command == SEG_LINETO)) + { + command = SEG_MOVETO; + } + t_->forward(x,y); + return command; + } + + void rewind(unsigned pos) const + { + geom_.rewind(pos); + } + + unsigned type() const + { + return static_cast(geom_.type()); + } + + Geometry const& geom() const + { + return geom_; + } + +private: + Transform const* t_; + Geometry & geom_; + proj_transform const* prj_trans_; +}; + + +} + + +#endif // MAPNIK_TRANSFORM_PATH_ADAPTER_HPP diff --git a/include/mapnik/vertex_converters.hpp b/include/mapnik/vertex_converters.hpp index 57de83388..d215854a0 100644 --- a/include/mapnik/vertex_converters.hpp +++ b/include/mapnik/vertex_converters.hpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -254,7 +255,7 @@ template struct converter_traits { using geometry_type = T; - using conv_type = coord_transform; + using conv_type = transform_path_adapter; template static void setup(geometry_type & geom, Args const& args) diff --git a/include/mapnik/view_transform.hpp b/include/mapnik/view_transform.hpp index 992b22726..0c4e07d88 100644 --- a/include/mapnik/view_transform.hpp +++ b/include/mapnik/view_transform.hpp @@ -36,100 +36,6 @@ namespace mapnik { -template -struct MAPNIK_DECL coord_transform -{ - // SFINAE value_type detector - template - struct void_type - { - using type = void; - }; - - template - struct select_value_type - { - using type = D; - }; - - template - struct select_value_type::type> - { - using type = typename T::value_type; - }; - - using size_type = std::size_t; - using value_type = typename select_value_type::type; - - coord_transform(Transform const& t, - Geometry & geom, - proj_transform const& prj_trans) - : t_(&t), - geom_(geom), - prj_trans_(&prj_trans) {} - - explicit coord_transform(Geometry & geom) - : t_(0), - geom_(geom), - prj_trans_(0) {} - - void set_proj_trans(proj_transform const& prj_trans) - { - prj_trans_ = &prj_trans; - } - - void set_trans(Transform const& t) - { - t_ = &t; - } - - unsigned vertex(double *x, double *y) const - { - unsigned command; - bool ok = false; - bool skipped_points = false; - while (!ok) - { - command = geom_.vertex(x,y); - if (command == SEG_END) - { - return command; - } - double z=0; - ok = prj_trans_->backward(*x, *y, z); - if (!ok) { - skipped_points = true; - } - } - if (skipped_points && (command == SEG_LINETO)) - { - command = SEG_MOVETO; - } - t_->forward(x,y); - return command; - } - - void rewind(unsigned pos) const - { - geom_.rewind(pos); - } - - unsigned type() const - { - return static_cast(geom_.type()); - } - - Geometry const& geom() const - { - return geom_; - } - -private: - Transform const* t_; - Geometry & geom_; - proj_transform const* prj_trans_; -}; - class view_transform { private: diff --git a/src/agg/process_building_symbolizer.cpp b/src/agg/process_building_symbolizer.cpp index f7bff18d0..0b2dd203b 100644 --- a/src/agg/process_building_symbolizer.cpp +++ b/src/agg/process_building_symbolizer.cpp @@ -31,7 +31,7 @@ #include #include #include - +#include // stl #include @@ -53,7 +53,7 @@ void agg_renderer::process(building_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans) { - using path_type = coord_transform; + using path_type = transform_path_adapter; using ren_base = agg::renderer_base; using renderer = agg::renderer_scanline_aa_solid; diff --git a/src/agg/process_polygon_pattern_symbolizer.cpp b/src/agg/process_polygon_pattern_symbolizer.cpp index 7d1b6b2ef..0c6cdbdfe 100644 --- a/src/agg/process_polygon_pattern_symbolizer.cpp +++ b/src/agg/process_polygon_pattern_symbolizer.cpp @@ -37,6 +37,7 @@ #include #include #include + // agg #include "agg_basics.h" #include "agg_rendering_buffer.h" @@ -80,7 +81,7 @@ void agg_renderer::process(polygon_pattern_symbolizer const& sym, if (!pat) return; using clipped_geometry_type = agg::conv_clip_polygon; - using path_type = coord_transform; + using path_type = transform_path_adapter; agg::rendering_buffer buf(current_buffer_->raw_data(), current_buffer_->width(), current_buffer_->height(), current_buffer_->width() * 4); diff --git a/src/cairo/process_building_symbolizer.cpp b/src/cairo/process_building_symbolizer.cpp index b1c42b903..3506da04b 100644 --- a/src/cairo/process_building_symbolizer.cpp +++ b/src/cairo/process_building_symbolizer.cpp @@ -27,6 +27,7 @@ #include #include #include +#include // mapnik symbolizer generics #include @@ -41,7 +42,7 @@ void cairo_renderer::process(building_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans) { - using path_type = coord_transform; + using path_type = transform_path_adapter; cairo_save_restore guard(context_); composite_mode_e comp_op = get(sym, keys::comp_op, feature, common_.vars_, src_over); mapnik::color fill = get(sym, keys::fill, feature, common_.vars_, mapnik::color(128,128,128)); diff --git a/src/cairo/process_polygon_pattern_symbolizer.cpp b/src/cairo/process_polygon_pattern_symbolizer.cpp index 16947ea27..b8fe0cc1d 100644 --- a/src/cairo/process_polygon_pattern_symbolizer.cpp +++ b/src/cairo/process_polygon_pattern_symbolizer.cpp @@ -70,7 +70,7 @@ void cairo_renderer::process(polygon_pattern_symbolizer const& sym, if (feature.num_geometries() > 0) { using clipped_geometry_type = agg::conv_clip_polygon; - using path_type = coord_transform; + using path_type = transform_path_adapter; clipped_geometry_type clipped(feature.get_geometry(0)); clipped.clip_box(clip_box.minx(), clip_box.miny(), clip_box.maxx(), clip_box.maxy()); diff --git a/src/grid/process_building_symbolizer.cpp b/src/grid/process_building_symbolizer.cpp index 7784a0776..ed10f80bd 100644 --- a/src/grid/process_building_symbolizer.cpp +++ b/src/grid/process_building_symbolizer.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -57,7 +58,7 @@ void grid_renderer::process(building_symbolizer const& sym, using pixfmt_type = typename grid_renderer_base_type::pixfmt_type; using color_type = typename grid_renderer_base_type::pixfmt_type::color_type; using renderer_type = agg::renderer_scanline_bin_solid; - using path_type = coord_transform; + using path_type = transform_path_adapter; agg::scanline_bin sl; grid_rendering_buffer buf(pixmap_.raw_data(), common_.width_, common_.height_, common_.width_); diff --git a/src/group/group_symbolizer_helper.cpp b/src/group/group_symbolizer_helper.cpp index 52e4c3e81..ec2aff54e 100644 --- a/src/group/group_symbolizer_helper.cpp +++ b/src/group/group_symbolizer_helper.cpp @@ -66,7 +66,7 @@ pixel_position_list const& group_symbolizer_helper::get() if (clipped_) { using clipped_geometry_type = agg::conv_clip_polyline; - using path_type = coord_transform; + using path_type = transform_path_adapter; clipped_geometry_type clipped(*geom); clipped.clip_box(query_extent_.minx(), query_extent_.miny(), @@ -76,7 +76,7 @@ pixel_position_list const& group_symbolizer_helper::get() } else { - using path_type = coord_transform; + using path_type = transform_path_adapter; path_type path(t_, *geom, prj_trans_); find_line_placements(path); } diff --git a/src/svg/output/process_symbolizers.cpp b/src/svg/output/process_symbolizers.cpp index ab3495e21..327b93a2e 100644 --- a/src/svg/output/process_symbolizers.cpp +++ b/src/svg/output/process_symbolizers.cpp @@ -24,11 +24,13 @@ // mapnik #include +#include #include #include #include -#include #include +// boost +#include namespace mapnik { @@ -74,7 +76,7 @@ bool svg_renderer::process(rule::symbolizers const& syms, proj_transform const& prj_trans) { // svg renderer supports processing of multiple symbolizers. - using path_type = coord_transform; + using path_type = transform_path_adapter; bool process_path = false; // process each symbolizer to collect its (path) information. From 4f773309f1301e22912c246b6ed33f5ac6d0cf3d Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 28 Aug 2014 13:59:48 -0700 Subject: [PATCH 15/16] fix mapnik::logger usage --- utils/svg2png/svg2png.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/utils/svg2png/svg2png.cpp b/utils/svg2png/svg2png.cpp index 9be434b8c..7fe3da601 100644 --- a/utils/svg2png/svg2png.cpp +++ b/utils/svg2png/svg2png.cpp @@ -56,8 +56,7 @@ int main (int argc,char** argv) bool auto_open = false; int return_value = 0; std::vector svg_files; - mapnik::logger logger; - logger.set_severity(mapnik::logger::error); + mapnik::logger::instance().set_severity(mapnik::logger::error); try { From 23189d70591160ddec9b6b623daff42c4d4578f1 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 28 Aug 2014 17:23:32 -0700 Subject: [PATCH 16/16] remove invalid MAPNIK_DECL usage - amends d61efc0b5a5f9 (may break lto, but fixes windows) --- include/mapnik/symbolizer.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/mapnik/symbolizer.hpp b/include/mapnik/symbolizer.hpp index 346a67e0d..c25992151 100644 --- a/include/mapnik/symbolizer.hpp +++ b/include/mapnik/symbolizer.hpp @@ -478,20 +478,20 @@ struct extract_raw_value : public util::static_visitor }; template -MAPNIK_DECL void put(symbolizer_base & sym, keys key, T const& val) +void put(symbolizer_base & sym, keys key, T const& val) { constexpr bool enum_ = std::is_enum::value; detail::put_impl::apply(sym, key, val); } template -MAPNIK_DECL bool has_key(symbolizer_base const& sym, keys key) +bool has_key(symbolizer_base const& sym, keys key) { return (sym.properties.count(key) == 1); } template -MAPNIK_DECL T get(symbolizer_base const& sym, keys key, mapnik::feature_impl const& feature, attributes const& vars, T const& _default_value = T()) +T get(symbolizer_base const& sym, keys key, mapnik::feature_impl const& feature, attributes const& vars, T const& _default_value = T()) { using const_iterator = symbolizer_base::cont_type::const_iterator; const_iterator itr = sym.properties.find(key); @@ -503,7 +503,7 @@ MAPNIK_DECL T get(symbolizer_base const& sym, keys key, mapnik::feature_impl con } template -MAPNIK_DECL boost::optional get_optional(symbolizer_base const& sym, keys key, mapnik::feature_impl const& feature, attributes const& vars) +boost::optional get_optional(symbolizer_base const& sym, keys key, mapnik::feature_impl const& feature, attributes const& vars) { using const_iterator = symbolizer_base::cont_type::const_iterator; const_iterator itr = sym.properties.find(key); @@ -515,7 +515,7 @@ MAPNIK_DECL boost::optional get_optional(symbolizer_base const& sym, keys key } template -MAPNIK_DECL T get(symbolizer_base const& sym, keys key, T const& _default_value = T()) +T get(symbolizer_base const& sym, keys key, T const& _default_value = T()) { using const_iterator = symbolizer_base::cont_type::const_iterator; const_iterator itr = sym.properties.find(key); @@ -527,7 +527,7 @@ MAPNIK_DECL T get(symbolizer_base const& sym, keys key, T const& _default_value } template -MAPNIK_DECL boost::optional get_optional(symbolizer_base const& sym, keys key) +boost::optional get_optional(symbolizer_base const& sym, keys key) { using const_iterator = symbolizer_base::cont_type::const_iterator; const_iterator itr = sym.properties.find(key);