From 4fbf0134020d583f4a269826f580eea92d115e28 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Fri, 3 May 2024 11:54:05 +0200 Subject: [PATCH 01/33] Import mercator symbol render tests from globe branch --- .../expected.png | Bin 46573 -> 33321 bytes .../text-translate-anchor-map/expected.png | Bin 0 -> 1937 bytes .../text-translate-anchor-map/style.json | 84 +++ .../expected.png | Bin 0 -> 2063 bytes .../text-translate-anchor-viewport/style.json | 84 +++ .../text-translate-anchor-map/expected.png | Bin 0 -> 2213 bytes .../text-translate-anchor-map/style.json | 84 +++ .../expected.png | Bin 0 -> 2304 bytes .../text-translate-anchor-viewport/style.json | 84 +++ .../text-translate-anchor-map/expected.png | Bin 0 -> 1768 bytes .../text-translate-anchor-map/style.json | 84 +++ .../expected.png | Bin 0 -> 1961 bytes .../text-translate-anchor-viewport/style.json | 84 +++ .../text-translate-anchor-map/expected.png | Bin 0 -> 1934 bytes .../text-translate-anchor-map/style.json | 84 +++ .../expected.png | Bin 0 -> 2020 bytes .../text-translate-anchor-viewport/style.json | 84 +++ .../base/expected.png | Bin 0 -> 7856 bytes .../collision-variable-anchor/base/style.json | 559 +++++++++++++++++ .../pitched-and-rotated/expected.png | Bin 0 -> 17820 bytes .../pitched-and-rotated/style.json | 561 ++++++++++++++++++ .../pitched/expected.png | Bin 0 -> 6744 bytes .../pitched/style.json | 560 +++++++++++++++++ .../rotated/expected.png | Bin 0 -> 12360 bytes .../rotated/style.json | 560 +++++++++++++++++ .../tests/debug/collision/expected-debian.png | Bin 0 -> 67512 bytes .../expected-win-correct-corners.png | Bin 0 -> 67919 bytes .../icon-padding/databind/expected-debian.png | Bin 0 -> 6414 bytes .../tests/icon-padding/databind/expected.png | Bin 6047 -> 5983 bytes .../icon-padding/default/expected-debian.png | Bin 0 -> 6568 bytes .../tests/icon-padding/default/expected.png | Bin 6154 -> 6094 bytes .../expected.png | Bin 44877 -> 46499 bytes .../text-translate-anchor-map/expected.png | Bin 0 -> 1887 bytes .../text-translate-anchor-map/style.json | 83 +++ .../expected.png | Bin 0 -> 2027 bytes .../text-translate-anchor-viewport/style.json | 83 +++ .../text-translate-anchor-map/expected.png | Bin 0 -> 2183 bytes .../text-translate-anchor-map/style.json | 83 +++ .../expected.png | Bin 0 -> 2283 bytes .../text-translate-anchor-viewport/style.json | 83 +++ .../text-translate-anchor-map/expected.png | Bin 0 -> 1729 bytes .../text-translate-anchor-map/style.json | 83 +++ .../expected.png | Bin 0 -> 1899 bytes .../text-translate-anchor-viewport/style.json | 83 +++ .../text-translate-anchor-map/expected.png | Bin 0 -> 1878 bytes .../text-translate-anchor-map/style.json | 83 +++ .../expected.png | Bin 0 -> 1985 bytes .../text-translate-anchor-viewport/style.json | 83 +++ .../icon-text-fit-collision-box/expected.png | Bin 4051 -> 4022 bytes .../pitched-with-map/expected.png | Bin 29153 -> 46657 bytes .../rotated-with-map/expected.png | Bin 51610 -> 53088 bytes .../expected-debian-flaky-2.png | Bin 0 -> 69231 bytes .../expected-debian-flaky.png | Bin 0 -> 69214 bytes .../pitched-rotated-debug/expected-debian.png | Bin 0 -> 69097 bytes .../pitched-with-map/expected.png | Bin 29202 -> 46657 bytes .../rotated-with-map/expected.png | Bin 51785 -> 53088 bytes .../text-translate/expected.png | Bin 0 -> 5922 bytes .../text-translate/style.json | 105 ++++ .../translate-variants/base/expected.png | Bin 0 -> 7730 bytes .../translate-variants/base/style.json | 558 +++++++++++++++++ .../pitched-and-rotated/expected.png | Bin 0 -> 17210 bytes .../pitched-and-rotated/style.json | 560 +++++++++++++++++ .../translate-variants/pitched/expected.png | Bin 0 -> 6539 bytes .../translate-variants/pitched/style.json | 559 +++++++++++++++++ .../translate-variants/rotated/expected.png | Bin 0 -> 11979 bytes .../translate-variants/rotated/style.json | 559 +++++++++++++++++ 66 files changed, 5917 insertions(+) create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/base/expected.png create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/base/style.json create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/pitched-and-rotated/expected.png create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/pitched-and-rotated/style.json create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/pitched/expected.png create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/pitched/style.json create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/rotated/expected.png create mode 100644 test/integration/render/tests/debug/collision-variable-anchor/rotated/style.json create mode 100644 test/integration/render/tests/debug/collision/expected-debian.png create mode 100644 test/integration/render/tests/debug/collision/expected-win-correct-corners.png create mode 100644 test/integration/render/tests/icon-padding/databind/expected-debian.png create mode 100644 test/integration/render/tests/icon-padding/default/expected-debian.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/style.json create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png create mode 100644 test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-viewport/style.json create mode 100644 test/integration/render/tests/text-variable-anchor/pitched-rotated-debug/expected-debian-flaky-2.png create mode 100644 test/integration/render/tests/text-variable-anchor/pitched-rotated-debug/expected-debian-flaky.png create mode 100644 test/integration/render/tests/text-variable-anchor/pitched-rotated-debug/expected-debian.png create mode 100644 test/integration/render/tests/text-variable-anchor/text-translate/expected.png create mode 100644 test/integration/render/tests/text-variable-anchor/text-translate/style.json create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/base/expected.png create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/base/style.json create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/pitched-and-rotated/expected.png create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/pitched-and-rotated/style.json create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/pitched/expected.png create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/pitched/style.json create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/rotated/expected.png create mode 100644 test/integration/render/tests/text-variable-anchor/translate-variants/rotated/style.json diff --git a/test/integration/render/tests/debug/collision-icon-text-line-translate/expected.png b/test/integration/render/tests/debug/collision-icon-text-line-translate/expected.png index dcb0727a4f1ba3f0f4fe9cc8a6e4e820bb8a8813..b0c8219f0f3c7c93a2c6c3e4b6ae60ffd5614175 100644 GIT binary patch literal 33321 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 HAV>cfd&!&O diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..042161f8d595244b1a719da17e9605b1df1c1f32 GIT binary patch literal 1937 zcmeHI`!m}K5Kp|T(oE~wh(^uzR6CU-C7mLodf~L5J+xF%hj@!rsArNYtrLzrRn@3c z?G;g%mI@)RN7`#?!%>2YXA*)UQIF93-raBa2i#Ac`ONIj?#|B6XFof8!@~^+(S&J& zKp=>Vvy&GH1O{9%NJ9-U0mMgPAdtGBixc*IGI*ggGxvSA5pP+<=|H@3bti@~;GKuC zL<23Fxw(M8SKIbm0WWrc9W94#Q9WOUhc$th%Gx^RaKR?K9NHrlUXq%);B_+lDRoYs|FxD zHZ~SL-hQ{S(Zak{YPtA)YL8&S8vlupL+~S?`8^2&mj%}2Gj~ZkNKymY+6w0wzP)^7 zRb*vh(K$Czn=*SlJb5BpA5EOrSe@;uBESx$N-dHWM_+Ndpgg@}lk;>V+J`_A1y+5s zFSdD@lWMc|X-TxqLx|Y(%&F;D#ci8&wbEf$&PZ%)KG2s%l6Wn)F4>nL@$?#B8fv8X z?v#{yNioqP8rt63s^hG>T}@3rnZAjNq$JA|C%Udf43ou`IT6n;Muef9Su=l{ z`LV9A>M0$~8duKTQY2pVZ+fyek<+rpNPWIOnU^A@sH3mS4tslhldfE;yv;Z6DN#pE z!{b%fPrZXGRQxn#N}Sgv%L(pKcg!{_ytjN}&_C`$ZSC%!ay3FpTG~hB4%HnMg$7#n ztP(~wLs^kHZqFz!o6NWQAY`^Kh9oB&^wa^BaH({l1r_)n5=E?;o~X_I9j=_C3IKL9;5qXu~oyK z&Q`*O=JBxk!Ft7ypjMzwZf_i#5L)Kqy<6OYh=fpP5FGwY+2M0D;(}6zAzy=7>xOEJ5C&R#yc0{Mz-i(=RwW$diu*EBW;k^b-`g(kqgr9cqnWC*JsuQV_~+91cl4Z^=0LWK6EPYR-WB` z&<;OedX*E1aP~584-O#hR!wYgVOy=XzPj&l;Qqkp_`eyrad)@^YHqry=Vc24k3rhQ zAVK+1bL|s$Iwa(YrRhVxy|{>32jK!z&bY3~wbu8=5f$hxf=kZswo-wl-CD^kMC=jV zNH!cJp(x$qN;A+FwRMMm!K3+>eK-zRN|{Q`twI$x`}KmjPrR5t8S?A}Bce}DS+kSy@%*UTo`={W8g;6Km+ii4u+;FH4w%NFSJLC*@H%ue~W@Eif@D38JR`UZ*{Q!J;0 zXC1Vvb8-~a@jEx$BlrXB6FwvPCR6=RCj941l<8qb{Z2Z^1u@jMF~vf`lAlZGP*G9Q zP#BkPSEepp%wS*WcJqOWL5H5P)Rc=JnW9fj|Va7%fS&hSOO*?VXOd+??z)U?2dMhOB^Xnnz7cb%jlL6OBW;1~GGv zqRYsiftaN?jK2J@6K0FuHwW{05!by*3|+bsUAaPT2Pg#e4O^BV$}Q|sD0$Z!N2HIw zUC>kO?1N1KEM+N++v25}(=Bs@Z`}`BJ`bQrroum13&I6CHE+{&8+_lrd|dC*lwK1u zIuUwz_?nWElEwN<*Y~emviJ5NVzO! zJptD%vYJ9UM)b~zRZd!{F2TNUV!on8!iYp-7@t}!1))-@n}hY4idziW9(_bh%M`b1 zkbMXiC=o4ux{3u(ZB-;!gIGO6q*tvWN~{w7p!Ij- zBC&Xk%|>#J2FnrUTWj-Gk!0i3Xeo~^fSa+RAfOP-kJNqZW9PSBH~iJbP%Fv^L;V1D=qmRSf3>dS)&d5U8jKa$3; zeX3~+|FQ+?_iBWik3z;Yh)CAM%G26*I=Y|ZKQgdbP8Q>X!1qJhQlkgh+c=+VIP07K EH+jmp+5i9m literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/style.json b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/style.json new file mode 100644 index 0000000000..a687cc34ab --- /dev/null +++ b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/style.json @@ -0,0 +1,84 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "viewport" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "viewport" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8e0e3703a0a3cd83b38422eb8b54ac890653d5 GIT binary patch literal 2213 zcmd^B`8U*S7$0L9ailO2%A8A>NMw+V#vWsvWXYfrSteU!Ci_?_6&Xr{!W4<7G`6vH zD_eugZtM|4WXsI8j;Q>?jf8d_ePw(@-&vQQK^E{vDJkOhiu{$FsA}ay{fyAsV z%^W}=KEUJy2@3&-dnnx(1QHIkGBb9J;9F`W`%4SRHgK08?aW*yA|4v3OkHMLG$qsb zxd`3r;UxCBLd<=CJ@kBU9^#&8tA{-r-mj&d2}{&d@mqFiH!*7=*klQO>`9iQ?R%DS zLq#^MWXZkk$C)R{YW=9X$M!uOeM>a_F4Y+ZXBatP6P{Lrt?+{BY!RhGs3ltMcX05{ zfmc^G@f|t0G%$eOk@Nm(Z}0V=;{U0Ia=!g(-i^jaV?-SoFClaI@JzEbZu-ML#kV`_ zBcpM@cHZ)4a{ObUca;m7p8flrBfa&PysADUIDWyi)0rNEPOB$slYokHMhG z1;0v2P2FqJH!#2+9c?czt!wprOm3m*jeUS9#29&dD<+!oQ7A^QZ?7*7vlP>i?^fq} zU8@5R7R=Aj4^`qN84QNJL0C#ji3acxF`1;&Jp_k&D4Cj?zQol(!uJ+&--#aA3>Z+~ zdl>n_Eu^+N3m5zGQ23~^wY8{qrurAo7uINK+c9cJMt=D@qilZ`i?g*LKVFj-xA>_! zWVtS9e;4W(QcgE;0^sJ=6i`~*A{X+uF;}1XYW_uW_mCRQ_9@NaVk6kXMle=vd#y0* z+gKefE^bB41xMB?c4m0BQsGEW1OMWusyq6`nLO@Uqij`NoS5hV%}D_a_$A~gIQL`} zb^I#nN>}ZM!-WfWIGh3$3U!a=ef8g#x~tq;kQOSuDai@<6ydn#9omFqPLgF?+j!e6 zUHE{2g4eIJc`LI8TuDpG=?HuAdPo?UnQ(EUt3e^2nad22j^6nGweH9FDIn389&a)a zYWwDKfka^=e{4#Z?e`bZ9&se7CZ7wnoSJBVsQvb@ zR<+!dgllJ`11_ry#_}&hUdJakhCwP$GPb_)(hxh^KBTjtv#TOItl zm5v{DXEmlvgn^3VaiHP^3D2&{=Iy1O4IYOjo+OOW0^?JH#_MRdIl6?MwLvCn&cOme z<36_5xM)St`lYT>q;u_HRh4`+&u1X^$1!cc&PzYHdH$0EY?)8>aVUGkHK|>hU70rl znYAwWJTXVE4|z*LrHS)w>){G7!6k9SCPNxc{uJr9Q?c_|SJxzEJ3f4hJSsLfL(PRf zK5icwslQyiaoEM3Ab76G=At8!s0|dLvZkhYc-RV$hwol0E6XCdUWjrLOK;CBSMK^f zioBVI`uPB==FI6dSneJeXi4CQoUe`2*(GR3AZWE^9iIg}(*3gz46(O^T! zoQkYW{3mQDalQ`@=xC6glk=QT_Z)cXIvTaWkT;B?9x@0ki{1$KZGX^MHF%*dLS{Ff zl#uM!WxSOnB$QX3xzg9yS9ax#Ns%3`m7bg|azOpOQ9j0Vwv)CvR+|Ix){I^cM5EC% z*8Kb!w>ugb7^R@1;sh3p9ePDjEG#TU{#axpw>hlb(_~qX7{R9mXGg~-cA@p3Kx^QG zf(k1t(%EbW5*L^;A8hqLHw`e{;A(0Gbh_|v^d1Cxi-d?2_}BObvjykpj8T$;REIbe zDSV~2NSR(btMX7!d?!T;bJWySGhAbJjf+Y{?G+R29ueKIde7*2J57{K&V5!YKGSLb zQ2<>~udubXX-p<}kEcoOp<0CNp2#l<)?KZtgnQEDbm|w`xPf+OV2Cc2_ zf~>BanDWo!{o}_jP;K}MCHSH@O#Y#8W)BpDUR%T9($YnLpLO&9TeJ)H9cC3se2;z= Q@cjT;ncJC_n0Q|M8=V#J;Q#;t literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/style.json b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/style.json new file mode 100644 index 0000000000..80b0bf1107 --- /dev/null +++ b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-map/style.json @@ -0,0 +1,84 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "map" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "map" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..dbd8c7a17d34147284c323d944ff2c2b26436dcb GIT binary patch literal 2304 zcmeH}c{JNu8^@E3Oe-y>GmNE8!mFc}j;b&^QA?YsWh^O)Sc}?f2|)%8RjD)0I8!Xk0yafh`zx{8M1@iLDF)fsXgtW3S*7!P4&NTN6+O`@@dq0n5}~ z8m``eSg8n6O2HlJX>jE+mwK-SO$y zx84@7BUmK^5r&u3+H-zF*l`6-tU7dc+rP+DONUefp)<8C2Vx%v{bdAp_Nj`UgTc=^ z?wWeF)~;T(vc`V`|DTem*j3p1As4)o%(HLMD6pm$l;PG^*44k&dE_jSi67oMQD$H1 z$~0QcFq;*Y7ew6*3X)^gSpOC@dwU5!UgtYNYMJ4%zL)F@)0EWUaGP@mI0p=7c(f-E zjV|&D8L4D416F4{eC}+G;R%H2Q8Varm%>bE_aeOWNmEm9bTwWdIG^QNg!l3e@K4P?dD1$Q2TdoQMGGvA4R9J5jFAyrNkc8QSW7oAe|YxJ zj&Hd$qd)MW1*iS?M&f+>xkPa>UHtCdeAC2@g?&kV=u|VQ{cw9K`Dkw`$i2vfO5H7_ zQh}6SQn$v4%PT8y+c$WDlJQ!sTs5)2ytX#u{rjjJDSN@xq$Fl-ZSdZ@h?|e1b75un z^TO`5>6kt^R*u17VC4cckyg&$-lx5rBLfB=eZ4Z>ntgj?@%hbHu&S!6*EQB*6bieF zAgjz&)TtRPFhily{rg*ze5<>bwwY(%pbI;~Tb>Iq&pB_#_WZc-u zW`hLPPoe$6I#0B1{f7|o9cvI%n=5f~sE&?~>7><;lZuM2zP^J(q2@8gGyVtLQWF!C zqIzZB+@q9Rq#tPD&eEsQ{eyfDeU%roSg}+jhf`XC)Uh^QXAf6U&gN2+sIJ5KI@UY= zZzB2ZjUlTcIx@u$gZX6Nf##Z?I^jnz))FtzeFul*3{f9|_Y_1M>!cFcq3q65+g6!u z!*g$Qw6UcHRbE_7^K1yYNSZX+%z!+_8)90yy-k6~+V^w{!56?iY)AhuK4ZVZ&~+WY z;b@+Ln`Dzg7 zfqIQk>*sffG!rl(6CqM!YY9*J>yxe4h(fm`DgWa3s$l4=JfD}7O%Y+?;a3F&O(*NS zZM!#*WFz1CD99A~N^c-t(3DSPUnGip<=yLVI9*r96N#nS&=I*|fnaE^hrTx{P&Isu z5fa%}sRy(`>vK2-nTU&OmE?!=p9dZr8ygcJKu0bm?5+iT{3sShuP}LCK9F}Iw=z2N zt-bIeTa&D61Xlx4*(kAjoU*^1GZ4Jl0|`3=pdQJ8M$5`N_2|6k%fCVk2Y*#Zg^&*i z%{F*BdNRbNuFfaTo(-2esit?mx}HqX?|b|nBtJMfD5k5}EqJ)NC=FR2oX_)(S8th) zJt2r6ve+T7@Gk;l>Wv@}WYm6TjfB;Zp(hsSy&8YaH6WHCiJBR1bVYbcTU$ZeF{M~h zE-_ZN8}m*g*_%`keca8-IQ@}67mF?BkJL~oIii8QhLAxG-nUC z?j3!dNbJjYvHSyot?xI}2#;s}V83c6bMF4>C?QKyx3KWgs=U1XK8JH{^WSe43zCdgy>IO zWUwQVs2aD(4d}iHy)0YnxxD^bo05>w5HVrMVzF+KNH$h}Tay_Oe)9qzj8*opti_LniIK58ht+%aMW3_3K|V%5iX{ z0;t5jZ(SOhnQ;Qd4!9apTU*;P-xzvG0YXiQA8s!47z4J*JH1d8-6|w@PcY&E(XddSCw28UM$bV7v=t96e#uO_l;P4hUp#VNM) D@#`&* literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json new file mode 100644 index 0000000000..afb1db655a --- /dev/null +++ b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json @@ -0,0 +1,84 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "viewport" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "viewport" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c62c863281aa4996da20046f87fb5079e02ebf15 GIT binary patch literal 1768 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJE?^`0({Ar*{o5Bg`ww=lLn z+%CW0WaHVK%}4w;Brx;6TK}*0lE;Dx(XB7;Hg`;K>fkV%uqm!B$}!PE!s15Y434iM zE4&uW2sT}``Ky5W!RAe;b4p*!Ut6;6Wyp&*i-}uP^M2oZ9$Eg<+hdi8%2lpOS*)I0 zo0dd52CY?C88#tA+hdjJ$P~WD@RCbM?^Aqo9$)N2#!I5JW-NO|P`I@|O1|7~t>&wrlH&AlO=|Gt65 zfsM%C5|6Jr`010;FbK$Z?{)I>Qt|I(8yl#VqyD^ce`HS*iopws|sk7fvxS?FJDaJE1%CTmynlF zH;^d!ez&~%^I7xan}-fD?Z3Hux;^vk#{CS@jmH}#AB0cW`?xzgKlOCMi4!L{miy07 zJKiUIr|fpFj8#d;eVsd4zkOCc(eKZrguj;;~2Iv&u6e_uH$>deve_>9Q*T)%Uamjj`5^y5@`3#0$18t4Y@a!6)}wjV?;ig9{XV^_YS!7==EZ-%UN8Ri z#8WS3#{rO$TMZp{xm{ZyfBwb|iS%=G5>r!KPv`A;$Oepzn|m^afA`BiRr&N! z4^OHmrm^+OwX%qEt}?Rb_V%theM#udxkW~frqiY;W_G^cvW4aJ=@lLUy@%U>#uZb}^g=f06KvwQy{Bjym*#_ji- rP_172P@v5@L~q2FXmlyge_4lRs^{iTobwr2gE4rz`njxgN@xNA({Ve2 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/style.json b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/style.json new file mode 100644 index 0000000000..5f0e69b5cf --- /dev/null +++ b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/style.json @@ -0,0 +1,84 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "map" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "map" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..4380be8c0957cc531dac084ea81e38267205ca90 GIT binary patch literal 1961 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/style.json b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/style.json new file mode 100644 index 0000000000..5daf587d1a --- /dev/null +++ b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/style.json @@ -0,0 +1,84 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "map" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "map" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-viewport/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c07914de0e070148ffb681c31de25bce393472bd GIT binary patch literal 2020 zcmeHI{WsGK7$0)EUbfsc6jn{)W|xrBEO{s9b`sWQk!2?WIX6dTg#!v85J=hC z$?iM|Bn6~WAo-tw;1l_b00PNXINMoYh?ZL7U~WS9Xt%E}uP6N#@u84GfAjd$5uL0+ zGSN>rsPWHNTK#(wXHhzZS5am12p5cV9`X52Y|cyhdxv5TNBlGH8U%+hSY7%$na`kt z@bg2O1T*j25adF&(fehI*p$#rD|MokVt?R&QvjhForh0@8q+x*WoUCZ>w-!FDj~7nF#ON@P4Eq zzBNI_Z!fk@uUn{Um=g*Kv9XWrZ$Vd^@-^x<{)pbbmN+%&J&~bnUN}D=z8aC#5ht<<^!J6i58HgqOElu$vlb}3X zlytiM5uH9YeY|RXIZk9OvjxS4;-c%}7*vXYWgP8sdU>(SmYvM15>0R5_}hW^=w=UX<8-Hhc3n4rfF$ag22+b?B!%J+xrZ} z2r|4r64)r7DWIE2q#kv7Xk=SXGdN(TD#jxqVP#D%UpRww6x@zBkC(-p#Jc#xM0>pI`LzO&E%xzG7CGuQh*^StX>aj$#b?~_|P>ZHUB#AnW&A=S8{di%^7 zT=;n=jF136gN+8xpE<+guc4}R2Z6JJesJebbp7(yPq)Y4vo8?wN*QK6))kMp{o0mG za*H}Tn*FV_-55tZCqGJ~!n;J{lLSxC;J1`4SKDsqq_+95rnOp+M(em#n}1t;RLG{H zCgYnHtD9$QS{C*Z^DmY;k323Q3qSr7L{f5(?Gc4Cp@klNusz!3g%1j4e`@Tt964g_ zwSH!N?6u|i2<#GHbtUYQn!HQcC6oUz{cWH9L{YoBsN11VX9&Yraj|qrysp!&ZB3lC zR5X1{R=e4?+ad5#{)~i!*j42r3`0dKOO7)lZnRtRh0tthN)IA3f4~m@tvs|W;vi<3 zZ&ortfZ&g@uLH z$xojWyGb(Y6eOF;Fppi(#3k)!O0oj>``S`G5WT+ctMAck8l5QtrSI7 zI~m{OkXKpxl4Z#^qOj>D!}m(kbw7DiGqVq)ZsL-X-aI_IS@ZK9$rBo`uKbeeacyna z12ZPc#w*b;8EzSP%5J?aDr$D9@Y)!Y*nC}AmjOm>zAh;tOYdp>&J~fY{MH zf~QZHH`hliz*Z)*b5-85nL)?9BS(9or&9jjzt>H`T(angEF=AASVIWSTyv^ZHo?ZS zQ8(#K9ghW1Y4~-=z`%=#hK2^V$k5@rT2e_X>G8;YY32)MjokfJ>V<`ci4J%qtTg`| zlqx6lk86mBeWeYNmY+T;A*Ab$C5PK_g=tG3`ADThTNG^*r+D}3@hvPUsG1#-!EHmj zial>MU)|8r$*=A0)yWF_rSapz&#Sq)xrq5^>dTuIeF}3c1<1w0H=3M0JVO@uCFtW2 z>Nae#tmNZW`oXhovEPu*W1ocG=(RFC+u|4lP7anL?PMgI^2pO)8>@sJMk4y6J0%#N)u1ot>S=bqJBCxzjV=DC5sT zGOpj=+cZ5QioGaC@DB%OAy1hG2QMiiu`!t_Cy{iIXpLE65PuAgD-Ssibm&eAA8>kI zTURGfD`eTdGE|_Uso88TJUuWx+zO5}X$ZM0=Fr{fB>qnWD?Hic_n4?@ZwCvUnQPZY ze=APR(kYtk%~gxp-=9lJmGc)=Qd08W>)=5qW@YI>h4?J>zN!88&5-trX-hk6X!iul zhlrTC>2J=QyrbT6J3>hNM2)}Y6R@~xXh=)Nqcaax@%;JoevA9}CI0;0;1CofD;j>< zwUAr;{=ERVPR5tf3dhTrFXyOBGYN;ti%WQ=Yo}ZHFuXV9@95~DrlZq0G12f>PheU2 z{=u%Ltu42Zud3X%7;-@0+*}LL;%aU^Gq-NkZ$FO;zbhqEr&+M=1uCk`e0;NDoUcD- zS_#l2MfN`5=;)~Lk~iv0XD7Re$g|vB_TEf6^#o}jg2kSPC4wH?>lMD#)QL!BLaQyC zl+-IYWeq>Q5wBZH}_xj9wLkt`q}KwMmWT2EhJ#m0thU|`@;R8&%Crgnlc z>OzLj=HgfWQqSdnHd|X;LSo|F?Ch}3^73-wR4vGeq!%yL%*+^B3Uo4O`*T!UT3RTm zsa2JfaIV@OcyGS39~Bj}th?dnCIA2oVVH&LDl;waP7!$s4^DzJ7#Y#AaB*>&*CC#L z|85NM{a|nNjr!{XAEDY;SDM?~qpPc>U0hsv`T3jk^78Nu46uRWPJY5H=hr{EIa#~4 zwFQBRPfKHf5?-b(t!uK7$((OE5^atqckIoOS)Xb^Lfy>h85yZtTCzA)r0V5exA|nc zBB-c{oN100bL?gM{d1}h<+HR*d9My_F}gAT-c$_%m9*H+CM1*)6-6MAH9$as6X2}B z|5kZL#fl&gPc#POx!9em0-KVOk|He37~RI(EG(+Sb|?K)A>sA(^dObi{p479bTYD` zdBO1x_kQ-3Skx}}x_lD7zj_Do6`b*X!*7!ZzrM43-tsq2W=~H`dwX(XV&lp2pLfvx zdS*Pc3;Bi$ba}YBqt3A)!XRw&zcB;ev_;_vwg)G=pR!(lKX2N`v z>*wKpf`dO)%*@*M_MC-s=mJB&z?Pd zTllnjrg4poY1;B@jcgP-tB#fyN#6CiCYMjM;0QFp@(nF5PBymi3dcV0qkS*=I|g_6 zF*A@a!Y*HV0dFjqyp`Oq_|M_KFVNZgZkIqwMWu4>+8HpwYae5imX=m#EWpXl?Y*e~g&V+MsHv%^Ke&zvLbJpc zw*c+uqhFf9K)lx0*Eyk5{$=5P$G(WJ*2#}J0ny}CtgO0_w;LN9)HF0RAAFW{AbPrR zT=4q*{CxlD=o2%@e5f4=7!@O<=7R@vYHDhTN%X@B%`2We`(76=Tu70+$MQ_I@7Wfje63Vvcr-Y6erd_BYTT=;lG+c$6C^c=5nBnR>ajVeTAPVP{JZsXxsn+bUY z$3uB95K~f8G6A`PXMWaX2%EeHxzy9sBfr%`<&@S2wdUE?)3bmDcP8n?kmExU1jgFi z$H&Xn$;odNjI}w7Hr2pI)ALJ6m|V3@Ogjs{Mgu- zXN76;*>mUSd}S|++7m*og0@=estpVcZ{NP%^wD|9$=&_#xA!L4s~f&}8k}Vsi=$pJKrZc2N!pkiquR)!`ylHMM8y z>6!poQ(OzSHjJBr7H-|N`@ z{$=rEtpkte!r}dhhY!6_=CSl55#YHAI1iwVJ>a{zl$4nJm^c}e^ffg#d=EMQ&3Pz0 z>_NRz^dh!rWn^R~bU!Z}xbOkyWPZg}3tKx1$a=6TGm(~_-qGD{-;ugsc`ZGtJn?0R)%}()C^4WAcEo*gH6s+jm@m60uB9!fj9R;o%9xyM~!M zxjs6iJNIpLR0HA*-uheR){`~&t0g2Q2L}h0!8oH*%Z0{pJg`mQ&@jpjP|3u^1Y9*^ zprL^|`7_aB6>it4rk(ftBXz-$24pSRuBxgEn3kEDS$D9QUTyI?=wiW82P6eRE(!G9 zx!KkjAT86rvd*rq9DuY~QfHue#70f$!&4h3Mu3M5J&}QC3CJmEQKJeyOIPt&92f?4 zF${3U8AA&TZ7`YN@V)g&iA9EtPgI}cX+}f@F2FIAV=gp8$E*N?QW5$~;?yp#sAT!< z0c-2+#U8iGnioYzrQRn;0f4dXkU_k>yxDKwMABIWQC1xu1_Dx@9+sZo1k{g;`yBiSPzs@KeQEz7e6lyw9w(Ckk5SU?njUqDIZD~ij^oXnH}d<_ z4}n>2Pd_A2%F2o#A1*S|GkDR`q6$3~;MyKI3-8mW7yL#}Zf>uEeLQ|lShqN!jxi+`^I^bj|%WPgmFo zjsU|`TRd~jNOwlZq%RI%|El+gz+IOKtl{(&Hx6rMLQmv@bF)iJr~E{>!nQBZ`X z=R4PJ_sTIThADD-?}x>-J?~b26kRv!qR}XEBnVk(JS+Yd=!#y^k&6|6OjJM zpkG9Vg`%M+K~QLoU%0w(2;GUfblTUzQE8`GOrd9?N{cy9p@hpffs)O2Gw zqGz#(g0`*L{2GBUKYK)#;=$Rfk`h6{8WkX2dFl!IF!quw9wlzgwa@t-?l@Zpu5dwR zWA9ct^vrHlO<@ruM#A-5BCw#qKv@L^1w>B)vMC{?rC2sxYq}%yd_Vxi2PlzH9R~N} z#fxx2@3}V8N{`8#H*OGmK(rh-#y(+Tw!2#kJF{7a9Nhh1)_P{R2>jW+)-R5fQL@Zy?z*h3Ebtur ziE1xIOKa=1)Km?1^>ef__{klQ+Ce_}US@*_9N}o5M-lCMbUf2SgqS6Ay4RkE^PPsN zJ0kRe4vxwKqnF!gc_diK3XloO4Slv6WiAL4CK^x)SfL#{0zXBITRtf{d9?iQd1x_g zA|jNf7iBK^Z9ZyIU0!X`N zX(O770kvQ;A@qo2DrlP&5}sR9lGe(~Y9fl{V$;3QKV}LrUIA0vUl0m?(qZ4kAtRHj zc(Rr7_3PI&9GJ8vWONLj&4y{spTWL_#h<|m2QjqRO#wfF(_nD{m`Tsh%Fxy=>d2|% zO@Ftsk53jC9TxkL39wtU?T1^pZZ$ro;SWc8x2%rezCx{;8DalAl zc;R5CEJFAg7x%`E8`fVE*{UO>qs2mw5Kw!a*vVd3x7}WJMg*WED`4^B$+qHYGO(Cu zK-&}9R6NglaR~{S7d2g6_>K>Eo9zH-K%xR@*SK-xlDs@qLSy4K=+Y-ACtB%}asSYD&<|(m z8p7W476#i2E6Ba{X*iJ>VGVo?(?(NM6NZq82)*E~XJv(*tGT%F)$}l!t*sdV_gDx& za862E+9-8^6Tw&KLqkKc%<`|e)83zh>9T6-PQ9au;fOtbfIHl9NOP9p0xN4DP>3z; zw#6`6L)!x1g2*KG5FJ)pDg+!5bd|)ElrR6e${kWoD?|F(KaADOv)*+{kxyOy+0$G- z>&0gk_yk8KN*Mge60&b2A4SIeG<|4=6BL3kUv9{=Af|DGf`fqt*d6YyV6!-yHH1DP zM%W4T-Rd3VPsD9;d4ab?+d`3X8|{jV&-!oO*4GcfpwDd)l9044 zc#Bv!o&j+JTM^z@M1h|gZ#UPQ+THGO$@huk7|>y+DvlRcuHTbupAj!g_u z4{$W75WG(#q7xFxu_=%u9NyLz4oX~K5?5jt*>#TLsnDmCtS2cA(UCwmNo?)xwjkK( zk&#!B`672asR1vDAaWd>oM)?`EWjBs61KvWeGU$Ug}djM^{WvdSg&)O-XR#NqHtpP zD?*2l#*R4ucYaRzrxE{_AFMv87KB|?_4;N5B#YwvzK&<+AdOwKX zP7J|W`2$PN|K^MTqWKi|^#Dap?tk$r;PZ}+dVJ$6tB3~0*RQWR@doR7iL6hNqtS^k z36zv}WYp9!BMnU)35~gG6cpExv%boHlFwhD-|E5rkdU3rescEq*9>U1(#~!#J4}up?QpjtU;!55B5;UD;PWSjYX!TfUD~D&|aD>DQ5WJ%eKu@{379 z5EFB(*0@P*T)ac%*w-|dprTJD6|lmE_<8m45$Ld42;8x8RLAOYnFDFCvJD$2x3UqP z)Il@rbgJVr6$qhO!7tPI_pe#9w6qWL)Sbw_x9HM_cG1sEANIKTkJUB*O&qta*K>I~gkh zE9>K@xkj${qA5A15ASYIXPavH2!IFOy{HzUN{5@$q=I zd6_%o(N2LdLb!hH9BZRc2-@9aA}m26f`&iaN-^-0gsb&&pvTYv4oK|$MiIIFMOQ3{ zk)gfrCFbFZ$3!O^Q_DWohx7)K=jp18+{d$v<1F3(DpN%uOpTcR6`EFG7%lI<6k5s} z99r2O96}W=bgk@K21M3+%i1j546K*>F%xFiZ;GYMPdpR(Q%9u_PZ{K4T->dXd&km!#2jz z3$xsz`*^S446Ma55j96Cc?e2vZG}hRrbxzF-WwBNUX7@KfO^uPc(id3bNq8?O-)Tn zpNdJLTN@WI=RFBaNQ&jX8D(Dnhx!H89bcYVSA-*3gX7V=R}SBDs84qZp{H1H-@YXN zT%n+v{`b%5Y3m!B53?^FX5_N(uUXAJQ@0*qCnU_)^^#?iW9;m-{>pnp6Hig`kh+#x zR5ZJgm|HvIU|UIVS>M#ux}B^VK^cO=6bdS7@6e2mvk8*r yYv=WeR)3EC`xa5{-@g_6|M%tN|Lhm52ceZ}H#t<1RQT8z(i&|`(Z8#{GO+Ol`a|oVUi{)pBNwi?U;P3UfxlvO)(1PRPQ-H zG4IHWM&mogIZ{?>Fc{2OlCus~LO2$S<*0Di3zua;p}dJRXhr16&}g)7S0!I`pC$%V zh_z5C)MJIKm}Gimm_&$CsAO%25r(&RFqmnxI0ya`G8h%sS!XN-2Gb*a<&GVdfx)`Z zWYBsCB7^NVSMqVU!C*5g77Dm&WH4*u-WY#zWUv=@BMgbIFjxv)FT#urRtDF%$HQP< z&T#$98tWNqM!51W9NbXOwN^w9Y%LXVVoLCs3iyj#77S@#<&M2wA#RAl;KY#Mg4SBd z-M_t#3tVl;G8CI+2lq zLG!`|rWkt$X6BBGqr=;cJ9ugb2M7P(Bd)vnyOP+rIQzB97Gw!KE8VeQMw>!49x8ge zEPs15TyC2m%N>Aam%lzxa#8I1@bi`@iR$t8tO-0C+-*`_F7QI!ot1nWFY0bC`OLj% z!{hN5Z>}GQC%X(h(t7Ro<^J|WX#U`nGt)~;ci|13ksDwWd@}6qh}6Pre=RYxvg&;* zxo8P@b$54PD6`H^6*fM0>{#nASOSh8wtT79deU!0<5Nk?eJ-a_B0oZphE;WV&|F!otHQ@>=Dq2X`@}2xIBA61k-U6`GKJ z8%se}$|tW-02_}FJ$)~tC|~Fy;laVsS@A24IpYn1j;v%OJ!#?mXLi~@zhqz{IcXIE zgVh}GjnT8QWX@5iB_#A4sZF&CJqo00n=Bo^AhGtdO6ocjVv=v|M;K}^6B0VTFnvmu zE@nO#^x>gzc(&|rG}ttgG7Q081MielbzJO`^VyK|4Jz)Vr>h5_Onp$~Q|GSpn_>a4 zF?AB>K%2MB;y1pjeIOmbLsih7jM$_~Z%kLYwM5zI?`1DVZ|g}teO8qRIk0SQFy9+4|Vj9`s6svkG6 zQ^Un(oT~mwce#{(qWI6;_i7w4aVHN?bqb7qH=?q4r3{Doc$Blw414|7&{@M=m2^^S zW|LYU=gM4V-xxlf7&}%nS(o?Ca_1^9zI;HlMOH^>JXpqc#{o8cx2KXX#XN=(N9Zl( z$*u9$<3pu$Z_R9mm7bxY)7Mw_PWvnGR`raGI^@nNxPR4bi=pjS2t5pnp>=y-caz$( z&W|ZPJiNx*8hQO0YIyxmS10nQ{gyi7qp7<;KRwGb9<+JxaHmrPzqHhQu)DeVwSxcf z@bLWu`MWW+9Ee#SV`OBLaiY*T+~Lm;{>@fVQ85z@gITk{U~hH~10^z&k~BxFZ-|(e zae_HH|JnOBTypWQ;)G#g@VL$&TGl?#p_qp81>$BknhMt|{06WFryC*1# zc&nQWZ2F~0vX--w$x*2%tbdAFWpt*bCyum*2iC<<9iLZf?AXUCBQQeGP8bK~0EQCwW-?lPZT`}M2+%a=@UwSZT5HeE_CPRE0r&cuTak>X~F zic*iddm^^{C@3by+a`0KowJ`c@R{`q|EOOEVR@z!E{hga<)q`8*nd5~hw5B=+w&~U zVE)rZCr*I3*z{HMnPO-nsS{k4+5&jOcKoSQV23jypw(ngCAeCslJ-G7>9tV6jA7D6 zU-=5p({P-AEX9CYhv%adx5j+e_LkPZxedIPjBeG$;Hcrs8BSt|!mv*0Ot?@a2Bz<0 z2@h+BWQQs1(!><9!X)+bV2}Kjz?9^DYHK8ngt@!nNjjDan2qp{-K4*lM?1F`KUy}0 zs6BrC7#1GF@M#MRR_C5HJ|(5Bt}Z}5 zR-2C0`A;V_e}s{1keEZ*)751+SfFbdf~PzPlhHgk$?EkZPPpsG*JQ{;>s|bb17One z#E_H~ogrS>Nw75S_R|*{h2+bJQSWdKh=`~4$evD0%{}$_3_S&P+cX578a`w{yi|7Y zRf!tjf5Or<^2VPwJe?lJ&E032K}ttHpC(QzY&3Zu%w!Cft?;@04Jr{4FmeXwj&?M9 za)3|bl>@1q=lxEpfAB{#dd_EEL$Val!qGMOSjXC7NI)r=J;z8D;;$YG*-unaDmABy zA9l7kb9!~v`0CXYe0+Q~9L%^V%5Y7}M*<@q_agh%+ZA7(e6ZtaEF0xKt?0I+Q*hDXh#}+|s6%hdQp?_uHMrK6IsVDYGY?9ht^;QC# z#ve>Jhi75v(V^V6Arf0#Th(-!KOuOse-b3i%Jp}vS!6%S*a_UiTLQO_?fk5Q^v;f4 zmmLn*K`8fU$fQ=d5pjDW`ivP1!(rR?N-pxxL@zuWv#Z~J@A;tUYYC>-qKOg62UAlu z>CcmLrJK)rMsk=l$8wLo<$*jCl16rMm3;UXn#i-98g${|OsBwy5IE*TD!~%nu_$0$ zSg2{o+YTtG>n7NfHEB^Q(Y%lMxq|~Fd}B`f}tUe zV@HDh#!UCYcGJ;pMMGeA0G{Lt9T)o9ZO;TY*)IKbQR~TWVf(GC6co)b;C;WqF4bhe zarKj%N@0D)-WE~tF9KJq`RbOrBZ0FH-zxJHSbB7Q+dH>YPBQQq82Xb*#$3+KTm`kGh z`Mcxnlb-xuUJs!A3tnN?zkYn`{tW(j`W}1x+Em*}r86}Wm@mJ%4#6ZA?o4{Adzbk_ z$%VLHHu-pJ3`TSLo4*<{YF!kz89XGgr8ceiDa=2O2*+ZG4wn}K0Y## z5$ZSlPFaKdQP7gc5@%B981*UNqUlJC?aO@}5{z?!klF&4^Q`*D=xG-hAy|yLQi%F% ziJ=F?JUl#*U0P-PRog-jH+hDJhWr;E$11tb8$G|A?t6VWjM7Tkw%AlEK+cDo5hd~& zS&yH%IL5Kt6TzGsAvu7wR~oi$AjkvuoSM%Moddu<`9X1FrUP8YwLkCYNL8%L%^zMy zpGvIlMiq8uXq3*)Y#3q+Ex`Z%! z9G>;b?hq6JvwP{9J!_sIM`yZ1+>UqF!L|9Vj_11O-H9nSD>}x*(;rE%-UarAfQHrj zO}cltSD%?aHJGvN&CpwcCw>JJ_kWae(rRO~UxSf{$5>mNsJ!V=1wqJQQd_GN`4GbU zSXe29jW_OwehRpoY_&2=r1K z?{m){^X^Z#Gn``;fE0?GhFle&?egKl6bv%-^lU9`Z7us#13q)eM5-|mb+bgz7myfh z{E-7t&#%}P(-K8#J^9cx>BUSW)}I7oWb9dki03CHUVwdNJ=6E7yBWD~)uNsi0yMa` z!EuSCG?Me@^(5e7FOg_-{<>)WHur0H$`21y^U3IS z=!!CGs!qy?si9{?d5a;2Ip?==7dA=Sb6nM>Kkvgi#qYQ)x4-Mw`pmu(zbn~vkfNU| zgyQ6UueLp=^YZeWu4?B^mqWExmk=^CVm6#sfC}KS*W8i4(KUoHBsCIBs;+$$VwSMh z1Ke0_QGupc-{IAXp?Mte>xcN2x-_sAm0Lf%khOfec#$ndG)kY5D1)5<}c0y0WZGuR*PX%A%7)i*;d@9}>Dg`iU>p;ECi`MM` zZ*oDFhB3c6)7B>=Rq2(uk7@BS0b$?1yA-S~IQqf+Vz~6C%A-VT*1=00Sc%tK?VTts}Qv@d9DFVjT?%~WQCl}7|O!G|T-cHhniXMUL z=%(GDvU)}_qn_lk#NPB|=oCqK<_1SEQ7kcwcg|+!;J_P!FTIPHvedZ05E^SODjM&8 zChR+|f@R@AoAXAVT4Z7(J;WFRA)yU`vu0H;=K{7@&VdnkSKnH`43-+5pU?C5`z?-7 zFU;q~GpW1D)v;aj74F_JFIT{#u3@A~miO)|H2X}xNMkC1*-y4a3J3_86ksSLA|u%} zLR9VT?bAdr#tWX!cop#LdXABBdHn_z><_Ps3Om5!loVc3s#+rB8&Q3IeHt#6H1N=Zf`Tl$Ysb{p)j6RCdI)KDV8Ddif0FQX z*_B=}$2JHQ6tA_*^24z+*?|8f+*Ygst}c8%{n8f&I378~9(Rj&LV0N48f5HL9!36mB;o^8xII~F91e`bh5T-UnFHkxD zj*i=~$SAj~rw6UBo+ojoE@>I|*8WS`m4jKyQ2U*=DWsl*WRsMh-d=xab7ANy^{HDw zdHMLjIWF_&b%*Oo11MZ~ar>N<$`c+<%`(&&9EgMz;ryW1Jhi|s1-H-Qm!YVIScZut zqs=;XTVe!Bk3T-Wxc2cGExdqzUyd>u70J4x5V{>$H_T*)RhK?G>A`~@Gh;Q~>X{iQ zB!I1sH)Jb%a%VUXmfLFFS{?rYqq9mokO0Xs1rXq1w?9L8s?t^HHN)m2WqEGKOzqip>xqX!i z*jmtnm+WGO7!5pER~X@{gC$qkeW!5kW;_b-4uiMX#r^M&c?=8zk^rh4n3e?pjF!aATu7|CI+)CvU=;W zv$K=5Jky;jZdn-x_PWtVpYE-KqIW>!!x85`2U$@UvV~H9dATGZVMDj&sTg|C&US+g zasB>0weH_-^w?N$Uc5bAoU*$2OQ#;#J*0fn3oo{2d!P_~@kNcM1KN~^?Qf-owN}i$ ztGc^!HcO6DTW4zU44*)h>fh(_;-A3~Xj5Jq%vb{K;|6XP?WscAty`BPNx#3jT}D{e0LSOT}jFD7;u z&>`P=3#O0(xwHA_=-b4WNOH513ls?DAoYsmeGX;t{s!L~)0%)3(P)jg)2ZM+IpBAk zCK`i-_7;mSlv;qW$8V{YXqo!Vk3CJD5(#A>Eue*c`9h~1KGw6od&O`~t@ zYLqQA_AXRI=x7t*c}3_^NWqgQmi7M9kZ!f&HOSGVNU2P^GAwd8^w3vgfOLTb=Q~Ld z71OF>YpakUcBV-1>{qMDL=&Z!ZI-_CeNTh;fBP+eOOJ{osjRF_!uMke!yq6O4$yGb zvF(uUa3m4Y5O*Y{m}czkD9d?{=fKtv)p$Ds3cosDuMB49FkXKL;iJIRWJ3=88;=eH ze|#xVWbzb3?;>-F_E`R=+{|Z3V@KHC?C^*Mc#)1unHqpcBUP^S+1c3#%buYKw)*+~ zT_)sodsZ?e%U8L4C;+lVZ`}o*VhkH@DqxhSN-02)NG!jb&k@e1c}+&fX#HTbKXv(i zwyf>AR34HF%GUl>eIDw>NHQssTA59>t%iN<@Ng&y4H339();d2es2T-h5hTu`u= zl6E2WNQ9W?nSI;#b6bs=#^8OQ&jq@7vy{Biz(h?$2u0S%3I5Je-te0}KlD(Uknl

BWv2g0d#+X#OPynA)2tX+3IB>w# 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision-variable-anchor/pitched-and-rotated/style.json b/test/integration/render/tests/debug/collision-variable-anchor/pitched-and-rotated/style.json new file mode 100644 index 0000000000..7129e490fc --- /dev/null +++ b/test/integration/render/tests/debug/collision-variable-anchor/pitched-and-rotated/style.json @@ -0,0 +1,561 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 512, + "width": 512 + } + }, + "pitch": 60, + "bearing": 60, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -140.0, + 0.0 + ] + }, + "properties": { + "index": 0 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -100.0, + 0.0 + ] + }, + "properties": { + "index": 1 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -60.0, + 0.0 + ] + }, + "properties": { + "index": 2 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -20.0, + 0.0 + ] + }, + "properties": { + "index": 3 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 20.0, + 0.0 + ] + }, + "properties": { + "index": 4 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 60.0, + 0.0 + ] + }, + "properties": { + "index": 5 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 100.0, + 0.0 + ] + }, + "properties": { + "index": 6 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 140.0, + 0.0 + ] + }, + "properties": { + "index": 7 + } + } + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-untranslated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "blue" + } + }, + { + "id": "circle_red_0", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_0", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_1", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_1", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_2", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_2", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_3", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_3", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_4", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_4", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_5", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_5", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_6", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_6", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_7", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_7", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/debug/collision-variable-anchor/pitched/expected.png b/test/integration/render/tests/debug/collision-variable-anchor/pitched/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..744501e64133b6e27dfd7df30a02cef3f22a66e1 GIT binary patch literal 6744 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 CYMo>N literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision-variable-anchor/pitched/style.json b/test/integration/render/tests/debug/collision-variable-anchor/pitched/style.json new file mode 100644 index 0000000000..0b491e9842 --- /dev/null +++ b/test/integration/render/tests/debug/collision-variable-anchor/pitched/style.json @@ -0,0 +1,560 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 128, + "width": 512 + } + }, + "pitch": 60, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -140.0, + 0.0 + ] + }, + "properties": { + "index": 0 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -100.0, + 0.0 + ] + }, + "properties": { + "index": 1 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -60.0, + 0.0 + ] + }, + "properties": { + "index": 2 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -20.0, + 0.0 + ] + }, + "properties": { + "index": 3 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 20.0, + 0.0 + ] + }, + "properties": { + "index": 4 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 60.0, + 0.0 + ] + }, + "properties": { + "index": 5 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 100.0, + 0.0 + ] + }, + "properties": { + "index": 6 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 140.0, + 0.0 + ] + }, + "properties": { + "index": 7 + } + } + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-untranslated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "blue" + } + }, + { + "id": "circle_red_0", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_0", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_1", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_1", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_2", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_2", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_3", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_3", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_4", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_4", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_5", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_5", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_6", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_6", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_7", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_7", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/debug/collision-variable-anchor/rotated/expected.png b/test/integration/render/tests/debug/collision-variable-anchor/rotated/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..87c82b018c873b0e03feedc649df41d24cfbc540 GIT binary patch literal 12360 zcmb7rcRZEh`+s(*l)W-?#G!~HBeRU7tYd|Yl!Qbi$)+e|oQ_du9ArecqL5M9*(1_0 zlT{KKzw6fc{$8KY_xH!|^^)T`&-2{ly6^jay|4Fmbw^J}V<#Oa-L`GpcH%To;J0lf zhd;@;ZKsBh@7KFmw{1JbfIFdLc%AHPEp1|q`-dm%Up875DE1ZIzO<|9(1D=+@skv3 z^UJ6GckeS5i~r(y{<1B{D5273G=D6XWh^#$`#y(kKkiP~CaS&@Y8g9r*o_t1-Ib*d2wzc?zk@Vw02!q#d-H1X2~#!^C?!d^kL{ns640Ns~Z4 zONJv5J@yd~chX{TIW&K+n6|Ej{#?0FQ4%mc>Dz6MP_s*aIw{(Znmw@nce8n#LQxp( z$$f@%=+&k)fA}T8C&vW6YHRv?v^@!Ew64m3uEMsiPTZ6fLk)2={vIty3>sg=pV5Zn zP_r}*nuHfm7F~<>#i-^mNi^MtH}9H>s67`E*T^|c*7J0$rPEvO`cE68QOb&KnL^ne zjk3(9C&$Rp#6-Z>ARLoDVrXP^W$}$rv2`u^vuj_q+LINg-lo$GKXXqv$kHjfJp4c= zB3kmGy8FJZS8D^Qsy0@?e4pwH8E;Ma_W7Q!>wBN&g#y3zu)QAdqCbALdFCCG*mcL_`m_u zlP6L8wI4ir@B3?EzK-GB_b%PT=U?xBaMZbNd~1sMq}y-f2(V`6`bI_#rG1vo-`bVh z2TL9Ae2Ta57>>!esO)@fezd8niCy8wk@9!0^v+ca)L)0nHF6kWn&I}HBw89???VO8 ze{jZ~aiz`3$f#PK&RtvWs~-2;T=pBV&r16F^HU^;^dBywfB!lZ=QaB@Wax6`-SrG|Yk{6GlbP>N4b1zOeCY&cMK+F28cN>2l>)b$fg4ueoX^d|5p#Z}-YX zO8by=b?f`h4UgH1PrC-ooSG}He7gSSakts(Z8_nLUyWx$Cxu_TOs_%@g zLfRj5azrA`E27*Q?|%Bpq%(Sp&2kj&)SvSox^uF#Rhlx{arj|&3Gxdqsm5%hoTHN- zBOj)+l5OhCUo><)JU+m8)1RnK=A;iNTPt1g`5Ql65F)RWcp$o|L2Y3S(aqFmLK z2_-%b4x_#11H|+I`hbM|$_T5?)jrLq`%+uA!0eCj%f}s*TgTyc%4TBg zpe>usw^O7ui~_hp->hUhQInVP65fr;UaD$T`20H^c7TAL#>BW{`!4||{w&HI9RYGN zTKqkCw)==6NILchKsTciBqjewI{qzu6Zj2{i)Rqlc<$d9nSsDGgq(oE&Yk$24SS%e zC}op7zlt&TK!EY%(eT5gMa@x?V(J7UOEz=MgNCfwgF(&WA@4VNMtr%j>2$A;15y&z zj=tYfKGL-RpgHx)*qZqdnjB0~n4U_}g7aas6%^QXa!&+jMVA(A${s!A>@Cn}idW`A zTb8@ynUpy*IWse#?Wu5#eQ{Iso7;N?tUEE%UtSADON#8*MRSdd($b&6W3T@(jXxZ+ zS=6QD(r2N`!4ieBZQydQVes8{>(-ja_CpTL$A0oLv+lDsJi!C7P7;4u#f`^G=4Vo? zjw&@Z^T((*J@Ut3zo;tbm;|UJ^v3w8r|vi)0`(>}INWmO*B5MdDXqCE zZu~r_b@C)uR5U#=FZ}ZGGjuS~2Hhn;<4-&&aTj5>?VIY2C2>}9%a$nq;}?5!SPEXO zis&k?V4Pp9>_2E$lB%5`O^l6QtmEB?QVF8w?z?#pcGZm7(_=jcA6wc^nA_ zrnG{BumrF}FQ1GP8w=*TY`wm^bim>nvDC4zGgF%jCL(qImk&#*?kHW>FvV+xY zW8(I(eSB8GpEWl^ZWynQ2n6xy$n~IId*$X!3w-V_k9b9*@pE0S2#|8@?ReqiHCXPf z`zm5D$B~P>@%h-)0E9_9a`SEy7^SoQHaFI$bp345uJQU>>OJT6{*$=h3jMFI<-8$# zud$Z~@8oJsRSEjJPek+~i4vO*@MQJQXZh`FoBY$&AO;!x1)DYw`Pc#mo|cadVfPQ6 zCEwbTwh}w_(AKXTEbS;3YDv&|EIDddbBCVwkkjCiwqH}aQ^S=<@%i*e4k36rNI~Rm^o|`^Df4v_dG6k&Ew2M`S>r{SiEPTZiMr^j>j6zrx zJCR~{vW;rQ>3y=th$juU5A0E<9maYIx5uT&pKRvmy%fH&XYtgC@f1zfPz*e{mX$;; zKYN?_1-85s)2lz(*q zf%+pXx=K6q=ur{L)w;oHZhOQIIt7lOc&B*(Tz`1WaRU4`F%t%A5B_S_!~ zjfZv!ME&15>#B)xwyEMbtCZau=FE#oun?f|0LX%(i$5( zuO`wE$A}EI_C4!TXH9@h4H>+BiWO|-(2d7V8+pnOjjerq_-K3M-Jq)vboaV5zw=YV zr!xuQRwE_OjS49R^jQW;Ia(Jyw+`7G#hDR*1C35rBsA4ToTM(k#b;A_wyc#0gbv8O zfi84zFN*lZN106X^2=9e`lErQGN~%#heNYzz@Q~8yuLsAnf9L=1zvD8*Z6T75V~QH z_eseLUY+S048Va@Cfbs)Vq%#d>c^mCqI<6?Gc)u2 zVzam#yzkbD6MCDa%c~yFUK=4l`?_)Kyx@j})d{Yz+vMk3?j9X^E%A!GuD|e{Y01Ss zh^`=(kX<_W;@3X=UsRF^!e68o6-fdOk`oaTxxT*CC;PReE6T8(oC6Wjq10#39<-m# zz@NGLR;~U@3xE&YgLwgocu)`6Aus1KdkTOMxg)RT*{jptcg{sB!~$Qu(kj*0@zl*O zLT*|Z({nd|2XcRpA7y8Mc&ovi0nHjeHd_D+>^70)QFL_*52UYgwsKCV{POT5Fi5Yt z=SKRIiLP|uHqwo^li}RO^+KSvsgp7rKRiy40LCU z>)%sc`OK7g>i)}Dynd&)2Y_vMzmh0jU7l-yd5ix35qrj8GsO%^@*Wp{V<@3aKOBNU zm|`3XHJI7h3=9oVgs~p%ckiUFFK1(ltteZ`l0U(4^t58af#H$*CNEdIpR;94e zit(y%;3pVPSGe$_-~y(T={C`(*;EBKEE#KlcuwO{j!jTXo<(yNgVN`hDI3JXiNrdS z>Qy65PfE?Tt>x!XvQMn`07u2H z+pOZ_GsW!}Ru;!Jb9f~PL>vrIP$A&Xl@@v$9?dVkkE0EhY+j%cevtLCS)o+WjUVSb zWGDEtHvn_)srvID?@tR8Q^l{-c_TFZu6FGE?vl%``vEJsZwM2nO~|a2(LB{`1&PG@ z&9HOqhpA)5Zppf(KI04x`;eJ18Y=pTek+n7IYHRNp=a4P!Ca$X4nOl8W13BYx1ETv z0|=bAenaUHS{#fN=Wm!TL%@oW64_&pV3fd_^!uR%#4-q+8DO)s&eb~$s>my6>3+>I z=-(vC?JlH6o=I))ISqV6&$gHyNM7+pOlF)NUe^9R8!HLdjn|}2<;&RZ0_WcBx}bmIU~4OV(cpOY=;NgWI{}t_riAaUnyf z2EeC|U%wqqy5Z8mVsZ$AU4*NB`4&?H#X`2WwpVB0-G?RunwqqHe-x*@1y%|yDVWp} z8co_^UVLF^yVB+{WE#L=q_F%YSOD1o?OG7sR?ZaBqX?HE3Eq#Rx5VBc|HY~UgwZRL z>5&xxi`Pd3X!?DYhh?W9rL#-eP+sA7TWDbGg4iBoYYA%-RNy@(ifI1YD2-C8(@+_r z`!8Rrwkd6TUwiN4f$1p#s|pm*MEFze>1K6+X_A}Q%+(If$%Gzh4nP*?}zklgtz%7ZY6C_8$ z+l>x77TA^#UlX{g3<1H#uFRbZH@>IZwI_4mn0#2ZGM>7DN_+{Zo}H7E=KiHuGsjPYU>IlVN%dmgDPBJAZOzNw6(3(Ijo)|nOL*{r z6FStcy!I98R)iuUKAd|-8u^bAuJN`EW6DGmgX7h<%|C|={8~M#e_6mj^(W2HYvL_9 z6cgKr$SSC1QZs`qeHZ9i51jsU=VxEF^?;;whJp*l{F|4z5@Dx;1jmo9gfk#^!1QJ8 z%+7G{VXoacMmIP+l*B#JxuVXN4DO z$lUvmY4Q%~9Ynn#j&6~v-?||ZEdS@U16{|p&#l7@-%n?7F{t? zhu}KUZ=F8&;JL8N6=b-br@)O^zhNwM_@MgdF3dhhm-o*_?7@e+yk(Pt^ikb4l)(3r zZ_t^Qoxhj=lv>V19ZvxS()?{2)d6$riDY_@VJcA*)f7dSVfT(K1_Ea)AR{$@jgd*M zkqLkHp5GeA|L@d6c>dpPRIk~D9UJRTFr>qIim2n;a2c;FV18qTTW;h3w&hqbz-@&5 zXql|bMADOM2e}TImE2~t@{UFx94lVECW&JGgrbXY_gQ)`s2S&-1}CTIf+NQbxDPo2 zlb)ZiGkh@;OR!f86wUW9@TPjP$RbuXui6-~_av|iM31<<;DD_3f+EGc`BNj}*rMjO z{R_dTu?YrKeio(b!Viq}}$Z`CX%-18*Q;*V5OFFV1wre|Ie|yiV zB)J#}y^9J_bQrN$9s?5NvV)%z#X63y7$Re+)aEQ{lnE`zyn9cu?j> zYl9GJ6|b5n=R$Z1!e&$e1x*pCrxKov=cT3H#!opoIIthPeh8S;N6^`n2@X^k+dhcu zbU5QzXDbmu3}R4>FLN4_be}eqzCQbO0x_7MjYnV9J`CXj8eaAC-BY*h7@e&9a_%C} zZ!CR;+nIoEFme`L4oeiVc$}PN>d3FzO7WAi2hP^`lO0>AXF6c@BGHUN@h9J7^YRN2 zSkIJn>ExN0N4(mO-BGl;-6Xg1{+NnZb^Ep1Ev zkzW#I1Z zU-;a`ma@aQpei&u_SWe}2$x za+V+z-MZE7 z01CpVSCJFF=FUh13EwLpi=5?7^$6}atw-Otfb9b=Yc^Ry>vNOoA8rebMr(`~`W`Cc zb)=({`PRTD3(-%1Kd5h~pWl!YHO{k6@%ix(g07v{25i}o=<=nYx(#@HEg21WO(VoX zDlo$o??qa|qB(FgtQ|4#xQJR~4E(-DI`*G1#g3EBs^SJc8~zZCQ6)%<{Rf0e5I9L} zRyT{=gW>mHkDH$&Lui@!05)=MFj6vomh|Tu=d&Y~f^!Rktu`205BRelj3OPR({#`q zZx4|;*H7}>eQ?mzP8i`Mx{J%O{^=t9C0YYQC}`j1LW@7W_)VE{gW+ej&Ej<%zW}#b z1hQ40%}7?vNS-dG3k~Iqh$cC)!gr3nJ8-Knw|LioBk}(Oj{esN!%2C<;#ngkyk@5z z;MD`e&~Q<44Z_CB{{S=_paSJ1fkT&r2107-#cM#s-X*W+_+w@O?dumlzmU2mT?YFy z*>jvDG&EFZzJ_9@YM|Jz*n7ow^~YDFpGA`nVk;8MhlI=dAn?FCO6yk}BYAaE zTnPdY*OvB1_zskA>DH5-y)No`*b~sk?{&%fK4rDgHSf=wLs)N zWFL}HoLWP{@T5?K*N3Q+BqsrhAJk!@tQ%|@T8N@pM6HMAr0t{*Ikj=a`9ZGV4**>B9G9khkc9qcs_jy9r{45{@_G|{v5L9JM24Gr%TY?r?j71cZMZ>=|Xqw@(YB^7`Vp{--@ z0q_wGvJ;8NANS;%90qemDEv5`shxltssMII%m3uYk^}G>Wi>S_khO4wM0PM`ex-H) zAw_4}Ljs}fKyAV|HkPviu^L`S3*48qrAv}?PebUOqL>8IjDh3o_o*|UV=-I#9e@J_ zFhDU4a&vM*0g)tao0!3pgc2-T>q)(eWlLdU>vOs#_I1-`PO>xebx5kIsE7x|LK@0F zUBx$_-`tahg+g)$+<=56&}?-86(ot9!X%ME+0f8{LUuE=CP1d2?>E=2z@G(ToV3D8 ztDq}`=5J_N!?gY(ey$_Gh|oOIZimv8=QOylQ0|q#Mgr->^7)OzLIQztzfR(7q#Hw! z(GSQw(7#86TLs8^Pfw3#XJ)--j+H*;`mf_G9na;1Dn0BBV7|vw6n**=Q7q6p)s@8n z!t6tUSAN{4;D3QvQ6@sSPEa6_hd| zt$NMD%R(tTz}sZMxp%gOJzkFG#fmltJ3)zYio3&f7V;re^L1x|W?}74&@z(YhQ{C^ zr15S-q$*2>vl_2CWaINt_kW&}Xdb0B$K&I~&>{tKGxUy@*7`@5hsykJU_C@NyhOFW0=D#aGxFWG< zlVQcPEHm($c%4wjOCjvp0l17uY-3}Z_;loYc4`r=<*EL1VQK*_JsKNQ@Mumh{8$e# zSZ95K;Q8#w6Al0h_h4<^Uh{_>y3~J2+StOPH6zYaOD<{rW0-g*_`kdV@dyTMRj>Ip z-_P&SqfrA8!2JhP2gwmz`Ngg9_ zfQ})$1>u`u=spbAM2!{-BbsdcENEC*E&*V-$j{1H-k1{9QCvBXK1Vz!_DV~`!A5~< zf#q`qn_LM;oq5Ece`f@|l0=_#Ro`|Ih`DK$?!tUyMUaI!nf!Bo4nn7oQO9>Z1d;UE z;%k9RPiz|KlD!vkNcV@_zvtS*s};zP4~*UsN=}8Ne0-Pe&DewH@Mt6-Ze<^|lyPz( z(ZO0vdnX0Wj#P-WcW}!@AwawK)yzQw@|}n$75IF0gs88#z^WZMr`qG`X$PdxLG*|6 z02DO4&NmUUkd;bdCaX|M<4(ugLN0)1+k?#V?d zsS3!5o0dATAO=`!={d$?>APYJ18h`-h%rqq>^dkHp1?JuNZz}nTn9|;3T3-AXP!{B zK9D*G$?+5VC&0hmmv-U=#2iJL4@5kHr~>y?v_{h3R94D3tjXEI68mlkNNqtj3l;^{ z2_XFylCXlW{n@c`7T5Vf^{(2GpPF`R@(#kUU=@+A{fyC@@;6? zQ<({qASIL{NrOLx`y~-;fSdt4)LHad`6=i#N9$y9$X`1ES*1fTMKPzr5)}exu|M&P zrPt2J@PJJ1mB^Q>$>0x5y=LFsuG=LLy3avPzaD@YiW6vfuKOdu4kEbpkwYk2G;FpSu3hDA7vq*!IeD=f3TP2Qt5qq!oLoleB5k<JjluGwgRgUk@%-;97dWR_pfQ|}g;f-8 zM{`DjGjb?Nqg=xL1yoxLVk*zp!MzjBncb87p|mg6-k{%6{5BjEAvh?e;oaN!`W#vN zz~C(sicWJ2I|g@$Jv(|OWitTQ@^Gg;yF6=e{;hBA8U$B$A|E|DUSP4W`em1Hv8mEJ z*3blmG=8lpL9*;UkUt#Asa~VPHF=?{Nr5tl20BO(r%{?RM{!1jqsUqRah$MdsqAn< zJu(;!k?U+V*}n(Zlq0MXOGQ%0P(uESKVn7P;#p0Xt^f{z{BFyLS6z+~#If`J=Q{E@ z5?#o{Id5TLUVJogSMMx;qT4R`ArKFzQOfT7H}5k{+(C?{LF4sqjmjLIs_F^2Jj3@Ou6sZ>e%+L9l1S%7x`>R+=iAq&vCG1RZIe7 zkN!}}=@Z0MvVTg!kf2sa4JGLeQJuhfQ&@$9Szs)5+Ck<6CDf2uuiw(UDwudfNA-mKOX}$}uOqZKP5pJTen)RR=3gD!FK;sfXY8;ZF&Fk`>&g_ArlCU~F(=oQq4Akc|a z+K}O@f`IfG6fYsIYX_HfI0`%=9xSY_V^BH;auYj9ixA3xTzJK+K`1i;qta^*l=&)j zcR!KkCF?RNxG+CjI|EqueeQh<0B4j=R`${>rHyD{Xq_-LYDleulh6QeR;sup;JU_9AP5MEf=x3}?QEbP?7v@vA_-Agcq-DFLpP2j9HyG=EEIsGMFzNw zndi$RC-f1=Mfr~S!*;uZsCTBp%u5`4LQ$xH|FB&VSQ3C<6&NgnqJ!pTC>gRpbRSG2 z0^`G>AE?f!-b7VCLZ_=p>o!qTsAX+@Z-1h~Wp2A9ch*vn6i!27QCFt+IZy>>ikihx zl6nS|;qDuN=|~wx1!yq(kFcQQdBtsM#waxf!70G?+I)x-mTQP~~< zM3$hFg(@9_F+O`>^!wDC1mmoB!OxiT^uCSiQb*a3pCau+0p;R?(Sc{fgzkefq5jj{ zuhwQgs?&jR?j{F7KYLC)<9GWfDg9{@Ht0dEHrH-Mhl0l7j z5rB_$j7jjd+h6WD7A+j`S0u#ho}m5C`|nPGaDXCk!tCfU#>vBfnWsa28s)0^-)E%o z`s7Y{Xj5HSE4B4+PubCT7%zfE0JTwos17I6C_!BKBe!zi5e_KBp*Q%nQk_`;(0x1w zn_vgq?}|_;y`o@+tN*#jBG?fJ_p-@C87EKv&V<8N0CZCM7qPqjPtcYOLzhy!^~rng z{OiqMIA9voR;ZnYuVlrvQsw>%EcjhvjE~x2Cp78nliQy7_Y6!V{4cs=U!9=+Q<7lw zJtHRW9@KIXx-Y8H60b-Mie)n|P9<~3rX38q4_x!h6((_PAnQdfj ztPZCh)vZ8@lQLmZo2a}broJ=_A|?%DITp{ZegGLCRj{JcRLFaynpG%uK|p~Z22v23 z_;W0RddBsSMq*-OB)osRfWY?jLogRo@KKTl>1E$0+9#qlc+LW$Tl>gXjWQRS1j9ZX z!#OxM6@VEiUHo*Rk!uA4_EtzeO^rO4Uw-eW)S7TKtEh+o{E-3Yke5c;^uWI;4RGz9 zOWjUyD5DMMI2>F#`z#EC*skYZ9&*=aG&eWau?G&EAdpUN7j}fYFT~`K!ho_yD8Wlu zR3R#xvgkcO4YicbapHEsy)Ml_(ZHyk(k~9A_Fe7LhDosr>h(4}vJB@{N(R7(GOSZL z9Ib-a4-%wIpb|_H!UISKZRN*-9-}Z9ijDE%l2BmgUIhc5fpXLtNPSf;^_m}p2pOeV z@~oD|5xoTsVHcbsOm<-?qp%Pq@d^llXMC1=yyt6a);{rWT0^Ss9VDwEapwXl zAXoT@YO9bk(;Ry+8iVb!F%*Xat#~NsK`D4Bvp_{^sN4bGMv*u)9mXhZ2P=cTR+!kc z+q{s9Lb|JC{?lOe04~RwtS1-Am`FU05j9~{gZYH0JT7PVlo$B=3Z45Yruw)rBY^`UOOoW19$$5I29CR*7+d46{Fa8-1&UOj zIP{48Ug3#`N0$#+wZ&eg%6I4rX3$Z*53Y7MQh;($8d<_oa5g6JbOKB%{Av-JNS``JQg}R`n7A3`xq~w=eP>)W4ajTflVZ zgRXea0g>K^yJX_Q&IMkkJ7NZiWx@>Rx zV~&ln^1$Y18N0X`4&w(z)lnVlZTK`iH2*L^T(0QEt536AATqwN+iiT#F3>KBF`K5)5!mR zVZV>@=ujc2i>Xes5^rnH*9={dN9X$b%x7{T{hedHVk=92&?hKX{uDp-qnAkVpu1_~sPSoSs zZ*!-y6$|jH67Rbm3rv1=Tln>_l>nO)`2*&)Nd zdz5*#wfDZhm{DtKE6~U=To7y7rE01$nk+L zMnwhh&K3>Q?oBvl*VUq7adNu8hQsSK(}w6XslW_d3h()c{1|@M?qAqN{Q1ha9uzI0w9%@S=`;TAg7JU8ZTK;|;as zQ18e_HyXV;JM$2~$h?}9$!hVlPCAf`ans(WCo$D(P<9-;aNfmNIPDUx~-3 zx|SZywz+wFYUt`J7#Y!in`XE@U4{94nn#n3XoXjzr9iw+(EE%j8-mt_Uf~O=?lNx( zQVdF2cf8p)zVRtp8s?ZqoL#Jywk<0wPJgjLy3G<D>SUKZfa`BT&d~$NdhYzusn3%egc>Hw?+;7BoG{Y+NWQa)zh3KhBOCvMK1}BR* zrm>eAP1g_wPN^(qZE9wAN^LF$I-HbGQdrLVu5L$*zd$mubkV4?yop_t-YGp%ARhm= zl?(0o-GeffLefeXo);e(UCjYk>B={sGZLQ%H$-L(1`^!BGFJ7HfC?#^5zh@4U4JF1S zA(1yWrVGTOS@xed(mSM)%*myE@)U~>Cqml(`2B#spU{~kWWz~2ndnT}m=j^h#7O|8Y^yK?piy`$T#s13P=@ zyLYsDm3BQPwnO=9`NP)amc3?hkM11~X+X>(AtNV?c?z)Wd@}p_Ug7=w_eQ+QNq3(U zV~}vZ*C{cegp>hyHzw}O>l+xPl5)Jvlj$L%CGHgo zYRlbm+c<4q-C7q43=0+WZbFRZKV&D)0`sZ;B=PU$Hn%!5!ZVG=>jGpA4C1yY+H?#n zOsBp{QVQ9>J}lCnD>b@4^{d44;$*k>Vy}x|Kp-YQURGb9(#OZg>uAifJ54zDnMU5; zkcMj3fE8Lqc+0aysGt(jj6orOllnd{<`)*!3N#^o;Zaa1+1qogWWKr-w(Lza?u@(b zv^h@1#l;mS$B-`KY;u0I38`&iX-QUES`0ps1>g0{i0B9Ce?3{|Pf_4T)8vL6trEz*}^{{8(eh+ajptXbCD(+?@D;?ev5TEB>$V^jUm zI;lwaEkPp<({=;payEA3U6W4*W%w6=std>U9@i!yHA1A#B=rNc&><6E(DLQ3L&d zIB(BRY|fxnxss~HYg0f$bFcNJu=`c*xI!vuN0}oZX#w~2VqC=O_kGA6E%)!=zjo`^ zEg>x(o!Eo~IanYC1qBpT)cMWLp7v;lvG1OOqAnZnp4Paa`Q4Y4q#GX2a@v|qR!J8r z^%x$pxpEUY@?dwl-+o3uXT(fxXYEB$&zN5ua?2X);|s>-nLyK}r6DA#Un6LNu0NaS z8njL2?1lPubaGUc8NVJm|J*odWoMU`aO0*vJY;<>Z_Rdgxb84$z1pnGtgW@nKU;5h zt1i>0^X-3Z(H0~%wJ$+%U)d44u0WHmSJYu11(NSa!}<&=QJ2~G>ILl`9gS^mf#c(P zt&uc+IG#G(&TE?D7dz6_?u&Rav9Sth`%4YaM6c!>3|`1;XtW-v_3=Jm^*{iWFQkB( zBJm06oQW7a0otU*cOFJF9%Q4%yvaUjiDG+6hJ*9_SNQYsy7Wxx{?V)_f|M?zZ{NO6 z`}mQOmm8PH&~UOs@8ZBCjS~B&s72p0tYB4j^+36$DukhM$)`^d*~a?{s_2qM!}w%m z9Y<`2;xmRp?%O(Xi&RY#%aOn7MY4B)Nvm-VwqZ%$$xjkDq2;=B>WA3XA&$@ZNi^K= z%Pnk1=F#~!oh~stW3QyXsGEb6e34L7J)CQ5ZfkQic>0v;>S9Gg7}iCvIHA4$!P&v8 zzg*57Bwq8Y%Ri*ya)_Gr#VxCm-kI;*)&swMv*fQ9}o)^5oU$oS5w8@jou(P|`{OM^; z62Begi~M0_G3StnsRDB=_Wj2ho}^+P{L%rKlDX=;yE9iRii+qMd8(FcLk0R)|JvY> zzhb_0e1@l{7M0rdBApg(())O-xw+YX`kkcz&dv_)y?beR4085HhdgZa-%9PKM3(z9 z`x5RvIXQl|-(ZIvh@5xkc&hAvG1Ja|+p_BuvX#9i|UP-eqZw05Vc(YL`9m~|Jnwzd>wD)EGeK!aGF4+#Q_M}hzxhh?7*YV-E zS%IMda{HewWYzQld?fxN<>@4`R3@c_N3-_07Ugp|U$8JtTSAB+|1zs)bpK+>WaQ_M zOGzPDR8&mjF-0w@-9v}^n3w63a(&{4cB-P4l~scoZ&v-fc<(U(|F44iq|%NF&XuQH zX<=6H^FOLH0F>aMpm$kW*P&dGmYO;^I+}LGFpb&>Xcz0rdU%M~PJCseqw{TOxbG7R zwStE{{I`=xFU37K?ty`UlarIrCN1d19QKym(=R&O+l>}l!#{3#kqA-F+RvI53GiLc z`7FlAm79-TPg_&AbQm`gQ7Y=aE;LryV^lfNY$wf-kA{gUGt%Gi=Xgd{rC03BbHSuW z|C1a^nvT5(? z$^u_=#K03PUQyQ3%X_XzaE6hI>8*~TcYMY35nkRaQUkra4=G)2i20`*(A=NT z$oVtQ&A(*fdmnPaiomW&^dg`98M6pv)4DtG&xW)vSb6Zg2b33w`et68i-PZs`c;-!AKFVEdSJfk%3zWg5yUHp2 z!Etefoy?zRx6a6kIrSfu7gtdFxqvORt*tGKxz}%ZBDlX%gT6%tnYe!rElCQ)c;ACoYY@iUk?rrHXi+K+?^?rDeSns)5%`) zZe+dmF^8GCd2~|J10Nr8Sy@?49f_b8lg61D8cAIHL93m8T--0z@6-n#YsuAH=FNSc z=yyAJy#4%A;ZcFrN4A_s{jjEA?S8kKPN&5Zp_9;FDgF=i$Ng zG^RWMYLf-f8k(Jj?d?cfG^nO@XaI^X(fk@JXMB_ZmLCGdhpeABU|n(VpkLbSc*+%l z6yLmg!|ioqj|g9i7qyLFo((=wP-rybHYy*>&(EJlM8j-@FNa}WTGotbxko#$jQ~YR zc2rVQJCqMJbo6;uv9nUkrkA~&(?P9+B-_7hcE4Mq0p7EVV{~{*c!M#xCtu(E2H$zw0HL_EkO z=)Yy7XA0-%P4@QpZ?m(TE_WyAYqF)mRa8_|#3dx`{lMVb88wYmEBlm0CmqmV`N9yI z_J>kdxPiSX4R&oE#?SBn8@!-o-bblGZDfgZr+KmLE72OeOD1H4WmGw5R>YQ*RTxIE z#KdRWE0e3vGjD~KNobSv^=rbFTav>06dlVg9i%+P> z@m5duJKCRvgTmft{Km${98bT+Da0~Ir>1tT4Hre5lhM%7eAH$KoH083xU9T9S-_UO zt}gU(?TL3tNCU4mOD>cff%eB60|&|c!4P_d5`W?XX?#fI*Xq@ZW@G>|QBZ{DUK z7IT*0q#4cQXrn{oau)~E16-(#yu2wt`R>8N;*{$Q(~C((REeFNX(Fy$-3`9TyGKW@ z&lbw+cMcBF%8sb+=ejhpvt8d1Ky-1KYKtkvT&TLsg@iZElArUYN+w9ELAo#wL4rge zdtDb*R#FF}omT?!PIaMqSA)^J;Oy5NgNu(@8JS<+e(uds@=@%8g^KWq`m+ii?|p}# zk@4IsjigBTDkeYu@5-x-7pgK7`l>enCg0fN@$Qqr^JpFQ-h`(&?F;$R zTb_lkaukc)L{wh?DLH}~tnhdAkdtx-f>iPtYJWD*HcpZLx5_PGH`y*v<1Hg6he{!6 zXLhtPrku?Cb|yP02u&`GGWd>2%HH0~`T6;vprHG>D1fJ0BdA12%PnyrZcon72Xo|c zzPW5FDl22cHuX9j{*Ho5jo>}%yw87{Pl-TVSFh|w_{2Zn*6>w$@h4Q*t4I79;zpGY zbm4h8bN-omXWho*C(n|1n*C*DWN6Wlx)Sa*eYK@9ZHrhMEfsg#&X9_v7W+M3!5*G2 zTE3WUDdfCHXi=X0`7`&~(I(vVr}iO1L9~!)Arv~hx`IPP8R+T#M5FbJEg+3yQV4`8 zRoG4>SY~=BEIX|Y-Rg_j!c4gvx{Pw_u{-Qpu3LXj`ogQu|5)eGEfyfMDiz&@M;L)G z)sF?d9Aq~|%iv!W1Jr2>g4cZ*!}Q>3OYYZn4yM7%IErZZ!Z@y%UDI_2usU@hc@$Alw*PSYp$YBUb+KB$Y0h6%`w|e}5Vj zfl2pbb3)%5fS1si^>h1CTcOjl(=05EoDKckrmbO+$=*@My8S*JsgC+Tlt~{YNbPRB zEhN=(si_pmsF+5;=jkiv4MxYsy)nR%TS&dIni5Gvs&)F9vP-#s^JqD|&-IacaogNy zfB&wNn}KCk7xpn8%`fQ$1qCOaL=0a2aRw5(H8?GA!0Lgb;=DC9lMSIr9@)cawbZANNXW4d3TGDO*lsqciQ%pW3t36 zamVHExp*A|UveS$Jw{z!T}Ec+n9NL7V2qxAb84KJpm_D_6^dj-PY;$P?#}VCJT6Mz zpQ9%)9UTiwN?4eg17^zKQSayhWE~%N@MCiMF@j zymUmgxN^(Kpxfu=HAK}RK@fNkqs@I7yZEEc4=nCy2Ltows7HPtfVBXyc5#JQcP;6B zSnYDkIL~Nv!U|dH7P(Ns{@O#!0xmA8b(#=?{JTPwgde>rZ11y5BDc-{2PYJiYFRnq zzE!ja@~aF$G_gzQ=JeNYb)89^&uj5 zw5<%yGt?OOvZOZOkP!5bZ{NnHV=%lc!#6ZEx8br;qTE0zBxZnJKCC3f`&^~ z;tzjY1QkPe89t4koQw?0vuDqMaMds{Pyr?k4-XH}P?>obtocpPqm8VuUx^_GJq~_L zj(mCwfsa6CmBLreR$&bP%EP%zBx#qtb80qN+F!l@-2M8EeDaU+FXugNv@sHLW{kuf(JBIQd|ap6G7U~$|B(ZDU6!Q^RW}+f zDvX5Buzv9cf-ZzB;)E2q&+t1c{b46E4z~zPV8EF{*j;k>!(kn=yViu*f&T9M%cT}Q zX8vUcDHXhyHcu$n#~8tC_f zynRRVuben(tyuPkPU}6>-%sErS_IJ}a4)Xf;)fu53H*OS+%h1jl-nX|cUvi(tOil1 z!pN+?=y?U;SayvV^1U3O|K_|d2kq~8pEyIs=cudk>e%f-Y^E#Uo1|Ziu7_Swe;78L zZn3K@hp_ufH0pLZ>dJo-c;Ec?R-^6i>JWwJ_jrlcuPf6+$T-TcA`jdNeh&$x`40~~ z-j7(Io+Qo$M!Mjxl^62KS&`G1Ctu%f4*2{0IaAXo4E>rF1)YW|H!1X7g41sP00kp! zPv%2MH(dboNSm24($UdPy3TlSj8}yAri<=36R7t8>Ee1e@%2un|Nl)2Up%(@$;g>- z3zb2z2gK9l*VtildI9iP3TgNSBLSwIz8z1G3K>)Kx+4c+3={w42jv7*-gsVY5*^3< zQ9pIUO}U|EyPx==iZH1a@}nyuF;4F}1X`G_^Ik zcQQPGkCf23zodpd7)E|K1dwf9{xvS3ZLw?onXzvk=AJShZoDbUi_n^=lP8&uhF_K& z{@;I-4W@9JH_SB{m(Q7%RGNq;%7a|>{MW}uhZAn%t|_nL&fLPn5E`EoU(c=TKnSW* z_k9a|0s_R=j}$*+h3@^wlB--owQlT*MDm49G|!NQv<2Rs>|bF#8rcfW64B=RKB@eZ za-G&|$)!s|$-+zeO8-+8o}Yi2105k278aV{>kc!7{G?YD4}~KDn<}KPmJ;fe_9y+0 zW9gas*c7DY-t;a|v{x@?SsShk*}ohm?;nce@g6Gg*84`?$bu_bEV*;bY`QI#Z2HQs zP9F*T2{OP+VR8z4jWIk;Hf3gl3T^g7=R-|RO+~r7g>I?I4L*x*qwQs_NfLY4znx5Wb2c}-gKcwF9Uw1`N*9~4? zS~hf+fTZ$K-bfx71o#iPvPEAn(ynacAz1));*wGfK3ydb#s6{U$7guCZ0P5NY<+;gf z$KQcs{svrokc&P$t*VD8DO+i}kZU2a#fJoh;N#bP&C}3C0S0qfed4RFG%gA`o8sr; z;dkoKcMgXJwi_jfYAZ5T#ZTX;kYmk8^jI*!v4M@+a1n)+!obUm|J|UEK=ocD1QGE6 zE!GwDOG|I{isjS@IfyYb1SpW|vHn(XPEO8xB&^EUJr)c8IN}Xf{0Kp`&%A7i2V_R0 z=kL7wEbireo24H5pYU@dZhI`uQj=uTfBZk;CrFa1=H+82v;H{TC%Wh`bn`axOudpbPa57qY3 z^Pw$j{q}*;*ZD3@21!kR6)&=Wx$pj*6u$R!or(9CPcO#ycX?4zcP3HGOlI#ZDk;3i^K%kXc4bUHWh&ebo{D=8OE%lXOS^9IlNwEP`IfVCQ;J+$-AF@71{rg?b zXBE*1C|OfEXJP(d4^}m4lKr4uCOVZqB$sNo)vH;<>jP2dXegBGef~V4 z6eFK;ot~T6R^9dWMAMRY9eAt}oNCC9_ozcp|YpYCL~9CbsscE zL_%CDenL=Xc54~^CfIK<$#~z?Y}Zk^y1IfQC+xOE3od~-fr0zKp1k1kIIv2Sl9ED1 z#0k*+K;AZ%e2M_cS|8L_8*;r-Py^go(p^F5GX}waWBPmQ@84F;%1N&Wg9%t3fA_e{ zqLS7C{6R@0rVy~XuSR(9-aUk8Lpl&U7lc38Y4KV! zM1;kUH@B)Td_a$Tpg5nUTMjs6AHH>xkOMuKNSf(F?lCEVMXP^38Kn2+FSa&gWjCO) zdW-79!(Fxcy?u@f6#w`TW*3UYJ92u{DAHTsW5ow>Sn1*WfbViQ530kYC(#F& z>wbBQnl_(7)N^{1CUA*wz&*rFBgZ4m0EBbxJ7>*9-> zqL2ADw+V@fe}4CLMaQT;>0`+>+gt4DP8TK7O+b`ZV0%HeN0dP5E$kf~7oh2ZR>-t+ z;&iKKd*|>l7n+Tg%vaQKE4sL3fQKvVmNiReE(@E+e4wwKfLFyke6&dmD{JnfsTq3K zBUl~8v2dMZz*@-S4%2=+*&2ndez11VhgW%DoAuCVi*H;!NH~oSVOK92)(-~)8h(VH zSsCxI^tE+$g@WIM$99}Q!)s3g3?;eh2muEOUEQxXWd1jCTFrQOCms7ry-r^S;Lxa8 zSTKXy>hwoihuLS>5E#~%FJF>=KSPtW^?di!>h{DTlkaz^(_01~-P=z7I~?o0a?iXe zFDAb<@D%0917+q!oHoC~&T=M^{Snbpxy=|aDh_pbLEcJPMOnsDS0W!U-@JT$w>deN zH!Ei>CaWC&Ia^Rj$Pc?pusF12%Z4TaSqsI0(U11sfR+8}4RbU5L78Y~1Z(-1u_RF= zeEcq_RXX4ImIX$<=g2e@}DzF z8hxf^ZmjPPJ)0xcNw7s#_yON}X{EpahnJUEzjXy%2y6_{XB$=_KsQE9{bBFwRam#o zH3d4X0RdgcQSQ2JF#hG4Kd@Dngl~IN1@{|}aiXH4?w@zlV=pCUso%=ie61%f{We(M z!?|@tqpi?(CI@4?9e(j0H5xR3!8YzwyI*`=GF;cl$jfG&kj8v4{9}dopx>j1cvKm(Pxv3JEzukZ!lHzy1G;X|@Pd9kjK zx$AgdNO(i!APFpc*Cre6Zl3tC3z4rifYb&YOmSVppYvmc(F{e>DC}o~stQfhe>=y? zMtL8?DuOWnLEwZ@2x6zJ1a{fpCj=#XQ5|7XM3feGeA$#B`juf9Rhh)-Mp@wXqS+Cw zC`h1SEmew!kB5Ot6cFqbIk^>&o!tdJJp-K}Nn)mI6PHY}HqdWV-<+ihWuY}Cv4*B9 zBO~KtRrMA9`kObxSriEK5o~-+nsfYAU*ELdr^+`JndkWfSbs=gf;x!v^&y>Jb0Z?P3nmLnjb2xaMj?#s_-?JfVCczZF> zUW0(fZPaiL+Azt14u7}f+EjHQiJv@V`mf?>HY)_+=V8tH&lC1PZ@#6Kk$cCA&cnk4 zMLUb5ui1#-qO!4$DU-%0P3x6A4ldW+neK8{rnqn{} z&O)iY$Ig$f;@2VH=J_ViPlPDHqTZtyd0Ak+L@Q8}4ljbo@5l6`Hl%0h=U(V;>&2Cb zst3vwbJ?}a)7>^iMF-*$VMx-_B6@YwM6+{rWHD3ct*N5}x@H(H8bE~{^#Vkx2j4Ed z%J*{dfxdp47mK)m3F}Kd1m7IO*dGdC4?+?uoW30qR%OF%qyH(mEXQhGxqz->g1ZCy zQWDq$!oeX5^(0Byk=eR}ToU(pe-^SIEocuAhRqBTDOY4Q0j;fapf7X{6=AV zrfB{aJENhKqH0<}R{RR>x>x|c)ffHt?^-B_OR_`p%ckRXDW3(@FxLnhy&X!_badqP z^vFSkW6XU|aK-iFE{MaRpTH(u>Wufg*lh!HikyOC6*3@PTgx+mjb2c7H>PS53pDbe zv21F>kqFDnV{s+aUH;a=tHaa<8K^pp!%?eDx!f$7g1)OtpN2_yKGEm_5#Y&Zy5x4g zzlxufgYgBFxq_mi9PjfZHxG|_{#Tb?AfgL_qzBdXi}i2_hdCDE zu5boWEZ)39`J#76<(2!c!lHHv~A}?;bFD?d%UF@BRMSnkl?M z-848zkOyLJY)s4#xP1D zv2LXu6%f2b!@~o0-k$fw#Hts->Mku4T?9FXDMVk6u$m3-r%W^jeMpslDxKD%wnhvS z1TXXF;FW(# z8^)Cbl!h-=Eu@=N>d?uKKuT)D2!CM$Z*e8K>xI4?st)77zU_P6?4T~y{~g&D zE$aJU7C|SEQRxC7K0Bh+WXsmx7t7+ov?Id>LGRP_e`1s{5Leyu4;Ndc`?rzT^Mhko z$|xjQ-G)S0d;Yt67+Y4gwI(uS9c=JW%ZbPAtCHNwsx^nls`{gUphggC&n+%|vhXk= zY?_z0zb;+)Knd0WE~ql)Z@c{L)?cP@v9dXe?I->}g9*hS{yL&Q1qKjjkKN8;9Hjqe z2`f{~^T?QVe=HHl{A~cqKv*?Pw&>s$1T1&EEUc^k-(LFa1jVB8)zrvXpO0^ZaawU_ z3tE;E_fNA-(ttuM-?h4}5^#-*;oFv^a>*RgLNIny=DNP|4USREZG-AxCFSDMPLU*+{q`b4F0LiA^I{2r?OD_@nr3i zSm%-W1gMz!^1}YB=*L+f29y7&LD01e1hx4iB&K8x4EuYD(mL@VYPV7!r=e>?*^E}Rrs;A3)W4%boly#QX!pzQkN{~)qjZn$7Q^MIE{g=xuD}O!Hl5+JgyDv_hA2t^?Jr(Nt zv&Q;88|l`b%ZddYZTF`V7Z3CZs95B0x>|Tu<6knsU-SH?vFXQwt}VIdJ)=%>-D$jb zGRp<(7B*%3mph*(Ij}fK7`whC!5jtN*w`1+9K6Jtf^<>WJ+KEkUi~@N(1EL{5hW>` z*nG@E4E-H|2mMatz|KxZAkGoyzkM^F_+KK{ambpPXfC>r26s-^-j6u2GGaB%W+;U-=Cib{TG$;u00Bv>fe_Zh5@5+d*<+l-qjD6y|s%gXFFcy$qK>|AqtSUMCp z)M7f={cxnyDV*u$ciz62Pb%(}HScwP(W1D8Q4-m5^40mqxx>|` zc**1#nlS@YJBfi*t>ypJeeD1FLTI} zBZ~qutw97uAQMpI2y@jt{z%0zMo^0>f-nc=c5a1DFeUkXjO_DWV>S{0RtZYA+$B^c zcf5qP_59S+tfN~c)#z|-7_r2?qT8Q=(fOd7*{ko2gy3JmB)z!2Y_e}99b1ZOBVeW|NCkhg zeM@ysjsDs?Eonn~Dv8;sbGzc2)zQ=zjOafdC(a& z;D?fu*SBl;u>o`%fx#FtPKBV>*Ve2-=~iPU1XCag#L+jvNxr?U3KS6F%5w!-*&ARr zl#O8oi%z(9QLa{zHnch2CZ$oJpaXOU$>rqq)S;Z29b(5A{5Xe)OGS#J=x<}zI$y4- zP+i+dDj}g|9nSxb^!YA%hXMDkv7poS0$yzm*R^X#ZC>B6NfyX$65T&KRX0P<`P1Il zmsd*pWu#hLZ2pN{hOJio^XuzMj~?MF=EeYx@YQZAgi#?)+?yPf<|6H4pkX|x zpw&Wj$Dt%#%mM-lne69Yx1E{!KCtKAp7=vtr?B9FZWr2Z!8;r7+kGRJl;@S0*5Td9 zouRD%e)nUq83X(;X^|WIrneoc@;2Jp%?-4#qn3xKrgN6Q{MP)s`(cieg%_!RcItjn z?#O=5>fvO9L0{yDzyG|j@({ba^XhCc6U=I~f`W z3W9GDFn{(wcfqC+R|Y?vTuyZRr($=DX~XDbW#(`7UvEC$KN=;s=1C-)pB5ml{Q8vV zX)lAfrbL3>l>FPq=AXsqZk8?d9@swkO0qm#wx$j*MyQgfOy-BS9#-iU*Y5XByoGFGeOOwqVz;816ovkZUAjUL~#%@n{kA*QR zu*NG|5kDAd%&EGZd#T)Fsb=-`_E;V1#_X^uDLM%bVfJgA4F+4c%UsNVznQEP$^DGwA!uPxU?EZ6k70~cWZE3BFa^2+?C*il z@4Opaeem$1Y(hdpE3^yMiCWs)G0Dja;BqA4)PI+s9|R4ZiHS)R873-1omWt}1{Y?o0}VqCI#aMdP-^eztyejjrJ}`+19Wusbcc2!C^(o-dF4kzkru5&`-aOcr53Fi8oSV%@`P^hwtiHZnCflPg>&Z|XN(th zy~s6Bf7q4N@#*L{!51%o

QxKROR{>V_peBxgTh0 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/debug/collision/expected-win-correct-corners.png b/test/integration/render/tests/debug/collision/expected-win-correct-corners.png new file mode 100644 index 0000000000000000000000000000000000000000..eec5d3cbf15f6ca05f7638accc9812a767c1ed6e GIT binary patch literal 67919 zcmbrm1yohv*EOt&NJ%55bcqN`N`ul}(k%_rDWMY5Al)J*AkrcYBHb+_AdRAQH{Uw` z{!hNo`;6}!pJS-p%em+5d-mRI%{Av-Cq!9M>N+Ml=A}!QuFFV^t6sW<0zY29gpLOP zwY~1QxO5rghK#tFy2s_!W(>W!t6vVcW_Eh9v0J#YsS^ihBZ6y>5=d5zf|6@ZiZtFy z6xZh7O{lT4KH6PeeDySug?-KDz~Y%?NUqvn7Tb)P@`PI#_qUzaWNRQ z{h8v9O`~Du$;HC6E)Hn|1B0K^GB3lib;M;cO-&t&h_1>rvavH<<=_xa5R0*l%zDw) zx|EwEDv8z!NB7Ah$EIX68*ywE#SwLO&c@6y(1>I#Gh-&nd*4AmR!y&sCX>Zi8NFp0 zwq5h#??I}pD!9gid%}sTCN?iFGoEh^t2W;LWPH1@&2n&jBp+tBK@N z!iQKLRm!nrTH{M|x=8y7NEmvkWj>-xT#gOdKt>#4N=6@YCl?ulkhb~s*+O!oFIDXM z4o=C;5i^NHjVMt~QsOHYb1hXa3pJv9$%k)P{plU=B44bL2~KsYr!{OEZXUwO&CR{~ zqak&1(X=>$L809;;el>QQ6!DMuVi3R%J(mVE>-kSJlqEGM?~e1Q<&#%x{UGe)l-2J zB8B~QYonP07C{uB$MQ-c7Fs5#;}Quq1jn{lP1zJxEN{1aQ^#(o+kbmeSRV8FEwwUH zaVW!ejy^7{!vPINdy#JXJS-_!J{+6-zu(?V8BI)k+gOjD@mkvZ%ag7AJN;5iB*Fa5 z*ikjQ`y))kahsP6i=`A5anSr^< zxMO;dXsLMM)Tv>q;l?wwVt_M&nK;^mBS7SPqucs-a?J{LvQ&@NB3f0Cj5Euc;yZi6 z&gCn4$(;FgXz93`3Nh8HU%dzA2t+=9|E_~`^MR;;vuMeWhGtU~nfcJ$FJ!X1=G2Jm z$(>31btss62MBjv8D9w(AOj3gY1>X@+TN^ZhwPc7x{t$axaD9wHUh$S4Y;1q1GzXSLMz54rE6e27#S-Dz7_fkI3 zIh5`iUd*eza>wh}Di7vjMMp>PF6rU~`L9h@#ipi)=@h-wEHQ9d`yS6&Sy{RIJ=bie z@%ik+!XsN-)|7IVDf~TkpI8a~A^e-|Z0bwqnfv1lZgt7RzV}#EjE?=?qt6GT^4ag^ z6#qiUc|!8usY3Z$z$|<{J2AcjnIYSm#`LKvy-3Pi{>`tI#*6i>RCRUbG&F7m;Zn7C zbOe3-rWF$#yS2Ax))q=^YGEkNQDW%l z?i+tW9Ud9ct}ws;{B(iJkv|<4qpFscbP&!hkF&k;m8lxe=NBh4WlxX&+GgtIjEty> ziHYHutUtUdS$h{*%UW!H)DGr<>O4>x_ZeyoF<}zy7|Z3uREXG&%3iSgXE~@OaK$lj zahU6txjauXACr7xhBs})8~aoyTe}k9h)lc!^`6PQ=rPQ4c{-W-pSJpnG|8R}X)SAL ziLsJwB*C|qp^;>8QdTa^ohW*QZsUcxuPbSLEg0ni~ZmWH( z_v9QJ8X6rPb@)Ac`;FH+-#dj=Nk_-~*-}yF|7EYriN((!0|%#FUqiC3-qYoM36n|@S`|fJkHjOy(!#ShK7dc+lfuDU%&pGa91};(38XYXa7=B)en=c`L=LXshz5( zvxtBIR7@x85kEUvS1>T3%fATp!A<|=!mm+c&=*d| zdDs$nJDi*wvrhIbKl5Xx3y4e^uv>r*w?Q`#l=x6ZN`fkL_{*W zVwpxNZ8T9(P^uRq1%7?6yfgXfY4(Q?*w3FoC;xp*i}eQbRa1GMN-HWZFN}-izAxvd z%xWi5kR~eDp*T3$5PPi{M$TShNGp>SP49>!ary8667(3jaw)xh)?N>V#lL4VXDpBH z2k;&^^BuEX`C2pCT;MlQ^<;Ey5hXsp)aY{JV{Hr?8a>sgcUiSWokxjX@d*5aCf68$ zm_N!MdZE$7XUl_*F&ATP=O0JZsP?$SCYNUlCS2kuA7$6l?~B8gNb5Vs>Sd=(A%cST z7-nM{c&M0~4YJCbgh*mg|DJA2$+pbf6uO|JU8K<-d8;R1CEH^;+2XLwb@f~H=B5MY zi@`zVTKA1eDFub=g_QXjuJCGm~FF9h`?3{)i-0UOOV9v7q3m;ugD2fqtjNG)C6n>*>W7y z``)3|8_wi4(+>)Z(5vsOYZAu9JnZ;x74GOGV`X)_x#d-6VF?q};9Z>n-!T?%Z*OTl z)Rfc4_n|>AUsugAdbDBof9=6J+!87zw&e+q%4=KvxuZsnj-r4n_O@%TC8(gdc)0~v zWHF4r@$(}*R2(YdaE-z?yDCnrVS2???RKj3&1*N<4SF}{T0Bp;I#vjXTgRo8F4;NM zIgU@NjK|&g8Pzh-`gjAuD0czB94g9UCd~v9UCq{>ukGY`CWE5g9)p`CvW&8|WyIyA zE#T%LBwk5T>)x^ErsndSD2U~b)vX(n4i5K(g@sYCUR#)RtD9i#SzKO*D6=wFNTOfo zmMio0>D|C4-{gpbxx>RlJPHaqjmP)yIEUtUp5wOtxe$}iGdOH>6JIOo(2pC~-SSrn zK^dW{58Hk2D-M~}RYJ;vv`#rbHISbgwdotG6IQp3LZ~^+4_sw;{ zd3R-mh=|BxxtGkmFC~x~ovUneEiNH}!(mo*z3IYN_}G&D(W`I-9Y|66#A&>2oON^d zx(K@c{q%Xjv>O#om5b@*mjb~W%e%T!aoIysgGP7FMJMt2kJLH#R$RW=)kO^ow`^JF zGiQ1ng?%ezVcy&_R-gQ&RdoN?o(z&qL#(WNcXk$VgK#Sx7bJK6M4blS2p<2+o^qe@ zLHGN7V&BwvxV4bX`;>g-ox*~xz`ua#1oqL<$KXQ`JG3ljr$0qi!!^zpDO1h^LY9>} z5FmdIW?nJ8IHCR;VD~}4F2QqWxy*CNoYKdRvN~<{or;e(&A|DxqT(Aii;>6@m4&4} zEOVJyKHWuMED0+PK%ZZk^&&rYK3pTe8g;yYuT_^fNKeg9p?g4tvRz*0sxSTmFh1dutLJiOLoz1Qv|W}y z+rt;tozjpyUNMKtCvyb$;flz+xNrf6PUCkC{rSc#(rVQp}hyA7kPS{HT|?>TMkj!&Ep)1yRgEDk0nSL?F@ zh%FGV$8vReFw~M^?EV9TQC_PP$<~pP<}L;{l&dot|MhA|$A3z!rfa$X$Lef!g)&u$Dl!y!)O`efZrznB($~Bx;OD+N;qE`5w$B~&~ z2@kDlA-!%J`6`^^UHQCEM>?+?1{iOq<`-o&18==R6=N%sLHs zE{Wd_h3xhb=Ng=E@z>C#)rdLuKc}Aen!VJMaQDgC@m~E-zksQ!X{qnoGxLEreVhY= z{^M1sVxL>q+yKQ{5l~S@m6WgpBs|@UdM*xOgpdf;dAZkkzBL57+uSx^Hy!3Kqj;-( zR8QNb@!awEa?kbogRWTo>?(J8c;YyF@(}A*If`Seb6qu-Xmk(-QAcwKZB@D?DP$qDZH9(O>=`nj5Rm`Y8oJ?@LlkT77 z6wz#Cw7)vRs$UxiiHuPpMI2%ud*dN(N&PlvgVzBgJA0Ip$XT3Y`kTeGgA08 zy5xq208#b-Ux`&(Ny%b3MpiWV{(Y?(l1gMvB6MH0LOH1$3($U>!Wi{5B^w_PSxF6)0J{?8oQHbKa?ebyysAt z=7DSIa#wmJXc(a-F8l+cHC5@Lop zou|L}-BzVNJRVSHW@fr<{J0gBl0ptZML|o8w4k5>fI9&m-seZSLaqC2lM|nwQrr@7 z6DN{*|DL66!uDUemHbbhx0>=RS&A1y-Q!eZxyG#xjD9XU3HH;0JhfMPs@6@W42M^u z2O}>`?Io7}MA>VxQuco*x5hb3gxOJ5Q^UA^Jy-Y=CHX1dWR<-IKpU6UZ}=)id`^q# zJgE^mIrIbs1eOGpl#x=Fmdr5kKl4OO#+_C1zLh<>))9FtJ2Ug8+uHa0w%_h8_ow#& z98BhSWuc*=QPj zVtQmu8w9ix-!6p9y6#Lk7i{z;7^!Vh&yXR_6btBXS7BVV&FBVeXJ67dE9} z5^Nzq*if{zw50b$X9@K>S9Gg-kF z0=nuK^mE32*Ba=z)Lf5utuQe$A2=^#SD5!bgz)rj%}rKLj_iR0^})<@5eb`6QVvt} zuC6X51-gV_E~FAN%(~6Zx$(R$zWwAlzpTF0@~(*ybCzrbDQUOdhMlSM0NberUv>KR zS*Q8AkMSeQ+OlSkul{p($|(FIRDf?xc<&{S0i+bo$FD#{Lk6<{T>k& z>q~1DqCe}5a_Cs>TKxG_ZD+j>n}P>h%mY8(nuk2%Ra+QIHVeyqSqCK@BO_Y6qLhjX zzIA1a<3jt~pFeUL!amaS@}`g!uy66lb#_YMxT_-$^?ehU+B^BoM?pA?i;Hi^tjYLY zm?`Nb!)Ny=?SG0~9N{u4y@Ad4z0xMA%k<04Ovbo@S48Z>Oq*ND4KX}vS=ssGx^-G= z>Pt~k=asLA@KwAkE!eYU{hxaiRHq>o+l`o3v)h==n2DxkFR~o8HSREDYO%g$*5eMl zN)#x00}FX+x%MJ!^Hw1-QJ`G8mZ*v)a_HbMQPi9q2VpP&*xQ9poq{_3OMuViXFOi_ zT~p+=P?o~xr?S&P^S>P16`)a=+x7Y7mHXros8_F+*-mh{VW)KTi$4EXMx|qvM^mtH zsM~bV&`m!4u3kX4DoX6?JtYT;W~3>rW?D4Ga_?K18{H|31|B^KD^W-Q6ZX z`_o||!1fgK+Ru@SqNHbJG`U9#h1-vSSL;k195Lr-C$S%&aeJR}V=>|6WfrG|D+xDi zYx*lm(_8CPSEr>ZtdWTBzQs_d>S5r~YH7vy4-N?tBa#4+9=;Q+M9OP-^W@+l*Xv+r zsKP?&+3v5GoVP=GM}|9lda|>!{9wM14>pukRS76nR8&3~G^9jO@czd@PYDXftRV`@ zC@3s>S4}x#LD0zM3keB1bl)_a{h-aoB-oj8_u`P#=ECcRNJ;NJ)yCOXTmb*PvXW?t z2urG`A&V&zygp4s=Pwsy_L`pjFJC%rdar5V=-fF!p!YMUUPNy_XYbVPd<6dV;cdeI zEjc>L-TYwi@!yi;zPX*4yVA7}cD$7Rwd80A>#`?b@zeD7Fn{WPw8Tf=gCdWzxw+Z$ zN!9~>_12{OPb^2?T~9dUc!U7p#>Pg$&CgeI-n}a~?;}U5IpmI-B${xB0Nf8a3^z+f_=_#qO_X8RlBaXghfkMp%0`s?)ZXz6$!c;#R;M%PA#NK*>uS-N6thZDCJl50<8d(v~8ySlE zn+(dIbl^ZOD*5Qq6<}?jd@D8XO&3UrFm4HoMQ`1Y%MxnYPP+U_eGS-i>Ku4>vwTEKLh z&5y0>BP~PO^|@yLdOHL77k&Sy5-zT2MB;eg!vryvYR1qn?hsKz{Tgq+K1!JEdsk_L zfsHxe|8(--xSxS+Hj+Gzrcg%a@XfjrOI1TBzvFFM?}xNo7*SWNQq>9#B?yTm52vmE zo&9lMo3i6=I+@;p&1T%6#`iHt*ys3lQc@>WBcu>10X4Jgd<+I|BsL>s;Qiym&hBp7 zd-w3_rXwY@je*}Zk6x+MSM9h!IwTN{d%{p*(!sxaHON6j z^X)b+?RGKO=u4WkK3>6u-=_`Vuy9nW-Dr%9Xn)a&e7W^sF46Ge&c(MA;eUdDh5Lqq zd2f=KygW94dSq4>?Wi^PLVHBZ_;}*~I9ecFefz)oyN0ih1V;O89$!`7AvBeVJ<5bd zXTXaei$Nb^Lo4Gg6|-5o>~9dW+1cN3e)^}RqO~KaB?y-g*lnO@6}>vK<9+yUK( z+LiIILJ4fIHPJH{P(f{j=W~{ijZU-UaKGs?oI3wD>!Q3B*Rw+627`eKSU(SZPajau z&CRv8wat~m7v{13_Sqj-xD&XHkn#!iw`SrJ5@pZ!tRYuRdwTL=U|;}WM;%HFiI?%t zov?HPcay5gp+9@Os}r%5LeF3hA=RjoCL@DZwo z{&iuR=zQ0gvrbMtm4=sw{27&fSQEb)T_=>nriBcvLZn^qabH_odv&TN_S=%gDcc&( zv;9?>C`uv7w5>+>UMD6>Nl08p*!GQ?48V|rSy@?H4bQkKc(hYrgu;7s+uACD zD>=dFq&Jj7VOdsuy-GQbG5cL0Xhk}qYn*p3cRjP?nzYbhwc@zjW|^?bAI0h{6Z(Z% zji@*o(xyaabk8D6%N_M;AT-bH=a7T^_<4W zHgA_e*b9%v)TsvAwADh^K0hy`nu+RW ze=)1OF~_df{+8hCI}s0(gPpBp^`%xPHD2*iN5cT*fB7_hRSh=;*%pp#$rmM)OYFkR7tq%KD4b z2VZ}r_hx9CtC*Dl#q=^2D?nU)>vv9c&i-oa1OTurXxK(@0KBSO`NXe3GP-k4FSRW#(P`FTl0g_#L9?ZMtqy*qadg4^*XW#_LNw= z1s{)3L>&0jkp)+jrzco@LBZ8r^mZOwIP*S88EuaZd!DAxucR9-{#YrgILeiwZC#b)sXwz1lRoB_hR0__G@|JH*DEW2-^_Gp;F`l6M{RFAiL2zmY7eL2#lgfBEm}6mr~L55G=nXC)qmVom8kJa?=`tK zE@eynhSkzX&3~j!xa9Q8;)w1wMWv(;)=rriba&>x@9&!UKLua|gYjrtK`o z-aiH{KnlC3-@K*liTdNmDk|DtpWg_rjF(U`aVo{c#C!o#yZYk%B!u_Se==fHfv##& z;Vc;Pd$>V03CCfgX#3w98NS5Cav zmJiFXFzJr7it9Qcx>}OK$juvFp7PAxj$e9t$cZg)c-{24-QQN&A%)MM-(>J;cFDC8 zB#ga1KqQ^XoEDoqJ1urqYAPztP?DkFxkJay9BkH;ur)TQ=~43TMUC^%a*r*O7_nJ=2NBwbUP}6W6_^cLfMd_;XQD1Ue z^cz)878I5MWDccy^a{$lYkq!yh>~kwk(?`+$l<=OhtT2>t&Z00pZ7!<$;4V=d>Z%w zvHIU)G_R0MmV}vwb4#*3mRqFoLtJFOnsQl@tnYAgZR8*2PPFR52l@0nIP1g=Fa}t^+ zTZ;ai>ie1Tyni@XE}74n(eSBvh5#Ku%x6%=*Y;M!gN4NvC!V!K@~GMvLJwOOJ~34X z0+iVgl`nfjf~eo4U+13H^!>Zh7qX*DwNNQ9##se{6r|(lPeJg?VysfR%ZjRbe_Gd_ zlKL-Ka0Nx>I8zvOAVUG$Up)kSRk9*rT$>)F*ZeiTPQV0qOu%^GqdoC{mHn5_{`=IH6nb}Xfzv) zE47u`&Z%GjmIXb%z2dp5Lq>Oz3hJ#YVa`Ylhb1-l&cWsnuZ^L$agxop6&F=yWl><5 z?5a{huG6WqQ;?QMM+)Dys+o6?oPmP^UJt19(?iGig@s$rHF!rWU<>i^^gP=fow@{{ zgMxdc%HELQ^>^zYOWD|c_a0vd{?hexQhhxO@Kad*H-Jg;XFY1D&9$9L@Wy}kSHw@Q znFCVXU7Ji)Oy{3-z0$=&0O&CTMs_*+9;#gXLY@H1V0%-V{C zYG7;JU}4&QW(oL6eYpf>HT}NMV077?or#ZDge}%OWsp-o5EF;9GE*1WXdd&+@~Ikx zu4cDAc8SBSb6=o~C!g8W5~mXBUv}g75K~`Z;}88V=@I+fOKWluUDxctJ465K`yG24=h{QF0% zmRHv)NCiFaDcvB6-JSJ!S)WR#N*!XITUy#%P&zf^b!n@U^)pNdMU`-3*>C+oJ)BInV-CS??9YonT5 zR5a@H+SRS`d}Ltwn8Fv^J#LUaKQ>m6j~@xC&-d&&n!_Ah?D+|WKx6kphA_VR`pHcT z1>%%h<%eG9$Ho2G$2()%6~lo129H!47Az=kO}5rL z-(Ft1rd91g17yO|LX-%jfIuqHqnw~Y2;#spxklyv8Cadc6_+X3aeb(LvxY1;zg60h zFzv_fz{x=i=6Ct^x$MRMXa?Kc)1AuEL}C>m58lc^sm=T1bA*&V{~@R`U0A zzXo5zVCJ1_{^t?b`wFY7su~?S_?~^i3eJ*_h1(VV=8Yn-?CT_krn_P6!_o;f^Z{V` zFxF3R21!PxKs{}(pPueudYFQt_Ez;Y=x|Pad>L%Dw`za6(Jxs<@14_PpX&&oo}I}k zDFtmiu^!#~!Rq)4PBAy;80SujZ0m=IdGjxTp{XiBI&2>Q2d^HY^boK3N_7ghURbk=72 zypDPWKwpVwT#p{9zRM?M90#|u8=Je@4lUJpH@vaZZ38#Q6OSUZ92nGDh!a8FM(k;n zun=L-!KF;jPmkm?gwrAO(}dE39`gL$8*stP30rd@PZ4Jb1|ef9aC4I3q|Kk6PBP!V zojG~ovT*Rn9FB)oY_@x?CZOt^N}TF$uHgr|j~fms0tfH*Tg42#ZPBqbo-WD9r(Z4n zRK9!hW43WJwT8}aVEm5Sguy-YfzBrlQQTS;z zaFotktVTS}DjIjRSh>n|noXMN-hRODl}Kx`zS=-Z6sRbwI}|deBIo*4=u_=8>p!;^ zU4P4pJ6tN-J#P&PdOKoG9Thfdb5*;&r>E!7vwSOK;DkZV1}&aH9S6Jr8E!qyO>XZMGQpgO_iIsq?u!Mibv;Eg$;Uy4XrV{D3f1 zZ9@&jjFRwC0Lbk4BqTvPMaxi3Q?syy0yUP{+A5y%pNClQYhs#gejBroBRT)B=3t6^ z+9Tj-IfhsfW29v0L&6TSYu4G($c^F}7SGner(9L?C>4ody>Z^5f|;AEjCpfT7h!tA zvbVWi%d)lgF*ufqM)(cI`l3v5RL7s=f}@upp_^1pbar(aZ!dPC`@N9T*S`gKsBXId zNt94K(4z&uJC``yqnMx;*;?orDHtm`Tn-?dViTOY?)rbhcrxq5k?g$wb(uJNih@9_ zSO2yFq2Qkje139+PHqP`Yhq;dlc0G$mm1Xl^)Zm z^dVs}^!*lyB!Q%qEMV$l#ACm&-?rrBco2lpcYkf8R}l`+dCnR$ zuSoZiudu0t`T6Ny$#b&<8ZsMI-UK%NZg7Q>-akLU zbGTCtlHmL9q{Bn|2cETQ3IdJo2%AEgDy!&V7NGBViRks|TG}2CouV6S z_3|-qyfCA_7U?c*Yz!D)9BU$hDU|q*7C4j;vj6@2P{4Szdpp4T@TCgtHn*fGRqRe+ ze)VR1D_{@?B!n#p`ZmHOxdR%d%g&eo@or8CSD3)@8E||`RN{CPod{J)YFG+|Xs+rU zA}|pGM-FZUwMSAKX@SES8xln2n>61tgXiFd+rN2%G5evw z)M2Ceqy4SsuE!+~jUs0&N-*&i?+B^@qzVh7xZ2vV-oOHnVjgS`t=?o(1xDDhEb*a? zAi(8$9jqtGGgA5<8bhoDl`~(RMUb4FeDl~7Oq6WYBhp}_ltTk)S=h!ski6fFxYqgZ zhllQLjMUmu;Pbsqwi^?Wn3y;o4@d;aBk&g9(Jan+T&VHQmPa!3W*1aRNnqRq;ucvQ z0RaKZs;XZS4Sl;R284ScxPvsAIdhx&dzt_0sx2Tyt6R6)HiBmQ2@QSyUWn>Mwh`CPr&Tvo=yir;`ckD|zmDon8SnC5Y(0AS#GKQWR!4ixzZeOy_q6GWfMj zETiLq(19}48(*Hv8HklYpkVr4f z%*XtVJ;kB)bFQ9}6|E8Ax`FAo7Q1~rzeWt@$`z#O?gKw59mK^Q3_npY!Ip|YENS-V z%V;+2ncuypHOUzbl1)~(LDb|@4xiY|^ZLz04OL>-p;FBd>vtBMB4Wyf6Ii1z3sVMBrRk6$fFdeB;&!~ zh>9gmkVp?(HfHnq%@FGl!QT?|@Arjy)$xO@ zOS-6H~Ne?!st&jInE(JU>w`hV!TyPO;D{r-1a+S8c=wEgt=U+4xk z+jiqTUNK0{UX`p6m;0w>fH&oDg^ZAb$rN*MFpdz|W@wk? zbWK_Q!yVMy-P2xve;X4DKQQq>GjhSw>9&RO-3=9vrYSxJO8y^!jXGa zrG8GqFXnh|W?%E)B_l8l7eVCqI9|yk<8z{SpLQiN_?c2;ECQ_z)#S;Z7D+YDZ4`91 zb7SS^cHfkihd7EQ&3}-Y+c|8t2ixi0;WkLjW&W77YU_(PG4YW(7NaC16C4_8*C}`g z!5I%3ZqSk|t#8RmdRyAmzyHZE^Y#bv zEX=%y(0lK-&bP%W-&6&ZTi<~)uk_X_LHd3C#B542_5UcNk*eqMV`7|ZeNGQLPk^er9E9DVjax!0A*s4X*UT_mA)Bbl0XmqkzTL9m`yIE1e3snRFjp;iyN6GLX`O!2gNYPBavdqiZ}K?> zFohA8%BOcPcEyH7MC5|HQZ?h7T4^&5)Y1#^Bmimw{r4t}&+jT0l#QlyUjk2eGA?oe zb=N~t2Rf)7V@cCFKb6le{-5y@DY&N%vbL^>_k4R`T-9~9sa5!x2~|ZR_Be)cG?8SE zkRU|KgLO$jIOq50=OI43N-(wmnM)e`Q*t4)Ka0xNjbeOyxZ$~MO1iElE?SRI%sDPV zMk4WE|33GKU}yHnVb&8}OG#7D4^s0gHpRKxD5$abGbC=^49Op!<+-R(+qEMTeQnS(kSp#sUSL@o ztE;6TrcHNbcAZFr7k{aQfk#}a15fE#>WDB$lO}c=ku}LFC>*h{vFX8b4R(e&S%!&; ziTceiSU|ROn0Df^88-HwY%~o3D|hrOJL(%4#n_upIk33=WfT?P)z+qfE$8Mr&#Ei2 z^e4tCB1!}1hEo+wp&EAD*9Nz;NYiRl^s(O1sGI%NQ=_xP#AS~&IM4U?!+VjQVY@V~ zbRiDDuSc)2n*|EP5vB-q#cePHl|gA~;Co~SIv&`A{&f|Qn_!u8@$k&w0I?KGF39=J z@v`d-5M{iY+)Halws z@?@8grlf)^@!rviBj2i44;$TkuKd$Sjym$FCbZ5&BjGyLFT3BH{N6cOaQar3pf9Oz zrF;~mYVR21RUAI!j=hAO{juNs>Lj2}oath_#Ep$tHXm*mKJCvWk)1VgP*3Y7Zs{#wskHw>hqEp+KOS+|H!;%qbFR&a20pVfW* z;E-MkB~I%(wD%M?Wsmi&J0pQSXbX zt5bF?gPUSPlEcn0vo!ZdQ|S&o-?8D5Baor&x-1thILVJD!Xz=P9^PD3P!NJ_e}KRMRS?EcF)!94!zTgY`2NO>lCQ5YkoIo+-?w^GcN{9T zSajzd)Ugoy>EzW1VmSAXYX#n9r7;dc7?B~k}c`M>8Xopx>!F9C+4tyi9_Ni-V06nJ6 zOoUCw5dZ=lSh2u2lw~rG@paKBoL&ajkI9oKTWdmb!%fAXy=yK72EBpgtud2RP^^^ka93e0Ue=-+un^{l1P(6)-MM7el6|>SV%I4q?wG3zoVr^3x(*K?Cg$XBQ4vz%T3Mai!rwd$zt65DYkc5V~XQQH`BZBsxYe(E-f@oJwf8i}dd zxc9yElj*uZZ%)pSk65_#%EEAro+6Xo*Y`HxSW4!ph+Yg?E`lT}o?b!ICJWo%VSiN{ z+=Tua8C2lBo@)&u45t)I0TRNF5gp}#R!K>TfRGTzfeZc)u-D9gZSZmjV$gGc!oted z))eX~s0BlNd*zo0GL%F`FM<1m?(W@)uCF`@Blq?#HS{QUL0+mhdAvY&E9mGUWtOV{ z#+kpP+V8Vp-=~8975_eHXIqWmj(oyEf)`Kjy+IY8Dpg^*I>ul-Q64N>^ckGXzdki2 z*gq6R8rq;N1t~M~<3}#AvqCKl&O68LMVVs#I!TClkQKlKdo5iNDd`;l{Adtx=ah-@ zSjkO9xGu<)yffZ}fe)MQeRn88lMw=@uo)UF_}tfTf(aOK2Pe>n;81J@2@WWmxo`d1 z^?PGpsAy;=Wm=$s9|~=fE=l328g5>V8GE>NZi^}=ev7EtJ}4?%Gl&^2uh{(OX#um+ zS~kxG1-&j|{7D5qD*n?Q9HSjL8iK9RU>ZM zT2)HPXubAnu)*bEOolAYOIX6kagAj~d>^s&-0ny#PUXBqqt8nR)kWij*2{;Pvjs8x zq<56?@$p~wnbU#u7t%->Slhtv=mGtwqyRfh8jo2(GMxH@@Za+Ci{Q**fV>Ih?A*#q z$RvQNYL^uPBtI$%?GZss0=S^}*Qa}cG$P}%CA|@LHTR(mbg8XCpBF@_wxY>;rNOFI z`CM85;U3(Lq#x**3<*6~b0U1gmvr}4tjbG$XH;(VK1&GNw|kU%&?fMX7fhhKeVIyD z`K-oY3rjXf)s$48x!`l=4Vc0vwwxRSSmvXV(e;;huv?7rN zG`{+cSu=o<2i8sOuU{Z9U3aTXhsB31oG*b`f7Mv1?~}lFUDB{m4njKvCueN%E41ZP zV;nGlye%t>hJMQJuVf632cC0I-}2cHW8NMP<$I$*!espS96K6TGk~THEvie;<@CNvI@2xqzG7t-q*(?Kg@f(E2}-dyy(zTz}RU9tv=r8M?XL4 z)x_Y6oZ{Kr+aqnMB@wW)YU}F}5)E-%L1P7%9a~};WL@xEZ|&~V^YM|5Oft#9ieBuD z4kx|u2lleT;hETaCkzO1Y$Vcbw%l#>2jR`Sc?`}o#vhHJc1^h_1uaOveSF99!76o) z17CVIcf3KXmCZcl6r|uf-Iu%S6&OD{Hm0JZ6PlOD1e+acKLWE9!odaO)BS?j3*EYO z5G)$9pcj#u2osAL`3MC{essm~vFt?%MQufxm{sDK|qmuCj6v%Qd zZ^it7L07PTt&4HT?}kMzYf(`=3GvEneh=G%Td!??wSs|?KGo6%&BJ_nenlMZ#QAsV zi~N02!fz8zxT6DUU8OreLrN!tAtilQ%d=ct zctj#58nS9JS#E}9(Vu1v!<#A&MZ2>jB5*Z^P_6m$hj>kl)eF+`36{{(vAC>#EQwpA zD7^pi3p+ScVk6-)>I(N%=?v-bAc60crN7&!o&jAAHDGlb`N_5ek}y5tBl( z&EJa5s8UCzaEv+r9>8H>C_CV5TQb-AS#YUiqWE2kZ0D!^J(kQfN251g9+%p%)lLE6 zGrJ5Yaj~_Jof$R5?P=G*KpsFr5D*9R10iqxQ*8oX1xw+xhBt^M0S4Ze2OAVPFsmoY^=71H;em0@0(UzdLGFYwY)Ut%*NZRuDQvB`nJCQCKVOc z2Of578wKFb{^RV(dZ>q9mk-(%uK@KSP%BF!?69&1VjHprg}sxQGQ4B{6dN>z(#s%O z1!TO&@6|7OHHwf%O>A~~_eT7SlIi~lszx&N^-%eAw zPLw0q^(W%-q8v{Bwy=~>%_UylJ#KjotduKI?9Ym(Xu9Pb7Vdp4DY1y0jvTL=8O}8n z2`$!}gPBPaa(;zqzcW4und18ua3?j2^+F)eYZMYkNVfFR%RG#shxJ@VD?<=NpQ+A* zAbkMXJ;r&*f1WZ6*1xt@K$j&}3=0vJH)VU4qJqV%JgpU$KdgGT#{)GClrpHfq0ho% zr<~2OH^^V6(#t$Zr=5|Cp@%aUs5_;PS(^dBdw6tYT&V-P>{RUVNDW=M0j~};z_^cQu^=woATnvwx%b+(~_sa$(+mcVyP(VcIE}{^iM3C&{4_k_g4m?|h2n)lSzfpkTK=HYp`XGjYWJ3Bk_KnGwVfa;gZRK_DDgw=0? z2;s!UnW_azLS8)J%_zab!I8`xx$k@G0lw}qYIHp&bd>Q*yCRc~lm>5rN64j+qFj@I z_fl8aOpP7@uGXkj5r}BX-2m9%4 z^k6hY!$~yw651muCK`PN77VB+B*?3d#}mmv87b&SvcXk&+0q( zbZd>{Qq`-S8CCCN>VuAU4rnPt;n7s(&!V!k7G-9kbs1xcxpN2lxagq(fqtD?U5!@+ z6G|FtYAw3<4Q+tkWngK8nYFp4#UDZPAhxP%XtYB>K>8KSv{(@z28gkPV9uICkYUDo zj>%Bg3M@{YkCtK$&neP=TUww0EYT`Xdw7dfvFocDEWtNL^IC$=f|x4QuBIph#oy&e z#yJ1e0W92?eS*}Kr_y|l$-frs_l!extxQ*};HD@JA*1|T=svGb7xYB(&1<-UCY3r? zLs?fLFVDI+o!o+Fiu~+hZ$j*GuqQU<`ws0Ps7@!^4`1*?!=Bc2jsyO;KAM8+(ZOTSU=9|r=A=Mwv5!& zFOd3>#Lzn$dZo@&Hg(TcUC4Kqyi;V^voNrw#5s09y3!eNR z#|w=mHJSim0K&jCLtr@%0e>d0VhZk5B$nBJ{}=)u6MSOgz@DY7PoEOry<`0H<;w%F zeO49>_zX-e(q9hB(Fmic|BpxhZds91z1E%Ys(F;1~2Vi0CjnDh_DfV&F|KU`QAg*aH#bzi_w`Ia0^a4wmDd|IYpOJDWm#~_i2}g}smi_q@ zKdRSI;Ugk{HO&f}W=`?YJ#Vi$bhfS#C_#sNsD?7zmrA$RCVJ#`b};{SA$Ul_4#ENb z*9$>bhP;9f=Ih9te0~$Q@4#|G8X*ZDMrbyt6BJB?356FI2-8uyv%L-Uj(>Nz?5djp zlvDr*rzpKv@4v#OQbcIjpexWZ0a?`!c?eCk6y@CTVPLpcJtpMC`i6!YyRKGxb)D-O z&z%Vp7sWI8#PK9vr%g$#zeiu^z4`OZe`Sm(jv>}J3VQq3z=QqdaB~iEgmSM%$s3&D zLrq>CLCzg2Md=v;DDQ*D9eBsX%gZ@EF_DCfj0`vlFwMh*4MdAHoY^t3v2(y|V*8^$ z8TkMd42<$gpXs6mp}hn1&)1^t=NIQl3wlzYIUr$#`;KK&g1&_N^32w4=PKFoI1r@q z9-f7Rw)@AQr9RYAfcAd6fPCLvy35Kr-y8h<9$fZ4eea7fS;yHj?Y@PqtkQV%@0%@6 z{rpB{Z2@QtanX;XUeWfy2E8hspnE36!$c4&2m&1tTTjZg!2gm9V|4lR^*UH900g$f z`=0Qm4swZ(9>JgT5~w+#N}z}e z1@W#7(%yGXzs7Q4!~mp2H(b4tYkkaAI!2xFX9hmUls}$ECM@h}Ckf%%V^bfBXPFfg zG(IjryZM)CJl`Bu=85xdL+o0hzvFTvjp_06@!sG@5xgzqUF}F$q+10~eBnX&L*P2} zZ;J27GSJgQ;}0n`IW|1oqvhlz1P%aV1f+6k(?eQ~4ZPO4i7>B1_W{yz2u>>`3<5j0 z@^$U{*Wz?>I1?!DjrQkPQ@aUO3f}$79^bP3kzn36Qf5&1IfjI>)VoKRMd3z*{Y1z6 zk0hje22n+)n3R2!1pA#k!7O*tQ9Ls?-tzMX0cP9$Zd2ko`vPJE@qfLTjI^{7bQK|0 zIY%r9ET8&kbAYCS1TRHnL# zmdj7iQDWO($vHXQ0bkLw@cF$iq3_O||9s@eEg)tb=prN^!80R7=s{NXil;_LtUIq? zNPpc#^{njIDSXp%K0wZO-}pzGwOmp((5Y@a=UrG?f2&gpt% z+wQL+f9T|+UMtInSpr%NfKi~z3Y;N(o^wWl1(Q?mF`@9DkSd<`NpnC^iQK`aQc zdsMAimnMQJ{~yBM1D?ya{U5(W*%CssH`ye6Z&@u7A$w-8tYq&k*<>Xtqlm}~AuCDt z77E!}|Ksewf6w^-zW>+n^?IJViR-#P*L7a!d7STc$dM@m+IO-1ZN2ys&5DGCY+&1kgJ($=)#LkWx21_UqQw9FVABiQQ5u*sk|Ns1O7^f8YP&1Q`)GPu52-a9|Ez1%+3Q|SafNebrR@T`C zM-fmr3%2Y zDBu65LNJ4GhM!% z4C04|y%~Iztdr$Ag9~qX2+UOu!0yWu|7}&rl9getGlY>dSmcW(dYYoM(cn|~C3CWr zFC^!e)r-Q2?=d~%ca380P!3(KLmE}!j^dbcb;xQp%WfgS7Q`~q%&M?6f@<=L`A0Im zvnl)w@2dZNV{GZiqH;VHb>K#;IWg9;rn9qPvd3RdXC?4>C^j+~_15?P8iTD83T}cS zLRR=x@cWT22+LOhz-R_h51dGr81jQIRznH^tdk6?B&do-@45fciV-Yr$d9<0J_#5S zir4{r9LfsHkbFR1H?9fm9fTgB%q*y`GOt^ng!#TCFC9{YaR7K5sK=&vnlAPV%H~gZ z9UV9geohMPf=sY01Ho?!_FJy=8%e5n5z}2`i&4nc?gLdY5IHC=p`S~nBW|)Cd|R3T z%=G&l@*_%WV`Iah*7@|mj?NxGE*#n-3u_W=tRMspBUBkVZw!}Vd-*LqnH%iq-eKHc?=QNlvaGRljY35; zE~BQFnN6)O?ZXEpgm5Y4=e~MH^3IQgD*6m8e~?ZAixJn|`p2-x`{(Gq@3u(bUMR61 z6kzQyc~*IF#qKEW@RBITuYtU3QkhKAq3xfUW%MM&Vq$@pPtVSWj`!?km(X3NTIB}~ zu~4T+utyvc!;>H0S{{nL`_9`*5Y|sdIC;FqlU9JQlDL9#kzV!Lo_qkmknBx!v*tr+io&(O$GCsly?iJ;Kw|bLz*B zp7i?-fW#31mXRr!3-l=jVg)ciWH$eGe6UstG*WZ#T^W8Wu^Q$v=F;FI|C7J|2gY-5 zQVgd+?x9(Az+9__W9|Cpm+Q0tI%??I_C5fG$6!eSQy^gD04K{kIPk1Bo=72wS53`h zAd#uluI@~-!KeRS6-!?<#kil^CF)cV)jXh|C+GW}?3|pP8DB_DKitu{qhIjJinI=J zKHB~&UK)Hzs{4_htBi&7bE@V!hE}CBrc0C>aj`_On=CM`j?4NaO&RS&$5N54NTvuj z0-I{s&*BAR=#U`*G28!G6wq~JFrOl}t80En$>wrv`&m|4bO8j6Hx(iox*gs#k0C2l zp+|X`9#a)d@TZJj1(c{b2`@t!KcOXtKEl)b=GKq#M}aLyF4N7Y0Wwqa5(R1Tsnjkg z+9f2A(j0~@^2F!&cLd{8z#I?f8?sSMV21lrVN~9n$$NrELC^=H!lEt4SgPj5o1L$UzY>9SDhF0lNvXK9$Bz z7=e!-U4T=fmmSKVKaK=oLkiR>fT$F8TPA}AVh*0IC5Zbyy^kM0d13&08Y1qilqNk- z_*Zl=@7qZRHMii~4qf(UCX~Oi(iftTx4u53lrR)HRPbKUE&9pHNQ~TK+sOk5M#+4! zO51iLuY(_NI4)h1&)0k3nYbeI-zRbXJ`lXV?)cA1U=q)VIUb4%Fs>i$u30t(o`&^V z&~x1wav$Q3-YS%7&1!O7Rb8Bvog7Xr-nQ;As}NU4pOT2k0)`KQ2cfQj4UG(ZybFM8 z+J1R%0y}UYkTyUL5lyh1EO4U0^nfJ-&^tBRCU^Ir2-TN`5tkby2@7rtpE+7lw%uV+H*M)||#)S1iN@ry-Zd@;z)fer0&q2Wm;Fh(2F?obX9&I^FW=4vBQfm0pz}EDib7GTiX% z28(~b`{pU2H$6}=fZy~w2rr-{2Y9_^8!A%Rtm%Mt+SgYS-aJ48a)wu&Mj_Jg&KsNW zeYt{wt^bWzJK)osje^<@G~KNn$tASi0oImUpZ+zEmD+@Cv}a z+EX29y22ezmqgTHZ9Vp!k0lcZ#G$;{USWaLB{j2?1Q=L|ZcAg2P*7HOxr7)4KD0tz z+1&kHvCxS<@`dFI%#QEPUQH)tj76k|KB_Vph2Vl}h2Y-<9E?FWm!|ElDxqtnN z>xA#GKH!KyD&F(_DeB}zOc#5VwJx2KVC;3h1VlIJh>CWYNh^e}PI5}ord@UC<)^H% z_wq94letUV+O`qd)rI-!;b=lC_8Cn7)Wk=t!^+`*PIz0B=uMk(Kn67*B|Tf{=si9e zO(N+I^bLo|roTi*jrr&g+^#XgM}YG;#*o0Fb=lEd$^wrIeJdS(YdB0l`vY$o9}5jk z>9c_4+0V@Gzqt;-c5Du#c8r4%+XlVcsbBsc>OYgv3;t6gKmJZc=|c%7Y4#UqenlOc zZESQjDEmk>isZ+ysc9`@Ux+?rR$`h&*ILI7n*RE=_okz3HhWuZR{4CP z%!!Hvi&U0>O3H^a_V`Y--K2;!;)(^#awXV!>YpSn>wUiB zBx=vIq3i6->?!H6*hRL;*u}a-dZ{eB1?-It^cj3o=~~+{{fOy$weATy>%z~(gvTyU zGD>A-vw29i7C8z2{qb%k!5sJC1KVkHu8!KE&gD5JHucpEF8=9-0-ZP;tIoI>h7P|Y zPO8;8@>|!nzo_`>VFnLrJmfLMZQO~Cz>Pujtk*`TdH_+qV|4L4}l?abMuG}Q3rLe8(50U=#zU-*l z<+=X@s*`o{jBRa_ALa5T#5Fnwgj4Mv^Yagz{z8Lyokmpj@Ji{weshn1o1CpAJIiGF zyYs|Vo6ttho^cs8I7)qi#;RSsw0AcFE3cz$E~|Vhk#v}HfP-M9ygj2alX3UnFb=o0E0VW83fXQHY0XuyHF^`|!Kb~2=6aWR0$nvF)s-_H%b*O_EH*N_}j>-#uc28xv>1c25^}-tkYKe1r^4L8pTK7xBO==G=P zJxg%rSoJO~%m-XA&aBVY{rdIZcL}oNu2_dr)z(F8%zc}*49Ws|8WAyCVvkn%O zBe2N^hzN?Ejz2ts+H7r$&|R?*4+>1qP(s-oQ&o>~S``-ZiY`<;Vh%-D3uTF4oh>l+ z^x)5N{z|NH8Xjit;z!Df%NUSQF-`B zGBg$ZV78hx!J0{|)lqzue96$8&##&B--@rFM;?WOd6PI&$39G2R}V2AG}c$i!$&Jsk}xOAjN@yMRr8k7lP2h?(55k&!2N41_{=D z0AD3Gy9KeZu(Wk`mHlKfXGutkpFf8zlR;qNR?qF~c+6l7VZSjg2Uq^)Sz@en8jj3& zUmdAr9uohJoReA<40`^&vs!)rhR^Y-K>9q~aK^c&A`zV%ibwtL%*@R1jO{08jz~fjCEq&;^YPScXu95kOt=s${F9X^9DN;gAtKr37Y(+5o*L z&`L9};hvE57^nb(ji8z$t!!3+TtTOV)EH26K05l!FF`DMq z995A5Fv&)tEapIeZ}8vfa1i^Cj5kl3SaN^i%4t6X$R%)YE-`i@-|oZ$ys(N2X4uWm zWUwXHhEz)NwfYuFGV+92$R$YK0D>F*dXC43UJ#{=cy_pVstI8c5ptzNBp}9H4ITRO zB>^ZS5FJ_L5t^?-V3&hkYvPHyK-$+j58lRF?_|l9VU*4bc);+`5VAvZaC5go`3DJf z@kY<`g6H15GE&?zKew|?LS4xD`MAeP_%iXi)mS~UFr1xs=XtUPeC1a+$xX_6noOR_ z(GbV5iUbDEP?6j@K+!5uA3X8!r6IfSAryTtDo20#RCo!#dvVu%@>H326W z7w@90Jm!CCz-rS!4-apCxOo4i%c3S^;(D#VYIjV(Y)gJta*G(^8qC2|f^biu`}+$u zE+UH+)UHnA5VF^mBI~qa20JI~FV8QakgO7We@^#CEtufgC4Fmm7K3Z{cfGK5@|oOz z$+IgwT%`TknY3tBxG`pul+|ExuqiiocpwqjVDHf&<^F_M+A|WNw+RVFO9S(~$kGLc z`>gw1$GHjLUBia`g^T|_l^NKrP$Cx4NhDNMAHi-GG75~c=TdIyo+zpq#2Ep3f<#0e zFaUuzi=UF9COI{=@?IMrVDO!vJ{7_~3&=AB93Z$EwnrT7>^afQ{4NVzh!IQ&5@2#b z5^D#y?e3k3mK)LcQ%`v+xW0F;4XAph$~9RLtCkoHGMbHPI>DurKJAQXw>|d@0X&@K zSBgrW3_g%z73c^B>|@pCxK-Zv_&um1P-Zw1Xq-NM8eCS$rVm`dqhNXu;GK{`(+ODx zV6a3Po)8dfCVe%5`L6eO7NA3l%gYxldX!pgoN$P+DG5NN>O4IrD%WG-lcD)dD^u+i zeNJ=?D<6B$cP1$1(1CI_5YSPIeD%K-~k6CRGaFQT+7(_$jLsyqsGxNxlU^C6ij z?{(oBfD3~ldiYI?>;Zsd20YL1yhc*gxCD}8jHN7Zyi?lV59AMaT8IAf8#|9;fnL1$ zFzu)f`SB32<^Z@T8gJc#z3X6`Le@xl#rGh(0ELXJ6(oQMIu0@tvhFu{h3Vwa;1CfN z=Hvu`4EXtz9Tjp?;C2RWloltWPUdGC$d9*{iQA?=4;^llU~gPk{Vbj-QfA?L+~auN z`!~JbRWoj*pzURA(BWB6N@dm86M(`z>RQPhFoJXYi`k37MxX#f*kNA>pAV=b044*$ z!K|Z5aakD)1H-8|VEFdqK^0*Ps65Bi;74G+L9yHr(ufHl)C(|5;ZyMRL81U>rLZ6% zk3br?!*O93iOGE=*~$AlaIU$BMfEFZr0UNLkKSmiFEq4RwR}U0!^8w{(sOg|C0#rQ z2|-=oTgytG6W=jp$jbwzC#7J72xrh|jjGK`GIof%jZJdO@q=(@VzSqASCC_A1Egt4@ zz9(&y!bvzy=OBcheTW_>>Y`+7g?*Qf(2WYmZJYY-#NyppQ;=9KoyXfb-tPsTG4vIi zrlU<8-rM?J+U3i(BHmlW5Lo^lG&DM8zKKuZ?>wBoQAnqC^=&?t@>~G3P>A5@Z0n$#S##T_)GHnVZ1CYn5 z)&Pu#1Q$fHwk~S6>@$IG99NYxG-trL)|Mn+Z$g=F^E=(S9W8&k2fu}=QX~KJ_eVYuzBG6l z=HlfZdvW_6AA5Rx&y);bziALnALd#iG}Rn@`wmfHfEq)d=ukju=T+qrjN~4lb* z5WfU8gQWM?RAuicLFYLeltqj{?uQSnwsx7z$4>K5oT#_n(!1*1OIh!x4>~fXi(gW@ zeM7xO9I*7ONkUtQ!fG-!$GCKRr<`wtsTcwVVk#|_&(R*AhT;Vl7f2saM6?ww@j&XB z0Z9%Sk9MW0AR|)>*8XYJS^VkO(-le?j+Npr0 z7v)|;cZ?RclBRsYf2&RY2cX=q@iO-Y`^(|vM*t}24$w#7ogt#`0Kws_`l>AcOT*5F ze~$YL=2t%O#zXvpDip~80y2P-6bKrI16qJ?*n4qc6W%ftP6{ib#lfBXCVZ6djg8l$ zEJP-z7%zSKY_UwrvJKI3ZBiTo1_?>1Hq-xFB zR{Bn>c{D_R|2!PT()(UM|DOMc$Zo?o(c$-dn9Ro{zWDQ{y7l%JY<#^7YBF5)tcRAa z6jEP>VwK-Yt85shOqUL$9tAeG*)79Y9)Y(Kx`K3ka9gngu^dQp=0Ui}YB@?sY( z;|Q5{(0y|G(J$wpH^G?!`J50Q7Y17pF=$x~7@@zIz0O2AEIb zJx<}$Yet$Kq`F1YIC1wm=%ir`MD-X4;8G(r`8POW_5oRmlOa$CKoc$ki_m0IdG5l6 zPB)kfAS(le$_`*4mpI;=MaI>PjHt3_l)kRiI2cpS{n}mf@5BaKC4x%tq&QbXLkPTJ z_9?64Hejtc@$Da$dQndLY!V8m6PA%f&XHqjSsCE>Nc6X|jl>Omv$5b0QH4ALs55Ff zlGQ-u35tu3pHXndf>wR>hrC7~?4ii0aRVnUbO<8nT7vOo4t`}6P5=7-K#KiR3F*00FH(kIZcaIkJwLBlGjCx1o?bb8kKR3OgrfUR6~R+_HoxPt@GpF2fQ>2U8BPXZPNm_=8!Dep$@q z@Z6LeNV`cb4z$ujK>pA(tQ3!z6Lgx&lTi(AsG9 zG5~=BdHuN}my^{L118ssRAC;47+;`lQ04t|vlrKMCY((qr4tKf2?6tmB-Us*TmQTq zH@fnaA4dI9GQqnB@yyY-gf~8{UmKY2?_YiCt32^5Z47quRzf!L1AD%A5B+c=!wMys zvHm{vhe8dpfx+x41pw|*#Js2UUI1GtfeA2msHxM%`{0s0=~~-$;YT^HLR1p8XWIQ2KxxBh8ou3B=Vhjv?G48W=yqS~}yCM@%;>%{U;{f80M95_~6_y7?->)${ zB;*VRc-Dc0`L6?8Og8u$Jor)lpBMHiggjWT-v&h$AubmPF{CiDwzl3o@?+J^K+ZFi zSiJvh-t*mE6mkhxabU{9qBQz08cGgrBO@)CR**Uh`6*#v<0CR>A;sZ*&Bcl?tJzL& zM$EYCsdL^`G1lRPw++#c*^aFHD$5BUUrxF;+h+cAd?w2WM3EH!Y7hzvat8ULK@jzW z$>Sc7Kv10ns?!3l_@?ZWLraYR^-9T#$botW`UFYSV3t;>9X9|80YpooIRtHOTAxq> zsV;rIj%nn7bQv^qyeOW&!kN0HgauY-*y%%(cF+Yv3CTmTW7{92@a*e{l$TBxOZKRi z`>VsJ9?|VM9jrJ0YC3yRwusz!`y3T##K!Q0xMN$&`{(_TNE4~h!o#&t zHW^lSZp$OhP-``tJvl}mAvkmFlVn5%m@PL*oK%aZ#XxB)`(69%R z1QlS1^RE0yQ)PJd*tQPAkeBqeT1&yky6Lk^`J}iJQHvsebS#(sh-k+&tn7*1Sg`q- z3)g3!9^78&GKCC4$SfkEYYZrFc+v}VQZ1aKX5~fQV?GlMkP3jU1tfFGC8?sKg5vss zH$oZwfR2GclMmJ*v%VZzWNQ%2Rm|0{dIE&2t1?UXZ+p z1V@kQ{zr|6^So%jT3Wi@+_I>xr>AOQ zKn*N0E4=A2^YueC%5k*^uN)49n?PhG+o^NY)9|={_4*$tB7H1Wn6>uvhSc0OJVx=PdmE@qqq-h$E)cOfKaO#8F*>sRGoK zp3oTr^>(2Vd!J`w8lTFW`&xt|Svah3?k6R8iBOU2ij7UAOUWhPx#c9X z5Qcvb0Jhby8yva0Yl*P4hA<*XBLh(=N+`Lerx&i2&j14lo7OV`B;myC|JP;CU$urR zwM?zx+Bs<4;{vcH+;So1{1C9UJs~yuEO_!T*T?QhN7UIX+IrVRCl?Du?d1YJ7h?U5 zJ@s`ppAN6!_RGUNz=ns5%fQSWlmbr}Y=-+96(b_yEvJMpwpXNJPE%jT*{k(^0CmZY zTO>w?(F-9LYtFHMJ03QBNzGVyxSHRFPn%6<#j`v5a^Ti?sbZDe*CwYdp^_C_4HU*#$8E4j(`=U ztl)UlhEr?8PaLNAEXfBTeygD*gyJ~8C!}khQAFf1*qJe4Fo5?j7lgYIs0ro?5VHZ6 zgMoI9McK`lhY1w&`;iJBdi8Za;MKBlPQ5WlBb_^7)xQ)ywdu@gdJQim=#!_d?NYkU zbn-#yIpbHiQSJ`3zVq1#21&6Jn2SN!$Ycz91Y}xtxB~n!)NC-dYJfy80=7%@&gZD9 zufjxbsTL`hTVqC`wW5~&BK)fdjj^TXIq5mt4|+?@B$f-$T5n%Vy!W!emHwNVOg~6h zpO{xZ9RKu+THtAsO9mf()Jb-a5@|G$)K>}S7D@YrrLtIMo0`5hPc~6!DY#ToT`r*+ zz3$9RV)+WceE6*2aVnj=a<%E$dLv06D|48o(zYp#ftMri9oS?r6)^b)ZV%8+-IkT% zI$5OEB)1UYhwO5m(@-=(!$%jGc|hs75EKGw<`_NUe9L+gCRlX$N4owVS<33)DCIpD zeqOwg^(C1UsNTFhda$^X0-g-a3O6izfRKGkftA!rHC*^YO}+=G$5x?NLTkxm8UYn{ z9;~{|#IJTj6{Dgl@*!KUnjCoRx;IQG-2yU26)Cf`-aqp9#8S^l>kohRl(o%R{ku$6 zXTZ!bzeL$3-?yyy{{FecxCfM$x%lv7r6i`%gsLfJ;GtFG!^miK*8OvVDK!;MTv&@& z6SNIH`<PwlwEsCf*0$cCY_M9I<)no7q&%M9Elxx_Siq1f zqgHXX)KNr)mzszNhZ`?=CeK)p(dsDMBsN#|CJu?vfvod zqZCO^^m0VRk_bE6PM9o}2R)DjM!yR+`1IK>Q0tQoE~k8E)B13zR6)R z$xis?sP%c_ixKK^&@eodR*&!q}}0FJQN(~r&sx9W;Ayiw?+lhl8HNJL!tVp%gf zzfmTd%~Hivhd%7zbN^a<iPQjEqq-48sd^@U8U8qrbEw-)Z zxv+lZh{X_p7QejConvjL%OUGa8 zSpB(TJeFuY?K7xWsr;XNUZjyCn_?Y5h+A>BGD9;Cp5*waw(c~Be*I^{Z*hLuE)3tQ z?hh7}&#S(jg2Ur+$%AHr<$-W=_1&22x}2=>)5%y>xL^2&Qo3Iz-R9B#b9g2!Zj!*k zX?=zkle0iREL~#b%BHsvh1*o#RH4vE z1)nB`CD15cP`>$}FHdY)%l(N&*iap{qwh~0nh*I zwvqM3F~?Mz;hy^KbA_4Bg|V?N#*(UD0<)^5Bu{`jDMjICip~IQ;I}ip^OuR!oKLff zUAxz67ru~`p{d!421(!1pW*2)UZf7=Xm3bVkhz=ag066nfVi2#NCvt53v4YDhTsb% zJ^X)vqf(yreR7W~JOW2i>Y57clo5v6j|)|L+8I{!FIwu&dJ8MQbiHz?_*_|+lMo=> zL{<1L;X(>YmpSUZ+|Y-c&9J?4b@+N)JVjVhKXSy zLHP1b_?sk7+wU=n2e-}#V|_($F=f$Acseb#Y~QwA{o;wMIxJ?dTEQE$80@7WX2D>U zf@Q%VLc>!UB{ddk9-gBI^T$+`ijV+)Q#d@jg*n%5xjrsjxZ7gzWyHz#TZZjbm!%WD zax#pZpML22JS1J=e*YXV!FRbJhA{Ok;*5?;IVD~!4G2<%;*=R`g;|^?odhg7$E2P! z?&7!Yjo%DDt$CJmXTkny#p{Q^Bkl=>@X?N}pK|d(VZ&ICID1X^u8OuNwQTxIN5Byvo8XBgI> z$Mxekaj24%siIX=M1`bi{v|di9^Adm7#kTLya*Lm3F?!IvSU%HzhMWHb{XIFi z+uaP54HGhv6$Wv$If@nC-{DafI|ed4=_N8hL2HlD%8Fs|)0E-3k7@hACmF^PNR*iv zY79^$2lVvW=wOOP8RnmE0t)~;p@L}@j{U9^Sjy_@3v@YIL8r5#G1{`b>%Pu{ z`*eAE{);{Oo6>&j>6aeN?jDFbYn4xkKf7rs~BO*->Nt&Q3S6In1 zm>v-uxH5;cT7(jiSZbxfD)3k8$B4AVACd;DnrZ3e`=`$LeB^Mc+;wCz+_hUQ=AwY! z#|k(+5DkUJo}nskJfIbe;O)v6 zlBSCu?E$I}ybSd5_-JOYu}iu+%+Kw{oQD0eshRiL(LG$%X>V_>EHxOTrnPWW2ymLr zwQw*DMvTb=S!-)+kHKpd6joFjk+>Jk$S~^(MZe55vaUo#e~-hgbhKG)v0a z3t27MOvdenyu@!uN=jfoA{P3XB7^fu0d&3yf`UBhxVxE<}3)Dg4W$Y z*lv6hU+dGp-U7M6X5gd&fyYlt*Dx>4GwYDc2b~ujZ6s-x2=sV0RYouZX=Lov8T`*gI*D-42GJI+(edMk8=T zL^eT$NzRd>Cqpz5AZC7eIe@(p)dib@%hSS?0YbW|&Pipf;T0WgH!M$E&hWehbN`FI zk5eb}x_{)kwqSey+CBGe+xvz-%_(J@dJ*+;gU*q300aQZFol-_%f$(`2?6B;qM|}+ zy~E(fLctsbMYYQ;Soa$;A(+$!<^BuXlAnD0leLH}+2_eCELLtE)4FlvQyfbJjfrxT zysq>H$eMn*;~Vs=td#%crxL+FHeah=oPdML&M&v58(;Vy?2FOXt!Z85lpuKU#`t(V z8cVrazR{Kmz`Og>cjel?3?W`y{AbOhntrXBT?&4n3_&6RQI9+T(oc6nKmk&T+_*t} z_^Yex`%q*=1Rgl~r-yXCfZAUAQg*Sasi_$D#&W1g;laP;-@)eM&(Hm9AG#9&x^OD( zAX0B%UaI9qL{U7miF-#}OD9@#tuMp;tU4nHndvkrG86C*+qxxT_X z_m@B7r+H6m3)!5%zE=P6AUj=tD66OV5n;`1KP8#;O9wgjq_X|-R3C*M%m8mPcvXgV zkbWOEGzI&Kq72|jpjI}8|HB9GgG@#5?PW!fH0k~K#a40OvC7WY^6`Z#Qn#F2H0q8L3r~W?$iW?BEGwG1))*!-ha=(1>%-v&-QM$l#9DrD!t-~!_*WW6Z@ObRWSah^GgewaH=zy;nDYtQlO|=S7uaE^MUQz0sH*N$$^C#eR!jwwqqo{Xe z6d6=VG@h+cv44Bgg{l0pn0xPnJoY6(F<6I>_qdNk#BO|}|19fW??zjH(|oCUR=ec$ zlz${+-IL`N5`HXe*%YUe=Z~EnSpf!e1iTU4t^HQjhm3lKiqJdVEKQIVtH>4rN7Sr6 zBZC?U1=NilH!L>R@^i6HJq$vGihvs#-Lk{|O+9GdRqDM(Px4sAiILyvr-`0}6zt?6 zT44Yn5`v=-j-EYo%az@3TtS?_aY1pzo&P9+VmP(;qFum_UxP88@SV;e4 zqoGECuuz8Z_zTP3n6j%4-|dk|JRfZ7b4Dj0Ar#<`{AQp49}LrGkoE$}pSVC$gQOe< zDIhn=KMCv*W3vG+>3klJ>8W8OlnKpa0Xbu!wQ_!07y>;t0|TUgPWChWFGXK z0tuy8StC5iT2obLZ>jI;M0>SNTlEy(}DG zzcpd=yU;!G@>F^G>1+xgspT&G63J^Hnw~i$TNB2_p7j;n$eoRv(P-$DP6^po3&res zi`~;LyA!h?lgI|1mGZAQ+5sDK=*KAa8)s*&2nz6oAXK<1Ly!6y%fv0~}<(qE!|qYID@2_V;or z61}5Vt9yH%6aFW@C?24pq`cjGiI~p+kY6igcV^t%;a} zCM8ij3=4-z;&bW((+9$TX3&=tUO~0xjhY{7r1J;~+5B1+gc$7mLPDoLn-{}CbpejO{$CV|^P zync}ObC>t#5U(1GTB7E77*eDb^p~!lqUDC0%y;UR5Ni-N$5*WpL%@ zkj=kkx_)4t8Yfd1gaua-77=67{q+?*-&dQVbbAZw_i=Pe!dA!9KIs}X=_Q&&8@{4B z*Ffft$RK(dSVXO8wr`^J{&o{)}eqNQS9@TJil5~^yZD0PB$sZCjz{7CLCH-})Kkufw`Gvis8vhAd z8ON)PoQA~V{9wiGyHbsL>Euq~&P&omzcJ~xsY_GaBKWz61MJJR%J;0vO@R1HK2M@9 z%3y7c+L8u$KBLp!oh92W>Kq{vFbiKB=$v{CSBYO&2ZeVHqr`F6+ zz|m($Te4Xdk}?jE+5oWx#uQxxr_+#G5&*eZ(9aa{tMC;pfv`jZI|gRTd#3>ax_MBF znl3}33Bn^_$UfewHM*u_#wt^QuVfif(2y54JzPX=(N}3VF1)p&`x5?|c(CQZB`ZdC z!^XAnHWUkf*|E=jC#QFX`7F9A0p}drhD9GT2Q9!4j|FaMNRWbXN7Ob6I>iIUhYO%P zgl3-ut=V~9gNIUF1fOkq+(Bpqa}O+_NazBn6um0Jxxjpjo;-kjYwiW=@s?YFDHNQW zH0`>jIMp$^t!qqE^N*Q-{>YYV?e<@1XCsv(e(i?O+s=G$+?JBm$B%rMQl=?46B1J@ z7z9ZlH3hKoq%lCA%yYgRI>+R$HlQ{4etj<*S#YnM8L@nI;A8cryl57R|Lt~Z=(iw? z1E|s#!U?S4?k1QM2a>~%5Fsb}q0IdxmGU9fj=Hz*=~spv;N#&ey|ll0ie_cSq@C!C z|2|8>=$k?LBBnQ{%0vqbzc!DL(DVIV`eG)Mw=oDq(7MSFU^}P~R-YBqvx`0^x}3bX zB8j!PVvD=(^~{>W`omn=Ea8E$(w3U+qSJKAE^*(k3dbqg7&olNwf2)wJZfiu6oqOk zC%?GVBz@ExqLXiR#gnf@*RXB)k}gSBGNk$_Ts1LCq7w;NTPff8IT~u+at4~*Ukw1j zH3zaFyELF^1}!+^7P)S}4EQTqtql}{Iv1jmM+$NW@aVk%H2a23DFG-XL8_=_Gs;I@ z_fBYI=w^NykLmK)lbN(Ox_k%HaQ%G6an^+4ThH?~!f18nF&p062rX-4Aad!!MNgnW zQE;jMSnB(MLtYV|J;bjt1L_MC4ZrViS5)hw>}XJWp~w*!n+AArbD+ut-7)I01*H=T z?NHIQ04pd${!vrj>%NjNX6}JV3tCmTU)Sqwl6(-hDPP>L0vZx%HohceQ%G2sf-U?U z@qry=k)h}(ufC=1==y+)Q>|E{COby;$9Gy%`I|RI#SHN-?))_G zf}oyUQ{`W0X&8A#9s@I-24Fbs`Jk~6_%}n+u6Bn8aMz;1q~xm z?j0~@F>c%Kbinqtfihuadqb*zczYIPWyV1Aqs`sHQ{AS;g7`@-Lsi*}`M1U!UM%UqC_136JleFIM>OEV z6+IDVv&$N@`Yo(z{ja;#u@~RIE|~pX0tyz?BMwm%y5=_tYL303=0om1px=&B5)-mm z!2T0X6R&*ehk_N<3i80v*3r}?A^kwu$Y~A9#YF%OFwmX?G|mN}mYkcPe|3M`2H5%D-$ysh&2xQ^y|T6sa9=pjPShsKo3?`l z=4xFIeb(NNWdcyv-#ID#vMB~%_ikMI+|N=-sJeMfmvvuQu=YClhoi~67Un6M5N2=9=~IuM(Ye+^?FJeT<|UZ*TQrd(E2-~ZLcTf5`Y$OJt! zV5DFO>2q_+lwIq$IB@?gXwlcY8kgG)_?eSg8cdkVxJ~}?PLOTYEM`5pUFXi7_za)_jJ4I==76@|hyPR&fO^$?=P*i` zp(*KR%Ji-mt`%uwzyjN47_}&sBjd!6X!Pr=jAD4oh>MMiB0#S+Qp!MA259fA2x{JK zZ=k>oq6P*AJfSDiKC~MshF%8Hf(2a9=g2AAVYStRuJAAgv^q?5|F|-)09^u6ye$vI zLu=?6*rDD9v4-eDj`?i%82BG;V{!TYKK12eDc=K`^u}y$bxxZyBA>f41+l8k?0MV^ z?uKEuq^;YzHlV7ifl3b@9d?e)moDKO{=`EqkRZVowLO__k7WaL2IY>r*P+x+e@^xs zL!~niv}mmmO{FNSfCWk|5Mf~U9IUzIB2X9Ud1!98 zr$V?N>Oo2qFK2HeOqCzrzIH;ox|dN4Y&vKghHH&s;|twT=o%+`!AOF_KH>JawzvQ5 z1R#@-=(j>a%%CEw0DHv%K3>ktIAC^pSW&D6hzBy*;W;8YUn!xLE+|L!<=x)=SgDAW zA6lN9Jy%3^f^>SnHXZR3G$gjfYBH>ToB+h~Nj^URuMhRLKs(|=dljhvem0)?VMui8 zZVssP_A^7$B?u#upv-Gu{`!ikGI**Orp3R}3p`*0L9+>l@e9e>TEByEu@rhUyW((3 zkxBKGtnVmk?ItJd)><#p+rb0bTZt@xIEn2?HIzKR`L+1r-1+3nh4i)Ww|s-1`HrsN zqMMGq?{Uv={T>lv(;XKqjhD1OcW+S9P(`Nz#v{lnoqZTcNis95>c3|KivrYWEIFI& z(^VJ6l29{3=nusYqYQP}x||`CV0F*ELwg!abw=dRMp>z%Th%OW7Dv_=GINm%0VPsF zUk+p8bT4S#*xAuB1#%g-UWrWt5KTdMaFX(2b$ICN35gq?5TY{Q*GsL;e5oMpC)2K zQl~rCaY*N93_cZ~Dlq;8rQ>5%%sb zw79k!$X7lKRWr)&@|jOo@K{mGU$VMNBaTpCT-3)K#0VgZ25B!ZvB6E1I3+^P^M2W> zAxs7TAp%n&iN!mW(E2EmZLr)(TH^B1o{jDL!66K)Zro1KttRAG-%Qq>ahJd0Dx@?1 zRtKa{0Ox|g&1u|i82ukCEuPcC6eylH6s@WHpet(mb-y|Ck3?4ZYDI~PcfE6c70X!0gA3>=&TpVYqUI0t99nFiXBi+kf!M-+6793yrrRx*Pcw-AZ-y!($ept>6c* zUJ|+X3Fu|gVpBZ;`%4%(r)(!Ol|z<3yk6VQ`EuIyYCVb1T}?8tAI5Ss2_@xRv(Jcd zxiX~U11?>^c3awm2M*1!SI{G|KZOIwMmaaodTR!by->H-kY80rmZ=#ELA1~t2jmhM zS$@B*{|SPS9DbfV9(L~V3+0yB&!xJ*0k(0)4Qq7Ynexq{wFIU9lw+6d!;SGeDrwtc4 z{;yl*cYB8B=WqP@7TmkYRQm9Y?+OpOJJ>Hu!XZ-g4Ll+Dn7}nXE z10Jjui0arA_=wqZ{##-2N4vtGdCk+}hIB}g+x%_V%8fa9af?Wgeadl~6}ffo8VM-F zs-X3gpyQMb)%-$WXV45IGnO(MPFB$Uo%oQE0jDpo#_DO&W@(~18O38T)jhQz@#W`k!c*~d6tQ_l9 zUf%6`e0j$xBklrBkVQnO2QWL4=q-p;bUOjj%nZ5* zc$Nv~@W1~9b2x!Qfk{s(a^`ubK-q`ssd`5dtDE1yS9M#=*1sC9O+vd+P~bQN+XbcS z5)6q`u-`(_&rGqBN{w}EO3*fRW88yZVxRdGm~qUs<_WkyNl4wU3WKI-02gRX_-^pi zR=dhgye3W7kNiYUD8)O4nN6|&us8CR@0G0U-!?8c~ zN{7Z1PsZ@~N+SIrI`-3F8|~i{<7H(4*oB~aR=_NJ#Tenu-AN!?y|`bZ|DnW`_%jj2}b4xH2(QZF4FKuSscTsz`HmxO#eM5WpJw4 zKdE|)m9a`@ZZb+{-eTxF6sXHIf;`Itc8I$I81D%wIk^(-ORdfL`e1;Y3PHB{Q<#1- z*qe(jJD-a0dv*S;7Uv}F&y1Tx=aZo?CISX|wUs^L|#+S?&Kl13iJ6=Iyh;v2$ zsvVbtVm~^JK-v;yhI2!hN5I$HRMyq(WJO5G5Xp@Dj+mN7bt!m?J)N*}JO(}$3++wn zGR5=Ot*b9xl9+QT5DetaAflGghu@?le9@vV6JIuRCgGaFO|8PpD8tb4RSARO%I-%j za#}Wa>>RI@&fI1UBN}r0VkfMbT1|~pWKM+r)$VW^2|}zcyNfqcsm@e&2q**i(dqoK z>+i~*wFNSqw#^=Va->aJDjhNvDWC_iHdq}2;Ms+;z%)7^1^{vwfq_xX$S`?DTR>K4DUe#8Hq>Oxc$3Zu$=q$36ww$Y;vmJ0 z!+5$b?Q{9*^7vHg!vSjc(|%_%G~pGCM)D3vG5!Y<#$N`XF^A7~2mmew|F9VOhuIgg z1uCEZeHw#_9^>9k6(BnQvJ43_51)FjYD|vNc0ZOJlt`LYvLa=(i}z}TpDYM@9#ONG z7UmT`G@98y=;SHOef~C!=-inqs`KspwUlg2SWui6GqQ5z;^?<%+QB zleH%@Yo-EP&LkjW3$xJ>=mdJa<{ohgoK12nJmVTRW%S0V$LTo|_rxO+K~bBHywh*c zBNV~&b21<7K!3X27*e8u1C#!FkWb9rJK(f`{vm0EVbCi0Y5=@&mcdc*XD$y>>dgg( z-*RkO=LOgXD8x3N$Km!-h~a{G0GDr5I$?01`xV!@LmOs3{3aIl1d&S>1Qp#nnrtxe zM5&2sKXG_T@I4UrM1OEUdltCvNcHC%Y#W}&J9aU@{`@(+@qTrL+Om@*hLbC3&P;R0 zxha7~$hp?IlLQ`8nc_;tH<1+33|-N}(F}#_f){?MuMaxa%u}e66q(MS-8cKm`(bS} z@0zVhcrP~S0uQBlfgTFzK5Bb@$dGNK+vf5DxkGHK*+0d=bB#jJSP33_PB`d$L;+As zskw1Wf2N|)u`EV3}NaN*SQcieY|8oN?~Y zBNQoMQ5X3*k5QSHSYrS!Hw<_wE15k-+7W(LxK$#7)Ctnf@;Zw63}{6K`l9 zv7EP0$9dv8e%@2^rqxz%cipzhvY{gN-O7Msa3ZvOFiy4g?)Hg`CM@+Cf4T*_;8@8W zN(8AO4_K87i3sp3?E0xlzVfdTiBSnt(?dNpEQvATIX;wg>Q7|;6vpMEFCc(EuEO7A zmN-y7_{-|c!B+EX6Zfyygz!N&)&3~ehQV=M zx2R4}qE_DMo7iuiiMaff0DfU5*-dI@cVA_cliz4nK)R`tL`>47=_iAfL4+6Nmm(DUWM$2NKcI)0*eK=? z3TniD2lyY((jhDt8k@R+BL}P_wC;eTiC-^V|5>*t0QtFRl2a1Ip7O%h8+vRZL%rH% z*3VQlPvW#O2vSP5R|2)aZ*5u8HT}bf682k=VYroCL@&xe5thTY*d@b3cd-E!UtzH3p&`wR#33)wFU12lau5(uNs&5ke0e zVmi850Ado$8)ky5ZIQl)m-j4y3J}Ig$$t-vGZ_!|wY?P5Z9YAOpXb){U$dw7#psd_ zG+ewaT1Pw^f)o&HoVI(c(&<+$Poj_ILv+gV8LMW8C=;&XS{1XiS{|{vYD7TFz9^-` zF%xRu3VviWfE0lbi%(4r?On`=g!onpa@0~2c5|@l1ZVSWhw+aP6M^F5U?&3(8Vm-I zKb+SO`U|v>2;%KQ0n^}k17Ywn^kvPxRf_wvW*jhV=+4^`ePtr-cP1fn8ll*E2oN0r z$94i!)T+eR$t!HOb$(i$*>?Zlu|yYvbFwN*86_gmTI28KJ^NOn<3CiO`|X$Zi9sG%seUJN5g%Jjt|B7QaP%W+C=~=Yj$iUD2z~(>m$*+x2wR?90+n zt19J9o7>5cRs8&{aR!gX1RGq+xHKj z3YCatWbaXmk{Kmg31vk_p{yt&Ss6(PAtZ&$NJL~LG^p&1GD;#dBxI$mcwR^6dEeJ{ z-S_YLJIuPJ(3@Y^Z7NjYFiX+h&#)>wTN2TPH^gM z;@3~Ym(SAI*3NElem3c>;Bd`G76!}rUPUkb$b6?X{MrfM$h^E*(GFs@WPtba!5)G*D#`Tpz*PdS>m{aIx%SuMDR#8Wmz znCkd?QIs6>1T+Wo3Cz$fA@;W93J~;FUX5`b!R4LpteveYs24&m6N(DKlOROZ?c!IB zcH|FRx*|F)kXn1Vz_gTK6RZ$?tMG?Lem6v?3ss}<3WkX?wKv$N=^bEH;@6Zy6^pyr zn5?OE>+ONu9;^d7=ia{r)UWP))P7E(b#(UcWWLF3Hn$)zCn6Qh6)NgtMMA^E`uU3z zx|V!Uq{CpjN{brybI^?yY@0!>Ov;1pH5wWFb+e;wZY@mj=N@Yfdcvn8Uu?TUDX(KL zO;i%nUc*%guj7Aq%=2bqNb1?vVEB7DBP;0BddnS~@qQqS{Qc7D7>U`xchIJwcs~6` zj5vkB?YK9kebnVo&|oiLz2qg{3$&VXHNAuOWdoUq@)VJo^ek}W`TiwU!ZM2~=M z0~egt?uZCfTB(EiL=*1U=9Oc7^%kBKSf5C=FW7c&;^k)b^WW<(`7`|%5OCO3%O5AceI9b8wmZ%GDW`iu^ih*rbuukc44 zWSU2)rv0C*=BLU8D7}3j)4XizfwYZkeqlnIU)1gQniVkUe52XBfo`yS>mG@+Ietu( zZ1Hj!k^20|Yp$+4B=^YO zT?Y2tB$)>;4T^WXhS(Bh&b-0AK^{gph;Q?Al0_R_-PxIlDOSp|8xJ^w1eV01^(R31 zwm6OEcBy>#jRWlVGX+ymR8O4djy#y1v3q!PWNP8#aW|2Q z3y%Z2$L&8o-a@Eq?!Wnfu4@5NB)dPtb_nML*%wXUJ2iB@{t_A)sXir^*HLmH2Fs4gUEu(uF>*?2H2aNCMistFk*s~S{Ng15XJRdJ3+Y5SFw-!gB$xxPoa^^4c@m6*PeVc=36zUfg<&j| z{|CaO_V&BO_6K|cOE?vKg0;y`7A|6{^v%q|JIAZRdSk%7jv~CIf>NHDDF4&12VG$$ z5QIV7t0Wit}b=lo2dl;>%GSUE+qOdvv_%Rle`M?04IA%BYLszhCmh8D6N% zFzq74Dq`SFH034t4{OZTC=tsifKAkx{6Y%|xANeSW_wka*ie2Y1~vAGMrv$BjQEYH zt5`m*Yye!KItF0X*$z=r#dW@b2#(a~QOD4+E;j6I^;F<>rh&nR!eKoo|iI?O!U=l&N5No@>6Bv0da& zSk9guch|PiIxHF0 zoGw?7WLiOuyA3w|-TCoTZ^Ry5L!}A^E>!cRoFtCvppX?h_w6T^K(HD(g^>3!i}uOm zT%q4LziCR#kaxX*u_4K4%*%#yo@3tEjWXIwCv=4A(6w^bFb)w-sf4SvUq3`7iVFnZ zmD%?t<7mOFz5DJ3yni!W*a4t`yWj*q$Mro;!RgYxVO`qzj5h?Mt1Y7nQ*_NGBGj|f zQT1qhkL|p){2cinB>g?6l}`4>-T15>Fr9MW4kypC+Kfy{W4LN zSr&cuTm4Et^UJRRqU?9yA56zgf2Kc!$>>9@lSH4rAG5}^SbluliJcr*Xn&>{|~p2c~E*F=B2}+zB}KB^_n;t;;3=w9Ow=( zw(G>q$wJ3dC1`i?JxyvYUHua*Rq4^Fq1cjLi8LYMT3iYiZ}VrEJ?Fl?udI12{KQ~K zSm*Ud^|Wh(xd&nF69RvSMO z-g{p<|MsQQ15EQ9*X4ytQ9q+(5nDlta3Zy~JilWf)2VHLuipDHP{R1RB>iYjUrJgp zE#5E7Wj9kyCD_$NQ5e6W>WnJWyiTp8$l)a3i6t+LXGDp!SSLr$A&tP67)Ed&QEP!q zz?W%g-|e?}X8O*BNUZmFrIk^3*n^NFfw6!F7-Sr>PG67=RE_$`wNzA0Yyi1JX&w{Z z7)$t}PABYE(g)UApYZaO`&_c;<|^E=g?oWjZ|L9nlsLKbMLG@+tTqxezOf;RB0J7; z)5X+{*A3fu&V~=%yDL68Y@X?|v3x`>v3$Fw(~I>2VTorP99Tv&wC03b4m0nRe&4uA z@1geRN*xLP`@uzkCkGGauTC~XVv>^RXuG_IZxad}=EwL^j9{PpGt@9p(f%QTk^qbM zi$ASKdhRBN7T%Jy;Y44N24oY*8i`Aj?eS3oPX?l8u)vAyGimC(MhF?Uh1K#YvHKI3}xhF3V4!?rlE z>h+_4{~r0jRryr(%-@W=6L!M3(Ou;tzYY0nCD*Q6sUD|}3*#ZbeGR1S?t|iKz#j+#mMsN+8tc5EL^zg7S z3`Q~AimV;tauY3}aTJVjb|zV2;o#8|Xa%MM|J;_RAIC9?Uq8G|yY*R>v)X)7o>9N) z5u>sz^v1T)v3YM3HBQ#nUUd3g!mkxWcOhvlV|#xP&fSGB%+L z4#e2fS~A+N;O2Vi4Gv9Q8Pk=1KVGpU9U07Y^X@udB$aaMNTIOgLZi)f!#F+T>so`M zzrO}W*^%@HwF)XOa-3k<=pCVRD&_z$E|#5>4cvNVr5nJ?!CfQhGUz0VE@8+SKawSY(w+P+O%W%J=u~isQ*kLpF zCG4~egIaD}6y=}Cokc97+F|fb%c~QE37U-UXHYBe~Vqe3oQGU<* zm#G_sjMAq;lO0UIx4)FfA-YYOc zJLnBV(MZtx7?HIMpN3LqU#uV^V8F?QF&{BbLM5{8*wgDIBZ2d$& zFpa|)45C&Az|mVQ9lkQ}y%vug`oqJjJmS~)k90G26&<CYpC924w8~t)W5AR)`JL!7v9NXRY=ytTQ$QwlASv}$= zY1hOFEkC&n>H1bOiDYwv!TU*YKj6X{3$IW(Os-wG&I+|T%t@1VmzY8-0=Cuv-P6G* zj2@;RU?&ImD`{xcwpWoh*mU#sm}Q}hT1=&cRULIpsifvAy~?z_f;(;()@jUS%f(oP zzPQH{-m%X*kN)4(?GW_iLw1SP&I{4!o34b2^KMoNf09YJH?xTP$>~qE&;0Ld zsj5;UkU??#-raT40;5C$!69>+X2?Iij=aZ{QWCA>Za6dtYf*(vZ36BDtg20-K z<>g8=Rd3hP(BP?bZa?Ock1;V!1L9k*pAUa^%`U?|=klm0pUvkJB^!ek6^a~%{Lag8 zMC^|tD2URDB3Bgv2+^!|75ri5aiXp{V~j^1n%@%a%U`zN8>&$Fz`3NPEq`W~Q^6u2 zmQ#AhcvEKTBC zTUlLA0xo90WgnrW7Pm~OuL95h%C>qb|49>?;)nMa+^7pWbwb%8W)%>@ z0GRI$q<5C%1m~dzkSR`6SZh6BUKqs=ybg&c6@9!Q?)F4*gkYzITY~g1s`A|;P8!n8 zCKgtwnFC6H?Qm$~w5i@iKiQPP#dM^N{Nf{}_2o{Du>SdP99MJr*N!P9g?EWZI{oI% zs8Gi27ikhTWj)pFj~(xwZMU#PH3{Pm1cZV1Nj&%PAK>`F0XhoRBWd*)eoee}eDorC zzl#tWSm>f*6^$s)j8@IzrrUV_*OM?hbeWiSqhVCh(V@dGr*iVm$8|Cs)OzmcE?$;$0?{-@P%l&3;$JK!w?Of%Bfoloqc1E>cUtXcSz-8t^{}dk57n z6BE;9d-*am@DD)v#PVbfJ@*$RrxDi@;Nk^9xTF#m2}?S#Y$@i|CXpEMf$#qM@a{*q zNL^3={hy1mQWu;RO;>n1=R2-M^}JPZbk{Z1t7ti6G4ty6{MASfE#Fhzjoh43;>m2s z*Oa|HqW3z5u72&*hv@6qRgc6mpPjf*+&OVuCBeWzFfN8(HVDKZ7B}!zCSI3V9HdPn zQXn*)1Q$oiK#e?@WiuRxE-Uw9h<8Xj zs$-$7hO5@g?dPI9b&lzYS6t``xEmjEL}7!aee)gsvg7A+Sr=RPrSS_C#T*@juPaPU z4*E9BU$Y@w8*(B)OTMZ5xjhv`b>Q@oB%}(~m5@xygFQ~{nn1GS=jHt?sNZz<`{zXD zXzc`jbb0w#d24}<7UAO(yCqW8se?3$?F0)YNy#6v5#jf7|Nq_*m{zoy=A#6|q=E}h z?+E2L77SbBXSC#Mic1=6i|vbg+aJ%);576*hbo=DW~aEa{^Vu0Tu4 z$i$?IMxC2%T*Ur#w$0%2>5dp2qY1KS33~>q;An-yUcTH1Ln{)0>6=7cf!BevJmt|T zr{BqRO*uz7=hv(8Oe@v$?{i*kM~epj3T7EM!7qp3df%~(r5}Dn+2+mDc6@p5R=W3g z<>^m&Ljv9^>Of`&4`2BD$%AYI<%a9Gwk-%4dyt!Ji@W#uOy>;%c#JG8!5T2GnZ&@7 zXe$^QU;D>mhr*|Mkez)JV=mP4>?Cd!J|cKXpxGE|8_>G>JL<5emX-j*BcJ@*L+zw= z?XzcXuD8^Cp~@()gb}R|DbsYS=^v7(=?FkwQf@5RX&f+?wFbaLX)epFV^L|jkvNM| zT1V^?INmJ(mjBOpAT(~&G}uE4-5Z`I*Z?$AN?1sg7v?TFRIN?!1008kJOE((_gTz$ zeWurm97-aUGkT4kSiw?wge?oL09}Vw=b_X#ZEM?kYP7~Yns%-E`(lN}mYpBtd92;2 z%oxjskir^+@shr=aSeJ+n3&yD#yk^6Bo_X0pD8uW8S}I=t3Pq@>*1ubteMHXI zA3xmg+};cLZXdPvH?0}Zk!GtTG10;BM;iwEL>0qphAwgLAN@Af;`l(Kv4Vk#rbPM1 z)MhDr29;o1J~2nRjT_HDDkB#SOsTc^BCrKnt z##KO}M5+o*0aQ?|;6v(}n_q>KH4aT`%m`1wnU|!vf0{n={Id6(BMyq7k9p-CX8lw| zJJgjRZ|+nT#_WkHEy4Zg617!-ey>_6x=RL~(5>laV{Q$1^uJ$_h8_qV@!W^?Y{%2{ zV)&eCPoJ_Q^F{;qUMO@Bp_aW7NFIZIva*X=BJA#oCL8lhG#XBZ3w1u?ZE~4)^6JN% zcAD;4-hIh5@PBm#Z#MWSzxQB!?7eiJvWPkg&_~PRpjdWyagmF#?*5xGjK8tWBy1U0uXRp{D=>i~XM53qTBKpHESf z6AKhvg7BmKhT@zKr zYS-Yea*_Xd6L_nx(Mgc%!$l)C7AEI?z;FLvaRlrJ$^zqBFF3Tp)lHO1c7I?ab)%X{sQ+{^2DAG1|_SV)5`*j6o9$7UNMSG&_ux%?aB!V$SFPy=V3vuq}mG@73F`p|QY_TM`1ge0EGS3`(g{G=bhCq+njJdmuWrhmVaG2hK`u%x z%vv4$?z|OE+!2F-rY_EjcWVv3C6*(2bzP?aDx$Kpw>ec2=<$T$5)kH~{)2QOBTtuC zw)h&hVg^RWOUEC9;vR$Jk67jX>(yVA+5P|cko%iAOL-p6;SCdY;t@G~=L^06+-kgD z&D*z8ARhPfh4EvcNlsVb@XRJRnn&D--#IZD2E_!TI$|#oA=@T(s^G68(};?`WHh90 zZrpF?XT#yj*_)XyBr&*0ag}%X;fe2`zizU!IB*4$X(FVCNg6DH}cBx8Oj^y(zT`|POiSZ!VE(${$V=RP}wAB!X} zzA!)JF8@HRF%5rcXv4FAc%b4dg-6RP4;d2E3nGr^1+&R1uf+d&i-+c=j3|LokRU)1 z-CPtr9{Px}2C??V2$_h2{1I0+(i&nG!Mj%RSJ%0#NIV4$jC~WZ1NiCQgfxzd3qHoE zw$P(;16?78s}pzfrYc_xfn6 z-!zu-z2?iwN;GZUQ2zvC9XCbXt~$rF!iJibjElf3c!^{HW8;ulmix#~%|JcPlU_wDs7a~jwbkiAoJ^1YeCW}dd| z5*`y&aqK4xKlHl0$lv{NyLsU^g@*EmjVU^8DUYhjtDuG;lcOh25%+yB$imH<)VLAq z6jKBz zWXGDL#lOtD=f>_DwzUN`Fwe7}*XB883{NNd|U@1yI6XEQfR8`>(@uYZCMxkQJ&?=HPrOn#Buo&ZyqWeGG9W(4nWhC`}f%c zQ{=(zO9n#Z$!Sp%5msR2nMvEd+04DtE9HvSZL{8C8_V~Rt2diI9xgm~YiT@6VCUDz za?;*cw=1N!e4ENt%%}61rNZ1w8gJ4dyQPXWoFrBRuHA%+pWJMZq@YRw(|8`de|^^p zgwH1m;J>4D@S!4**&$9c9P8O=sflPWR}lN_ojtD{A_8~WS-$*B+~%jui2(OxRsq#-t{t$UGQ!8o0_t7 zV-gG69Ku~&gMWQH;8vsS&b_BGdKZ=T(3g{M#VT4FREOVL z@>e7C%* zfBEBwR;QaI!>uudA#E?{7Jlv)=xJ`j?g&`{a|;V3#cbi{cs=~20rstd>PZCQGN|ZW z#MV#$I$_vzKz$YpSkYWCcXrx?m)4r9wjPfN;0XyBsG92-GHKsg+JZ;W1|!{vrbS^P z>Jimi8U6ews1n}%d+|xCXyZpr+Ix>P8U3lkH~(&sgYnagU&oPoaP7|S3db3qK3B8| zRxptn`}{1Pgq=gpho9QF=W>O0hU{rlKbeVn_=Tj1#GL7R$uSohrm#`|Few(aLN}W2 zE9>jSfvysQ#FZ-~Ps6&F0mdG0h<`DRGrq#O1pa+9!*7v;Lh`pE6fiXWk%3ACAS+z@6X=4s?W$Y~td=p-v3zfsm4j z;-Z!G$KOi?}&*% zX2WQ8K)plPLd&z46A!3jxA*9FG7Ex0c=!PLP;8pkr}xmK8r#8zVNP>x7N?qa;* zwtQ?iLd;?Gx#BB@E~okb&vsjNMwzK}@K0F_`kFX9Q&{4*+MaMdUjerFtZFA2K~N0p z_dbOeg{P=XXEVaV$)7w)!@`UfWLHzCHn#b*jB6F>2{BVwls%fd>P%G&`!*w|EsY6* z@5A63Ne4#GlIb>0{;jn-Jn|kZ*GjN*MbM`KF12(HuGy>cR|!t_oh-9|M<*tz!K z-}3OG$mip)o0qmmelb2F@u2F23Z1*m^Y(g6cJGpPyEdq9q$ivRS#_q; z1FIhLD`otDO}cun@Uv=OJo4o!$sCsLTu7T2{N8Z?bzi@JO;h{1F&`@KGH>arojIZ7 zOjrAhGn7+wyQKcFOcI)^ocs5lMn16M6#4D8MQM0{MEIOeO~=w1igmv{UXG=!O#QjF z?8h|Ea~YJ&9aVVux19ewXZ<2?=ToBaD8bKMd5gbsHDQ~%RWscQv3eO=fVHh*EqFUI4btbQr2jiAqQeqgAgh&<4N+tjs*?2}{}Xf}$`&W&gCre!SmE;faF4Gt_Ce(hFjn~sZqVDU(7gzJEuf0?$@^xY6 z4|VZ5%4>d-ccVRm5mwmrz#!vV_$x!B;5zGmeT3%`f-8;_RTvg=hiu>?Npr-<0XMkkL(Nvu|jT8qG<%JXpBn(y!0udT<1F^ak!)=${w^0Qv0?#^^Qmx$aD#y@2 zKH!1zPRvUb&83ds~?os5*Tc(>PQzwZNb&nEzZ)wz1()As5W=_ zx3^0v`J4`KB$&Vhj04zji6aKs$KJW#)!@5SAc%_CNIXCc<_#OS-CP8Z0-nB8EV90+ImEU?*hNbAa#n?c*WYhtJy!bUYIta0di?Qz;Fy);?m$Ie zVhE1VoM126`wr}R2svb z6Bq@Zezxeu9{>l1Ye`+fWxf&&u-3v~B+e$2Wi?S*20gu5TPrF6P-)=l^!*glEb{vG zwYi{e7fuOQx9qxZ6xY|6_26a2cqT=BtiYO|y!U<8F-9VMW)P6A@D2@$vQcCOpqwC! z1z6cSI=VrWNpK;xBT-x!+kp8n1*|v?wb;Tp2d3gjppqMavI8nEz9PXzsO#e;YDV0q zVIZ@KgCl%fJ~q__j+XYGMY$i=7I8QPq)n^?V4H^PN$SKfM;vD*bkb+LlK_OeEX}zf+=Tdm z^!4=tjV8i?FlMo@oy8L53!RoZ2R$_zUv&E}+8Y^GqFMw6gdSx-0rmg}fl6`Z_nhOU ziHNjZIo9H|8@+sQlV=_G>oo1GteF_TEv+D$m1*@pUc=<+SKr_b9MlEclh^Ft-MR$W zR(^52josm9^gkrjE`&aD-P*b9d@8|tmakTkR_5nK&tb$q-o&Rv3<&Xxf`ScqjKDTE zQ9Kz11u=+pZ55Vhv-)Ar6jpx(PL3GnIyg8GrVnU}l@;Ueq>lhzPH+h<&0+Hec~HlQ zXA9uOg^CZzid33p~3FAn^Ro9tcT*Nd0 zqbemOC5$4tE&S$%KshD$PKY$6i30Wo()__Xj~+l)%ILC=mX}?IXCkpEgDPV?A~cKU z%{Ii3DpM<`?@wwqryPR6efm+hg$$^Qc#s% z+e@`rVjG6ujT_$uv$%QhkDNwE!;&C>68p#D#hQy}MXnt)|KghZKh;0b0EPN@RtkK0 z_HmM;*Y#3om0GU%<4efJO3ln%3t%9vDSmpIhR_x9q~iSv(Fa04vS~wmU;=kWlK6JZ z?vAp{Z&JPRVC%kz#`Ar)aUrt9*s*^P42%N5?fq}@+HaW#!lzC zA13>#O-S!)aBTn5&5T=R)?8bA_8B_R;s3jj-&Qw>l^A5*>a38Z$MJlM%pS*VkupYt znzOR_pTFq2555dsKtSez(Cqf18j|ydn+<$=04XZAKr%s*e}f(xSOEwtm>MLbu{S@+ zK&ePj++%i1?r%FA@u=N|aKPg1g2GDq9=U+ijR*q+Fq_bLChv+&j6>&A|jmsfj)^x?c-efHfs9rR4)7qQ=I3t& z$p<-YfSL%Ao50l2K>|L&)=U=6#6*;!CPqE{6u^y%1ds$}nr1WK{ur#1qROE9>9jQM zXlvljE0%BedIha#W?_L{qJ81}UN&?+A$M+MZMwcPeuRnpPD9e&#*$Z2`74Wip3gKXkb&W?^S*O;qXj@m z;ll+0iw~eW&I%CghzboxZ?D10IH0S`0Mrfu5$HiLZ+moy0+A*vU66~Ff0i3yp=4lC zfy`l2Cn1fQoYP2H!?*^uS|Ol9Oh;c6$({mYY17J<6Zkf)A*%5h>;AEhv-XaTgm8j{ z(-sk#gvkIt#UHX3>{|8q1)Rw%H`nNXdz!p6*fr%-*ty4sckYLO|4aV@N0zwXHlGuW zV~bbYJ;p3yq;mQ4a||fOO?&Dq34(Nt7L?0B9+QO&FYV zL+b1E{g&l1VpDbhEy*51E)03Vz$gPpJPf-y1qB7E3<;iy-7f~7>`O~a2Q)QPa8hAe z5qG+_i8%cuM-JgKJ$gP(gE?I)@aofD9BRiKRlm{u1r^pszUid@9U+_c&dY@_$d2{z zKRje#%-a(DQvg^tZskR&uL-ErzwjyO?p+=XC@|~dp{J+EoJ$)s-y=tkfT=??H9NpW z=>k?qtY}eXWPo-63N(~vQDZ%SZU&`tFDPVHC-Sew$7>){ZDeHRDyMu*RX8h#myHmP zG=eLMK>(-))t(nXpht#PiXq-lMYorcf%5N7?YySH?YS z-{#3J2mNK|k(>TtY3=s+BBk=Dq<)F~ta7j6I_+rRJNl^Hwk9&}tJ`|OPeT|pDZ^CH zwe;u5n`9<1?BYY>H3`CYcS^?Zx1_;6Ow{4!&myh{nWO9Ou@b zKd7B2qpNM{w!$wK#c6^r%?v8aF*)lqw5=9gM;X9Vnq+=}wQcn=UHaha;K`QCzBzC2 zUKR$1m-zQ&Y2R?$)#|E~Gy%m$MI)L-UC|OO`g=Px)B zrPoBmC@J@$ZZF+zahTrKPRH_dv9G5~WBkWNvuHsP)`9WQK@T5z#O&q`TTg|SYa<2f zw0@sdQFz@Q#FL~{)!xpE*PQ&dCY|xt*ujHbNDI%@eG-4&wbxp@DkCe;@YC8+hh$@W zUYF0S4@5@1{F!^W|Mwrn;=kw+9m;I?Zq&bZFSwYuf4O|WwdAdb1~`xWMzw|g^eF^|re35v`zO)IN4Gq1__FWFY8J=!R%P6kRNq4BepuVzlu&;W zHX2-aIdPow@?b)VpzW@k+UB(}PQu&TE0u0GdfwDtI$^tuIyQ8@NlPRC##dTg0?Ce| zgP~&yhOO_^Q>qSX9uZiR#h!Q6Z0*b}uek2v)5#(#6+Sz^9jO)XS%}%{`sD7*@6N7e zfy`$(ALb1VrR(hwkx$Cc4=|5wuoc%*rdYAehZVNdG5@@Mt`zZ=Cju_5TCPgjci_+v z&o&lO(O#c3ht`>CaYW=CVmCYX_;Kl^Zm4ILn&NvJTJEieGyyy&+jMnbD&cme`O54_ zEVUNK-8mb|*dcA_tH~_idDzlJPQK?=n9K&Fk1jJUqBmnXn?8QrXI*}^=s{d52fe{j z)0%RFo-yk~-BvPOS;C8vcjmsenV;7d77wqhjB2pmamzVd`_E;Kx!GtbIVI83cL*4z#*- zHyUzM)V4aswQ|U}Fjn3xq{A&U!MHQY9uJq28g9i-j|zIG8>Xd9K{ZX19)aOXJ)I#v z1y7#Hpz*qG<2%Jh6ZM`~zH=kf!R4TOs?-B(>N+Bmb^DDx9|q4>*=_C=yHfxD!-rtF zwRy|@+e;OUAE5K#Ltc9rE~nMsFEbfyF3zAPet+^P-DvpR9Z!rI%GFTp4_2{SSR;`S zIhU@b4(yx_Jxi;%+l0uQC!&OU#s!P5W%t zzC5!$#Iu>{dx+knzW7hjBmAS#7DlSdX!AnbJ!9nosr> z|M}y?xQ(yVj$AF5zm6B)Di+b!)&{|H={q#<`JLl{Q&6@rsBJ8s9c?!NNgE|Ks2`x1 z;2?Iuol*z$^`CRE{(al0rlm$D-Xi(T-~9rL0t3y|zwW90$2WF;Vz5}H;i+DoM)w`Q zU-;WQM7!t(%FR)0SunGt{{F6jBP(jGI3xMuAp=87-$mCdW@eWTY%8C$ACgE!eIpQfPnY`TWW?O$lDn>m~Au<8vqN1~0L7t+cp4jF36~Ot$4;KYcH& zutm|dYA#V_KAmv6iEjy%*SZf3mohYCE_a-^MJh4;Ot^i2=ye6t^BlsLLt-&8i^X&v zSAFuw59`V+8wqO#*Bkcd4XJ9g*W(YTm6o!Biw{cI9oe2H3?M$bpRMfZ+BcYSwttAN zd(GQgvzxod4>6^_Oj=hl|A_5yi>DiX(+%paO1_(9-%jq`tf5$$tHM%dHqQbt4nyO& zFYSF2L1WrMI4es_gjNHF%?S*9rDSE(T1Sw|Wex2yWB_>pTTxp??OhOcB9s+~h_c_K ztRqsAlBsGAlCQ(s+T9(wKZc>CAR8| z-IwwUU0>0D_dg~7L7gK<+U8$B71T^E>rn1%-da7g^0>Horu@{|vl=P7pj&W3-&yqw z+1HBR*MU;nh;3q+&OXQ3d1U2?c+*jV=qj$$*XQYuiz%&?O1v{pG4 zZ-Q(L#@i?xH|XdP9_`8E&eFbMjw_*|Dfga7x|>P=47A|meW&lfSvHEpsZ!7Dl6>oT zRX&=ATRSc_R6!Q)6U4jr@pZ21MuE&Vm-cIFdU4gI+`;&rb#_Z0xVIUHdBAm4K^+8@ zM5R;lIh0`}_!D$bz`-B`v*H9jx1=m!{VC)mf&q`PbKw z#FqMaKfW^Bs~ZGtnmWJO92Sv!7p1~N_xR(Vp9&`{$aR{`G>J)ZFW*4%=Hv7ImF*&U z4L9C(bv2*|0dIT#TxZX6HHcDZqEY~cfWt&`HNa=+?(W9YRgdD1Fauku#MBq|Dcj6T zt^u@}0@-%D!|pCZ?n66Ht20o#fA6YW!{hT3azf9N=SdEM0q6|}#>XQBHJ5%*_-FXp zu}ws+<5P#h`qz-sPn@;_Jv2zIrX@+Z}1KI^o!a}_NP_T<7c{8R-F^R+S{yD zrZbTL;&DfoeDPTYx{$K8y5s9Z;k4Agv$t(a!7fQT(t2{!RYUs&u$>J}grH_Wv8@3q zaqvrBEVyjo8jyG((DK05WAy*dX|{Li8p$sMWB}&JC0^dx-}=&YXP8VMUN@9>P0peS zFACaWLEpb>wvyUgQmTP9?RZt(J=G7VBDwdxfmpf;PXcj$2Aj78l^&7D!Y%wJ*v>J6 zu)TQj=#d>BXIv$Qz*jHfW2|-Iz|h!p;?U_xC#4 zyO$M8iYzRs)kC5shtDi4ZV!6$dGwV0IVQcdwCO^nzM;Ev6py}|btL`rFj9KKs2Nk6 zd9{DmrJlf4FmeK2iO?AH?VI_*x1kAI6;h#$ZG+^Bk^ccLBu${TwRNwp2jm(0Q^6MWMo*1q0PF3fSsFg^~eW$4@ z_ua~k#RCqGuf)C?NmVm+nQo0Vc;cu~r{ZLTQ`KkXg{<$w^EZI*P0*cToR<3hIVV^@ zU@>7ymdM{egdGNcsYG`5@w5y9l;N*Zns5dJe;~ma!N70)Kujg{qSpjN36%>LBmmGs z`M5V;xemf1QE_py4?`nFG&n;~=!C6x*PcIr{&ZJKw0%x=^@kU7S%-RuPCpK)S2KGN zmKf;EwwX))O;T~k_1Mr?ehHt#21?{P&h)zS6%}8quluk)amwV`jmGY7qCs0$5rYdm z6Dup3Qehr)Q_)KjG;tCr4p<$&4YeTDHQ>1*1~yasp!JFobb+OapyqxCO6vlP6aTkT zE|*ED;Ls*eSEUMNw7b zpsQ73M`m_*8e(OzRh2D&(!>gYIhGP!S$KeCU0(EdO@2rvxGr=>E5?40*`aSaI|0|_ zN&3rjE6e8N7XzpAxP5_lB+Zx)FvhfonrW$R8Q)HasJuzwGmPw4jZ2`^? z;`0Ivf@!_3EtytIqxFl8 zr!G=QY8MODUB87b#DxZrc0Y6xxU@SEwhS>h^cepB{y1E$re$-+ z!RC8)1=EcWQxk2n3b$fCZt8?&)s>}*l54`bVgDnx1qQjD5&+mh)b_Zyyac9bh%Ha5UySE&)^+?l@@ zmAQQ;m5FaODk*}h14jecrKqR~-=<+~b?GX=2p}~$!&Nd`$<9tNWZ;sJqNfDz zPkD*Q5lFFQhlKRMbw~fzXf@qeb+01u7vdf)i#ti)C+y8%=`g9mZ~&4$a2kXUB^{Vq zdIUUwFjC<=FOCPIh4fHi4coALgtw?D`E-HgaKIMp7tb~{*VF5zsQ#E9$SLZaYVo#o zJged0ND;&+t1+wjiK~$~wqP{2Blly}`J%VT(+e`nR?B`*+{swBo2r81Nk(v>pJGnS z0wVLgs@@le;o;$s{VA59oZYAmWF4p~!$Nn@(_y;7Lg|ElbIcOCl zZ?lnc-2@M(iphB{j`EJE#IzwPr^Kwo8$W#tK9rW4lgmhdQq+kiVuKzN8%|49$^F@n zeh3OLZ;<`xl`}GSS-qwtrM{NLi%JA29L98oEYxx;94e^ZFj0Op^HwQJG)((Z)`=H) zdHnqRKvp2d0tPO87er8jY$G0wd-mM6!l;I_E-0~WXkUl5P19vY4P`V797IqWF3UlGd zDYz4OVdPExF9Em`%_m5${ITarKP;+fRB;$yy$CCH7W)Jg)2}EL31YtUXh7 zdvQ4ds&gUdWO8Pv0&_1Iq}_Q`?iKyJd+(RwVL~w^;5%1T19f~X4+3@V>TgQRL>GM9 zE#p_nBdgJPs_V&JhnFL+8@~?djCM#qR*qge;EEN7Yk-f@Qq?cW|2hPjC+I@JTk1!3 z4)T{W(V_p_%Udi@v*sFMZrN;afA(w!#`PO8)}*ASjvte)hQugrQ3rg%mH;RT<)XU0aNd8*i_^u!)WHK!?a9=e?RSSgUGG$vL^~ zWPl?3Mg88(eIN#Gk&w{H`5qb)vIfo(yX=~vd)aSd!Uhf@Rylg3KzLw9YjF30Q2?O= z80jxw+(sXrdxV>tTQu$yw%-_#k z%048tKK^hd_2)>~r_GnXxHjA7>>KZi_z%>eb>s^aEM0D`Iwf18e{Ti5YI1VY5~n*t zr)CVEQoX8yn;Fb$u*=p#gHft5?&s#P@fy6>irZa=Uv{ffuhIWmCzkZ+;lryGtM^tU zx9gpJq~a>?(&|2yek|MO?^imhDZ8srXA>)QOMH-S!}^Y}WC?)-K75z}nMVK@fS5xV zN;dp}gl&O7a}&$~GPogLcQ}_Y-AOabMgkYm1-R5!f%BSov;}UdXHXZym<|i=glda! z@LW%AMdyBd#r&vqYs!)*daXqFyqJ2rC1Cw~p4``dx!kh>681UUH3rXEkMvV5F?@Q{ zUlqH-KkI9tGEIDvAwt-YNPL+AB%6G30Z@jhPyz-`9NCYu#so9xP<~4@1H7)5{giDML1anq3H7aal0IEnR#VWIuoSX>!2k!Sr2v&|gc358Y zSbcM$EW!Q4b|+0XTgo6t$^cv>vrPGR)wtOm0epcj@(B#rw@UInjjuAXAU=?26{cJ+ zeRj%7O(mTXB<~i!v&^9BdwO|ojx>dt4mRFThQt!nTl5GC^g<@NL8FEbRTF8g0o06I6nOZ$_PE zKINg7?$Fh6oYm}-3i#||c*nBov4Y;;*g}5s2TO^LfWnl>58q--PCX6g%Tg5G@<>3a zB_7*p3!y~D(6H^>A9XM6U-fD9v8NUr-Z;QY@IcVG3x1Dt2Xuo837VJOwB z;d_cbfJjRFLq(u$umUUqvSVvY%YK|+2KTl3z_i9O$Sr?v)2K#7YI-^e$s*aF_)Zni zpU<6i4M2smxGywAZzdtFKd4s7!Ep6J1R|jWq4IK42tD3HN?!xIES!KIEzHkw6%rWZr8s?JR znl{(lwGJ^~K_JYc`Uh5e1#S|}07apKSelz!`sKd@@UO>DA*i`|o5HzZfO~ z{|+Z7#l*x!(pM&vWs=rwhx|G=BNhJzSnor}-c8un$Rt}%4N3iIJ-%+T&%!q(#$s3V z`D8<+j|1_y$qSiGrm}2^H2!=(3$d*c!0@PgXfDEOfp@HlVK=F+9^ezC}q>&~( zac2UwKu7Tqh83rKDO`Txux2ibH68|=Qk%g==@4n;%ZMp5VQmWR9xfqSBT^%Q zF3f?*KtQ&~$twsJdUp9%@NBq~pN}OQHUY%dg~(l_L)mI-6ZdzSAAQc_^{A<#`ihj# zK+?GFPaj>h{9WvtCQGyYTvR&}t)6W*bmS^do>1$uIFJ|B+)7JvFzL@J8BR*)526?y zg1a4g9y6POPe15(gTD9Yn{;o11r9_H1dtGvpTis?x;jTAgF8uVmB`~s_8y^xteey3 zBA0hc9JHZKETPEeoL*4#>$hU1$E)eVUyzE~rHp^WaLCQ3Lj8hl=SBR|DHIBhNFL}3 z(FTD4Aq^Hv|{z#Js-oQ6IV-Ez>@dpV+;$H~23BWWUIaM?i`@4a% z{Fh-BHZ8sRLm_F6j=W>#ry~jjHp!Oo(1SN}58O5m0(>PVY$yj%PT3(>!Yd+NuNV?C zy;oQS$?_cXYu)7M)KjCj(AB3E-Q7oD9`gGgW|PQZqQihXTh&3y`x3w5*?`;SRbNHj zWl->f1ZVsUEGXf;66`0e__XpE{jea?=it&Mz3pI9N^1g1SvEda4ctW(#5=&9n+T22 zlRTt=xNMeFWF0l>EQ^e;bY%lOxsiVM+LPo4ohPka$|;&n{@JbzS8J``cqeOPmrg+$ zV{TPY5|^|5^u-(L3tlbu{fw2=rc#APY&Fjf(t$)nmrmH`69;o~RAv6MCxhHGV7?@R z#8r?)rwdXG=H}*9c>ll&T;Jz|TWf184%qV8`;fq$SSeE1;UlorC;dhfo@YAaG4=df zWQ`M;9vT{_i{mDP=v*!yJx82&e502b$F9l@7O>1eA_6;)s%|lTU0v?K4sUI}3Yi0h z7^o)ELx%?Rl0jbc$N%(0a)4S+T%{091rj*M@#Vn^woBj6qn}^BW1<5FRROU~Ula$R zVOi^-1<1o51Wx7rVTJYgo7Gw4;vq|>*E#DPpbrF#@dNB()Y?*GBR@=LG#w$^Hrk3{ z+NMA;1NLr*PK)nxl*g`nvi-Oy7A0_L5Y5H5IEV)kj47C!!-BiYc=VFD-+O-4yM z4>mT{drYlPS8KheqM4>|eCj(-(R{gwdvrElO5KmHH+`Xd8;9DB+p-z8XL^0io6Sho z1`K6FBO_0aO<3b}y$B9fGH`rFcmO zgfPGviIN9xmpEM@b9IO+MoesH-nyy9*5!G&2|YGK*j*p!)DJOVVt8_*8W+wLL{-&7iWG|+f-CAd4lyQq^j zx3EApE=h>sxsbu>uaFSja2xy8Z{8Q`xT$o>EzE$(8v50mNMo@3j zOOtwy$(F8wSRq_s&T)>>t?CwEu9AwH86k^1?zs=b<74#86JEPjRq;yC`mxzXeG@|h z42Cs$y;$RB7OsbGR3RjRIh(_C-aH^owhj1PF3>?GjOV-S@7bt9P4AveGZ~H+2BHC@ zRJD{R)1UBg1hzXb4mRuR13})X#p*`Iu|V{$mSds#?Q8bw4|Sif=9eq0!n%z{-({gm1=g+s!`qo+BDL>|!S@*j3wfDW-v+sLe80u@1lQ5E8yLOEnrln>KeD4Au zI1wT6{D5l3U%N&>0aH^p4Z6P7LF{h&EAn`6CuB$3%QG1-q1b)=@n%l{c%%~tOwraU`ZbBAfgp6*bOLkcC z=3t+DyjN)Jb{q=&ezDp9ZQ==>L@n6S>Fg}DE0s%=j2qSmy8%mknsq;|IG-nlo8Orj zSbFqtFGaN*FM7xCQIa51i>nhBs?EV5-s#Ro$|6I0*r@=~AMW%REXOAhfbg_l^d^!( zsMxm&{1yV1PHG8wNf4bmJj{3Q{s91T7yzzPBx;*!2>ujA9H$xs;K@2*%Uw8Ehv9o(|o9TwE)g7T?BKKtBA2hr>f{$7~et%KF&%4*FC|87fEbKa}gkQdBy zYCo3LV?&-9n$ozzh+j{8;Tya;wizTo&>XTT>90oKJY-hH3qfHp zVa5DV5dFs5n-jWr_TYW)v4lkAL-TmAB{h&b2V?RW&C90&_=x>7k7@Ab=LT@Z5-~{6 z5$eYx*L5;!i)TufK);PoOCW)ol!>GGXwj8*nPb)MgNTSrXMw`-+^ExM-O;JKqx(On z|Mr?6~w+9n${*-pb02+yMfv2-48mp@2o42#Bmgt;Y zTeAQgEhq;cTMM5H)73qG96CDMxmxkS=mJx?NQ~$yeeIo7T6i8)O+zQa2U0NtjmrA7 zlvSB*A5rC+_eN4EE*y`bb>~|cCR};)gj93UR~5*+j7au9tmI@e zenIfkKuIqc(tZ92^MO^}h{()Tv}4(Rl2kXQ}r+V_zJt+TMNT9CVy^0L#I8y_!lrep7hW9JpSJCEC7me zPJd{bIQ4Jwax)P;N?F@3bzIfI4Bxiu7MFqQP7YHBaO_%C!UcXk<9BmIpG-U?uCh)< z=Gum3ivNzrV@PTdhXWQ1GOzp+!#*~ei#&g}s;`|bf=???9WIXC%2a?T1JQL;X zopM*PnMKb?YjxazBU<@R>rciyuT}(-YIfG|$4u}1P(i;rVO-ogBV(s9flWoG?uw1b zV-F9>_EUk5IyW(sgNkb7(#?#J)+8QrNj3MNoEsH1d6aMq3yE~wof+8r{)+kjfmj|p z>7duFw!e>9E-J-SCKI(d$}^~e&X^6C56c#D%vTyJpys9YmV^D0PUkzwizSS5n{+6x ziY44e-b>W2909XgH^op9EeH#(EG=S9WeXrVqSuSclSV;^jU@+wy6+n~lc>(OA+jh%Dyq4$FWnb`1+xFr$_%2OOPB2-8)3qiipOJ8*MOvVZ z6r22rc_=?xTlC?uaqphWJrcFQp<>2R!cQ`R!~Lf2WsIK10p+bMFSBtWDFO?w(AU%`zgyXBMq2ex7EfOF>w<-E?UOip7 z_Kxk6(ri*J{UiLHIhi#P5CQ9sPW*=e6riA->2cm2&H=^CGf8y zi#HN&!jS+p$=JW3xxsyLAeQi1Z0zn=cOX}9SrZx8(3e*^@<#TiMMpm=*DjT4ZT)0Z z6IEj>^r$m#NI|nStp%z`8uzY?d3I6MH%w7nJvNp|_)(|1r)5o)MEix1zZBEDq#2K_ zO#E(;sOn!Oh?X>}QU7j-V^>!oyzqU3XyDgck_Lb6G()B{=B}Gd2c)+{84wvm&e=Fs zn|GL(XF(RRtFO6CU^c9U2&}2Yt8MR`MnyIxr>ZItHG4=yrFjQ({xVB0@1LTs&V}sK{jX3dEH~2m zb2a)zdnEZql7G#GWjEEi_4)<;@@#n^h?F}!t0BCRgJUEbo|;eYcjYOVbS(+~Z@_M;6K4sTc$o4rn+#aw!Z91Vt&29!W}%O?`>?`YJg} zPKLW19Gs&*B553}TnY;gZuzy{JYH$7Q;KO0T&}a|9S4-$qx=Z@eE<32Ww_M?!F9k0 zAi*WVro_d=PPdz(hKBb`Gwk0yVRWL-(e;&y=Szq0n^(#Z5+3jPZ+>ta<2ALujeP@H z_*3Bw0u-)x>Da^SCEGd@%rTwN(xLp0;rci?JaOcC&o{RsFQ#rgGF2!C(CV@5d`%1k!;-iz(Z+(b3lnx(a}a`jW^NhtX`iN|D!sBd-Z*zM}M# z3znf*GXss*9sNYn&=gH=<={*n;!h&30(nnEiz|-KiqO#!&8w^=uCDYW6JL6Ojk{ii zix=$t=)%}tcN+Qsv`o)VO1;QofbsHuu*7`6LY|+BSz~ice#fFc=hoI2KNc_ldyeZ# z8Y5wfrir&OZ)r)JhBTcewNt0{nx2pK)^4~0#Y9%$fbrgkyQ_$1Ddo$m;!cm=fOAR~ z2IXZ>KU>a-L6d|D)`1PWhAPUTjWmu+4Kz(a;<>*~!^~zvOqiBokC{x%bZP51iU$ zL!{PY%AW=X%SL0dYG0>o*5&3lT)RgZUZT!I0qsskLbQH`$%9WaI2-c(u9u}ho|sUJ zjiq<@a$fw_`z6K>5+UOon{c$LY$OW2jQ3YRE$TuvIFVhzAX-bTe4nTaCrb9SP)>ct zcgViJZznAILZr2;){scusOMXqMThH(1ywJ1YYn~0_fH+VP4fnGEy4LM-jUUrnW-=n zP{NOZ%d~V4k8cBcaofKfOV4F}WvCNVwRmfuFe2SmC@G`d#K@vA%Jhv+W_)uh_e16# zuXIFeAiw8W@!-k_?=2d$)Wl(4knRjw-yT9`+P6|n)DNni=6`NM3dExGChoozhhr8C zq$x1Ls{`mMCo~sh$?(dO)0Vt{0&&Gd^jG(s%EKD`lk>O;I}7&bRW370LE`9)1~L(?5y~r%^5IO^h@AAH}zySpCxbj)!C2f7Ubh1$^?`*nsCX-qPZFA zJ0Av*_8sMR_xERR4oaO`S(!<41g4vc3aqRP)s$iAd|2rI_dK$$Wf?zULZl}=(|-+L zIz58-ckM(JhUH0P{`kXl{619QEl}EbyE)nYF8qa4gM`nlTtMrkT=F0i`%-RlLY-5D zV*dODp6GQMD(pVn*H|T79;)a$Ue&F^TV)yN)Q~PjGk+mmSZy-^3;;lblSV~6i664G zM4l`q!V~{3!YIhTh*eJsa5#I{S^$hpReY(s`y+JDIeP|PDIQ}|9!qGxLKH-aEwR)` zL2qk|Os?RVPMAB-y`%)BuusIcGu6MuFxGgNt%WsC4#i^@aME-U4x0W z)u$uwG??P)5}Cy1I(evE0 zleO(B&|*`y@(cfJF=9>m$K%KFJUeDkwH3@!^(NlJ63IZ6!mkMZbXm$PU>l6sdvG#V zSQ~*QWF( zj;I!#sx>?^q70$sxQ4 zqAMyAi~A96cGsH~FLQ3Yxf#(QjKZR$nH2+Ho$KX&n3;Pu>xtj_*?Cf+3?7?vc*;2gxhe*G#+7Jb(>ToK@1ZMALh zubtimX5hPVLj`F3a>v;kI!TK+-KzCjW=DrI2`OoBY{kRs(aA|XcoLmVB^#cPT^$r_ zC{MTx!!EQAB`*P+96t}$0DLNJ)1n1~5eGCExKqNF1u{{8JfY=WAfJ6)H30@uA?q$N#MqVV&bzns^}f@WMEtL19PpWAgI2k z=4~7fm&2c_J@WZ;tUY}(X0Sl#{EOI6W~IUT!F-qwcV|tN@VRAu%Dd`nisso@{VSci z7Z(?YM@Ol>%|2ZC&y{FNr9$8iMFF4e_^FM2bEdIaf-JheUP?ev(8!DiLtM+AsclbB z=;#9!#@SHBV3EW?{)cCXC~~IzMBP*`)Vv$5a`>rUi1KpmUao2W2wtHnrK273#2CGQ z%Hs&U6-@;Y<>fgpc6QHe*6QlGX@wl-JED^e>4a3OD<4B{-n^M3^uM7%PjoKkW3&Cu zvhZ`q8Nml{GP8XvM*I4GfD^$x7I|>co;qceW#&Oq+?t1%v)Y_0g-<`#jh$HX{L{T; z02KMaX0TFQPz2xVaH}lf$D0Kloib53FiM!3sT+aFuy&Ayfmp8trz-sBk%LtAWPhgM z!w$_0S;@eMOGet!Opv=Vlxp$Doa zlpz6SXlxt>xN>0USGpE=JbpQpp{Z*5*O^#ec{xxo!+#PWl)h*4B#4$;rjz9A?0JV_-1&<5obr5CVbt;x6^O4e+MVfPqAr z-@!Z7q>$&98d+Fq|7kwid5e2NyU$wRmTOA^-Jq|pZw*LM+C(3;q#pXsn`;fzdi5Y$ zS_jP3+QtSaQuitPM}T~IJ6j@71-LHjaj2mrA^@ybLmLqi5^8Z%6&v$w@Fzr3-pCt> z9b4~O^cH0Wb`7-0$jIw}AETqA$tWls=?T%MW;lnM1#cN|xq`JO{d&NwL#td$N`+ap z-ZIQx%RaGjaWKA^`;-3p`g}Ot!of+86rhux5-1<)ml_Q8^z5lxDcU9UC14WZ@?45Z zzl=H#+Y#j5Jo{nR6R;&-15I}4jyM#WWKW-DY(|rai^48`T=zq5%1!ao-)^cxZ^{8t zvn&8s7rnhJ#w5whsI|4VKd_oTwpwp`RkaE9T~B`?;s9->HapCCkV-2p14EF;y#k3m zjLbT<-LT&z=b2Z zk#;BhqG>1pUCG}@{3f$Y`@_Hu`+heE{+odt`464vnXax&Ln>Ov!qn%P7JzBoD{_A% j{@p@%9(>KVRwee10E&w1B6Yn>mNd$O;6?Y-}r*|X=KNd3o;s3}<~FI~Dst*N1E z2%cNuXHQNB+Unefj!T!Acr{g(jQuVXn}cFL?7cqRKG;oh$jq3<;`+|Ke9ah{2TJo{ zUr6{!Nok7GUE~`qf0-B87{zyuiY5L{uS--w(|ZaKUYrdaHE^qiqnGOX~sy%M)mbkx269LaSf6v~o!=EJ#IHR6rmlg9JF1z+=M z-qgOOY1l>&L>2#Qk@1KcizJWOYXDBStn`m^d$4K$H7d1NK*T0 z+%I|x^_iE+hZv)Ou91Cz`!}TO)k^Qq{9gAv3ANx?2zhDtdakA(tB=zf&Pd8HA z5#4v`W9pBEwv7rkXsObT=a(Q#Oho|d~I~0VfV4?)r2LyXuwa>g+jdq7WUSD zZ{sE|2TxJJr*NGJZKzGH$+i{A)6YJaY_eJYI%>*X{1oo;&Oe9FRaZrlsy$wl?BP*F zbU2NT`RCAm`4=B4$x^PTyuT3;v@c4@B>efG#>~X8UwfRKRG^fd&Pf&a@!Dlg%^lZh z4bS^kzQ`Rxqk7vB%(C85jaROb+heE9OdhE?37k#3Ikfx9^jZtH7ha=rC(NE_{E_v2 z;I{XCG1vgwf1WlA`#s?#NcH1$k;M0Uee$Y;95yn$PM#}VFI(GG!prZQDIaIb8($6S z3G4Yz-k@;I5*E#5W@v@)n)qw+>(|?mFnft^(+8dTqqB1hA=fZL%eVjHdZ|%nW|xsPsZ_+ME~ZJi%`h4?)}-;qaHGgFVK&;Ugv9<2pTLO zB)56fLE?v?WsE{*_W7JrG0bC;%C4-TJt>YRJ++;QFf3N- z+N!*$fdkB5QT7@_JHI+f%b?#|t42H)P9!3Z+Js@|Lhr4A#Y&D3Zr|(z^qN#1db~Zf z@Gf2UcWjK;b5n=@g=$L69H(h#3VFVvp~}W z^PVT6vFNa=G7?Pb-u{uVJ$2k|HQ4Ac3Z)E?=-zI4;eSf3^0%H>4$XC+mYkUIBeYWd z<~nE2aYWm!pB|VYOderGxw%!RUC&m&-zb`#OnJXdB$RN-THA-_H{WVw932@rK07Ae zXk-&z9v9qZxOaFA{{$^yBP%=DHw@ZrkgIUxQXcvSTb2(*SG_t^;cPthnevexm0tH@ zuk9NSyY9D9eMJ=P+kdN!dW;bv+KZ@q?-lxkvz_EGZZlL-!I{0Nz)efbpko(K(`vdL zDB>WtQo>T&gXFYBLH!vkk{+$2S2$pNGc8x&SuWu=0adZx#ss!}D?Uo1d1d*07?a;Y z*G(;NF>#TA6DcH%{Hyf10$#0#7X(T+OTX9q_staz(6_~6V}%GwVhB(j+_M5*t(|`&y>@V zTH%msW8@@||B!=|x7y|klEQWDTOkhjVPbfq3t%}1{kLIMNTC17m)Mf1HD6YgYh0=S zZ4qU|s0VG`8iuqvE0@=o##Q;O-x`?g_6DKPOjLvryuHUlv&R6QsZWj_LkN8iBgsF3 z!>bMX;x;D2GJAJS-Y9M6sIb3SWRdt&~lLA ztlxmt@fsCEU?68j{8~@1Uv(B@LK=yr^scl%G3l6VB?Xf@N})C{OC+Yt`NRaREoVP% zqvW*}iD(v>(i!NsCflno&-bjpj122LJHp7hxlfj6PdRpF zWY8i%#yfXvWs=B3KCH5Fv^BYMAS?PENsX~=!n~P!j2d8}qoV^Yq|SJBHvju)hGExdyJ&h;v8h*3mJI z^Kh=g4WHeNeVSH(39(S4 zA@We=52C3$wq+QlF(O)Rj5y}>oLQF_vm3zoW7%i7K|cayNx-v+y=caHeR$U&J3ZQx zI^U37>m+}t(Vfn+px&ZDPF*-(r5N)+b~AEd;h_z%_7oDgp^3dqHR&4eqZ41z>i;JZ zNW8vUlq~FUCxbT`Zxp8jcSO}u7{d+XY?#?MS96Jx_h9Ce40`VMpRVIz(0lrDwS>u7 z6*%9$WW4D6$3_i-(#XMJr9c4_l!yB}6v*@?l))0ph9MXwL__n_yoUZhbF0oscQQ~; z=w9OM$SD%5nIx#kxqGTHaL5d;9npoRT#`tB29F26US>9(49fF~*`M?cUyIr|J3edkg2) zZfn2mj}%D553xiK00CN8ihXK-%#J-;y@rLmlZPcdCgvt(1 z6)AR8CF}P`#~a*98t;0LDb&+2DWB~-E_x3m;S-sG@peqYxol+E_dUqSyY$1ezFbe- zg%J^UZIpd&wmm;;OsP7eZdNl1wNmaKOg|EQe=DW;0b8w&`}$8cz^4E7Mg9*@2dL+g zR7mcWUV3ewk4>8oi|>?2^sfBlGAcB)vTiSN)ZYI6PvCH|SqS|3kK)@)y91IE?auW> zGD7Gvp;iwBPm7t&+f&|UV2xdjhc`r2*3JUo+n0&?ODaiUE&Bcn%sc8pm%>usvI zQ@K`es`#(KhrlR0)>lT>aq{c+w4q2iDI;a675>YluGg~&;X5YKElXco?R_HdIcOFd zHaJmXBvz^bbF506JK8ht92i!ezCydDq(^Htd`(_{SbpmgD38SuL{lbES?;H^QZ3b= z1H`2D$?y@-biA0B|3!JVF#=#iu9D4rYZdWPVGuZB|Md9JoE4{?k}kCmoPcG1)67+y zd-$ZRMLOu=6VJY^w{Cm+FXlC8zn;59GLUp+ib?l9Fi3bBCy5qx8_69$Y`Pn6+azbN<_C%Di$8F=s0@;x^ldp6;tLjX?nlAYSl2U4SWI@opM8BLhgJ zF5`$enR1=vIsqkZTfuA+{^sKhHhd^qSX3IE0j6Pobyx zNy)+#G1x0tsQl$V9?W$2(*ZPhP3B1#0o7_NQc6Q@(BME@C~Sp91*F>6+HCna+?%NN z)(Mci@Fp!CIl_DI-pbmV-Qa?fc~xAMtn2`Fh;72qP>SS-(!?>zHM#6a5$XlQ$IiS z{Jafi7>VcwQay`b=}xXGwPrp!TQ>vj;E$z9b(svLwe{a#GO;&-o=KVI)4)J>983{< z=(9eDS5ZN5a4pq-T39&oe?~qV$8n2Pw7sLFCSZ?0O!=|^2!xD`Orvn9hi+t~n#(_Q zHcMW+8CJdVo6sF|eCo#;_>Lt^`89~)O?Y@k*T2GoP+mn|ARbLwU^+Z4nqh~h<5<8Z zHL&Q7@sjEN_U+P&7c2N&&0doU2?=2a^H5Z`*=|}H!wv2$@)S6irpB0GH@x5zmzM4v z9)=*(Qd4bFsCYvlla`cF50dM<(6j@^ZDiWls0T(xcJ11LHwQL0Cgxo)k`MW*q-}RO zFFi(G6N%-)nmty}^8+^k<}UZ!K937>b91A0N4)_>get@q?mHV>;mq==FU#S=ZcT*< z$%_NS=fE2V!`CArF5dR*7f(KrpKITtsajq@3V)LBc~)!Tu`uTJaM0D#_(ii@J6Pk7CPM zyS?YGss@lyI#As%-zKG|riMnf^zH;S_{nkhEN=U41vE?vsu?_c_Dqrd^>}det<(Y! zte7r0GnK8xe^S3m%IG1JAtoug;3bnnoz|=F;&T7%*RQ7em6b^o6Ms2Nuwm!DWE@>x z+gH47uL9i2h~ZTemzn{Zx@lGq{E-aTG!*ymSpw2&F74`sps^UN>Eh5Lyf#U29w0i`UB6 z;7!oc(@VfFfu*??N;gLIK?pIqR3$Nefq@0de2pmy?F{^P{6AXBx6ReyiQ&;) zG!W6exaZ~Z{8wN>xC^t!o!|~Q40nSEGx#4Z{r6k_Pa*7`UqU@5vlwJe^66qjS#DIW+^bR5tB=oAG zW28$nK%yW>2?$6p(wXae^JcAC>;3cI%&b`}_uieozq7yZoV(9G_nt@tq~--?9_CZ0 zPF>K}QbPgPHQ=ykVgSw`-ZXWdI>qInt)^n^_qXLX)<>D!p=;}_o7K6UC$_iCHkA=h zWYH;oQws6B^mvq0s0%A0Ce$au+F5VivqI{YI(If3DcZ?ktDoPRmGl?KRyPeN0#@&EXeUS} z+)a2Jb@i1`eimcU)9qiE|e%^ zz$2RunLBd=V)q{hC#I|hbG1)d%jh+2vXEMK&**w(yDTj_Ik{e?e(hGc`4wyzNiU#$ z0M0!;XsP~nFzMK>d@LN@_J1p<6^VRgKkE@#Lz0KYEAIrDjtsUgYSHJ3Cv9MOV2J#yAfc*XlKwl(`Ku&W z;+&(h>IZYG#Bs4z{C@d~?NLv1&2xCtIe#VkJ69B!mLdyLhYRbS+95N%HG!)E)b1|Y zt`kK%P+0h|H$!$88iRrxzAGZU!4smcgDrXv*5w5rjcIi12gAKZo@L|n4Q&H-| zsSAGj*5jI;{b}cy;2p?Qi!Y~71Ljm+KT@c)lu3OG4xr|i$_pjZ-~K*6kn!Sg_!P3q zd!yy#&ZKE=REoiimV&FGY2M;{@q0(BktcI<)b>Gd|J9aUynR9+#VSsp{DCb`TgC7yuZ@?-0jtw^)!$9Uj4Hl0TSU zLD(6Ya2Z{1`t+;Pjw*P3xJhqBE^&E0kAl*Njena!o|IWo3qmN;Sl7peg50wxASRZU zAqoJg>egX_lI^p-q^l5Rx;#7(g7h`x1&YCZ2$I%i5B$V=7-+z)0lbC5$DSoA`UPo$ zdzWr`TXe$vIhkML$!|RrIKQwn50yBdzjFk=$Lqh3$w0>dtT-T|LB;?mu)Pt*Td(<$ zdC!>nHq#?F|5Zyxo<(RddH4XHb1tWVw`qo4p)(gcr!R;FtE@RP>EU`2AjKajyMYiXa?Fz^NzrPF_#HkvJqao*6KFu^jAgz`A z{y_R*uIPBJLW$oaJINxf0v*oXq=-G|1D&3$Uob#uJ-p1bq&er0T(&qP$ax(F5H2>{ zAG!KHnm^0*^RPGG-=8}E9U(!2K6&EwVt))fbD(@A0VlUYFMn&vHSzsrt?MWTL(`Pr z6Q*U(&+YH8Sp`VlOIunZ*>QhBC!-bub4>KJr|Yba6Y64kRSY3s*{aINGS^#ncznxD zLk&Rv2OCun8wbg%W2_-B-e61xw|B;BC?kd|)L9Xk+_;m?4qoH;weI~}gKXs!z5;s4 zDgr(nwe0Pk<$vG`KUrfnZTo*vscl^e7Y&>9nl=FG^v!zMH(Fw!EJ{4bubV`{$MA^p z!`+$2C;L!ZeMW}X&X#quy*{f20+AH3xrM<7AG&|L03&~< zZ{h8$ZtLVd)0cCL&N`Pagth4DRXka>B#eENFRw3+=?nP1ks5h6DqN)q0Ls(;-j8cTNqf%{!ttIe5hU+?!QJa6ryRp{(&VGgl!1qqG= zRd0)<7wc~Ipx@V40_N=3>ZFZ^@Amq+9g-T-5voi*7yA1*+8b6K1bgMMz$`W_6J)a% zw?+c`pgfi{nc5t*Nt;PN2K*M=yc+xyYZb^juhK|cfmDZ zKmE5aM81NLSUIDnCOy^*hFE{67ey16fTI8i^xr*IERGZl$Dpw4f3-4RZ|;I4mnZeR zXm89tg0Gm^3Ey*oPNRS$OD*QO$f0GEeAu7au`iJ^pj zq9QbIAS-XYw6v5jaMvb$XZbXFmQR(UP~j;yp%?zTS6!jW^wZR~t*jWQr=ODi;v#ou zc7Y(<52ZZu@uAU}kz_$sc-uny<H%hkq@V)1wTt1V==wZ zMcCfJiT!1uGiN)-LDS+sz%3t_SSW)Sbekv8hRc%@VUa_$iDC~I)*SWFB(4{v14?<=k_0pFThK@bjQS6vPC-pxs^=oK@#NvXqa^38 zz1@47j78?Lzjo!9Ov*kjdsV&iWnjb{4aMCxtkBu*;8i#t_w?doc0!63+#4AlthGPe zz4xU5tW}UKiy%-8%vm}GyB}lZY%i8B&o<6}}DY-%q~gemfgHo86}JAY@C} z00fk;3WVL}R_0YJ@d~#0WbMQO%`Td)ARgoKb5{F-@2^(p(%U|6fUQTi7Zgm576s-p zxf{NLqpSW3ZquT_hLM$}Z)jK$;I$KE5q!7lU$p7(&eR6q@9bdm@y#C@wl1(1`S|FT zZZojjV+#{SbK_q1w!`(vvxD7wbOvKHeJL6D&|5-ef z4;!_0%BR}vz=x&7);zY`D$e`?5Tyz#Z+bAWFt~VC8h{8!Ep6SpYL}0h&5v4ekH{?jOEW zRjd>1#~zEx+(A5`5JBM>kBXMuhpb9ZEmH2RonkyVkkL!jjUV-9CzFT22jBKtD>V%b z=;J|(u$vP&BI#FTUH*9Z7qKnbpSGYFi+L0`zPs%>_)lw}`#Y_t`F^c-LJ-pG4=CDt z`bNG7%fP!6M?@#7D*N`6ruV73>)pekJ?mF%_1@I0jaYub)W_pLfXaXGR6UwU@?Bx| z!F+Gdw#(1|Jnvy%vS%I(m^IkRSPLN3>$5VuJz*)`E@osj8>aGcY1AeaNCcR$^o(g# z`t>_g=)rdCF|G3q8JYesGU!M=jl~?DTW7ei~TW)egiGxA&MP zy*PY4DH|`DShTFY~=UE^Ba;ld~)Q*OJ%@=Ml^|XA}AMCR(bL_%yr~_rQ3} zMrWc7o!t1---P0dOyI;c?shulup%|HoXDeYxC`EchYG6}epoRX5H!BjAp7`xk8XMC zRfQk<62^TvJ|1Fna5@HQVDU76VGurlZ1yt1oUo-5ym`&3wX zxqGQbd4nms;3!^`yL$=n5MNRBvtG}|md{|Z4l+!L{B^TQq1?k3wZoH+m?=l1%pq7V zJeSt7Rz1!goWe^QU|&Ds#icts1+1w&$5(QX_w@~ruX|f6yFWV@sjq)Cfr1H{y~wG1 zARGrtpa33EL4aJPkKd~E`}oW6^wF<_m+s+>lY#0wH+1d{OZLm5{h#^Zx=~F5+F&=g ze_ksbs6M?S$!)XuRcT7SO}n>Tr}YIwK0EG_I|XKrH&WNVy(`le-(w%@pcUe^D%gO@ z0W>U)gZ0?D1Z^1t8S}W9!Lw>YZAk=Fi}$r?73=&!*uc-9;=*=z#;f1jho)@i`g01B zY%&^0$D& z+Ie{;1;XO8&y)U2*Si5@i48e+>>v>2j~5D)ZUd*6X!O)>kBNNHKD67Oodl^cg5^2_ zZQ?6s2*7vC&ou~;4%GueSS~HM*V^2vh6#{Jq|beQHt&f>ig5{@?RgNcqT162aeUPN6d6eWQfl5^IvgL z53-)tVc>{x=J;#21bx7xiJ=ErAvIV?Q22vx8kl!MIRt%PjkNgMzX+^b6$U^-xEHs!5rdnRda!SBm=v25!p9X%ZJBu1u@l&{j&G z&I0s7Ov*LP8d6YrOoEmO9kMu$^Sk0`KnKqZHur{R0xBF8# zDf6+0S#1>VEg4hd@IPkoVFTY#M;A>rWghE=6Qs=CYQQudn$vxqkrb&d#~a406ESZH z=0%NG2Rxqq{GYwOejI(Hd_YMMbhcN%{{gsueU|@F!bDQD7e%Ohl&74S=l>fELO-lj zs0?MJQ#XVl5^>^Kxhb)nACJ%C;HFX_W*Hc)-_hOMcV=;A4h~XRVG11ygb8eJZU%Cm z>?|Kj!E#xP&k7oV&XA$^UrhUO1W%tmPB9RFJ_65Uo0*vjD_g-zs~LixvjOYf zX+ip!m>BV>kF<@0BV#n$rj|gEJPcM&)inh1@bX@STi3eDzrfX5dfjlXwy;xfw^UJfQAC$Iyy9foNbW^r7NsbQc_t8p5Z`|w|mI*Jtx@!aG#>$ zV$#g|D?L%5yv@OJovN;`QUro6VWsybILZdS>G6ub~y%Z6* zGSw;GQSCzW5>d|xgb(J@1Oj2rzX{CHG8s3yDwfy{QC8NMP8H4_umhe23VbY31fcH6 z=H4LmLc>`>ptr-6KMK?J7%V8=^P5R1^d(>r7%n|9Gjo^cqayydxD@WwXW;WNJb4B$ zu4Pk}+LyLH3OMM1Q3$>J^xWmke~Tcs*?xgu0Jw2*^Myvs>z3uI*OLGH&Moro$t9t9 zabW9pVM8q+SW!gSX&wsk$CMXpZ?saS*&|U!^a&zpaHxp(CEdTYQSIzn3C5NG#FeF$ zaOUrcx*s4#x`pDkK-~}i#jRr6C!kr96ZDyg_NcpUo|Z@yU|jq|n03e>tszX6VviKk r&gBvdDFmnzj2Hfij(^9sAJTT_o!PazO&(z5{gk#kQmqVb{p>#go@K}= diff --git a/test/integration/render/tests/icon-padding/default/expected-debian.png b/test/integration/render/tests/icon-padding/default/expected-debian.png new file mode 100644 index 0000000000000000000000000000000000000000..51eb74985acb9c9ab333c1ae402dccae5b20ea97 GIT binary patch literal 6568 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 U#DqO?0&@&uV6I=L=XmeG0F{cS0{{R3 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/icon-padding/default/expected.png b/test/integration/render/tests/icon-padding/default/expected.png index 99cf94f7a5028ae9811b539425572180200ec04d..ed4d74ec9164fb88c570a98934d5c49bbe813c9c 100644 GIT binary patch literal 6094 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 z z1`^3rEw}$w2GcYS&l;c^42O930A!1ULr<_zj!{U6T5_SHU~=JK^j!=@2*}Q<0EiI7 zsgpwNXH{HlMt|)e?i@z*Xf=&n+`FgKNK)YnZNiU@-Hd{Y+EFnOMut-mA$HG?o;6e3 z`)m7$y${aC?(Id$$jYAAS9AijZbmRMobt};fQM;|EG#Y#hTw64vtPb_n+5{*m0>ZV zr~;R}+?B;SnSfFPS_D`*V9ABgeFQu_JnF~&@+>6n3Kuom*w}!woD-mHMoj0vHCWAjvS+Rt5&fiWLk5r58$h=NR3%!4C+PQo7L6$@(zZ z>06aq?#iYY(_I1sGXPy;NaUa@TUJke4^`q^)f^chtV zK@T>~G@d%{*GZ#SoqKQ&a2yb2fenWM*jpn0 zjRhuNG_5(un!p$zEBEF%Da&-m0K|O8-~m7gs{lkT(M7RMANVi#2Ka#j|1)0szapRi znUG8k=>ME8b}1G)8nDErUeG1VtF~m0FbRdvxR%HU_dprNOj(Sm%m8D|V~degIX~5X m*=z3^mwpCM#y>N5%yDy>u9qo!D*)j5Png0i3`zPfvHt@U;pM#m diff --git a/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport/expected.png b/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport/expected.png index 293d6c27f5c5686b6b2d0685b8149a9832ca20a6..de029ff6edb9134332d8b30d86e678b326674df2 100644 GIT binary patch literal 46499 zcma%^30RM7yY|-*{s@&&Ntz@?si@4QA|jb1(x8k<8A4bnX_AVPDN03_l2(){N+qd; zWG1PQp=2nM?{~-A@80`3zVG|0Xj{C?le`anf(Ma7CXw#`nmx$=-g6n$*$Vyeb|N8Bl ziFci9VdTKE3cb5^>lPfiW5*a7-&D1#X|8F}8sm1J@~oO5W!gBdgWn%Ldi0nxXO2u> z{{1w!fS*66vE1D~;lhOjxj{WNB-u3+CrnV+)$LMIU071mcgT=#rZRbvA8*A^)a=`r zf9?@6A%2me6937#AG&mD)S!9id@bWlxmuqg3eu9Tb!Dza`z+?qSII7lh=>@wWJ&+6 zs=*`sZB?~TtE=-!I&nhQ{lb|uLtl8BOrAVhvQ_W%QOQ=1A}1%OYlVelGwLTF8e!G? zJC78mN||O1TDfxN?x-k(J)b^*o;q{p_5v5D5qIv~Ib60RtiVO$oS2pt@%`Hu4N08% zlzHkJ8vS&1T>8JNt*v~N>GkG*n*XCm_UF!>+YuO;{qW)b4<9_&ynj;k>UQF*H*a3J z8n64HY2a3Dt}u7co;|+){(OuJAM@DB+4*>KvSs4!!HS>0e3>?F+SujG2No9>OSNm) zRZ-E(#YHowPej4Z+D|V(t+$+aZdJgv#L1C`9jb{{aK6 ztgX#uEDL0$D$eCzy;>KQ)!gRbOYKjTO<+-v9655VY{`X-7iIG-ot-s?9qeqHF=4x^ z#33j&w9CMO1HCtFFesJo)XA2co;0ab=gys_+O&~XQJL)RZR~87c>BohR|;j19~VU% zxMg@${4wm{&Rx4??kpKnUU}#EG#!Ua$_@?=>({T>*3mh7{5atu$$7Z%nxG>lCtkDGd2COM>RNqk(~pTw_JMSsN~OBXHL(Kp5?+&O<| z{jG_*E9;+Ij2JnR-OzA+djDn1mc4xa+U(>^FN2Wa;3+@fpl9ZRXU`UxjUC&*Q>TTo zb#--@b8@zwAdtmM#F?3y)qVL=lQ#L_Fbe|ELG$O`Tc-c>&#tJbeC><#L(iTyBK*f| zwuVYfpLMk-&;Gq6eP3eCrhT^)ZMv$c>`Y5Dkd>8fuIRFP%#kUo?4|SG_3ATb%($`N zD75FvgoN$;_9=015*9~Q^{;{@JVVDGgFGs-+t|;Ww{q>;#MIQVx$c>MwY;NA78Y$n zLPCf!@eZUaP85u4X>>lc{&l}mjnDqn>E7}E#V;ycZM>!&FT(TCp+g6ZS8fdplRY}M zpY!oEXCk?lWg9|PS=rjdLvPv^Yb_0R^{u>9%Zm-g!~dRpc4tb?l`C6(eWm2&

Ju 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 QFYzC<_n^MpJjX=;9~1Wg%K!iX literal 44877 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 YyRQz){w-(RbNr9lZ;0 zSiWz+d~WdUr0`_nE&*48q}GeFN{q2HH#sft$@{1jypXR-K=TJsLZ)IPSJjP!p3!cB z3&YHG+Z=A{$O=idM$X^#ZGrkm%`;{{1n$nCweG9Iu{jkd4?p-^w|CdM_=Y7OtxFs_PV zYHMrX+}%C>s{H2LoqfH2|2ggTdk($be*fI6(A6*AzI{5c`rX3)`{i}lh-I#v zYk&TaxBkcW=kuRGI4-~W?Kx{n35f@9Zf@T5_uFj~-@}Xh?N0sr`r5Mgm&xmEYm*Za z7mEz4PYDZK;S_qWbCQ z#l?U4ekgxXe!yeE{72-6?uYY-+bgT``nKPz>fZfsSNFw>fm?O}RTgd8J$paHe#Sc9 zH|+md{%}RG+t^xr=jZF|@A<$43drvD6U0tR=kGaqak2Z$5~~;!d#h7AANU_|7%=uQ z*t4fK?q3^!eq-|S7bR91nIe~zD!$(>zqz;Cyx;zx#qoam=Zog|_I~VMy*^EU19L{B zJoE9!<>tAMu87BPsQq20xBHFJ787v%I?S*6#OZJQRYbn#10%of7XkCTCBousBQ`ck zzu!B3{+Y8IAI&YdsCy^FetX)-e|5LA*QZ`z7kj7Zv~Edh>B6NKm2?;A@BcHY_V>4s zpHAy+d@OOjkGd)mmGZy?FqP?4npt~S{-_N#XnLqO5Yrl#H2M2@HcXo1C zRaaO3c-Ve(Tds7JobDy2>{)I9m+sy@TQ_>!hSbwy$BrGdD19YzJ+@pn%1-x^(Tmrw z7q4H>ue;tUXbm1D<~nO$+sDFvrbbN7%^CsSi_V-s{K3G-_hWu?vVjT9HOH@r@bE7-Xif6*KYT^xes&huvgLsjoD7d0|LOSnv4)4DX4parW#vB$CJKry z3FtZKC?WNznwR(B0|l-ijZ;rlcz8d`Iy)O!b{^WI;Uy|#&35^+f!(?7Zf*$$0<2kq oOMn_=Tpn_HZX88)3xR*EW!2$z$_jR-z>1T>)78&qol`;+0PfXhF8}}l literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/style.json b/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/style.json new file mode 100644 index 0000000000..a2289688cc --- /dev/null +++ b/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/style.json @@ -0,0 +1,83 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "map" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "map" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/expected.png b/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-viewport/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..44576e86c6370a950bda83b92d9c9631ab5b3f44 GIT binary patch literal 2027 zcmeH|`#aMM9LK*BazBn!&1IaT97h_tM-xl4IxN*$q--K{*BE1NO&wC?Qc;Y_I!EQ2 zNrjjsIWF7sXiCO1VlLYvGjopf?feVpdCpHg&*ynQpP$~(=kxl!KhG!om^V^WO4OF`}L+ zWPUiD_@f^#i9jk>?#4xE{BYL|t>&(wXF>B|WqcQ+d38PyeuYNRY0B}`W<`8d-1<-@ zFs}7`JhurI|Gx2&hlPBpe@>qET%VSzh1#WrI{z*HHv)D(DCBjf*a{0Vyj*T{@|fnzo%Jf0J*sYEk}sxrdv>Vavh&fqbg6-0G9G>*-#jcfwy=tpRswZSxX@?$eqHvTGqV(4063n(mlb!k_6b(D?z)VF zeAgUj=Gwtm&dkhoBrO^S1qB(pB<8_Gs!Ch zPBAF3d1c{}2@;oh8>XT4wGDI(EGO4m^S1iB=IQ~lPjz?GQP`A&l-CC(edsKWY480@ zI?fsyfmmQ_DmbAP8=;kjWO7AS)`JLXG{j)CO%-P;J~07f{(_rQF>Y8Mbat{K?XAUJ z1KF|1#=Pj9gV^w$ULI(d&T&f5#lQ($wpI;*+0+4Cca@p?8)yb3O>JFUTYD;-F6ErE zEBK=#z09%G9tRU!;B?rVRsaW}>SAxUDyGJ-YxorQD@;bnfID{UJ@Xl3E|%psVa6m^ zC_1WY0I5t@idUA_qhx9H+q$!THGT{>S1C+wq?H8wx@9Isk;)}V$NFPz9RU}`NELl1 zjH1UJ*;Op&GVph-gOsD9qGn2!W_LQk;e#s+qaZ^=c*^ai5LQ{A$S9o}anTj9oWL`a znKlEv^8!fFp(-?f_~Ea%rC!SeC7#)iOcx00S)7VjPh zD%PgTSBH9xmwc0*xK#C2{88Kh>nk2R^lvxqum=@=+vZmR6H%Uh|dq?rOBh-kB-g?g_X6nxu!%S(JF@LGTna%;qPy-7VUNK8e1SR z1$TzX(z3R-eVHm9L()08;NZ)cYLDvS%HePVc!!M%3#T!)r@LSLrq0o}S)j0XoDD9t zA}yY&Yx{g8`uP{kG>gVso*jB7d{_;EKq@*qXnlKIb3jeWhd7qCi%Y+=sI99lX=z3% zbRS3S&h8ur{Xrr*Y}9i?8xkeww!s4WTjJ+N7ov!$omD_Q@Z}Hy=Y$%`iOw47N?QaF2IDqo-K2+z9%lHTQ CLRk&vRY({dw*uKM3W!6bgfaK%k}m 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 MPotcxejug%4aa~Lj{pDw literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json b/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json new file mode 100644 index 0000000000..260ac12542 --- /dev/null +++ b/test/integration/render/tests/text-translate-anchor/rotation-alignment-map/pitch-alignment-viewport/text-translate-anchor-viewport/style.json @@ -0,0 +1,83 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "viewport" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "viewport" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png b/test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..5f90db34ddd0e97eb93829475759031382499abb GIT binary patch literal 1729 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/style.json b/test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/style.json new file mode 100644 index 0000000000..dcf7539319 --- /dev/null +++ b/test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/style.json @@ -0,0 +1,83 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 256, + "height": 256 + } + }, + "center": [ + 0, + 0 + ], + "zoom": 0.5, + "bearing": 60, + "pitch": 45, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-base", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "blue" + } + }, + { + "id": "circle-translated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": "red", + "circle-translate": [ + 50, + 10 + ], + "circle-translate-anchor": "viewport" + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "symbol-placement": "point", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-field": "Test", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate": [ + 50, + 10 + ], + "text-translate-anchor": "viewport" + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/expected.png b/test/integration/render/tests/text-translate-anchor/rotation-alignment-viewport/pitch-alignment-viewport/text-translate-anchor-map/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5cd1fe87b1f3e42d7b0dd5e01592a8aa596da0 GIT binary patch literal 1878 zcmeHI{WsGK7#|b2A-7J8&_<+=E~e4Aw#DT#H{p6I(M8EdGDDhor7MwW3WrP6sdGzj zxdbGuEwuaGg8hD-CE&L#_nTAm^4#rMZgq1S z+~|D#0wT#d+t>E)2Uz_i9G71fFza{ZEyU$q>9k3|^}Lr=6fN~g9p?VP+tj+;!6DZL zn0r^~L4*5^XOo5=ds^@>g`6bwCeIf~3N|t9&odFYXM4>#km5@_JQ>-KgI)Yyn$(=W z8*mi&4EimX?VW>jgxy8-+FB-;PFRm|f3#cggbLyB??1CmRU5W6cDh<%=21veu0&&H zA4B3~dHsK&kOn%qjtu#D_cp??onltoq7$Y%I6vM;NSUp9lDxV4shmpn&>sLrLy2!z zPlu*{Jp{lmwk+?Ge@U|uv#H{BF_o}9-Cy8t_BxiwdV*DP*$NshvxLEnR1JlLXsrX(UL0>uN}s%;hn?UOs8gdcw5f42e`@%oO=N$CeblNZ?sST4kru7MOAwON9t>SHMs+62F zj!Cn7%fd1pkw~Pm1L<04uHN!epH1Rq*G@_Eob~a`pP3yU>b!>7dmSred4z^Gjw7@ zJWxko427jjT_jCn7#@#T@QbUp3D>Srs<0UqB_&YrmtpL@;n5$i6~}<+oOGxo1mDOBL(a!IjE(JqPkCr_vZs zi0<2``08_3sr;0(y(!-hhl|&EaRfa6CXz59739K?8Sg5utP}xv5G^$Dr$5yA&vY07 zTw*@H5KOe+Krg*BLra<9u`45|UW~U^3FkiA+S|XS*kqM2W=Om|z*E!HpTqoDH{>O+%MW!`=|4Mu`pAIh_`@woCEp3gt zVrOaR95_JDZE_3>p7eob?8OrVGr!_|Db<#ViM91zVL`#!O^yK;Pg%f@l?-KN)xLDh za!)`+JcV7~cq?B6kiJXv+)lzMT?@MNnJq?_PFJ0x(-D|E`5J+asQ})(Hl0pdIbw-) z4&0;Q(85#p@6%s@gGmcdHG~>g|1vTH%=Z2-q5r9WZ0lP4qO0^9{(K1dCCKw+}AGYojzy5EhUvH`NbIt%NKt1+rVw=(tT<6lGV5Lf?K97Z95{J`BEv#ahsAx z%Zr@DVnV_*uiaQwW-QR+B6#%?r@Fu8nKfHW?yQ;3I{E%@o8Fh7Cy1<^AhLQC(Jcgc zU8UsPCkpP{TBN!qN+UqJ%gB_~+1bGC*mtx1wu6p0c8jkHnBWxH)|Qad^WV^n&DmMQ zXQ9O7$3PXVy}bv2Sa1bt96Q0WKQo1eRa50?ma}2lx|XxEe}-y@7hSCRcvSq&?d|>C zGiS|uv}*Obq=W>9zx7)dN~{&*;X8CgVt+<~K$NcDth>9*H)mc}+xPkB^ZCJ{U%q^~ zkYkoW9J5^ij#B#;P{+U+$`&;3Q3yRm)M!Rn^6G?p^Cn43e z(XcM5K;YZEr;B#|d^Y>$rd00xKYqPlU-{!f{ z4mM4#yt7J;{&S?*f*#Z{64M!`P{j= ze?GQJXPC{l`FzH>r>}2Q-QOy?suzlW^K4EYY-YDCdct9xel8^;q2b=WxJz3UW0SV! z-#>TGw)zH34%<1#+YS4fts7hqSRZ&5*1do4C$7)W&p&_MZ=Y6FGzsX!s;a6TZ@1l+ zkdjLJ{q60Uxz^L?&65)ny`=i&&CShwzTL_`lbxR~S->-cVH)%1#_f$i59lQPUq1iS zv)TDY@9tOvJ?2zjZ+|vzGSKpU7jND?2@E=Se}Dd!wwuCnFp>+8ku_kQ1$aFFRsv)K}FkHr@kT+Fy|_wHF+ z_kN@Fs#)^0Sxp+wety3B)!OYhHYT&{@A<%V`0!yFi-Lyd^Q!s&E&y6IJ-*J8TU_tS zm6gFdHD3a+F}`jnJz$k!`nEeF7MXNGQq$0Am z#m|c_`_}LlBvbVR6rq8c+D=#-?N|)Gd7t23iijVw_ zZnzsYK&>09#=campXhGAm}_n#9qz5vuSnKB?HazN&45DbFg*}Xx!HXqp6^|J zTM^;yTM>tD@e*F=0y#bQdfU<2Kmx~!2Xik%I#HtX|I$lH#dAA9a|scz=-LZ%IQOu3 zzA$3Jcrq$5NJT&^;lF?KdNrveSU(DO#_cC1M`szGl{9-Z*nxZexO5@s+qZ9=lAT>$ zE~;dP(Akk8MX&jdhxtw%7L1X{$_EAp7R~JNm;x`9n_JoAr<af((oYVGwK9O zqs7@3AEkk$lL8+Fcj#Epp56Mpw>~&N-kp{G;lp|J5z+cUxOh`ztnwb6 z*Ftap`}fH;HJADL_#B;`bMW~1*ROfJ%W+HSP?HUw2S>a!JTfxlS$l$(w%JOWXpP4p)Z8x=8f4l3-QRUgYl~nw z$EM^XZePV-{XM4N@x~I{uN~4%_bWx_`iWlhujR1{>tn60t(;fFwL>Tk}1+!H0hv{``2vMo)vZnQRPfATO10D*ML0e}AbC zyBJos3`IvUp6_%i|In7?I$jf>C}fb3mDQK0mAE0x5u!RNYkxv zZ&yW-$^Ln3O2&?WaI0Uv1VZy8hW^7Q@61yF zaDD!%R3ndwNK`?A;Ct6GHAhEbc6N5`P&~iJ&SsZX>SYhUDu=$d>nA>ynb$kIxbO=K zMu>SJGdNX(IMaLDHs`uTq@>zceZ2ne`<-TH77-WEGswCMLYSz3C^b>%ZM#AI8Wc=ONEoehI3+JHubX};#^Qs2 zKT0t1BpU7H?A$!(X)VX$cfvCI-5zJ)h|rU3L-~MwM1@>Ib^}7etWCceh0rs zM1+N{pc_!Z!D3+++eLf&si~>`otfv#zejBY{_ZYp|LhNk)!{4sat!5nAACs4yz;0L z3OFNZw>4mxdxDXc7_=Nth~ohIEAo_Fv!LZrEt18(sAg6%`$Q zfB&2XFE20UN%M75DqTh>;~y0j#jB{8>cWd7WRVJC{mJSYiX|@=C9h}O{ZhvF)n$*c-@kpJohKL=)JMF3 zuTL7dxQI0t=%%V!Tl20r?ny$AyHhVl5{Xu2!)fv^?#K++@9$&a&!b0=-a;o$^5ZCq z0EI>nba!07W9{vm$eKGG|*_6Uq;T$aaRM$L>bpnX_In`p6S-7iUB*)Li(?W zLq$f^)YQb~f^;{VosB8i9}Voe{e;!($=;9rNMstrxl3`GnX$vp>S(l@ni`?AlTS(M zoI0u|;ngcnP+)UOd80NO&1zqjy86AEnS-PA8T-XJ7Q6i$E zHccT^-5E+LTvz;ga7{WWmdeUXVG$8Z7k74ikZAVW}YnSsozJo`` zWvU(?GJRL~!~r-}W8H%WDte$iQksk{jkmYAnKp`LdS-?M_C}cu5NtwfYKNY}1TIGy zI{O8%0h{i(-LFwpTs-X=LC+qx-F~Z+*++6#b z5izmcvNA@H1~@0%6@NLnfGy@G`S)s9aOadek9lgRyr!Vwb zhJ;wIk(h);tC+aB>y?2AZ;Fbr$hxu_v{5*gRW#UEzmQofvL)2i$w|awp)aewYY{uo za}aTD(`6|~{pnBF=H}+FUh#vA-BURY4Gm}VCJ~wmhXaNrucIC1MX&Su{y%pAFU`G= z(gqpmsBb#l5e?D>`m!!odU|>F>^zB$wTOC7CX*MjM=7gle(db&k)LU?!Cxj#`P7r- zZQJMr##Vg-PV(+3QOK=MMq{zt+5t5aZUH@M@^qHbIbYb{XqtM@YF^@+o1@K$kKQh! zthe(Lc7W?}Co&0@`#189uvkVsJc#JPJy=cotx3iARjdiz5hz~3XP%5WdP<#&mpUWq z8oAui&`|CEeTiV!&~3|^FWJ{A9tM`YWr~VNxy zq<{I6ZLMa8QMvb(VoN)Ba5va93Y`Qjk+p877C%GBwfB2%S%oF1IXJ=;-930UaetwE*GtLKg8c@sm!=7p@_UiiGItV~c^I*vPNC$za) z&C}BpgSR;j1N@y*<-`50w`R2oPOL)hAKJY|Ly^jQm zM534$f&cl&fR0prT3RQaRKqoQcWIpz$+_BvO#X`(nbBw&HhOWhnmDioi=f?mYmIwu zl4dncpmWSSXI5CEJ6++F`AAVo$;`o@Nui4u6YJONo=Te6x$kUPo4mz*0`k37_LF`0 z?wzrz=|!IvOf1)x=xcR?(K+sYSNaAvwa} z+U0;=tT{lk?6adBAMV%rBwK*Yrt|nJv~k&_Q|n-7!l0O z*Uij0TOvXa+HqDD`YFYJ}@or&IK(Ml^gW$oO zeTRpJ+{xQcHa0dV7#ZiCf%_GAN?j-Fk|@FS)hpeRGIK3`{hR9K!5FCgQ}{ns-peMN zTU+dko&u9WdlKs({&0Qp|HTJ_dR|c>t^EG}_nWS+;ve@n>8gMDi#`0|Csh97HwTDb zd2DP9;%rsGt|y@6;e_{Dn()vPb~#4`G@i1lkRfkA=Za~6!o+_o9;u5)gW2AKB=1w7 zp)=-s3HZ73+tL8`;!R2&i>siE(iu#l^mIa&qqA0dP$D zIaqkg0z7egyw;1JOPLKYA33;~my;6);kwReRoljf&!_&pC7eGBDk~F`lg~^~PqQie zN^{kfZ4H}RdaR7fC<6l3vaSYhkfB0K+=XJW%U@%30wJUhjf_Bs(^OMCY5_(Le2**( zFL3gG#wHW?e~*w)!^la<2fv(Yf4<;c=e>Lrjt?n@ERW%IaQgJ=npZGA{pFS_Wdf3t zv0Y3QqST24^fYX9kHcH5P4>mp|G^9fGwL4zhaCNdtXR&Dg31Byn=}~-(O5Jdzr3NT zmHJpp9rcsmIL~tU>(_ZA5KFgR1CEi6va+%p_o}~>?%^^2K^EZd_{YNhFyWcgwY9bO z0XH->%0Fua1|DFMRG|X93KFa;1(a6*_raI)pCYea%WMM`V;#g3K{$^e(NfpHQKn`U F_CJ=w)YAX} literal 4051 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 diff --git a/test/integration/render/tests/text-variable-anchor-offset/pitched-with-map/expected.png b/test/integration/render/tests/text-variable-anchor-offset/pitched-with-map/expected.png index 3a255e144ed1ff0fb80faa4f515a78dfefba4773..0f9eb6b592d4d7a2174c8b529768556a1f0ce34f 100644 GIT binary patch literal 46657 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 literal 29153 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�}fiaxK~y&(8l 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 iBJIjXb6cqGaHW{HPDe-fRFip diff --git a/test/integration/render/tests/text-variable-anchor-offset/rotated-with-map/expected.png b/test/integration/render/tests/text-variable-anchor-offset/rotated-with-map/expected.png index 5732ec6037ac92826e7ca300bc99f23692b2f32d..d1a653f2760782b2df79bc0ccb57b48364449693 100644 GIT binary patch literal 53088 zcmX_}30%+l_W#G8J!FX_iIR}A6j?$gqE%!}gci%tVkuilq9R%lDHSS)C`QI!5=F@} zG_tf?5|t%H|L4j5{pazxckZS7em?KzoY#51UgxyKYKB?+Ha*+?_S#b%-w8*Gyc)#I=>u;{7TZH%RFuBF#yM=>X z4R6mixPO1Hp=bHRy?e@s<@VZ~C zu!xAvpFh6u(b(Zz@o3h(vedkB3p2L0w@Y?Bl&!F3!pfDy+tigGTw&n;^0(TGysW!- zcQ!oS+^kiPv1^CxyXKZg%yPW095r^`-YXlv-#@=%-qdN+9R6OWyyEhwZY!>Q9dPvM z(X%UFMBlnK#s1`+%&Yx!^o9)^rZHeZ%8D1`wrtsw7_6qCu;p6VHJ8-Ru(PO7g zo!TZvr=+TChRMi-?Za;0NVJZhePz92Nb1;ipLLi1t26Fr-NFOI7pK?ejkjFC-spvI z!`O36A0L~xZ^*+_e;l+N_jT*V3u`}VKfAcbH9LIZrJC$PccKi#GK0FO`qa97`}8*J z$(eY}0&T>RWF$;Q7TdR>Q6qeiLRanXPK@5z#nuOG+*%yRT;v0}xF zpMhF|w^D+&0u6!^6SdUU)n}h|>$F8pu~Vn(K|`->pR{C&_N-HLV`n8h7Phstw47`` zx%#Sxx%!YHyLinH;~Q$n_h{ELJv}{f%85svd-uM3FLsho;f0GA7oM3tW%~5~`ubt- zuQo(){P8XSuyM1$><4K_v~k#bq5Im)sweHId3x%(=0-U^I5vIwvM0OcIa{5Zvr{LB z2P&>UTHHE5-)+C4*8s1I+@q&Y@7~kT?0$k}AC*({uI@T>tx5V zm8-`L88YP3w>Kve?XUtX4bXiWXvc?}bjA1^%r)ZD`2#^cA`Pud4HzVE{`3(fxf`_E~s zSC1SJwxhCg*>U@mQ@ySMb3OSJYwm;_m0mT zqk@y(;4?b{VhLsX}`xoJf>oSxsLfB*ikKCM-1aOAGF zZr|SIqKQelsFJ4b$g_p~3YoV71d(~6~Q z+kHssiR3HlnwkNp{Ld2=@1fM7eDJQRv2hb)V`GE$ zKR!KPv}loH_wHurmp{`zcvofI`u%tASg?TE^Y%DLZrb!)VPRona6*D63mM>)7d_VE z;K-c^N3B?(7umzmQ{(d5PsRJ@ZFIV`f0)kPwB6BT*VW8o?Y0#s7ra}|%LeG=EPM7( zS8Jun5lg%E8nt}#N&DIY*BEOXn~BSo>4aRAsB(GTnwpv#-AIelvNHC_QzrB0tL2SvFzUd;GY`GzHr(ze ze?QRnm}0M9L0W-!rpb?M50_O`=&$>{thw?0n$p`U2JV|Yt*xz}EE~D;YgzZTpDTA1 zzrV2I`$+bF<-7m7Moi62zWOt}`@HqWB{z3Q>N&UZ@bFmw^J_)B9=g9-EBQn{yW|sg z!K6lFN1ENabD>iqt9aHPI#XJzHvmsx>JU!Jd9R*>S)791G0B9}vd zJ13{))Mrj@o1J8&R7Wc<%tM4DUAFR%0Ag9au%e%rcr>!Sb8Eq(HC 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

    AoCSo^C$ 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

    _xlI3iSC*PFw#|(bxQSE! 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∾(oDt!kkaO8_Nue;JRgt!yWan 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 GMs?3qnS$jDCd$lfc;in2oX9#J954ry40QvT=F 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 P|KsL7p!b2EK4Jd{!~i}W literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/pitched-rotated-debug/expected-debian-flaky.png b/test/integration/render/tests/text-variable-anchor/pitched-rotated-debug/expected-debian-flaky.png new file mode 100644 index 0000000000000000000000000000000000000000..a82f0fed13c4f9b75a9d39ccaf3434560ff9e48f GIT binary patch literal 69214 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

    P0Pk4T7zgK(!R=$UEhLrpRsWlE@Jk&Q{^??&Zq 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 F{{v{%==}fy literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/pitched-rotated-debug/expected-debian.png b/test/integration/render/tests/text-variable-anchor/pitched-rotated-debug/expected-debian.png new file mode 100644 index 0000000000000000000000000000000000000000..72f7404fbd536cac623cebc120a6c631130b3aeb GIT binary patch literal 69097 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�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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/pitched-with-map/expected.png b/test/integration/render/tests/text-variable-anchor/pitched-with-map/expected.png index 8b0da17d945f6916976f2456e0364243305e02ee..0f9eb6b592d4d7a2174c8b529768556a1f0ce34f 100644 GIT binary patch literal 46657 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 literal 29202 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�&pmJ6G*k=zeP$~~1;yBA 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%0Ag9au%e%rcr>!Sb8Eq(HC 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

      AoCSo^C$ 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/text-translate/style.json b/test/integration/render/tests/text-variable-anchor/text-translate/style.json new file mode 100644 index 0000000000..9f07ea2d53 --- /dev/null +++ b/test/integration/render/tests/text-variable-anchor/text-translate/style.json @@ -0,0 +1,105 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 256, + "width": 256 + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -20.0, + 30.0 + ] + }, + "properties": { + "text": "Text" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -60.0, + -30.0 + ] + }, + "properties": { + "text": "Some more text" + } + } + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "blue" + } + }, + { + "id": "circle2", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "text-field": [ + "get", + "text" + ], + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 16 + }, + "paint": { + "text-translate": [ + 10, + -20 + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/base/expected.png b/test/integration/render/tests/text-variable-anchor/translate-variants/base/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..94dfb017ffa73abb9a950d99e62d284e2975b4c9 GIT binary patch literal 7730 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 R5W{^E*498=DOR@*`8QmtV5|TD literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/base/style.json b/test/integration/render/tests/text-variable-anchor/translate-variants/base/style.json new file mode 100644 index 0000000000..c1a9ba0d57 --- /dev/null +++ b/test/integration/render/tests/text-variable-anchor/translate-variants/base/style.json @@ -0,0 +1,558 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 128, + "width": 512 + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -140.0, + 0.0 + ] + }, + "properties": { + "index": 0 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -100.0, + 0.0 + ] + }, + "properties": { + "index": 1 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -60.0, + 0.0 + ] + }, + "properties": { + "index": 2 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -20.0, + 0.0 + ] + }, + "properties": { + "index": 3 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 20.0, + 0.0 + ] + }, + "properties": { + "index": 4 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 60.0, + 0.0 + ] + }, + "properties": { + "index": 5 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 100.0, + 0.0 + ] + }, + "properties": { + "index": 6 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 140.0, + 0.0 + ] + }, + "properties": { + "index": 7 + } + } + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-untranslated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "blue" + } + }, + { + "id": "circle_red_0", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_0", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_1", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_1", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_2", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_2", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_3", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_3", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_4", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_4", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_5", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_5", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_6", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_6", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_7", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_7", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/pitched-and-rotated/expected.png b/test/integration/render/tests/text-variable-anchor/translate-variants/pitched-and-rotated/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..231f72531c56e824dabcbff24fefb943a426b4ab GIT binary patch literal 17210 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/pitched-and-rotated/style.json b/test/integration/render/tests/text-variable-anchor/translate-variants/pitched-and-rotated/style.json new file mode 100644 index 0000000000..387885ef11 --- /dev/null +++ b/test/integration/render/tests/text-variable-anchor/translate-variants/pitched-and-rotated/style.json @@ -0,0 +1,560 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 512, + "width": 512 + } + }, + "pitch": 60, + "bearing": 60, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -140.0, + 0.0 + ] + }, + "properties": { + "index": 0 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -100.0, + 0.0 + ] + }, + "properties": { + "index": 1 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -60.0, + 0.0 + ] + }, + "properties": { + "index": 2 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -20.0, + 0.0 + ] + }, + "properties": { + "index": 3 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 20.0, + 0.0 + ] + }, + "properties": { + "index": 4 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 60.0, + 0.0 + ] + }, + "properties": { + "index": 5 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 100.0, + 0.0 + ] + }, + "properties": { + "index": 6 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 140.0, + 0.0 + ] + }, + "properties": { + "index": 7 + } + } + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-untranslated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "blue" + } + }, + { + "id": "circle_red_0", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_0", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_1", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_1", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_2", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_2", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_3", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_3", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_4", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_4", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_5", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_5", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_6", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_6", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_7", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_7", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/pitched/expected.png b/test/integration/render/tests/text-variable-anchor/translate-variants/pitched/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c92d3b4c06975d004b4a9239088fab8f6a225c54 GIT binary patch literal 6539 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 MSxc!*(LCh80JTy3EC2ui literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/pitched/style.json b/test/integration/render/tests/text-variable-anchor/translate-variants/pitched/style.json new file mode 100644 index 0000000000..e22301dc46 --- /dev/null +++ b/test/integration/render/tests/text-variable-anchor/translate-variants/pitched/style.json @@ -0,0 +1,559 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 128, + "width": 512 + } + }, + "pitch": 60, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -140.0, + 0.0 + ] + }, + "properties": { + "index": 0 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -100.0, + 0.0 + ] + }, + "properties": { + "index": 1 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -60.0, + 0.0 + ] + }, + "properties": { + "index": 2 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -20.0, + 0.0 + ] + }, + "properties": { + "index": 3 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 20.0, + 0.0 + ] + }, + "properties": { + "index": 4 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 60.0, + 0.0 + ] + }, + "properties": { + "index": 5 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 100.0, + 0.0 + ] + }, + "properties": { + "index": 6 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 140.0, + 0.0 + ] + }, + "properties": { + "index": 7 + } + } + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-untranslated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "blue" + } + }, + { + "id": "circle_red_0", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_0", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_1", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_1", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_2", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_2", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_3", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_3", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_4", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_4", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_5", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_5", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_6", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_6", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_7", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_7", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/rotated/expected.png b/test/integration/render/tests/text-variable-anchor/translate-variants/rotated/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..0472a52b9953b4d557e9b90b9e9ed6b258c57a03 GIT binary patch literal 11979 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-variable-anchor/translate-variants/rotated/style.json b/test/integration/render/tests/text-variable-anchor/translate-variants/rotated/style.json new file mode 100644 index 0000000000..e3d8dea114 --- /dev/null +++ b/test/integration/render/tests/text-variable-anchor/translate-variants/rotated/style.json @@ -0,0 +1,559 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 512, + "width": 512 + } + }, + "bearing": 60, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -140.0, + 0.0 + ] + }, + "properties": { + "index": 0 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -100.0, + 0.0 + ] + }, + "properties": { + "index": 1 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -60.0, + 0.0 + ] + }, + "properties": { + "index": 2 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -20.0, + 0.0 + ] + }, + "properties": { + "index": 3 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 20.0, + 0.0 + ] + }, + "properties": { + "index": 4 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 60.0, + 0.0 + ] + }, + "properties": { + "index": 5 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 100.0, + 0.0 + ] + }, + "properties": { + "index": 6 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 140.0, + 0.0 + ] + }, + "properties": { + "index": 7 + } + } + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "circle-untranslated", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 5, + "circle-color": "blue" + } + }, + { + "id": "circle_red_0", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_0", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 0 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_1", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_1", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 1 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_2", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_2", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 2 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_3", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_3", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 3 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_4", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_4", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 4 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_5", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_5", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 5 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_6", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "viewport", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_6", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 6 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "viewport", + "text-translate": [ + 10, + -20 + ] + } + }, + { + "id": "circle_red_7", + "type": "circle", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "paint": { + "circle-radius": 5, + "circle-color": "red", + "circle-translate-anchor": "map", + "circle-translate": [ + 10, + -20 + ] + } + }, + { + "id": "text_7", + "type": "symbol", + "source": "geojson", + "filter": [ + "==", + "index", + 7 + ], + "layout": { + "text-field": "AAA", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-variable-anchor": [ + "left", + "right", + "bottom", + "top" + ], + "text-size": 12, + "text-rotation-alignment": "map", + "text-pitch-alignment": "map" + }, + "paint": { + "text-translate-anchor": "map", + "text-translate": [ + 10, + -20 + ] + } + } + ] +} \ No newline at end of file From ef9a8f867b4b0d3a21be1dd0f2f6b557bc82d026 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Fri, 3 May 2024 11:58:53 +0200 Subject: [PATCH 02/33] Import src changes to symbols from globe branch --- CHANGELOG.md | 6 + src/render/draw_collision_debug.ts | 23 +- src/render/draw_symbol.ts | 123 +++++-- src/render/program/collision_program.ts | 27 +- src/render/program/symbol_program.ts | 62 +++- src/shaders/collision_box.vertex.glsl | 25 +- src/shaders/symbol_icon.vertex.glsl | 37 +- src/shaders/symbol_sdf.vertex.glsl | 41 ++- src/shaders/symbol_text_and_icon.vertex.glsl | 43 ++- src/symbol/collision_index.test.ts | 5 +- src/symbol/collision_index.ts | 334 +++++++++++++++--- src/symbol/placement.ts | 343 +++++++++++++------ src/symbol/projection.test.ts | 59 +++- src/symbol/projection.ts | 333 ++++++++++++------ src/symbol/symbol_layout.ts | 29 +- 15 files changed, 1099 insertions(+), 391 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1b52f07d6..b5886f2b19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ - Sprites include optional textFitHeight and textFitWidth values ([#4019](https://github.com/maplibre/maplibre-gl-js/pull/4019)) ### 🐞 Bug fixes + +- Fixed symbol collision debug view (`showCollisionBoxes`) not showing the actual bounding boxes used for collision and click areas. The displayed boxes now match actual collision boxes exactly. +- Fixed symbol collisions using inaccurate and sometimes entirely wrong collision boxes when the map is pitched or rotated. ([#210](https://github.com/maplibre/maplibre-gl-js/issues/210)) +- Fixed symbol collision boxes not being accurate for variable-anchor symbols. +- Fixed icon collision boxes using `text-translate` property for translation instead of the correct `icon-translate`. +- Fixed `text-translate` and `icon-translate` behaving weirdly and inconsistently with other `-translate` properties. ([#3456](https://github.com/maplibre/maplibre-gl-js/issues/3456)) - _...Add new stuff here..._ ## 4.1.3 diff --git a/src/render/draw_collision_debug.ts b/src/render/draw_collision_debug.ts index 876c5b22de..6826ff0a5e 100644 --- a/src/render/draw_collision_debug.ts +++ b/src/render/draw_collision_debug.ts @@ -7,7 +7,6 @@ import {DepthMode} from '../gl/depth_mode'; import {StencilMode} from '../gl/stencil_mode'; import {CullFaceMode} from '../gl/cull_face_mode'; import {collisionUniformValues, collisionCircleUniformValues} from './program/collision_program'; - import {QuadTriangleArray, CollisionCircleLayoutArray} from '../data/array_types.g'; import {collisionCircleLayout} from '../data/bucket/symbol_attributes'; import {SegmentVector} from '../data/segment'; @@ -28,6 +27,7 @@ let quadTriangles: QuadTriangleArray; export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, layer: StyleLayer, coords: Array, translate: [number, number], translateAnchor: 'map' | 'viewport', isText: boolean) { const context = painter.context; const gl = context.gl; + const projection = painter.style.map.projection; const program = painter.useProgram('collisionBox'); const tileBatches: Array = []; let circleCount = 0; @@ -38,10 +38,7 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l const tile = sourceCache.getTile(coord); const bucket: SymbolBucket = (tile.getBucket(layer) as any); if (!bucket) continue; - let posMatrix = coord.posMatrix; - if (translate[0] !== 0 || translate[1] !== 0) { - posMatrix = painter.translatePosMatrix(coord.posMatrix, tile, translate, translateAnchor); - } + const posMatrix = coord.posMatrix; const buffers = isText ? bucket.textCollisionBox : bucket.iconCollisionBox; // Get collision circle data of this bucket const circleArray: Array = bucket.collisionCircleArray; @@ -50,7 +47,7 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l // This might vary between buckets as the symbol placement is a continuous process. This matrix is // required for transforming points from previous screen space to the current one const invTransform = mat4.create(); - const transform = posMatrix; + const transform = posMatrix; // Ignore translation mat4.mul(invTransform, bucket.placementInvProjMatrix, painter.transform.glCoordMatrix); mat4.mul(invTransform, invTransform, bucket.placementViewportMatrix); @@ -66,16 +63,19 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l circleCount += circleArray.length / 4; // 4 values per circle circleOffset = circleCount; } - if (!buffers) continue; + + // Draw collision boxes + if (!buffers) { + continue; + } + const projectionData = projection.getProjectionData(coord.canonical, posMatrix); program.draw(context, gl.LINES, DepthMode.disabled, StencilMode.disabled, painter.colorModeForRenderPass(), CullFaceMode.disabled, - collisionUniformValues( - posMatrix, - painter.transform, - tile), + collisionUniformValues(painter.transform), painter.style.map.terrain && painter.style.map.terrain.getTerrainData(coord), + projectionData, layer.id, buffers.layoutVertexBuffer, buffers.indexBuffer, buffers.segments, null, painter.transform.zoom, null, null, buffers.collisionVertexBuffer); @@ -134,6 +134,7 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l CullFaceMode.disabled, uniforms, painter.style.map.terrain && painter.style.map.terrain.getTerrainData(batch.coord), + null, layer.id, vertexBuffer, indexBuffer, diff --git a/src/render/draw_symbol.ts b/src/render/draw_symbol.ts index ec912679fb..de6daedccc 100644 --- a/src/render/draw_symbol.ts +++ b/src/render/draw_symbol.ts @@ -26,7 +26,7 @@ import type {SourceCache} from '../source/source_cache'; import type {SymbolStyleLayer} from '../style/style_layer/symbol_style_layer'; import type {Texture, TextureFilter} from '../render/texture'; -import type {OverscaledTileID} from '../source/tile_id'; +import type {OverscaledTileID, UnwrappedTileID} from '../source/tile_id'; import type {UniformValues} from './uniform_binding'; import type {SymbolSDFUniformsType} from '../render/program/symbol_program'; import type {CrossTileID, VariableOffset} from '../symbol/placement'; @@ -37,6 +37,8 @@ import type {Transform} from '../geo/transform'; import type {ColorMode} from '../gl/color_mode'; import type {Program} from './program'; import type {TextAnchor} from '../style/style_layer/variable_text_anchor'; +import {ProjectionData} from './program/projection_program'; +import {Projection} from '../geo/projection/projection'; type SymbolTileRenderState = { segments: SegmentVector; @@ -46,6 +48,7 @@ type SymbolTileRenderState = { program: Program; buffers: SymbolBuffers; uniformValues: UniformValues; + projectionData: ProjectionData; atlasTexture: Texture; atlasTextureIcon: Texture | null; atlasInterpolation: TextureFilter; @@ -73,6 +76,8 @@ export function drawSymbols(painter: Painter, sourceCache: SourceCache, layer: S updateVariableAnchors(coords, painter, layer, sourceCache, layer.layout.get('text-rotation-alignment'), layer.layout.get('text-pitch-alignment'), + layer.paint.get('text-translate'), + layer.paint.get('text-translate-anchor'), variableOffsets ); } @@ -128,8 +133,11 @@ function updateVariableAnchors(coords: Array, layer:SymbolStyleLayer, sourceCache: SourceCache, rotationAlignment: SymbolLayerSpecification['layout']['text-rotation-alignment'], pitchAlignment: SymbolLayerSpecification['layout']['text-pitch-alignment'], + translate: [number, number], + translateAnchor: 'map' | 'viewport', variableOffsets: {[_ in CrossTileID]: VariableOffset}) { - const tr = painter.transform; + const transform = painter.transform; + const projection = painter.style.map.projection; const rotateWithMap = rotationAlignment === 'map'; const pitchWithMap = pitchAlignment === 'map'; @@ -139,17 +147,44 @@ function updateVariableAnchors(coords: Array, if (!bucket || !bucket.text || !bucket.text.segments.get().length) continue; const sizeData = bucket.textSizeData; - const size = evaluateSizeForZoom(sizeData, tr.zoom); + const size = evaluateSizeForZoom(sizeData, transform.zoom); const pixelToTileScale = pixelsToTileUnits(tile, 1, painter.transform.zoom); const labelPlaneMatrix = symbolProjection.getLabelPlaneMatrix(coord.posMatrix, pitchWithMap, rotateWithMap, painter.transform, pixelToTileScale); const updateTextFitIcon = layer.layout.get('icon-text-fit') !== 'none' && bucket.hasIconData(); if (size) { - const tileScale = Math.pow(2, tr.zoom - tile.tileID.overscaledZ); + const tileScale = Math.pow(2, transform.zoom - tile.tileID.overscaledZ); const getElevation = painter.style.map.terrain ? (x: number, y: number) => painter.style.map.terrain.getElevation(coord, x, y) : null; + const translation = projection.translatePosition(transform, tile, translate, translateAnchor); updateVariableAnchorsForBucket(bucket, rotateWithMap, pitchWithMap, variableOffsets, - tr, labelPlaneMatrix, coord.posMatrix, tileScale, size, updateTextFitIcon, getElevation); + transform, labelPlaneMatrix, coord.posMatrix, tileScale, size, updateTextFitIcon, painter.style.map.projection, translation, coord.toUnwrapped(), getElevation); + } + } +} + +function getShiftedAnchor(projectedAnchorPoint: Point, projectionArgs: symbolProjection.ProjectionArgs, rotateWithMap, shift: Point, transformAngle: number, pitchedTextShiftCorrection: number) { + // Usual case is that we take the projected anchor and add the pixel-based shift + // calculated earlier. In the (somewhat weird) case of pitch-aligned text, we add an equivalent + // tile-unit based shift to the anchor before projecting to the label plane. + const translatedAnchor = projectionArgs.tileAnchorPoint.add(new Point(projectionArgs.translation[0], projectionArgs.translation[1])); + if (projectionArgs.pitchWithMap) { + let adjustedShift = shift.mult(pitchedTextShiftCorrection); + if (!rotateWithMap) { + adjustedShift = adjustedShift.rotate(-transformAngle); + } + const tileAnchorShifted = translatedAnchor.add(adjustedShift); + return symbolProjection.project(tileAnchorShifted, projectionArgs.labelPlaneMatrix, projectionArgs.getElevation).point; + } else { + if (rotateWithMap) { + // Compute the angle with which to rotate the anchor, so that it is aligned with + // the map's actual east-west axis. Very similar to what is done in the shader. + const projectedAnchorRight = symbolProjection.projectTileCoordinatesToViewport(projectionArgs.tileAnchorPoint.x + 1, projectionArgs.tileAnchorPoint.y, projectionArgs); + const east = projectedAnchorRight.point.sub(projectedAnchorPoint); + const angle = Math.atan(east.y / east.x) + (east.x < 0 ? Math.PI : 0); + return projectedAnchorPoint.add(shift.rotate(angle)); + } else { + return projectedAnchorPoint.add(shift); } } } @@ -165,6 +200,9 @@ function updateVariableAnchorsForBucket( tileScale: number, size: EvaluatedZoomSize, updateTextFitIcon: boolean, + projection: Projection, + translation: [number, number], + unwrappedTileID: UnwrappedTileID, getElevation: (x: number, y: number) => number) { const placedSymbols = bucket.text.placedSymbolArray; const dynamicTextLayoutVertexArray = bucket.text.dynamicLayoutVertexArray; @@ -183,7 +221,22 @@ function updateVariableAnchorsForBucket( symbolProjection.hideGlyphs(symbol.numGlyphs, dynamicTextLayoutVertexArray); } else { const tileAnchor = new Point(symbol.anchorX, symbol.anchorY); - const projectedAnchor = symbolProjection.project(tileAnchor, pitchWithMap ? posMatrix : labelPlaneMatrix, getElevation); + const projectionArgs = { + getElevation, + width: transform.width, + height: transform.height, + labelPlaneMatrix, + lineVertexArray: null, + pitchWithMap, + projection, + projectionCache: null, + tileAnchorPoint: tileAnchor, + translation, + unwrappedTileID + }; + const projectedAnchor = pitchWithMap ? + symbolProjection.project(tileAnchor, posMatrix, getElevation) : + symbolProjection.projectTileCoordinatesToViewport(tileAnchor.x, tileAnchor.y, projectionArgs); const perspectiveRatio = symbolProjection.getPerspectiveRatio(transform.cameraToCenterDistance, projectedAnchor.signedDistanceFromCamera); let renderTextSize = evaluateSizeForFeature(bucket.textSizeData, size, symbol) * perspectiveRatio / ONE_EM; if (pitchWithMap) { @@ -192,18 +245,10 @@ function updateVariableAnchorsForBucket( } const {width, height, anchor, textOffset, textBoxScale} = variableOffset; + const shift = calculateVariableRenderShift(anchor, width, height, textOffset, textBoxScale, renderTextSize); - const shift = calculateVariableRenderShift( - anchor, width, height, textOffset, textBoxScale, renderTextSize); - - // Usual case is that we take the projected anchor and add the pixel-based shift - // calculated above. In the (somewhat weird) case of pitch-aligned text, we add an equivalent - // tile-unit based shift to the anchor before projecting to the label plane. - const shiftedAnchor = pitchWithMap ? - symbolProjection.project(tileAnchor.add(shift), labelPlaneMatrix, getElevation).point : - projectedAnchor.point.add(rotateWithMap ? - shift.rotate(-transform.angle) : - shift); + const pitchedTextCorrection = projection.getPitchedTextCorrection(transform, tileAnchor.add(new Point(translation[0], translation[1])), unwrappedTileID); + const shiftedAnchor = getShiftedAnchor(projectedAnchor.point, projectionArgs, rotateWithMap, shift, transform.angle, pitchedTextCorrection); const angle = (bucket.allowVerticalPlacement && symbol.placedOrientation === WritingMode.vertical) ? Math.PI / 2 : 0; for (let g = 0; g < symbol.numGlyphs; g++) { @@ -266,6 +311,7 @@ function drawLayerSymbols( const context = painter.context; const gl = context.gl; const tr = painter.transform; + const projection = painter.style.map.projection; const rotateWithMap = rotationAlignment === 'map'; const pitchWithMap = pitchAlignment === 'map'; @@ -275,6 +321,8 @@ function drawLayerSymbols( // Unpitched point labels need to have their rotation applied after projection const rotateInShader = rotateWithMap && !pitchWithMap && !alongLine; + const isViewportLine = !pitchWithMap && alongLine; + const hasSortKey = !layer.layout.get('symbol-sort-key').isConstant(); let sortFeaturesByKey = false; @@ -284,6 +332,8 @@ function drawLayerSymbols( const tileRenderState: Array = []; + const pitchedTextRescaling = projection.getCircleRadiusCorrection(tr); + for (const coord of coords) { const tile = sourceCache.getTile(coord); const bucket = tile.getBucket(layer) as SymbolBucket; @@ -328,8 +378,13 @@ function drawLayerSymbols( } const s = pixelsToTileUnits(tile, 1, painter.transform.zoom); - const labelPlaneMatrix = symbolProjection.getLabelPlaneMatrix(coord.posMatrix, pitchWithMap, rotateWithMap, painter.transform, s); - const glCoordMatrix = symbolProjection.getGlCoordMatrix(coord.posMatrix, pitchWithMap, rotateWithMap, painter.transform, s); + const baseMatrix = isViewportLine ? coord.posMatrix : identityMat4; + const labelPlaneMatrix = symbolProjection.getLabelPlaneMatrix(baseMatrix, pitchWithMap, rotateWithMap, painter.transform, s); + const glCoordMatrixForShader = symbolProjection.getGlCoordMatrix(baseMatrix, pitchWithMap, rotateWithMap, painter.transform, s); + const glCoordMatrixForSymbolPlacement = symbolProjection.getGlCoordMatrix(coord.posMatrix, pitchWithMap, rotateWithMap, painter.transform, s); + + const translation = projection.translatePosition(painter.transform, tile, translate, translateAnchor); + const projectionData = projection.getProjectionData(coord.canonical, coord.posMatrix); const hasVariableAnchors = hasVariablePlacement && bucket.hasTextData(); const updateTextFitIcon = layer.layout.get('icon-text-fit') !== 'none' && @@ -339,12 +394,14 @@ function drawLayerSymbols( if (alongLine) { const getElevation = painter.style.map.terrain ? (x: number, y: number) => painter.style.map.terrain.getElevation(coord, x, y) : null; const rotateToLine = layer.layout.get('text-rotation-alignment') === 'map'; - symbolProjection.updateLineLabels(bucket, coord.posMatrix, painter, isText, labelPlaneMatrix, glCoordMatrix, pitchWithMap, keepUpright, rotateToLine, getElevation); + symbolProjection.updateLineLabels(bucket, coord.posMatrix, painter, isText, labelPlaneMatrix, glCoordMatrixForSymbolPlacement, pitchWithMap, keepUpright, rotateToLine, projection, coord.toUnwrapped(), tr.width, tr.height, translation, getElevation); } - const matrix = painter.translatePosMatrix(coord.posMatrix, tile, translate, translateAnchor), - uLabelPlaneMatrix = (alongLine || (isText && hasVariablePlacement) || updateTextFitIcon) ? identityMat4 : labelPlaneMatrix, - uglCoordMatrix = painter.translatePosMatrix(glCoordMatrix, tile, translate, translateAnchor, true); + const matrix = coord.posMatrix; // formerly also incorporated translate and translate-anchor + const shaderVariableAnchor = (isText && hasVariablePlacement) || updateTextFitIcon; + const noLabelPlane = (alongLine || shaderVariableAnchor); + const uLabelPlaneMatrix = noLabelPlane ? identityMat4 : labelPlaneMatrix; + const uglCoordMatrix = glCoordMatrixForShader; // formerly also incorporated translate and translate-anchor const hasHalo = isSDF && layer.paint.get(isText ? 'text-halo-width' : 'icon-halo-width').constantOr(1) !== 0; @@ -352,23 +409,24 @@ function drawLayerSymbols( if (isSDF) { if (!bucket.iconsInText) { uniformValues = symbolSDFUniformValues(sizeData.kind, - size, rotateInShader, pitchWithMap, painter, matrix, - uLabelPlaneMatrix, uglCoordMatrix, isText, texSize, true); + size, rotateInShader, pitchWithMap, alongLine, shaderVariableAnchor, painter, matrix, + uLabelPlaneMatrix, uglCoordMatrix, translation, isText, texSize, true, pitchedTextRescaling); } else { uniformValues = symbolTextAndIconUniformValues(sizeData.kind, - size, rotateInShader, pitchWithMap, painter, matrix, - uLabelPlaneMatrix, uglCoordMatrix, texSize, texSizeIcon); + size, rotateInShader, pitchWithMap, alongLine, shaderVariableAnchor, painter, matrix, + uLabelPlaneMatrix, uglCoordMatrix, translation, texSize, texSizeIcon, pitchedTextRescaling); } } else { uniformValues = symbolIconUniformValues(sizeData.kind, - size, rotateInShader, pitchWithMap, painter, matrix, - uLabelPlaneMatrix, uglCoordMatrix, isText, texSize); + size, rotateInShader, pitchWithMap, alongLine, shaderVariableAnchor, painter, matrix, + uLabelPlaneMatrix, uglCoordMatrix, translation, isText, texSize, pitchedTextRescaling); } const state = { program, buffers, uniformValues, + projectionData, atlasTexture, atlasTextureIcon, atlasInterpolation, @@ -418,11 +476,11 @@ function drawLayerSymbols( const uniformValues = state.uniformValues; if (state.hasHalo) { uniformValues['u_is_halo'] = 1; - drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, uniformValues, segmentState.terrainData); + drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, uniformValues, state.projectionData, segmentState.terrainData); } uniformValues['u_is_halo'] = 0; } - drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, state.uniformValues, segmentState.terrainData); + drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, state.uniformValues, state.projectionData, segmentState.terrainData); } } @@ -436,11 +494,12 @@ function drawSymbolElements( stencilMode: StencilMode, colorMode: Readonly, uniformValues: UniformValues, + projectionData: ProjectionData, terrainData: TerrainData) { const context = painter.context; const gl = context.gl; program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, - uniformValues, terrainData, layer.id, buffers.layoutVertexBuffer, + uniformValues, terrainData, projectionData, layer.id, buffers.layoutVertexBuffer, buffers.indexBuffer, segments, layer.paint, painter.transform.zoom, buffers.programConfigurations.get(layer.id), buffers.dynamicLayoutVertexBuffer, buffers.opacityVertexBuffer); diff --git a/src/render/program/collision_program.ts b/src/render/program/collision_program.ts index 4387dcf65f..017882aa26 100644 --- a/src/render/program/collision_program.ts +++ b/src/render/program/collision_program.ts @@ -1,18 +1,11 @@ import {Uniform1f, Uniform2f, UniformMatrix4f} from '../uniform_binding'; -import {pixelsToTileUnits} from '../../source/pixels_to_tile_units'; - import type {Context} from '../../gl/context'; import type {UniformValues, UniformLocations} from '../uniform_binding'; import type {Transform} from '../../geo/transform'; -import type {Tile} from '../../source/tile'; import {mat4} from 'gl-matrix'; export type CollisionUniformsType = { - 'u_matrix': UniformMatrix4f; - 'u_camera_to_center_distance': Uniform1f; - 'u_pixels_to_tile_units': Uniform1f; - 'u_extrude_scale': Uniform2f; - 'u_overscale_factor': Uniform1f; + 'u_pixel_extrude_scale': Uniform2f; }; export type CollisionCircleUniformsType = { @@ -23,11 +16,7 @@ export type CollisionCircleUniformsType = { }; const collisionUniforms = (context: Context, locations: UniformLocations): CollisionUniformsType => ({ - 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), - 'u_camera_to_center_distance': new Uniform1f(context, locations.u_camera_to_center_distance), - 'u_pixels_to_tile_units': new Uniform1f(context, locations.u_pixels_to_tile_units), - 'u_extrude_scale': new Uniform2f(context, locations.u_extrude_scale), - 'u_overscale_factor': new Uniform1f(context, locations.u_overscale_factor) + 'u_pixel_extrude_scale': new Uniform2f(context, locations.u_pixel_extrude_scale) }); const collisionCircleUniforms = (context: Context, locations: UniformLocations): CollisionCircleUniformsType => ({ @@ -37,17 +26,9 @@ const collisionCircleUniforms = (context: Context, locations: UniformLocations): 'u_viewport_size': new Uniform2f(context, locations.u_viewport_size) }); -const collisionUniformValues = (matrix: mat4, transform: Transform, tile: Tile): UniformValues => { - const pixelRatio = pixelsToTileUnits(tile, 1, transform.zoom); - const scale = Math.pow(2, transform.zoom - tile.tileID.overscaledZ); - const overscaleFactor = tile.tileID.overscaleFactor(); +const collisionUniformValues = (transform: {width: number; height: number}): UniformValues => { return { - 'u_matrix': matrix, - 'u_camera_to_center_distance': transform.cameraToCenterDistance, - 'u_pixels_to_tile_units': pixelRatio, - 'u_extrude_scale': [transform.pixelsToGLUnits[0] / (pixelRatio * scale), - transform.pixelsToGLUnits[1] / (pixelRatio * scale)], - 'u_overscale_factor': overscaleFactor + 'u_pixel_extrude_scale': [1.0 / transform.width, 1.0 / transform.height], }; }; diff --git a/src/render/program/symbol_program.ts b/src/render/program/symbol_program.ts index 63508b9428..3e8f8a56ef 100644 --- a/src/render/program/symbol_program.ts +++ b/src/render/program/symbol_program.ts @@ -21,8 +21,12 @@ export type SymbolIconUniformsType = { 'u_coord_matrix': UniformMatrix4f; 'u_is_text': Uniform1i; 'u_pitch_with_map': Uniform1i; + 'u_is_along_line': Uniform1i; + 'u_is_variable_anchor': Uniform1i; 'u_texsize': Uniform2f; 'u_texture': Uniform1i; + 'u_translation': Uniform2f; + 'u_pitched_scale': Uniform1f; }; export type SymbolSDFUniformsType = { @@ -40,11 +44,15 @@ export type SymbolSDFUniformsType = { 'u_coord_matrix': UniformMatrix4f; 'u_is_text': Uniform1i; 'u_pitch_with_map': Uniform1i; + 'u_is_along_line': Uniform1i; + 'u_is_variable_anchor': Uniform1i; 'u_texsize': Uniform2f; 'u_texture': Uniform1i; 'u_gamma_scale': Uniform1f; 'u_device_pixel_ratio': Uniform1f; 'u_is_halo': Uniform1i; + 'u_translation': Uniform2f; + 'u_pitched_scale': Uniform1f; }; export type symbolTextAndIconUniformsType = { @@ -62,6 +70,8 @@ export type symbolTextAndIconUniformsType = { 'u_coord_matrix': UniformMatrix4f; 'u_is_text': Uniform1i; 'u_pitch_with_map': Uniform1i; + 'u_is_along_line': Uniform1i; + 'u_is_variable_anchor': Uniform1i; 'u_texsize': Uniform2f; 'u_texsize_icon': Uniform2f; 'u_texture': Uniform1i; @@ -69,6 +79,8 @@ export type symbolTextAndIconUniformsType = { 'u_gamma_scale': Uniform1f; 'u_device_pixel_ratio': Uniform1f; 'u_is_halo': Uniform1i; + 'u_translation': Uniform2f; + 'u_pitched_scale': Uniform1f; }; const symbolIconUniforms = (context: Context, locations: UniformLocations): SymbolIconUniformsType => ({ @@ -86,8 +98,12 @@ const symbolIconUniforms = (context: Context, locations: UniformLocations): Symb 'u_coord_matrix': new UniformMatrix4f(context, locations.u_coord_matrix), 'u_is_text': new Uniform1i(context, locations.u_is_text), 'u_pitch_with_map': new Uniform1i(context, locations.u_pitch_with_map), + 'u_is_along_line': new Uniform1i(context, locations.u_is_along_line), + 'u_is_variable_anchor': new Uniform1i(context, locations.u_is_variable_anchor), 'u_texsize': new Uniform2f(context, locations.u_texsize), - 'u_texture': new Uniform1i(context, locations.u_texture) + 'u_texture': new Uniform1i(context, locations.u_texture), + 'u_translation': new Uniform2f(context, locations.u_translation), + 'u_pitched_scale': new Uniform1f(context, locations.u_pitched_scale), }); const symbolSDFUniforms = (context: Context, locations: UniformLocations): SymbolSDFUniformsType => ({ @@ -105,11 +121,15 @@ const symbolSDFUniforms = (context: Context, locations: UniformLocations): Symbo 'u_coord_matrix': new UniformMatrix4f(context, locations.u_coord_matrix), 'u_is_text': new Uniform1i(context, locations.u_is_text), 'u_pitch_with_map': new Uniform1i(context, locations.u_pitch_with_map), + 'u_is_along_line': new Uniform1i(context, locations.u_is_along_line), + 'u_is_variable_anchor': new Uniform1i(context, locations.u_is_variable_anchor), 'u_texsize': new Uniform2f(context, locations.u_texsize), 'u_texture': new Uniform1i(context, locations.u_texture), 'u_gamma_scale': new Uniform1f(context, locations.u_gamma_scale), 'u_device_pixel_ratio': new Uniform1f(context, locations.u_device_pixel_ratio), - 'u_is_halo': new Uniform1i(context, locations.u_is_halo) + 'u_is_halo': new Uniform1i(context, locations.u_is_halo), + 'u_translation': new Uniform2f(context, locations.u_translation), + 'u_pitched_scale': new Uniform1f(context, locations.u_pitched_scale), }); const symbolTextAndIconUniforms = (context: Context, locations: UniformLocations): symbolTextAndIconUniformsType => ({ @@ -127,13 +147,17 @@ const symbolTextAndIconUniforms = (context: Context, locations: UniformLocations 'u_coord_matrix': new UniformMatrix4f(context, locations.u_coord_matrix), 'u_is_text': new Uniform1i(context, locations.u_is_text), 'u_pitch_with_map': new Uniform1i(context, locations.u_pitch_with_map), + 'u_is_along_line': new Uniform1i(context, locations.u_is_along_line), + 'u_is_variable_anchor': new Uniform1i(context, locations.u_is_variable_anchor), 'u_texsize': new Uniform2f(context, locations.u_texsize), 'u_texsize_icon': new Uniform2f(context, locations.u_texsize_icon), 'u_texture': new Uniform1i(context, locations.u_texture), 'u_texture_icon': new Uniform1i(context, locations.u_texture_icon), 'u_gamma_scale': new Uniform1f(context, locations.u_gamma_scale), 'u_device_pixel_ratio': new Uniform1f(context, locations.u_device_pixel_ratio), - 'u_is_halo': new Uniform1i(context, locations.u_is_halo) + 'u_is_halo': new Uniform1i(context, locations.u_is_halo), + 'u_translation': new Uniform2f(context, locations.u_translation), + 'u_pitched_scale': new Uniform1f(context, locations.u_pitched_scale), }); const symbolIconUniformValues = ( @@ -144,12 +168,16 @@ const symbolIconUniformValues = ( }, rotateInShader: boolean, pitchWithMap: boolean, + isAlongLine: boolean, + isVariableAnchor: boolean, painter: Painter, matrix: mat4, labelPlaneMatrix: mat4, glCoordMatrix: mat4, + translation: [number, number], isText: boolean, - texSize: [number, number] + texSize: [number, number], + pitchedScale: number ): UniformValues => { const transform = painter.transform; @@ -168,8 +196,12 @@ const symbolIconUniformValues = ( 'u_coord_matrix': glCoordMatrix, 'u_is_text': +isText, 'u_pitch_with_map': +pitchWithMap, + 'u_is_along_line': isAlongLine, + 'u_is_variable_anchor': isVariableAnchor, 'u_texsize': texSize, - 'u_texture': 0 + 'u_texture': 0, + 'u_translation': translation, + 'u_pitched_scale': pitchedScale }; }; @@ -181,19 +213,23 @@ const symbolSDFUniformValues = ( }, rotateInShader: boolean, pitchWithMap: boolean, + isAlongLine: boolean, + isVariableAnchor: boolean, painter: Painter, matrix: mat4, labelPlaneMatrix: mat4, glCoordMatrix: mat4, + translation: [number, number], isText: boolean, texSize: [number, number], - isHalo: boolean + isHalo: boolean, + pitchedScale: number ): UniformValues => { const transform = painter.transform; return extend(symbolIconUniformValues(functionType, size, - rotateInShader, pitchWithMap, painter, matrix, labelPlaneMatrix, - glCoordMatrix, isText, texSize), { + rotateInShader, pitchWithMap, isAlongLine, isVariableAnchor, painter, matrix, labelPlaneMatrix, + glCoordMatrix, translation, isText, texSize, pitchedScale), { 'u_gamma_scale': (pitchWithMap ? Math.cos(transform._pitch) * transform.cameraToCenterDistance : 1), 'u_device_pixel_ratio': painter.pixelRatio, 'u_is_halo': +isHalo @@ -208,16 +244,20 @@ const symbolTextAndIconUniformValues = ( }, rotateInShader: boolean, pitchWithMap: boolean, + isAlongLine: boolean, + isVariableAnchor: boolean, painter: Painter, matrix: mat4, labelPlaneMatrix: mat4, glCoordMatrix: mat4, + translation: [number, number], texSizeSDF: [number, number], - texSizeIcon: [number, number] + texSizeIcon: [number, number], + pitchedScale: number ): UniformValues => { return extend(symbolSDFUniformValues(functionType, size, - rotateInShader, pitchWithMap, painter, matrix, labelPlaneMatrix, - glCoordMatrix, true, texSizeSDF, true), { + rotateInShader, pitchWithMap, isAlongLine, isVariableAnchor, painter, matrix, labelPlaneMatrix, + glCoordMatrix, translation, true, texSizeSDF, true, pitchedScale), { 'u_texsize_icon': texSizeIcon, 'u_texture_icon': 1 }); diff --git a/src/shaders/collision_box.vertex.glsl b/src/shaders/collision_box.vertex.glsl index 0750aa7a43..794bbd7ed0 100644 --- a/src/shaders/collision_box.vertex.glsl +++ b/src/shaders/collision_box.vertex.glsl @@ -1,26 +1,21 @@ -in vec2 a_pos; in vec2 a_anchor_pos; -in vec2 a_extrude; in vec2 a_placed; -in vec2 a_shift; +in vec2 a_box_real; -uniform mat4 u_matrix; -uniform vec2 u_extrude_scale; -uniform float u_camera_to_center_distance; +uniform vec2 u_pixel_extrude_scale; out float v_placed; out float v_notUsed; void main() { - vec4 projectedPoint = u_matrix * vec4(a_anchor_pos, 0, 1); - highp float camera_to_anchor_distance = projectedPoint.w; - highp float collision_perspective_ratio = clamp( - 0.5 + 0.5 * (u_camera_to_center_distance / camera_to_anchor_distance), - 0.0, // Prevents oversized near-field boxes in pitched/overzoomed tiles - 4.0); - - gl_Position = u_matrix * vec4(a_pos, get_elevation(a_pos), 1.0); - gl_Position.xy += (a_extrude + a_shift) * u_extrude_scale * gl_Position.w * collision_perspective_ratio; + gl_Position = projectTileWithElevation(a_anchor_pos, get_elevation(a_anchor_pos)); + gl_Position.xy = ((a_box_real + 0.5) * u_pixel_extrude_scale * 2.0 - 1.0) * vec2(1.0, -1.0) * gl_Position.w; + if (gl_Position.z / gl_Position.w < 1.1) { + // Globe projection would set Z beyond visible range if the anchor point gets hidden behind the planet's horizon. + // We force Z to a visible value, even for anchors that are slightly behind the horizon. + // Anchors that are too far beyond the horizon are still hidden. + gl_Position.z = 0.5; + } v_placed = a_placed.x; v_notUsed = a_placed.y; diff --git a/src/shaders/symbol_icon.vertex.glsl b/src/shaders/symbol_icon.vertex.glsl index a12ff351cb..25db591804 100644 --- a/src/shaders/symbol_icon.vertex.glsl +++ b/src/shaders/symbol_icon.vertex.glsl @@ -1,5 +1,3 @@ -const float PI = 3.141592653589793; - in vec4 a_pos_offset; in vec4 a_data; in vec4 a_pixeloffset; @@ -21,6 +19,10 @@ uniform mat4 u_coord_matrix; uniform bool u_is_text; uniform bool u_pitch_with_map; uniform vec2 u_texsize; +uniform bool u_is_along_line; +uniform bool u_is_variable_anchor; +uniform vec2 u_translation; +uniform float u_pitched_scale; out vec2 v_tex; out float v_fade_opacity; @@ -52,7 +54,9 @@ void main() { size = u_size; } - vec4 projectedPoint = u_matrix * vec4(a_pos, ele, 1); + vec2 translated_a_pos = a_pos + u_translation; + vec4 projectedPoint = projectTileWithElevation(translated_a_pos, ele); + highp float camera_to_anchor_distance = projectedPoint.w; // See comments in symbol_sdf.vertex highp float distance_ratio = u_pitch_with_map ? @@ -70,7 +74,7 @@ void main() { highp float symbol_rotation = 0.0; if (u_rotate_symbol) { // See comments in symbol_sdf.vertex - vec4 offsetProjectedPoint = u_matrix * vec4(a_pos + vec2(1, 0), ele, 1); + vec4 offsetProjectedPoint = projectTileWithElevation(translated_a_pos + vec2(1, 0), ele); vec2 a = projectedPoint.xy / projectedPoint.w; vec2 b = offsetProjectedPoint.xy / offsetProjectedPoint.w; @@ -82,9 +86,30 @@ void main() { highp float angle_cos = cos(segment_angle + symbol_rotation); mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos); - vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, ele, 1.0); + vec4 projected_pos; + if (u_is_along_line || u_is_variable_anchor) { + projected_pos = vec4(a_projected_pos.xy, ele, 1.0); + } else if (u_pitch_with_map) { + projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy + u_translation, ele, 1.0); + } else { + projected_pos = u_label_plane_matrix * projectTileWithElevation(a_projected_pos.xy + u_translation, ele); + } + float z = float(u_pitch_with_map) * projected_pos.z / projected_pos.w; - gl_Position = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * max(a_minFontScale, fontScale) + a_pxoffset / 16.0), z, 1.0); + + float projectionScaling = 1.0; +#ifdef GLOBE + if(u_pitch_with_map && !u_is_along_line) { + float anchor_pos_tile_y = (u_coord_matrix * vec4(projected_pos.xy / projected_pos.w, z, 1.0)).y; + projectionScaling = mix(projectionScaling, 1.0 / circumferenceRatioAtTileY(anchor_pos_tile_y) * u_pitched_scale, u_projection_transition); + } +#endif + + vec4 finalPos = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * max(a_minFontScale, fontScale) + a_pxoffset / 16.0) * projectionScaling, z, 1.0); + if(u_pitch_with_map) { + finalPos = projectTileWithElevation(finalPos.xy, finalPos.z); + } + gl_Position = finalPos; v_tex = a_tex / u_texsize; vec2 fade_opacity = unpack_opacity(a_fade_opacity); diff --git a/src/shaders/symbol_sdf.vertex.glsl b/src/shaders/symbol_sdf.vertex.glsl index 8c041358bb..b13537bcaa 100644 --- a/src/shaders/symbol_sdf.vertex.glsl +++ b/src/shaders/symbol_sdf.vertex.glsl @@ -1,5 +1,3 @@ -const float PI = 3.141592653589793; - in vec4 a_pos_offset; in vec4 a_data; in vec4 a_pixeloffset; @@ -22,12 +20,16 @@ uniform mat4 u_label_plane_matrix; uniform mat4 u_coord_matrix; uniform bool u_is_text; uniform bool u_pitch_with_map; +uniform bool u_is_along_line; +uniform bool u_is_variable_anchor; uniform highp float u_pitch; uniform bool u_rotate_symbol; uniform highp float u_aspect_ratio; uniform highp float u_camera_to_center_distance; uniform float u_fade_change; uniform vec2 u_texsize; +uniform vec2 u_translation; +uniform float u_pitched_scale; out vec2 v_data0; out vec3 v_data1; @@ -66,7 +68,9 @@ void main() { size = u_size; } - vec4 projectedPoint = u_matrix * vec4(a_pos, ele, 1); + vec2 translated_a_pos = a_pos + u_translation; + vec4 projectedPoint = projectTileWithElevation(translated_a_pos, ele); + highp float camera_to_anchor_distance = projectedPoint.w; // If the label is pitched with the map, layout is done in pitched space, // which makes labels in the distance smaller relative to viewport space. @@ -91,7 +95,7 @@ void main() { // Point labels with 'rotation-alignment: map' are horizontal with respect to tile units // To figure out that angle in projected space, we draw a short horizontal line in tile // space, project it, and measure its angle in projected space. - vec4 offsetProjectedPoint = u_matrix * vec4(a_pos + vec2(1, 0), ele, 1); + vec4 offsetProjectedPoint = projectTileWithElevation(translated_a_pos + vec2(1, 0), ele); vec2 a = projectedPoint.xy / projectedPoint.w; vec2 b = offsetProjectedPoint.xy / offsetProjectedPoint.w; @@ -103,10 +107,33 @@ void main() { highp float angle_cos = cos(segment_angle + symbol_rotation); mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos); - vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, ele, 1.0); + vec4 projected_pos; + if (u_is_along_line || u_is_variable_anchor) { + // Label plane matrix is identity in this case + projected_pos = vec4(a_projected_pos.xy, ele, 1.0); + } else if (u_pitch_with_map) { + projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy + u_translation, ele, 1.0); + } else { + projected_pos = u_label_plane_matrix * projectTileWithElevation(a_projected_pos.xy + u_translation, ele); + } + float z = float(u_pitch_with_map) * projected_pos.z / projected_pos.w; - gl_Position = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale + a_pxoffset), z, 1.0); - float gamma_scale = gl_Position.w; + + float projectionScaling = 1.0; +#ifdef GLOBE + if(u_pitch_with_map && !u_is_along_line) { + // Lines would behave in very weird ways if this adjustment was used for them. + float anchor_pos_tile_y = (u_coord_matrix * vec4(projected_pos.xy / projected_pos.w, z, 1.0)).y; + projectionScaling = mix(projectionScaling, 1.0 / circumferenceRatioAtTileY(anchor_pos_tile_y) * u_pitched_scale, u_projection_transition); + } +#endif + + vec4 finalPos = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale + a_pxoffset) * projectionScaling, z, 1.0); + if(u_pitch_with_map) { + finalPos = projectTileWithElevation(finalPos.xy, finalPos.z); + } + float gamma_scale = finalPos.w; + gl_Position = finalPos; vec2 fade_opacity = unpack_opacity(a_fade_opacity); float visibility = calculate_visibility(projectedPoint); diff --git a/src/shaders/symbol_text_and_icon.vertex.glsl b/src/shaders/symbol_text_and_icon.vertex.glsl index e9e3bf9eaa..07471f1d2d 100644 --- a/src/shaders/symbol_text_and_icon.vertex.glsl +++ b/src/shaders/symbol_text_and_icon.vertex.glsl @@ -1,5 +1,3 @@ -const float PI = 3.141592653589793; - in vec4 a_pos_offset; in vec4 a_data; in vec3 a_projected_pos; @@ -28,6 +26,10 @@ uniform highp float u_camera_to_center_distance; uniform float u_fade_change; uniform vec2 u_texsize; uniform vec2 u_texsize_icon; +uniform bool u_is_along_line; +uniform bool u_is_variable_anchor; +uniform vec2 u_translation; +uniform float u_pitched_scale; out vec4 v_data0; out vec4 v_data1; @@ -66,7 +68,9 @@ void main() { size = u_size; } - vec4 projectedPoint = u_matrix * vec4(a_pos, ele, 1); + vec2 translated_a_pos = a_pos + u_translation; + vec4 projectedPoint = projectTileWithElevation(translated_a_pos, ele); + highp float camera_to_anchor_distance = projectedPoint.w; // If the label is pitched with the map, layout is done in pitched space, // which makes labels in the distance smaller relative to viewport space. @@ -88,10 +92,8 @@ void main() { highp float symbol_rotation = 0.0; if (u_rotate_symbol) { - // Point labels with 'rotation-alignment: map' are horizontal with respect to tile units - // To figure out that angle in projected space, we draw a short horizontal line in tile - // space, project it, and measure its angle in projected space. - vec4 offsetProjectedPoint = u_matrix * vec4(a_pos + vec2(1, 0), ele, 1); + // See comments in symbol_sdf.vertex + vec4 offsetProjectedPoint = projectTileWithElevation(translated_a_pos + vec2(1, 0), ele); vec2 a = projectedPoint.xy / projectedPoint.w; vec2 b = offsetProjectedPoint.xy / offsetProjectedPoint.w; @@ -103,10 +105,31 @@ void main() { highp float angle_cos = cos(segment_angle + symbol_rotation); mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos); - vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, ele, 1.0); + vec4 projected_pos; + if (u_is_along_line || u_is_variable_anchor) { + projected_pos = vec4(a_projected_pos.xy, ele, 1.0); + } else if (u_pitch_with_map) { + projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy + u_translation, ele, 1.0); + } else { + projected_pos = u_label_plane_matrix * projectTileWithElevation(a_projected_pos.xy + u_translation, ele); + } + float z = float(u_pitch_with_map) * projected_pos.z / projected_pos.w; - gl_Position = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), z, 1.0); - float gamma_scale = gl_Position.w; + + float projectionScaling = 1.0; +#ifdef GLOBE + if(u_pitch_with_map && !u_is_along_line) { + float anchor_pos_tile_y = (u_coord_matrix * vec4(projected_pos.xy / projected_pos.w, z, 1.0)).y; + projectionScaling = mix(projectionScaling, 1.0 / circumferenceRatioAtTileY(anchor_pos_tile_y) * u_pitched_scale, u_projection_transition); + } +#endif + + vec4 finalPos = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale) * projectionScaling, z, 1.0); + if(u_pitch_with_map) { + finalPos = projectTileWithElevation(finalPos.xy, finalPos.z); + } + float gamma_scale = finalPos.w; + gl_Position = finalPos; vec2 fade_opacity = unpack_opacity(a_fade_opacity); float visibility = calculate_visibility(projectedPoint); diff --git a/src/symbol/collision_index.test.ts b/src/symbol/collision_index.test.ts index fd281e662e..7b0b89e2d2 100644 --- a/src/symbol/collision_index.test.ts +++ b/src/symbol/collision_index.test.ts @@ -2,6 +2,7 @@ import {CollisionIndex} from './collision_index'; import {mat4} from 'gl-matrix'; import {Transform} from '../geo/transform'; +import {MercatorProjection} from '../geo/projection/mercator'; describe('CollisionIndex', () => { @@ -11,8 +12,8 @@ describe('CollisionIndex', () => { const transform = new Transform(0, 22, 0, 60, true); transform.resize(200, 200); - const ci = new CollisionIndex(transform); - expect(ci.projectAndGetPerspectiveRatio(posMatrix, x, y).point.x).toBeCloseTo(10000212.3456, 10); + const ci = new CollisionIndex(transform, new MercatorProjection()); + expect(ci.projectAndGetPerspectiveRatio(posMatrix, x, y, null).point.x).toBeCloseTo(10000212.3456, 10); }); }); diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index e889fc4e0a..d1489b8ccf 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -4,7 +4,7 @@ import {PathInterpolator} from './path_interpolator'; import * as intersectionTests from '../util/intersection_tests'; import {GridIndex} from './grid_index'; -import {mat4, vec4} from 'gl-matrix'; +import {mat4} from 'gl-matrix'; import ONE_EM from '../symbol/one_em'; import * as projection from '../symbol/projection'; @@ -16,6 +16,9 @@ import type { SymbolLineVertexArray } from '../data/array_types.g'; import type {OverlapMode} from '../style/style_layer/overlap_mode'; +import {UnwrappedTileID} from '../source/tile_id'; +import {ProjectionArgs} from '../symbol/projection'; +import {Projection} from '../geo/projection/projection'; // When a symbol crosses the edge that causes it to be included in // collision detection, it will cause changes in the symbols around @@ -23,7 +26,13 @@ import type {OverlapMode} from '../style/style_layer/overlap_mode'; // the viewport for collision detection so that the bulk of the changes // occur offscreen. Making this constant greater increases label // stability, but it's expensive. -const viewportPadding = 100; +export const viewportPadding = 100; + +export type PlacedBox = { + box: Array; + placeable: boolean; + offscreen: boolean; +}; export type FeatureKey = { bucketInstanceId: number; @@ -47,11 +56,12 @@ export class CollisionIndex { grid: GridIndex; ignoredGrid: GridIndex; transform: Transform; - pitchfactor: number; + pitchFactor: number; screenRightBoundary: number; screenBottomBoundary: number; gridRightBoundary: number; gridBottomBoundary: number; + mapProjection: Projection; // With perspectiveRatio the fontsize is calculated for tilted maps (near = bigger, far = smaller). // The cutoff defines a threshold to no longer render labels near the horizon. @@ -59,14 +69,16 @@ export class CollisionIndex { constructor( transform: Transform, + projection: Projection, grid = new GridIndex(transform.width + 2 * viewportPadding, transform.height + 2 * viewportPadding, 25), ignoredGrid = new GridIndex(transform.width + 2 * viewportPadding, transform.height + 2 * viewportPadding, 25) ) { this.transform = transform; + this.mapProjection = projection; this.grid = grid; this.ignoredGrid = ignoredGrid; - this.pitchfactor = Math.cos(transform._pitch) * transform.cameraToCenterDistance; + this.pitchFactor = Math.cos(transform._pitch) * transform.cameraToCenterDistance; this.screenRightBoundary = transform.width + viewportPadding; this.screenBottomBoundary = transform.height + viewportPadding; @@ -81,30 +93,53 @@ export class CollisionIndex { overlapMode: OverlapMode, textPixelRatio: number, posMatrix: mat4, + unwrappedTileID: UnwrappedTileID, + pitchWithMap: boolean, + rotateWithMap: boolean, + translation: [number, number], collisionGroupPredicate?: (key: FeatureKey) => boolean, - getElevation?: (x: number, y: number) => number - ): { - box: Array; - offscreen: boolean; - } { - const projectedPoint = this.projectAndGetPerspectiveRatio(posMatrix, collisionBox.anchorPointX, collisionBox.anchorPointY, getElevation); - const tileToViewport = textPixelRatio * projectedPoint.perspectiveRatio; - const tlX = collisionBox.x1 * tileToViewport + projectedPoint.point.x; - const tlY = collisionBox.y1 * tileToViewport + projectedPoint.point.y; - const brX = collisionBox.x2 * tileToViewport + projectedPoint.point.x; - const brY = collisionBox.y2 * tileToViewport + projectedPoint.point.y; - - if (!this.isInsideGrid(tlX, tlY, brX, brY) || - (overlapMode !== 'always' && this.grid.hitTest(tlX, tlY, brX, brY, overlapMode, collisionGroupPredicate)) || - projectedPoint.perspectiveRatio < this.perspectiveRatioCutoff) { + getElevation?: (x: number, y: number) => number, + shift?: Point + ): PlacedBox { + const x = collisionBox.anchorPointX + translation[0]; + const y = collisionBox.anchorPointY + translation[1]; + const projectedPoint = this.projectAndGetPerspectiveRatio( + posMatrix, + x, + y, + unwrappedTileID, + getElevation + ); + + const projectedBox = this._projectCollisionBox( + collisionBox, + textPixelRatio, + posMatrix, + unwrappedTileID, + pitchWithMap, + rotateWithMap, + translation, + projectedPoint, + getElevation, + shift + ); + + const [tlX, tlY, brX, brY] = projectedBox.box; + + const projectionOccluded = this.mapProjection.useSpecialProjectionForSymbols ? (pitchWithMap ? projectedBox.allPointsOccluded : this.mapProjection.isOccluded(x, y, unwrappedTileID)) : false; + + if (projectionOccluded || projectedPoint.perspectiveRatio < this.perspectiveRatioCutoff || !this.isInsideGrid(tlX, tlY, brX, brY) || + (overlapMode !== 'always' && this.grid.hitTest(tlX, tlY, brX, brY, overlapMode, collisionGroupPredicate))) { return { - box: [], + box: [tlX, tlY, brX, brY], + placeable: false, offscreen: false }; } return { box: [tlX, tlY, brX, brY], + placeable: true, offscreen: this.isOffscreen(tlX, tlY, brX, brY) }; } @@ -116,6 +151,7 @@ export class CollisionIndex { glyphOffsetArray: GlyphOffsetArray, fontSize: number, posMatrix: mat4, + unwrappedTileID: UnwrappedTileID, labelPlaneMatrix: mat4, labelToScreenMatrix: mat4, showCollisionCircles: boolean, @@ -123,6 +159,7 @@ export class CollisionIndex { collisionGroupPredicate: (key: FeatureKey) => boolean, circlePixelDiameter: number, textPixelPadding: number, + translation: [number, number], getElevation: (x: number, y: number) => number ): { circles: Array; @@ -132,31 +169,37 @@ export class CollisionIndex { const placedCollisionCircles = []; const tileUnitAnchorPoint = new Point(symbol.anchorX, symbol.anchorY); - const screenAnchorPoint = projection.project(tileUnitAnchorPoint, posMatrix, getElevation); - const perspectiveRatio = projection.getPerspectiveRatio(this.transform.cameraToCenterDistance, screenAnchorPoint.signedDistanceFromCamera); + const perspectiveRatio = this.getPerspectiveRatio(posMatrix, tileUnitAnchorPoint.x, tileUnitAnchorPoint.y, unwrappedTileID, getElevation); const labelPlaneFontSize = pitchWithMap ? fontSize / perspectiveRatio : fontSize * perspectiveRatio; const labelPlaneFontScale = labelPlaneFontSize / ONE_EM; - const labelPlaneAnchorPoint = projection.project(tileUnitAnchorPoint, labelPlaneMatrix, getElevation).point; - - const projectionCache = {projections: {}, offsets: {}}; + const projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; const lineOffsetX = symbol.lineOffsetX * labelPlaneFontScale; const lineOffsetY = symbol.lineOffsetY * labelPlaneFontScale; + const projectionArgs: ProjectionArgs = { + getElevation, + labelPlaneMatrix, + lineVertexArray, + pitchWithMap, + projectionCache, + projection: this.mapProjection, + tileAnchorPoint: tileUnitAnchorPoint, + unwrappedTileID, + width: this.transform.width, + height: this.transform.height, + translation + }; + const firstAndLastGlyph = projection.placeFirstAndLastGlyph( labelPlaneFontScale, glyphOffsetArray, lineOffsetX, lineOffsetY, /*flip*/ false, - labelPlaneAnchorPoint, - tileUnitAnchorPoint, symbol, - lineVertexArray, - labelPlaneMatrix, - projectionCache, false, - getElevation); + projectionArgs); let collisionDetected = false; let inGrid = false; @@ -172,7 +215,7 @@ export class CollisionIndex { const first = firstAndLastGlyph.first; const last = firstAndLastGlyph.last; - let projectedPath = []; + let projectedPath: Array = []; for (let i = first.path.length - 1; i >= 1; i--) { projectedPath.push(first.path[i]); } @@ -185,9 +228,8 @@ export class CollisionIndex { // The path might need to be converted into screen space if a pitched map is used as the label space if (labelToScreenMatrix) { - const screenSpacePath = projectedPath.map(p => projection.project(p, labelToScreenMatrix, getElevation)); - - // Do not try to place collision circles if even of the points is behind the camera. + const screenSpacePath = this.projectPathToScreenSpace(projectedPath, projectionArgs, labelToScreenMatrix); + // Do not try to place collision circles if even one of the points is behind the camera. // This is a plausible scenario with big camera pitch angles if (screenSpacePath.some(point => point.signedDistanceFromCamera <= 0)) { projectedPath = []; @@ -277,6 +319,54 @@ export class CollisionIndex { }; } + projectPathToScreenSpace(projectedPath: Array, projectionArgs: ProjectionArgs, labelToScreenMatrix: mat4) { + let screenSpacePath: Array<{ + point: Point; + signedDistanceFromCamera: number; + isOccluded?: boolean; + }>; + if (projectionArgs.projection.useSpecialProjectionForSymbols) { + // Globe (or other special projection) is enabled in this branch. + const inverseLabelPlaneMatrix = mat4.create(); + mat4.invert(inverseLabelPlaneMatrix, projectionArgs.labelPlaneMatrix); + screenSpacePath = projectedPath.map(p => { + const backProjected = projection.project(p, inverseLabelPlaneMatrix, projectionArgs.getElevation); + const projected = this.mapProjection.projectTileCoordinates( + backProjected.point.x, + backProjected.point.y, + projectionArgs.unwrappedTileID, + projectionArgs.getElevation + ); + projected.point.x = (projected.point.x * 0.5 + 0.5) * projectionArgs.width; + projected.point.y = (-projected.point.y * 0.5 + 0.5) * projectionArgs.height; + return projected; + }); + // We don't want to generate screenspace collision circles for parts of the line that + // are occluded by the planet itself. Find the longest segment of the path that is + // not occluded, and remove everything else. + let longestUnoccludedStart = 0; + let longestUnoccludedLength = 0; + let currentUnoccludedStart = 0; + let currentUnoccludedLength = 0; + for (let i = 0; i < screenSpacePath.length; i++) { + if (screenSpacePath[i].isOccluded) { + currentUnoccludedStart = i + 1; + currentUnoccludedLength = 0; + } else { + currentUnoccludedLength++; + if (currentUnoccludedLength > longestUnoccludedLength) { + longestUnoccludedLength = currentUnoccludedLength; + longestUnoccludedStart = currentUnoccludedStart; + } + } + } + screenSpacePath = screenSpacePath.slice(longestUnoccludedStart, longestUnoccludedStart + longestUnoccludedLength); + } else { + screenSpacePath = projectedPath.map(p => projection.project(p, labelToScreenMatrix, projectionArgs.getElevation)); + } + return screenSpacePath; + } + /** * Because the geometries in the CollisionIndex are an approximation of the shape of * symbols on the map, we use the CollisionIndex to look up the symbol part of @@ -358,28 +448,37 @@ export class CollisionIndex { } } - projectAndGetPerspectiveRatio(posMatrix: mat4, x: number, y: number, getElevation?: (x: number, y: number) => number) { - let p; - if (getElevation) { // slow because of handle z-index - p = [x, y, getElevation(x, y), 1] as vec4; - vec4.transformMat4(p, p, posMatrix); - } else { // fast because of ignore z-index - p = [x, y, 0, 1] as vec4; - projection.xyTransformMat4(p, p, posMatrix); + projectAndGetPerspectiveRatio(posMatrix: mat4, x: number, y: number, unwrappedTileID: UnwrappedTileID, getElevation?: (x: number, y: number) => number) { + let projected; + if (this.mapProjection.useSpecialProjectionForSymbols) { + projected = this.mapProjection.projectTileCoordinates(x, y, unwrappedTileID, getElevation); + } else { + projected = projection.project(new Point(x, y), posMatrix, getElevation); } - const a = new Point( - (((p[0] / p[3] + 1) / 2) * this.transform.width) + viewportPadding, - (((-p[1] / p[3] + 1) / 2) * this.transform.height) + viewportPadding - ); return { - point: a, + point: new Point( + (((projected.point.x + 1) / 2) * this.transform.width) + viewportPadding, + (((-projected.point.y + 1) / 2) * this.transform.height) + viewportPadding + ), // See perspective ratio comment in symbol_sdf.vertex // We're doing collision detection in viewport space so we need // to scale down boxes in the distance - perspectiveRatio: 0.5 + 0.5 * (this.transform.cameraToCenterDistance / p[3]) + perspectiveRatio: 0.5 + 0.5 * (this.transform.cameraToCenterDistance / projected.signedDistanceFromCamera), + isOccluded: (projected.isOccluded !== undefined) ? projected.isOccluded : false }; } + getPerspectiveRatio(posMatrix: mat4, x: number, y: number, unwrappedTileID: UnwrappedTileID, getElevation?: (x: number, y: number) => number): number { + // We don't care about the actual projected point, just its W component. + let projected; + if (this.mapProjection.useSpecialProjectionForSymbols) { + projected = this.mapProjection.projectTileCoordinates(x, y, unwrappedTileID, getElevation); + } else { + projected = projection.project(new Point(x, y), posMatrix, getElevation); + } + return 0.5 + 0.5 * (this.transform.cameraToCenterDistance / projected.signedDistanceFromCamera); + } + isOffscreen(x1: number, y1: number, x2: number, y2: number) { return x2 < viewportPadding || x1 >= this.screenRightBoundary || y2 < viewportPadding || y1 > this.screenBottomBoundary; } @@ -398,4 +497,141 @@ export class CollisionIndex { mat4.translate(m, m, [-viewportPadding, -viewportPadding, 0.0]); return m; } + + /** + * Applies all layout+paint properties of the given box in order to find as good approximation of its screen-space bounding box as possible. + */ + private _projectCollisionBox( + collisionBox: SingleCollisionBox, + textPixelRatio: number, + posMatrix: mat4, + unwrappedTileID: UnwrappedTileID, + pitchWithMap: boolean, + rotateWithMap: boolean, + translation: [number, number], + projectedPoint: {point: Point; perspectiveRatio: number}, + getElevation?: (x: number, y: number) => number, + shift?: Point + ): { + box: [number, number, number, number]; + allPointsOccluded: boolean; + } { + + const tileToViewport = textPixelRatio * projectedPoint.perspectiveRatio; + + // These vectors are valid both for screen space viewport-rotation-aligned texts and for pitch-align: map texts that are map-rotation-aligned. + let vecEast = new Point(1, 0); + let vecSouth = new Point(0, 1); + + const translatedAnchor = new Point(collisionBox.anchorPointX + translation[0], collisionBox.anchorPointY + translation[1]); + + if (rotateWithMap && !pitchWithMap) { + // Handles screen space texts that are always aligned east-west. + const projectedEast = this.projectAndGetPerspectiveRatio( + posMatrix, + translatedAnchor.x + 1, + translatedAnchor.y, + unwrappedTileID, + getElevation + ).point; + const toEast = projectedEast.sub(projectedPoint.point).unit(); + const angle = Math.atan(toEast.y / toEast.x) + (toEast.x < 0 ? Math.PI : 0); + const sin = Math.sin(angle); + const cos = Math.cos(angle); + vecEast = new Point(cos, sin); + vecSouth = new Point(-sin, cos); + } + + if (!rotateWithMap && pitchWithMap) { + // Handles pitch-align: map texts that are always aligned with the viewport's X axis. + const angle = -this.transform.angle; + const sin = Math.sin(angle); + const cos = Math.cos(angle); + vecEast = new Point(cos, sin); + vecSouth = new Point(-sin, cos); + } + + // Configuration for screen space offsets + let basePoint = projectedPoint.point; + let distanceMultiplier = tileToViewport; + + if (pitchWithMap) { + // Configuration for tile space (map-pitch-aligned) offsets + basePoint = translatedAnchor; + const zoomFraction = this.transform.zoom - Math.floor(this.transform.zoom); + distanceMultiplier = Math.pow(2, -zoomFraction); + distanceMultiplier *= this.mapProjection.getPitchedTextCorrection(this.transform, translatedAnchor, unwrappedTileID); + } + + if (shift) { + // Variable anchors are in use + basePoint = basePoint.add(vecEast.mult(shift.x * distanceMultiplier)).add(vecSouth.mult(shift.y * distanceMultiplier)); + } + + const offsetXmin = collisionBox.x1 * distanceMultiplier; + const offsetXmax = collisionBox.x2 * distanceMultiplier; + const offsetXhalf = (offsetXmin + offsetXmax) / 2; + const offsetYmin = collisionBox.y1 * distanceMultiplier; + const offsetYmax = collisionBox.y2 * distanceMultiplier; + const offsetYhalf = (offsetYmin + offsetYmax) / 2; + + // 0--1--2 + // | | + // 7 3 + // | | + // 6--5--4 + const points = [ + basePoint.add(vecEast.mult(offsetXmin)).add(vecSouth.mult(offsetYmin)), + basePoint.add(vecEast.mult(offsetXhalf)).add(vecSouth.mult(offsetYmin)), + basePoint.add(vecEast.mult(offsetXmax)).add(vecSouth.mult(offsetYmin)), + basePoint.add(vecEast.mult(offsetXmax)).add(vecSouth.mult(offsetYhalf)), + basePoint.add(vecEast.mult(offsetXmax)).add(vecSouth.mult(offsetYmax)), + basePoint.add(vecEast.mult(offsetXhalf)).add(vecSouth.mult(offsetYmax)), + basePoint.add(vecEast.mult(offsetXmin)).add(vecSouth.mult(offsetYmax)), + basePoint.add(vecEast.mult(offsetXmin)).add(vecSouth.mult(offsetYhalf)), + ]; + + // Is any point of the collision shape visible on the globe (on beyond horizon)? + let anyPointVisible = false; + + if (pitchWithMap) { + for (let i = 0; i < points.length; i++) { + const oldPoint = points[i]; + const newPoint = this.projectAndGetPerspectiveRatio( + posMatrix, + oldPoint.x, + oldPoint.y, + unwrappedTileID, + getElevation + ); + points[i] = newPoint.point; + if (!newPoint.isOccluded) { + anyPointVisible = true; + } + } + } else { + anyPointVisible = true; + } + + return { + box: getAABB(points), + allPointsOccluded: !anyPointVisible + }; + } +} + +function getAABB(points: Array): [number, number, number, number] { + let tlX = Infinity; + let tlY = Infinity; + let brX = -Infinity; + let brY = -Infinity; + + for (const p of points) { + tlX = Math.min(tlX, p.x); + tlY = Math.min(tlY, p.y); + brX = Math.max(brX, p.x); + brY = Math.max(brY, p.y); + } + + return [tlX, tlY, brX, brY]; } diff --git a/src/symbol/placement.ts b/src/symbol/placement.ts index 316a6553f2..0af042a0ed 100644 --- a/src/symbol/placement.ts +++ b/src/symbol/placement.ts @@ -1,5 +1,5 @@ -import {CollisionIndex} from './collision_index'; -import type {FeatureKey} from './collision_index'; +import {CollisionIndex, viewportPadding} from './collision_index'; +import type {FeatureKey, PlacedBox} from './collision_index'; import {EXTENT} from '../data/extent'; import * as symbolSize from './symbol_size'; import * as projection from './projection'; @@ -19,10 +19,11 @@ import {SymbolBucket, CollisionArrays, SingleCollisionBox} from '../data/bucket/ import type {CollisionBoxArray, CollisionVertexArray, SymbolInstance, TextAnchorOffset} from '../data/array_types.g'; import type {FeatureIndex} from '../data/feature_index'; -import type {OverscaledTileID} from '../source/tile_id'; +import type {OverscaledTileID, UnwrappedTileID} from '../source/tile_id'; import {Terrain} from '../render/terrain'; import {warnOnce} from '../util/util'; import {TextAnchor, TextAnchorEnum} from '../style/style_layer/variable_text_anchor'; +import {Projection} from '../geo/projection/projection'; class OpacityState { opacity: number; @@ -153,26 +154,6 @@ function calculateVariableLayoutShift( ); } -function shiftVariableCollisionBox(collisionBox: SingleCollisionBox, - shiftX: number, shiftY: number, - rotateWithMap: boolean, pitchWithMap: boolean, - angle: number) { - const {x1, x2, y1, y2, anchorPointX, anchorPointY} = collisionBox; - const rotatedOffset = new Point(shiftX, shiftY); - if (rotateWithMap) { - rotatedOffset._rotate(pitchWithMap ? angle : -angle); - } - return { - x1: x1 + rotatedOffset.x, - y1: y1 + rotatedOffset.y, - x2: x2 + rotatedOffset.x, - y2: y2 + rotatedOffset.y, - // symbol anchor point stays the same regardless of text-anchor - anchorPointX, - anchorPointY - }; -} - export type VariableOffset = { textOffset: [number, number]; width: number; @@ -185,6 +166,9 @@ export type VariableOffset = { type TileLayerParameters = { bucket: SymbolBucket; layout: PossiblyEvaluated; + translationText: [number, number]; + translationIcon: [number, number]; + unwrappedTileID: UnwrappedTileID; posMatrix: mat4; textLabelPlaneMatrix: mat4; labelToScreenMatrix: mat4; @@ -238,11 +222,15 @@ export class Placement { collisionCircleArrays: { [k in any]: CollisionCircleArray; }; + collisionBoxArrays: Map>; - constructor(transform: Transform, terrain: Terrain, fadeDuration: number, crossSourceCollisions: boolean, prevPlacement?: Placement) { + constructor(transform: Transform, projection: Projection, terrain: Terrain, fadeDuration: number, crossSourceCollisions: boolean, prevPlacement?: Placement) { this.transform = transform.clone(); this.terrain = terrain; - this.collisionIndex = new CollisionIndex(this.transform); + this.collisionIndex = new CollisionIndex(this.transform, projection); this.placements = {}; this.opacities = {}; this.variableOffsets = {}; @@ -252,6 +240,10 @@ export class Placement { this.retainedQueryData = {}; this.collisionGroups = new CollisionGroups(crossSourceCollisions); this.collisionCircleArrays = {}; + this.collisionBoxArrays = new Map>(); this.prevPlacement = prevPlacement; if (prevPlacement) { @@ -261,6 +253,11 @@ export class Placement { this.placedOrientations = {}; } + private _getTerrainElevationFunc(tileID: OverscaledTileID) { + const terrain = this.terrain; + return terrain ? (x: number, y: number) => terrain.getElevation(tileID, x, y) : null; + } + getBucketParts(results: Array, styleLayer: StyleLayer, tile: Tile, sortAcrossTiles: boolean) { const symbolBucket = (tile.getBucket(styleLayer) as SymbolBucket); const bucketFeatureIndex = tile.latestFeatureIndex; @@ -270,16 +267,31 @@ export class Placement { const collisionBoxArray = tile.collisionBoxArray; const layout = symbolBucket.layers[0].layout; + const paint = symbolBucket.layers[0].paint; const scale = Math.pow(2, this.transform.zoom - tile.tileID.overscaledZ); const textPixelRatio = tile.tileSize / EXTENT; - const posMatrix = this.transform.calculatePosMatrix(tile.tileID.toUnwrapped()); + const unwrappedTileID = tile.tileID.toUnwrapped(); + + const posMatrix = this.transform.calculatePosMatrix(unwrappedTileID); const pitchWithMap = layout.get('text-pitch-alignment') === 'map'; const rotateWithMap = layout.get('text-rotation-alignment') === 'map'; const pixelsToTiles = pixelsToTileUnits(tile, 1, this.transform.zoom); + const translationText = this.collisionIndex.mapProjection.translatePosition( + this.transform, + tile, + paint.get('text-translate'), + paint.get('text-translate-anchor'),); + + const translationIcon = this.collisionIndex.mapProjection.translatePosition( + this.transform, + tile, + paint.get('icon-translate'), + paint.get('icon-translate-anchor'),); + const textLabelPlaneMatrix = projection.getLabelPlaneMatrix(posMatrix, pitchWithMap, rotateWithMap, @@ -309,10 +321,13 @@ export class Placement { tile.tileID ); - const parameters = { + const parameters: TileLayerParameters = { bucket: symbolBucket, layout, + translationText, + translationIcon, posMatrix, + unwrappedTileID, textLabelPlaneMatrix, labelToScreenMatrix, scale, @@ -347,19 +362,19 @@ export class Placement { pitchWithMap: boolean, textPixelRatio: number, posMatrix: mat4, + unwrappedTileID, collisionGroup: CollisionGroup, textOverlapMode: OverlapMode, symbolInstance: SymbolInstance, bucket: SymbolBucket, orientation: number, + translationText: [number, number], + translationIcon: [number, number], iconBox?: SingleCollisionBox | null, getElevation?: (x: number, y: number) => number ): { shift: Point; - placedGlyphBoxes: { - box: Array; - offscreen: boolean; - }; + placedGlyphBoxes: PlacedBox; } { const anchor = TextAnchorEnum[textAnchorOffset.textAnchor] as TextAnchor; @@ -367,21 +382,37 @@ export class Placement { const shift = calculateVariableLayoutShift(anchor, width, height, textOffset, textBoxScale); const placedGlyphBoxes = this.collisionIndex.placeCollisionBox( - shiftVariableCollisionBox( - textBox, shift.x, shift.y, - rotateWithMap, pitchWithMap, this.transform.angle), - textOverlapMode, textPixelRatio, posMatrix, collisionGroup.predicate, getElevation); + textBox, + textOverlapMode, + textPixelRatio, + posMatrix, + unwrappedTileID, + pitchWithMap, + rotateWithMap, + translationText, + collisionGroup.predicate, + getElevation, + shift + ); if (iconBox) { const placedIconBoxes = this.collisionIndex.placeCollisionBox( - shiftVariableCollisionBox( - iconBox, shift.x, shift.y, - rotateWithMap, pitchWithMap, this.transform.angle), - textOverlapMode, textPixelRatio, posMatrix, collisionGroup.predicate, getElevation); - if (placedIconBoxes.box.length === 0) return; + iconBox, + textOverlapMode, + textPixelRatio, + posMatrix, + unwrappedTileID, + pitchWithMap, + rotateWithMap, + translationIcon, + collisionGroup.predicate, + getElevation, + shift + ); + if (!placedIconBoxes.placeable) return; } - if (placedGlyphBoxes.box.length > 0) { + if (placedGlyphBoxes.placeable) { let prevAnchor; // If this label was placed in the previous placement, record the anchor position // to allow us to animate the transition @@ -418,7 +449,10 @@ export class Placement { const { bucket, layout, + translationText, + translationIcon, posMatrix, + unwrappedTileID, textLabelPlaneMatrix, labelToScreenMatrix, textPixelRatio, @@ -461,9 +495,9 @@ export class Placement { } const tileID = this.retainedQueryData[bucket.bucketInstanceId].tileID; - const getElevation = this.terrain ? (x: number, y: number) => this.terrain.getElevation(tileID, x, y) : null; + const getElevation = this._getTerrainElevationFunc(tileID); - const placeSymbol = (symbolInstance: SymbolInstance, collisionArrays: CollisionArrays) => { + const placeSymbol = (symbolInstance: SymbolInstance, collisionArrays: CollisionArrays, symbolIndex: number) => { if (seenCrossTileIDs[symbolInstance.crossTileID]) return; if (holdingForFade) { // Mark all symbols from this tile as "not placed", but don't add to seenCrossTileIDs, because we don't @@ -477,12 +511,12 @@ export class Placement { let offscreen = true; let shift = null; - let placed = {box: null, offscreen: null}; - let placedVerticalText = {box: null, offscreen: null}; + let placed: PlacedBox = {box: null, placeable: false, offscreen: null}; + let placedVerticalText = {box: null, placeable: false, offscreen: null}; - let placedGlyphBoxes = null; + let placedGlyphBoxes: PlacedBox = null; let placedGlyphCircles = null; - let placedIconBoxes = null; + let placedIconBoxes: PlacedBox = null; let textFeatureIndex = 0; let verticalTextFeatureIndex = 0; let iconFeatureIndex = 0; @@ -521,7 +555,7 @@ export class Placement { } else { placed = placeHorizontalFn(); } - if (placed && placed.box && placed.box.length) break; + if (placed && placed.placeable) break; } } else { placed = placeHorizontalFn(); @@ -539,10 +573,14 @@ export class Placement { textOverlapMode, textPixelRatio, posMatrix, + unwrappedTileID, + pitchWithMap, + rotateWithMap, + translationText, collisionGroup.predicate, getElevation ); - if (placedFeature && placedFeature.box && placedFeature.box.length) { + if (placedFeature && placedFeature.placeable) { this.markUsedOrientation(bucket, orientation, symbolInstance); this.placedOrientations[symbolInstance.crossTileID] = orientation; } @@ -562,7 +600,7 @@ export class Placement { }; placeTextForPlacementModes(placeHorizontal, placeVertical); - updatePreviousOrientationIfNotPlaced(placed && placed.box && placed.box.length); + updatePreviousOrientationIfNotPlaced(placed && placed.placeable); } else { // If this symbol was in the last placement, prefer placement using same anchor, if it's still available @@ -574,10 +612,7 @@ export class Placement { const textBoxScale = symbolInstance.textBoxScale; const variableIconBox = hasIconTextFit && (iconOverlapMode === 'never') ? collisionIconBox : null; - let placedBox: { - box: Array; - offscreen: boolean; - } = {box: [], offscreen: false}; + let placedBox: PlacedBox = {box: [], placeable: false, offscreen: false}; let placementPasses = (textOverlapMode === 'never') ? 1 : 2; let overlapMode: OverlapMode = 'never'; @@ -595,12 +630,12 @@ export class Placement { const result = this.attemptAnchorPlacement( textAnchorOffset, collisionTextBox, width, height, - textBoxScale, rotateWithMap, pitchWithMap, textPixelRatio, posMatrix, - collisionGroup, overlapMode, symbolInstance, bucket, orientation, variableIconBox, getElevation); + textBoxScale, rotateWithMap, pitchWithMap, textPixelRatio, posMatrix, unwrappedTileID, + collisionGroup, overlapMode, symbolInstance, bucket, orientation, translationText, translationIcon, variableIconBox, getElevation); if (result) { placedBox = result.placedGlyphBoxes; - if (placedBox && placedBox.box && placedBox.box.length) { + if (placedBox && placedBox.placeable) { placeText = true; shift = result.shift; return placedBox; @@ -615,6 +650,25 @@ export class Placement { } } + if (placedBox.box.length === 0) { + // No box was successfully placed + // Generate bounds for a fake centered box, so that we can at least display something for collision debug. + const placedFakeGlyphBox = this.collisionIndex.placeCollisionBox( + textBox, + 'always', // Skips expensive collision check with already placed boxes + textPixelRatio, + posMatrix, + unwrappedTileID, + pitchWithMap, + rotateWithMap, + translationText, + collisionGroup.predicate, + getElevation, + new Point(0, 0) + ); + placedBox.box = placedFakeGlyphBox.box; + } + return placedBox; }; @@ -624,21 +678,21 @@ export class Placement { const placeVertical = () => { const verticalTextBox = collisionArrays.verticalTextBox; - const wasPlaced = placed && placed.box && placed.box.length; + const wasPlaced = placed && placed.placeable; if (bucket.allowVerticalPlacement && !wasPlaced && symbolInstance.numVerticalGlyphVertices > 0 && verticalTextBox) { return placeBoxForVariableAnchors(verticalTextBox, collisionArrays.verticalIconBox, WritingMode.vertical); } - return {box: null, offscreen: null}; + return {box: null, occluded: true, offscreen: null}; }; placeTextForPlacementModes(placeHorizontal, placeVertical); if (placed) { - placeText = placed.box; + placeText = placed.placeable; offscreen = placed.offscreen; } - const prevOrientation = updatePreviousOrientationIfNotPlaced(placed && placed.box); + const prevOrientation = updatePreviousOrientationIfNotPlaced(placed && placed.placeable); // If we didn't get placed, we still need to copy our position from the last placement for // fade animations @@ -654,7 +708,7 @@ export class Placement { } placedGlyphBoxes = placed; - placeText = placedGlyphBoxes && placedGlyphBoxes.box && placedGlyphBoxes.box.length > 0; + placeText = placedGlyphBoxes && placedGlyphBoxes.placeable; offscreen = placedGlyphBoxes && placedGlyphBoxes.offscreen; @@ -672,6 +726,7 @@ export class Placement { bucket.glyphOffsetArray, fontSize, posMatrix, + unwrappedTileID, textLabelPlaneMatrix, labelToScreenMatrix, showCollisionBoxes, @@ -679,6 +734,7 @@ export class Placement { collisionGroup.predicate, circlePixelDiameter, textPixelPadding, + translationText, getElevation ); @@ -700,21 +756,27 @@ export class Placement { if (collisionArrays.iconBox) { const placeIconFeature = iconBox => { - const shiftedIconBox = hasIconTextFit && shift ? - shiftVariableCollisionBox( - iconBox, shift.x, shift.y, - rotateWithMap, pitchWithMap, this.transform.angle) : - iconBox; - return this.collisionIndex.placeCollisionBox(shiftedIconBox, - iconOverlapMode, textPixelRatio, posMatrix, collisionGroup.predicate, getElevation); + return this.collisionIndex.placeCollisionBox( + iconBox, + iconOverlapMode, + textPixelRatio, + posMatrix, + unwrappedTileID, + pitchWithMap, + rotateWithMap, + translationIcon, + collisionGroup.predicate, + getElevation, + (hasIconTextFit && shift) ? shift : undefined, + ); }; - if (placedVerticalText && placedVerticalText.box && placedVerticalText.box.length && collisionArrays.verticalIconBox) { + if (placedVerticalText && placedVerticalText.placeable && collisionArrays.verticalIconBox) { placedIconBoxes = placeIconFeature(collisionArrays.verticalIconBox); - placeIcon = placedIconBoxes.box.length > 0; + placeIcon = placedIconBoxes.placeable; } else { placedIconBoxes = placeIconFeature(collisionArrays.iconBox); - placeIcon = placedIconBoxes.box.length > 0; + placeIcon = placedIconBoxes.placeable; } offscreen = offscreen && placedIconBoxes.offscreen; } @@ -732,8 +794,11 @@ export class Placement { placeIcon = placeIcon && placeText; } - if (placeText && placedGlyphBoxes && placedGlyphBoxes.box) { - if (placedVerticalText && placedVerticalText.box && verticalTextFeatureIndex) { + const hasTextBox = placeText && placedGlyphBoxes.placeable; + const hasIconBox = placeIcon && placedIconBoxes.placeable; + + if (hasTextBox) { + if (placedVerticalText && placedVerticalText.placeable && verticalTextFeatureIndex) { this.collisionIndex.insertCollisionBox( placedGlyphBoxes.box, textOverlapMode, @@ -752,7 +817,7 @@ export class Placement { } } - if (placeIcon && placedIconBoxes) { + if (hasIconBox) { this.collisionIndex.insertCollisionBox( placedIconBoxes.box, iconOverlapMode, @@ -771,9 +836,51 @@ export class Placement { textFeatureIndex, collisionGroup.ID); } + } + + if (showCollisionBoxes) { + const id = bucket.bucketInstanceId; + + if (collisionArrays.textBox || collisionArrays.iconBox) { + // Store the actually used collision box for debug draw + let boxArray: Map; + + if (this.collisionBoxArrays.has(id)) { + boxArray = this.collisionBoxArrays.get(id); + } else { + boxArray = new Map(); + this.collisionBoxArrays.set(id, boxArray); + } + let realCollisionBox: { + text: number[]; + icon: number[]; + }; + + if (boxArray.has(symbolIndex)) { + realCollisionBox = boxArray.get(symbolIndex); + } else { + realCollisionBox = { + text: null, + icon: null + }; + boxArray.set(symbolIndex, realCollisionBox); + } + + if (collisionArrays.textBox) { + realCollisionBox.text = placedGlyphBoxes.box; + } + if (collisionArrays.iconBox) { + realCollisionBox.icon = placedIconBoxes.box; + } + } - if (showCollisionBoxes) { - const id = bucket.bucketInstanceId; + if (placedGlyphCircles) { let circleArray = this.collisionCircleArrays[id]; // Group collision circles together by bucket. Circles can't be pushed forward for rendering yet as the symbol placement @@ -802,11 +909,11 @@ export class Placement { const symbolIndexes = bucket.getSortedSymbolIndexes(this.transform.angle); for (let i = symbolIndexes.length - 1; i >= 0; --i) { const symbolIndex = symbolIndexes[i]; - placeSymbol(bucket.symbolInstances.get(symbolIndex), bucket.collisionArrays[symbolIndex]); + placeSymbol(bucket.symbolInstances.get(symbolIndex), bucket.collisionArrays[symbolIndex], symbolIndex); } } else { for (let i = bucketPart.symbolInstanceStart; i < bucketPart.symbolInstanceEnd; i++) { - placeSymbol(bucket.symbolInstances.get(i), bucket.collisionArrays[i]); + placeSymbol(bucket.symbolInstances.get(i), bucket.collisionArrays[i], i); } } @@ -944,12 +1051,12 @@ export class Placement { for (const tile of tiles) { const symbolBucket = tile.getBucket(styleLayer) as SymbolBucket; if (symbolBucket && tile.latestFeatureIndex && styleLayer.id === symbolBucket.layerIds[0]) { - this.updateBucketOpacities(symbolBucket, seenCrossTileIDs, tile.collisionBoxArray); + this.updateBucketOpacities(symbolBucket, tile.tileID, seenCrossTileIDs, tile.collisionBoxArray); } } } - updateBucketOpacities(bucket: SymbolBucket, seenCrossTileIDs: { + updateBucketOpacities(bucket: SymbolBucket, tileID: OverscaledTileID, seenCrossTileIDs: { [k in string | number]: boolean; }, collisionBoxArray?: CollisionBoxArray | null) { if (bucket.hasTextData()) { @@ -992,6 +1099,10 @@ export class Placement { iconOrText.hasVisibleVertices = iconOrText.hasVisibleVertices || (opacity !== PACKED_HIDDEN_OPACITY); }; + const boxArrays = this.collisionBoxArrays.get(bucket.bucketInstanceId); + const getElevation = this._getTerrainElevationFunc(tileID); + const posMatrix = this.transform.calculatePosMatrix(tileID.toUnwrapped(), false); + for (let s = 0; s < bucket.symbolInstances.length; s++) { const symbolInstance = bucket.symbolInstances.get(s); const { @@ -1080,6 +1191,11 @@ export class Placement { } } + const realBoxes = (boxArrays && boxArrays.has(s)) ? boxArrays.get(s) : { + text: null, + icon: null + }; + if (bucket.hasIconCollisionBoxData() || bucket.hasTextCollisionBoxData()) { const collisionArrays = bucket.collisionArrays[s]; if (collisionArrays) { @@ -1109,24 +1225,40 @@ export class Placement { } } - if (collisionArrays.textBox) { - updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, opacityState.text.placed, !used || horizontalHidden, shift.x, shift.y); - } - if (collisionArrays.verticalTextBox) { - updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, opacityState.text.placed, !used || verticalHidden, shift.x, shift.y); + if (collisionArrays.textBox || collisionArrays.verticalTextBox) { + let anchorTileX, anchorTileY; + let hidden; + if (collisionArrays.textBox) { + anchorTileX = collisionArrays.textBox.anchorPointX; + anchorTileY = collisionArrays.textBox.anchorPointY; + hidden = horizontalHidden; + } + if (collisionArrays.verticalTextBox) { + anchorTileX = collisionArrays.verticalTextBox.anchorPointX; + anchorTileY = collisionArrays.verticalTextBox.anchorPointY; + hidden = verticalHidden; + } + const projected = this.collisionIndex.projectAndGetPerspectiveRatio(posMatrix, anchorTileX, anchorTileY, tileID, getElevation); + updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, projected.point, opacityState.text.placed, !used || hidden, realBoxes.text, shift.x, shift.y); } } - const verticalIconUsed = Boolean(!verticalHidden && collisionArrays.verticalIconBox); - - if (collisionArrays.iconBox) { - updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, opacityState.icon.placed, verticalIconUsed, - hasIconTextFit ? shift.x : 0, - hasIconTextFit ? shift.y : 0); - } - - if (collisionArrays.verticalIconBox) { - updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, opacityState.icon.placed, !verticalIconUsed, + if (collisionArrays.iconBox || collisionArrays.verticalIconBox) { + const verticalIconUsed = Boolean(!verticalHidden && collisionArrays.verticalIconBox); + let anchorTileX, anchorTileY; + let hidden; + if (collisionArrays.iconBox) { + anchorTileX = collisionArrays.iconBox.anchorPointX; + anchorTileY = collisionArrays.iconBox.anchorPointY; + hidden = verticalIconUsed; + } + if (collisionArrays.verticalIconBox) { + anchorTileX = collisionArrays.verticalIconBox.anchorPointX; + anchorTileY = collisionArrays.verticalIconBox.anchorPointY; + hidden = !verticalIconUsed; + } + const projected = this.collisionIndex.projectAndGetPerspectiveRatio(posMatrix, anchorTileX, anchorTileY, tileID, getElevation); + updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, projected.point, opacityState.icon.placed, hidden, realBoxes.icon, hasIconTextFit ? shift.x : 0, hasIconTextFit ? shift.y : 0); } @@ -1203,11 +1335,20 @@ export class Placement { } } -function updateCollisionVertices(collisionVertexArray: CollisionVertexArray, placed: boolean, notUsed: boolean | number, shiftX?: number, shiftY?: number) { - collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0); - collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0); - collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0); - collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0); +function updateCollisionVertices(collisionVertexArray: CollisionVertexArray, projectedAnchor: Point, placed: boolean, notUsed: boolean | number, realBox: Array, shiftX?: number, shiftY?: number) { + if (!realBox || realBox.length === 0) { + realBox = [0, 0, 0, 0]; + } + + const tlX = realBox[0] - viewportPadding; + const tlY = realBox[1] - viewportPadding; + const brX = realBox[2] - viewportPadding; + const brY = realBox[3] - viewportPadding; + + collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0, tlX, tlY); + collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0, brX, tlY); + collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0, brX, brY); + collisionVertexArray.emplaceBack(placed ? 1 : 0, notUsed ? 1 : 0, shiftX || 0, shiftY || 0, tlX, brY); } // All four vertices for a glyph will have the same opacity state diff --git a/src/symbol/projection.test.ts b/src/symbol/projection.test.ts index 2168601d94..5b3699b8c1 100644 --- a/src/symbol/projection.test.ts +++ b/src/symbol/projection.test.ts @@ -1,4 +1,4 @@ -import {findOffsetIntersectionPoint, project, projectVertexToViewport, transformToOffsetNormal} from './projection'; +import {ProjectionArgs, ProjectionSyntheticVertexArgs, findOffsetIntersectionPoint, project, projectVertexToViewport, transformToOffsetNormal} from './projection'; import Point from '@mapbox/point-geometry'; import {mat4} from 'gl-matrix'; @@ -20,22 +20,31 @@ describe('Vertex to viewport projection', () => { lineVertexArray.emplaceBack(10, 0, 10); test('projecting with null matrix', () => { - const projectionArgs = { - projectionCache: {projections: {}, offsets: {}}, + const projectionArgs: ProjectionArgs = { + projectionCache: {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}, lineVertexArray, labelPlaneMatrix: mat4.create(), getElevation: (_x, _y) => 0, // Only relevant in "behind the camera" case, can't happen with null projection matrix tileAnchorPoint: new Point(0, 0), + pitchWithMap: true, + projection: null, + unwrappedTileID: null, + width: 1, + height: 1, + translation: [0, 0] + }; + + const syntheticVertexArgs: ProjectionSyntheticVertexArgs = { distanceFromAnchor: 0, previousVertex: new Point(0, 0), direction: 1, absOffsetX: 0 }; - const first = projectVertexToViewport(0, projectionArgs); - const second = projectVertexToViewport(1, projectionArgs); - const third = projectVertexToViewport(2, projectionArgs); + const first = projectVertexToViewport(0, projectionArgs, syntheticVertexArgs); + const second = projectVertexToViewport(1, projectionArgs, syntheticVertexArgs); + const third = projectVertexToViewport(2, projectionArgs, syntheticVertexArgs); expect(first.x).toBeCloseTo(-10); expect(second.x).toBeCloseTo(0); expect(third.x).toBeCloseTo(10); @@ -54,14 +63,23 @@ describe('Find offset line intersections', () => { lineVertexArray.emplaceBack(0, 0, 0); lineVertexArray.emplaceBack(10, 0, 10); - const projectionArgs = { - projectionCache: {projections: {}, offsets: {}}, + const projectionArgs: ProjectionArgs = { + projectionCache: {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}, lineVertexArray, labelPlaneMatrix: mat4.create(), getElevation: (_x, _y) => 0, - direction: 1, - // Only relevant in "behind the camera" case, can't happen with null projection matrix tileAnchorPoint: new Point(0, 0), + pitchWithMap: true, + projection: null, + unwrappedTileID: null, + width: 1, + height: 1, + translation: [0, 0] + }; + + // Only relevant in "behind the camera" case, can't happen with null projection matrix + const syntheticVertexArgs: ProjectionSyntheticVertexArgs = { + direction: 1, distanceFromAnchor: 0, previousVertex: new Point(0, 0), absOffsetX: 0 @@ -74,11 +92,11 @@ describe('Find offset line intersections', () => { ________| | __________| <- origin */ - projectionArgs.projectionCache = {projections: {}, offsets: {}}; + projectionArgs.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; const lineOffsetY = 1; const prevToCurrent = new Point(10, 0); - const normal = transformToOffsetNormal(prevToCurrent, lineOffsetY, projectionArgs.direction); + const normal = transformToOffsetNormal(prevToCurrent, lineOffsetY, syntheticVertexArgs.direction); expect(normal.y).toBeCloseTo(1); expect(normal.x).toBeCloseTo(0); const intersectionPoint = findOffsetIntersectionPoint( @@ -89,7 +107,8 @@ describe('Find offset line intersections', () => { 3, new Point(-10, 1), lineOffsetY, - projectionArgs + projectionArgs, + syntheticVertexArgs ); expect(intersectionPoint.y).toBeCloseTo(1); expect(intersectionPoint.x).toBeCloseTo(-1); @@ -103,11 +122,11 @@ describe('Find offset line intersections', () => { __________| | ____________| */ - projectionArgs.projectionCache = {projections: {}, offsets: {}}; + projectionArgs.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; const lineOffsetY = -1; const prevToCurrent = new Point(10, 0); - const normal = transformToOffsetNormal(prevToCurrent, lineOffsetY, projectionArgs.direction); + const normal = transformToOffsetNormal(prevToCurrent, lineOffsetY, syntheticVertexArgs.direction); expect(normal.y).toBeCloseTo(-1); expect(normal.x).toBeCloseTo(0); const intersectionPoint = findOffsetIntersectionPoint( @@ -118,7 +137,8 @@ describe('Find offset line intersections', () => { 3, new Point(-10, -1), lineOffsetY, - projectionArgs + projectionArgs, + syntheticVertexArgs ); expect(intersectionPoint.y).toBeCloseTo(-1); expect(intersectionPoint.x).toBeCloseTo(1); @@ -129,19 +149,20 @@ describe('Find offset line intersections', () => { ______._____ ______|_____ */ - projectionArgs.projectionCache = {projections: {}, offsets: {}}; + projectionArgs.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; const lineOffsetY = 1; const prevToCurrent = new Point(10, 0); const intersectionPoint = findOffsetIntersectionPoint( 1, - transformToOffsetNormal(prevToCurrent, lineOffsetY, projectionArgs.direction), + transformToOffsetNormal(prevToCurrent, lineOffsetY, syntheticVertexArgs.direction), new Point(0, 0), 3, 5, new Point(-10, 1), lineOffsetY, - projectionArgs + projectionArgs, + syntheticVertexArgs ); expect(intersectionPoint.x).toBeCloseTo(0); expect(intersectionPoint.y).toBeCloseTo(1); diff --git a/src/symbol/projection.ts b/src/symbol/projection.ts index b613ccaaf2..45ee10ee7f 100644 --- a/src/symbol/projection.ts +++ b/src/symbol/projection.ts @@ -14,8 +14,24 @@ import type { } from '../data/array_types.g'; import {WritingMode} from '../symbol/shaping'; import {findLineIntersection} from '../util/util'; - -export {updateLineLabels, hideGlyphs, getLabelPlaneMatrix, getGlCoordMatrix, project, getPerspectiveRatio, placeFirstAndLastGlyph, placeGlyphAlongLine, xyTransformMat4, projectVertexToViewport, findOffsetIntersectionPoint, transformToOffsetNormal}; +import {UnwrappedTileID} from '../source/tile_id'; +import {Projection} from '../geo/projection/projection'; + +export { + updateLineLabels, + hideGlyphs, + getLabelPlaneMatrix, + getGlCoordMatrix, + project, + getPerspectiveRatio, + placeFirstAndLastGlyph, + placeGlyphAlongLine, + xyTransformMat4, + projectLineVertexToViewport as projectVertexToViewport, + projectTileCoordinatesToViewport, + findOffsetIntersectionPoint, + transformToOffsetNormal, +}; /* * # Overview of coordinate spaces @@ -123,15 +139,13 @@ function getPerspectiveRatio(cameraToCenterDistance: number, signedDistanceFromC return 0.5 + 0.5 * (cameraToCenterDistance / signedDistanceFromCamera); } -function isVisible(anchorPos: vec4, +function isVisible(p: Point, clippingBuffer: [number, number]) { - const x = anchorPos[0] / anchorPos[3]; - const y = anchorPos[1] / anchorPos[3]; const inPaddedViewport = ( - x >= -clippingBuffer[0] && - x <= clippingBuffer[0] && - y >= -clippingBuffer[1] && - y <= clippingBuffer[1]); + p.x >= -clippingBuffer[0] && + p.x <= clippingBuffer[0] && + p.y >= -clippingBuffer[1] && + p.y <= clippingBuffer[1]); return inPaddedViewport; } @@ -148,6 +162,11 @@ function updateLineLabels(bucket: SymbolBucket, pitchWithMap: boolean, keepUpright: boolean, rotateToLine: boolean, + projection: Projection, + unwrappedTileID: UnwrappedTileID, + viewportWidth: number, + viewportHeight: number, + translation: [number, number], getElevation: (x: number, y: number) => number) { const sizeData = isText ? bucket.textSizeData : bucket.iconSizeData; @@ -180,40 +199,46 @@ function updateLineLabels(bucket: SymbolBucket, // Awkward... but we're counting on the paired "vertical" symbol coming immediately after its horizontal counterpart useVertical = false; - let anchorPos; - if (getElevation) { // slow because of handle z-index - anchorPos = [symbol.anchorX, symbol.anchorY, getElevation(symbol.anchorX, symbol.anchorY), 1] as vec4; - vec4.transformMat4(anchorPos, anchorPos, posMatrix); - } else { // fast because of ignore z-index - anchorPos = [symbol.anchorX, symbol.anchorY, 0, 1] as vec4; - xyTransformMat4(anchorPos, anchorPos, posMatrix); - } + const anchorPos = project(new Point(symbol.anchorX, symbol.anchorY), posMatrix, getElevation); // Don't bother calculating the correct point for invisible labels. - if (!isVisible(anchorPos, clippingBuffer)) { + if (!isVisible(anchorPos.point, clippingBuffer)) { hideGlyphs(symbol.numGlyphs, dynamicLayoutVertexArray); continue; } - const cameraToAnchorDistance = anchorPos[3]; + const cameraToAnchorDistance = anchorPos.signedDistanceFromCamera; const perspectiveRatio = getPerspectiveRatio(painter.transform.cameraToCenterDistance, cameraToAnchorDistance); const fontSize = symbolSize.evaluateSizeForFeature(sizeData, partiallyEvaluatedSize, symbol); const pitchScaledFontSize = pitchWithMap ? fontSize / perspectiveRatio : fontSize * perspectiveRatio; const tileAnchorPoint = new Point(symbol.anchorX, symbol.anchorY); - const anchorPoint = project(tileAnchorPoint, labelPlaneMatrix, getElevation).point; - const projectionCache = {projections: {}, offsets: {}}; + const projectionCache: ProjectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; + + const projectionArgs: ProjectionArgs = { + getElevation, + labelPlaneMatrix, + lineVertexArray, + pitchWithMap, + projectionCache, + projection, + tileAnchorPoint, + unwrappedTileID, + width: viewportWidth, + height: viewportHeight, + translation + }; - const placeUnflipped: any = placeGlyphsAlongLine(symbol, pitchScaledFontSize, false /*unflipped*/, keepUpright, posMatrix, labelPlaneMatrix, glCoordMatrix, - bucket.glyphOffsetArray, lineVertexArray, dynamicLayoutVertexArray, anchorPoint, tileAnchorPoint, projectionCache, aspectRatio, rotateToLine, getElevation); + const placeUnflipped: any = placeGlyphsAlongLine(projectionArgs, symbol, pitchScaledFontSize, false /*unflipped*/, keepUpright, posMatrix, glCoordMatrix, + bucket.glyphOffsetArray, dynamicLayoutVertexArray, aspectRatio, rotateToLine); useVertical = placeUnflipped.useVertical; if (placeUnflipped.notEnoughRoom || useVertical || (placeUnflipped.needsFlipping && - (placeGlyphsAlongLine(symbol, pitchScaledFontSize, true /*flipped*/, keepUpright, posMatrix, labelPlaneMatrix, glCoordMatrix, - bucket.glyphOffsetArray, lineVertexArray, dynamicLayoutVertexArray, anchorPoint, tileAnchorPoint, projectionCache, aspectRatio, rotateToLine, getElevation) as any).notEnoughRoom)) { + (placeGlyphsAlongLine(projectionArgs, symbol, pitchScaledFontSize, true /*flipped*/, keepUpright, posMatrix, glCoordMatrix, + bucket.glyphOffsetArray, dynamicLayoutVertexArray, aspectRatio, rotateToLine) as any).notEnoughRoom)) { hideGlyphs(symbol.numGlyphs, dynamicLayoutVertexArray); } } @@ -242,7 +267,15 @@ type FirstAndLastGlyphPlacement = { * * Returns null if the label can't fit on the geometry */ -function placeFirstAndLastGlyph(fontScale: number, glyphOffsetArray: GlyphOffsetArray, lineOffsetX: number, lineOffsetY: number, flip: boolean, anchorPoint: Point, tileAnchorPoint: Point, symbol: any, lineVertexArray: SymbolLineVertexArray, labelPlaneMatrix: mat4, projectionCache: ProjectionCache, rotateToLine: boolean, getElevation: (x: number, y: number) => number): FirstAndLastGlyphPlacement { +function placeFirstAndLastGlyph( + fontScale: number, + glyphOffsetArray: GlyphOffsetArray, + lineOffsetX: number, + lineOffsetY: number, + flip: boolean, + symbol: any, + rotateToLine: boolean, + projectionArgs: ProjectionArgs): FirstAndLastGlyphPlacement { const glyphEndIndex = symbol.glyphStartIndex + symbol.numGlyphs; const lineStartIndex = symbol.lineStartIndex; const lineEndIndex = symbol.lineStartIndex + symbol.lineLength; @@ -250,16 +283,20 @@ function placeFirstAndLastGlyph(fontScale: number, glyphOffsetArray: GlyphOffset const firstGlyphOffset = glyphOffsetArray.getoffsetX(symbol.glyphStartIndex); const lastGlyphOffset = glyphOffsetArray.getoffsetX(glyphEndIndex - 1); - const firstPlacedGlyph = placeGlyphAlongLine(fontScale * firstGlyphOffset, lineOffsetX, lineOffsetY, flip, anchorPoint, tileAnchorPoint, symbol.segment, - lineStartIndex, lineEndIndex, lineVertexArray, labelPlaneMatrix, projectionCache, rotateToLine, getElevation); + const firstPlacedGlyph = placeGlyphAlongLine(fontScale * firstGlyphOffset, lineOffsetX, lineOffsetY, flip, symbol.segment, + lineStartIndex, lineEndIndex, projectionArgs, rotateToLine); if (!firstPlacedGlyph) return null; - const lastPlacedGlyph = placeGlyphAlongLine(fontScale * lastGlyphOffset, lineOffsetX, lineOffsetY, flip, anchorPoint, tileAnchorPoint, symbol.segment, - lineStartIndex, lineEndIndex, lineVertexArray, labelPlaneMatrix, projectionCache, rotateToLine, getElevation); + const lastPlacedGlyph = placeGlyphAlongLine(fontScale * lastGlyphOffset, lineOffsetX, lineOffsetY, flip, symbol.segment, + lineStartIndex, lineEndIndex, projectionArgs, rotateToLine); if (!lastPlacedGlyph) return null; + if (projectionArgs.projectionCache.anyProjectionOccluded) { + return null; + } + return {first: firstPlacedGlyph, last: lastPlacedGlyph}; } @@ -292,7 +329,7 @@ function requiresOrientationChange(writingMode, firstPoint, lastPoint, aspectRat * Finally, add resulting glyph position calculations to dynamicLayoutVertexArray for * upload to the GPU */ -function placeGlyphsAlongLine(symbol, fontSize, flip, keepUpright, posMatrix, labelPlaneMatrix, glCoordMatrix, glyphOffsetArray, lineVertexArray, dynamicLayoutVertexArray, anchorPoint, tileAnchorPoint, projectionCache, aspectRatio, rotateToLine, getElevation) { +function placeGlyphsAlongLine(projectionArgs: ProjectionArgs, symbol, fontSize, flip, keepUpright, posMatrix, glCoordMatrix, glyphOffsetArray, dynamicLayoutVertexArray, aspectRatio, rotateToLine) { const fontScale = fontSize / 24; const lineOffsetX = symbol.lineOffsetX * fontScale; const lineOffsetY = symbol.lineOffsetY * fontScale; @@ -305,12 +342,12 @@ function placeGlyphsAlongLine(symbol, fontSize, flip, keepUpright, posMatrix, la // Place the first and the last glyph in the label first, so we can figure out // the overall orientation of the label and determine whether it needs to be flipped in keepUpright mode - const firstAndLastGlyph = placeFirstAndLastGlyph(fontScale, glyphOffsetArray, lineOffsetX, lineOffsetY, flip, anchorPoint, tileAnchorPoint, symbol, lineVertexArray, labelPlaneMatrix, projectionCache, rotateToLine, getElevation); + const firstAndLastGlyph = placeFirstAndLastGlyph(fontScale, glyphOffsetArray, lineOffsetX, lineOffsetY, flip, symbol, rotateToLine, projectionArgs); if (!firstAndLastGlyph) { return {notEnoughRoom: true}; } - const firstPoint = project(firstAndLastGlyph.first.point, glCoordMatrix, getElevation).point; - const lastPoint = project(firstAndLastGlyph.last.point, glCoordMatrix, getElevation).point; + const firstPoint = project(firstAndLastGlyph.first.point, glCoordMatrix, projectionArgs.getElevation).point; + const lastPoint = project(firstAndLastGlyph.last.point, glCoordMatrix, projectionArgs.getElevation).point; if (keepUpright && !flip) { const orientationChange = requiresOrientationChange(symbol.writingMode, firstPoint, lastPoint, aspectRatio); @@ -322,33 +359,33 @@ function placeGlyphsAlongLine(symbol, fontSize, flip, keepUpright, posMatrix, la placedGlyphs = [firstAndLastGlyph.first]; for (let glyphIndex = symbol.glyphStartIndex + 1; glyphIndex < glyphEndIndex - 1; glyphIndex++) { // Since first and last glyph fit on the line, we're sure that the rest of the glyphs can be placed - placedGlyphs.push(placeGlyphAlongLine(fontScale * glyphOffsetArray.getoffsetX(glyphIndex), lineOffsetX, lineOffsetY, flip, anchorPoint, tileAnchorPoint, symbol.segment, - lineStartIndex, lineEndIndex, lineVertexArray, labelPlaneMatrix, projectionCache, rotateToLine, getElevation)); + placedGlyphs.push(placeGlyphAlongLine(fontScale * glyphOffsetArray.getoffsetX(glyphIndex), lineOffsetX, lineOffsetY, flip, symbol.segment, + lineStartIndex, lineEndIndex, projectionArgs, rotateToLine)); } placedGlyphs.push(firstAndLastGlyph.last); } else { // Only a single glyph to place // So, determine whether to flip based on projected angle of the line segment it's on if (keepUpright && !flip) { - const a = project(tileAnchorPoint, posMatrix, getElevation).point; + const a = project(projectionArgs.tileAnchorPoint, posMatrix, projectionArgs.getElevation).point; const tileVertexIndex = (symbol.lineStartIndex + symbol.segment + 1); - const tileSegmentEnd = new Point(lineVertexArray.getx(tileVertexIndex), lineVertexArray.gety(tileVertexIndex)); - const projectedVertex = project(tileSegmentEnd, posMatrix, getElevation); + const tileSegmentEnd = new Point(projectionArgs.lineVertexArray.getx(tileVertexIndex), projectionArgs.lineVertexArray.gety(tileVertexIndex)); + const projectedVertex = project(tileSegmentEnd, posMatrix, projectionArgs.getElevation); // We know the anchor will be in the viewport, but the end of the line segment may be // behind the plane of the camera, in which case we can use a point at any arbitrary (closer) // point on the segment. const b = (projectedVertex.signedDistanceFromCamera > 0) ? projectedVertex.point : - projectTruncatedLineSegment(tileAnchorPoint, tileSegmentEnd, a, 1, posMatrix, getElevation); + projectTruncatedLineSegmentToLabelPlane(projectionArgs.tileAnchorPoint, tileSegmentEnd, a, 1, posMatrix, projectionArgs); const orientationChange = requiresOrientationChange(symbol.writingMode, a, b, aspectRatio); if (orientationChange) { return orientationChange; } } - const singleGlyph = placeGlyphAlongLine(fontScale * glyphOffsetArray.getoffsetX(symbol.glyphStartIndex), lineOffsetX, lineOffsetY, flip, anchorPoint, tileAnchorPoint, symbol.segment, - symbol.lineStartIndex, symbol.lineStartIndex + symbol.lineLength, lineVertexArray, labelPlaneMatrix, projectionCache, rotateToLine, getElevation); - if (!singleGlyph) + const singleGlyph = placeGlyphAlongLine(fontScale * glyphOffsetArray.getoffsetX(symbol.glyphStartIndex), lineOffsetX, lineOffsetY, flip, symbol.segment, + symbol.lineStartIndex, symbol.lineStartIndex + symbol.lineLength, projectionArgs, rotateToLine); + if (!singleGlyph || projectionArgs.projectionCache.anyProjectionOccluded) return {notEnoughRoom: true}; placedGlyphs = [singleGlyph]; @@ -360,20 +397,64 @@ function placeGlyphsAlongLine(symbol, fontSize, flip, keepUpright, posMatrix, la return {}; } -function projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4, getElevation: (x: number, y: number) => number) { +/** + * Takes a line and direction from `previousTilePoint` to `currentTilePoint`, + * projects it to *label plane*, + * and returns a projected point along this projected line that is `minimumLength` distance away from `previousProjectedPoint`. + * @param previousTilePoint - Line start point, in tile coordinates. + * @param currentTilePoint - Line end point, in tile coordinates. + * @param previousProjectedPoint - Projection of `previousTilePoint` into *label plane*. + * @param minimumLength - Distance in the projected space along the line for the returned point. + * @param projectionMatrix - Matrix to use during projection. + * @param projectionArgs - Projection args, used only for terrain's `getElevation`. + */ +function projectTruncatedLineSegmentToLabelPlane(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4, projectionArgs: ProjectionArgs) { + return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, projectionMatrix, projectionArgs); +} + +/** + * Takes a line and direction from `previousTilePoint` to `currentTilePoint`, + * projects it to *viewport*, + * and returns a projected point along this projected line that is `minimumLength` distance away from `previousProjectedPoint`. + * @param previousTilePoint - Line start point, in tile coordinates. + * @param currentTilePoint - Line end point, in tile coordinates. + * @param previousProjectedPoint - Projection of `previousTilePoint` into *viewport*. + * @param minimumLength - Distance in the projected space along the line for the returned point. + * @param projectionArgs - Projection args, used for terrain's `getElevation`, and either the `labelPlaneMatrix` or the map's special projection (mostly for globe). + */ +function projectTruncatedLineSegmentToViewport(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionArgs: ProjectionArgs) { + return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, undefined, projectionArgs); +} + +/** + * Do not use directly, use {@link projectTruncatedLineSegmentToLabelPlane} or {@link projectTruncatedLineSegmentToViewport} instead, + * depending on the target space. + * + * Projects a "virtual" vertex along a line segment. + * If `projectionMatrix` is not undefined, does a simple projection using this matrix. + * Otherwise, either projects to label plane using the `labelPlaneMatrix` + * or projects to viewport using the special map projection (mostly for globe) by calling {@link projectTileCoordinatesToViewport}. + */ +function projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4 | undefined, projectionArgs: ProjectionArgs) { // We are assuming "previousTilePoint" won't project to a point within one unit of the camera plane // If it did, that would mean our label extended all the way out from within the viewport to a (very distant) // point near the plane of the camera. We wouldn't be able to render the label anyway once it crossed the // plane of the camera. - const projectedUnitVertex = project(previousTilePoint.add(previousTilePoint.sub(currentTilePoint)._unit()), projectionMatrix, getElevation).point; + const unitVertexToBeProjected = previousTilePoint.add(previousTilePoint.sub(currentTilePoint)._unit()); + let projectedUnitVertex; + if (projectionMatrix !== undefined) { + projectedUnitVertex = project(unitVertexToBeProjected, projectionMatrix, projectionArgs.getElevation).point; + } else { + projectedUnitVertex = projectTileCoordinatesToViewport(unitVertexToBeProjected.x, unitVertexToBeProjected.y, projectionArgs).point; + } const projectedUnitSegment = previousProjectedPoint.sub(projectedUnitVertex); - return previousProjectedPoint.add(projectedUnitSegment._mult(minimumLength / projectedUnitSegment.mag())); } type IndexToPointCache = { [lineIndex: number]: Point }; /** + * @internal * We calculate label-plane projected points for line vertices as we place glyphs along the line * Since we will use the same vertices for potentially many glyphs, cache the results for this bucket * over the course of the render. Each vertex location also potentially has one offset equivalent @@ -388,12 +469,24 @@ type ProjectionCache = { * label-plane vertices which have been shifted to follow an offset line */ offsets: IndexToPointCache; + /** + * Cached projected anchor point. + */ + cachedAnchorPoint: Point | undefined; + /** + * Was any projected point occluded by the map itself (eg. occluded by the planet when using globe projection). + * + * Viewport-pitched line-following texts where *any* of the line points is hidden behind the planet curve becomes entirely hidden. + * This is perhaps not the most ideal behavior, but it works, it is simple and planetary-scale texts such as this seem to be a rare edge case. + */ + anyProjectionOccluded: boolean; }; /** + * @internal * Arguments necessary to project a vertex to the label plane */ -type ProjectionArgs = { +export type ProjectionArgs = { /** * Used to cache results, save cost if projecting the same vertex multiple times */ @@ -413,24 +506,37 @@ type ProjectionArgs = { */ getElevation: (x: number, y: number) => number; /** - * Only for creating synthetic vertices if vertex would otherwise project behind plane of camera + * Only for creating synthetic vertices if vertex would otherwise project behind plane of camera, + * but still convenient to pass it inside this type. */ tileAnchorPoint: Point; /** - * Only for creating synthetic vertices if vertex would otherwise project behind plane of camera + * True when line glyphs are projected onto the map, instead of onto the viewport. */ - distanceFromAnchor: number; + pitchWithMap: boolean; + projection: Projection; + unwrappedTileID: UnwrappedTileID; /** - * Only for creating synthetic vertices if vertex would otherwise project behind plane of camera + * Viewport width. */ - previousVertex: Point; + width: number; /** - * Only for creating synthetic vertices if vertex would otherwise project behind plane of camera + * Viewport height. */ - direction: number; + height: number; /** - * Only for creating synthetic vertices if vertex would otherwise project behind plane of camera + * Translation in tile units, computed using text-translate and text-translate-anchor paint style properties. */ + translation: [number, number]; +}; + +/** + * Only for creating synthetic vertices if vertex would otherwise project behind plane of camera + */ +export type ProjectionSyntheticVertexArgs = { + distanceFromAnchor: number; + previousVertex: Point; + direction: number; absOffsetX: number; }; @@ -440,26 +546,53 @@ type ProjectionArgs = { * @param projectionArgs - necessary data to project a vertex * @returns the vertex projected to the label plane */ -function projectVertexToViewport(index: number, projectionArgs: ProjectionArgs): Point { - const {projectionCache, lineVertexArray, labelPlaneMatrix, tileAnchorPoint, distanceFromAnchor, getElevation, previousVertex, direction, absOffsetX} = projectionArgs; - if (projectionCache.projections[index]) { - return projectionCache.projections[index]; +function projectLineVertexToViewport(index: number, projectionArgs: ProjectionArgs, syntheticVertexArgs: ProjectionSyntheticVertexArgs): Point { + const cache = projectionArgs.projectionCache; + + if (cache.projections[index]) { + return cache.projections[index]; } - const currentVertex = new Point(lineVertexArray.getx(index), lineVertexArray.gety(index)); - const projection = project(currentVertex, labelPlaneMatrix, getElevation); + const currentVertex = new Point( + projectionArgs.lineVertexArray.getx(index), + projectionArgs.lineVertexArray.gety(index)); + + const projection = projectTileCoordinatesToViewport(currentVertex.x, currentVertex.y, projectionArgs); + if (projection.signedDistanceFromCamera > 0) { - projectionCache.projections[index] = projection.point; + cache.projections[index] = projection.point; + cache.anyProjectionOccluded = cache.anyProjectionOccluded || projection.isOccluded; return projection.point; } // The vertex is behind the plane of the camera, so we can't project it // Instead, we'll create a vertex along the line that's far enough to include the glyph - const previousLineVertexIndex = index - direction; - const previousTilePoint = distanceFromAnchor === 0 ? - tileAnchorPoint : - new Point(lineVertexArray.getx(previousLineVertexIndex), lineVertexArray.gety(previousLineVertexIndex)); + const previousLineVertexIndex = index - syntheticVertexArgs.direction; + const previousTilePoint = syntheticVertexArgs.distanceFromAnchor === 0 ? + projectionArgs.tileAnchorPoint : + new Point(projectionArgs.lineVertexArray.getx(previousLineVertexIndex), projectionArgs.lineVertexArray.gety(previousLineVertexIndex)); + // Don't cache because the new vertex might not be far enough out for future glyphs on the same segment - return projectTruncatedLineSegment(previousTilePoint, currentVertex, previousVertex, absOffsetX - distanceFromAnchor + 1, labelPlaneMatrix, getElevation); + const minimumLength = syntheticVertexArgs.absOffsetX - syntheticVertexArgs.distanceFromAnchor + 1; + return projectTruncatedLineSegmentToViewport(previousTilePoint, currentVertex, syntheticVertexArgs.previousVertex, minimumLength, projectionArgs); +} + +function projectTileCoordinatesToViewport(x: number, y: number, projectionArgs: ProjectionArgs): { + point: Point; + signedDistanceFromCamera: number; + isOccluded: boolean; +} { + const translatedX = x + projectionArgs.translation[0]; + const translatedY = y + projectionArgs.translation[1]; + let projection; + if (!projectionArgs.pitchWithMap && projectionArgs.projection.useSpecialProjectionForSymbols) { + projection = projectionArgs.projection.projectTileCoordinates(translatedX, translatedY, projectionArgs.unwrappedTileID, projectionArgs.getElevation); + projection.point.x = (projection.point.x * 0.5 + 0.5) * projectionArgs.width; + projection.point.y = (-projection.point.y * 0.5 + 0.5) * projectionArgs.height; + } else { + projection = project(new Point(translatedX, translatedY), projectionArgs.labelPlaneMatrix, projectionArgs.getElevation); + projection.isOccluded = false; + } + return projection; } /** @@ -487,30 +620,38 @@ function transformToOffsetNormal(segmentVector: Point, offset: number, direction * @param projectionArgs - Necessary data for tile-to-label-plane projection * @returns The point at which the current and next line segments intersect, once offset and extended/shrunk to their meeting point */ -function findOffsetIntersectionPoint(index: number, prevToCurrentOffsetNormal: Point, currentVertex: Point, lineStartIndex: number, lineEndIndex: number, offsetPreviousVertex: Point, lineOffsetY: number, projectionArgs: ProjectionArgs) { - const {projectionCache, direction} = projectionArgs; - if (projectionCache.offsets[index]) { - return projectionCache.offsets[index]; +function findOffsetIntersectionPoint( + index: number, + prevToCurrentOffsetNormal: Point, + currentVertex: Point, + lineStartIndex: number, + lineEndIndex: number, + offsetPreviousVertex: Point, + lineOffsetY: number, + projectionArgs: ProjectionArgs, + syntheticVertexArgs: ProjectionSyntheticVertexArgs) { + if (projectionArgs.projectionCache.offsets[index]) { + return projectionArgs.projectionCache.offsets[index]; } const offsetCurrentVertex = currentVertex.add(prevToCurrentOffsetNormal); - if (index + direction < lineStartIndex || index + direction >= lineEndIndex) { + if (index + syntheticVertexArgs.direction < lineStartIndex || index + syntheticVertexArgs.direction >= lineEndIndex) { // This is the end of the line, no intersection to calculate - projectionCache.offsets[index] = offsetCurrentVertex; + projectionArgs.projectionCache.offsets[index] = offsetCurrentVertex; return offsetCurrentVertex; } // Offset the vertices for the next segment - const nextVertex = projectVertexToViewport(index + direction, projectionArgs); - const currentToNextOffsetNormal = transformToOffsetNormal(nextVertex.sub(currentVertex), lineOffsetY, direction); + const nextVertex = projectLineVertexToViewport(index + syntheticVertexArgs.direction, projectionArgs, syntheticVertexArgs); + const currentToNextOffsetNormal = transformToOffsetNormal(nextVertex.sub(currentVertex), lineOffsetY, syntheticVertexArgs.direction); const offsetNextSegmentBegin = currentVertex.add(currentToNextOffsetNormal); const offsetNextSegmentEnd = nextVertex.add(currentToNextOffsetNormal); // find the intersection of these two lines // if the lines are parallel, offsetCurrent/offsetNextBegin will touch - projectionCache.offsets[index] = findLineIntersection(offsetPreviousVertex, offsetCurrentVertex, offsetNextSegmentBegin, offsetNextSegmentEnd) || offsetCurrentVertex; + projectionArgs.projectionCache.offsets[index] = findLineIntersection(offsetPreviousVertex, offsetCurrentVertex, offsetNextSegmentBegin, offsetNextSegmentEnd) || offsetCurrentVertex; - return projectionCache.offsets[index]; + return projectionArgs.projectionCache.offsets[index]; } /** @@ -541,16 +682,11 @@ function placeGlyphAlongLine( lineOffsetX: number, lineOffsetY: number, flip: boolean, - anchorPoint: Point, - tileAnchorPoint: Point, anchorSegment: number, lineStartIndex: number, lineEndIndex: number, - lineVertexArray: SymbolLineVertexArray, - labelPlaneMatrix: mat4, - projectionCache: ProjectionCache, - rotateToLine: boolean, - getElevation: (x: number, y: number) => number): PlacedGlyph | null { + projectionArgs: ProjectionArgs, + rotateToLine: boolean): PlacedGlyph | null { const combinedOffsetX = flip ? offsetX - lineOffsetX : @@ -572,6 +708,16 @@ function placeGlyphAlongLine( lineStartIndex + anchorSegment : lineStartIndex + anchorSegment + 1; + // Project anchor point to proper label plane and cache it + let anchorPoint: Point; + + if (projectionArgs.projectionCache.cachedAnchorPoint) { + anchorPoint = projectionArgs.projectionCache.cachedAnchorPoint; + } else { + anchorPoint = projectTileCoordinatesToViewport(projectionArgs.tileAnchorPoint.x, projectionArgs.tileAnchorPoint.y, projectionArgs).point; + projectionArgs.projectionCache.cachedAnchorPoint = anchorPoint; + } + let currentVertex = anchorPoint; let previousVertex = anchorPoint; @@ -598,20 +744,15 @@ function placeGlyphAlongLine( previousVertex = currentVertex; offsetPreviousVertex = offsetIntersectionPoint; - const projectionArgs: ProjectionArgs = { - projectionCache, - lineVertexArray, - labelPlaneMatrix, - tileAnchorPoint, - distanceFromAnchor, - getElevation, - previousVertex, + const syntheticVertexArgs: ProjectionSyntheticVertexArgs = { + absOffsetX, direction, - absOffsetX + distanceFromAnchor, + previousVertex }; // find next vertex in viewport space - currentVertex = projectVertexToViewport(currentIndex, projectionArgs); + currentVertex = projectLineVertexToViewport(currentIndex, projectionArgs, syntheticVertexArgs); if (lineOffsetY === 0) { // Store vertices for collision detection and update current segment geometry pathVertices.push(previousVertex); @@ -623,7 +764,7 @@ function placeGlyphAlongLine( if (prevToCurrent.mag() === 0) { // We are starting with our anchor point directly on the vertex, so look one vertex ahead // to calculate a normal - const nextVertex = projectVertexToViewport(currentIndex + direction, projectionArgs); + const nextVertex = projectLineVertexToViewport(currentIndex + direction, projectionArgs, syntheticVertexArgs); prevToCurrentOffsetNormal = transformToOffsetNormal(nextVertex.sub(currentVertex), lineOffsetY, direction); } else { prevToCurrentOffsetNormal = transformToOffsetNormal(prevToCurrent, lineOffsetY, direction); @@ -632,7 +773,7 @@ function placeGlyphAlongLine( if (!offsetPreviousVertex) offsetPreviousVertex = previousVertex.add(prevToCurrentOffsetNormal); - offsetIntersectionPoint = findOffsetIntersectionPoint(currentIndex, prevToCurrentOffsetNormal, currentVertex, lineStartIndex, lineEndIndex, offsetPreviousVertex, lineOffsetY, projectionArgs); + offsetIntersectionPoint = findOffsetIntersectionPoint(currentIndex, prevToCurrentOffsetNormal, currentVertex, lineStartIndex, lineEndIndex, offsetPreviousVertex, lineOffsetY, projectionArgs, syntheticVertexArgs); pathVertices.push(offsetPreviousVertex); currentLineSegment = offsetIntersectionPoint.sub(offsetPreviousVertex); diff --git a/src/symbol/symbol_layout.ts b/src/symbol/symbol_layout.ts index bd37eb423c..dae051741e 100644 --- a/src/symbol/symbol_layout.ts +++ b/src/symbol/symbol_layout.ts @@ -33,6 +33,8 @@ import murmur3 from 'murmurhash-js'; import {getIconPadding, SymbolPadding} from '../style/style_layer/symbol_style_layer'; import {VariableAnchorOffsetCollection} from '@maplibre/maplibre-gl-style-spec'; import {getTextVariableAnchorOffset, evaluateVariableOffset, INVALID_TEXT_OFFSET, TextAnchor, TextAnchorEnum} from '../style/style_layer/variable_text_anchor'; +import {subdivideVertexLine} from '../render/subdivision'; +import type {SubdivisionGranularitySetting} from '../render/subdivision_granularity_settings'; // The symbol layout process needs `text-size` evaluated at up to five different zoom levels, and // `icon-size` at up to three: @@ -77,6 +79,7 @@ export function performSymbolLayout(args: { imagePositions: {[_: string]: ImagePosition}; showCollisionBoxes: boolean; canonical: CanonicalTileID; + subdivisionGranularity: SubdivisionGranularitySetting; }) { args.bucket.createArrays(); @@ -251,7 +254,7 @@ export function performSymbolLayout(args: { const shapedText = getDefaultHorizontalShaping(shapedTextOrientations.horizontal) || shapedTextOrientations.vertical; args.bucket.iconsInText = shapedText ? shapedText.iconsInText : false; if (shapedText || shapedIcon) { - addFeature(args.bucket, feature, shapedTextOrientations, shapedIcon, args.imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, args.canonical); + addFeature(args.bucket, feature, shapedTextOrientations, shapedIcon, args.imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, args.canonical, args.subdivisionGranularity); } } @@ -290,7 +293,9 @@ function addFeature(bucket: SymbolBucket, layoutTextSize: number, layoutIconSize: number, textOffset: [number, number], - isSDFIcon: boolean, canonical: CanonicalTileID) { + isSDFIcon: boolean, + canonical: CanonicalTileID, + subdivisionGranularity: SubdivisionGranularitySetting) { // To reduce the number of labels that jump around when zooming we need // to use a text-size value that is the same for all zoom levels. // bucket calculates text-size at a high zoom level so that all tiles can @@ -330,6 +335,8 @@ function addFeature(bucket: SymbolBucket, } } + const granularity = (canonical) ? subdivisionGranularity.line.getGranularityForZoomLevel(canonical.z) : 1; + const addSymbolAtAnchor = (line, anchor) => { if (anchor.x < 0 || anchor.x >= EXTENT || anchor.y < 0 || anchor.y >= EXTENT) { // Symbol layers are drawn across tile boundaries, We filter out symbols @@ -337,7 +344,6 @@ function addFeature(bucket: SymbolBucket, // to prevent double-drawing symbols. return; } - addSymbol(bucket, anchor, line, shapedTextOrientations, shapedIcon, imageMap, verticallyShapedIcon, bucket.layers[0], bucket.collisionBoxArray, feature.index, feature.sourceLayerIndex, bucket.index, textBoxScale, [textPadding, textPadding, textPadding, textPadding], textAlongLine, textOffset, @@ -347,8 +353,9 @@ function addFeature(bucket: SymbolBucket, if (symbolPlacement === 'line') { for (const line of clipLine(feature.geometry, 0, 0, EXTENT, EXTENT)) { + const subdividedLine = subdivideVertexLine(line, granularity); const anchors = getAnchors( - line, + subdividedLine, symbolMinDistance, textMaxAngle, shapedTextOrientations.vertical || defaultHorizontalShaping, @@ -361,7 +368,7 @@ function addFeature(bucket: SymbolBucket, for (const anchor of anchors) { const shapedText = defaultHorizontalShaping; if (!shapedText || !anchorIsTooClose(bucket, shapedText.text, textRepeatDistance, anchor)) { - addSymbolAtAnchor(line, anchor); + addSymbolAtAnchor(subdividedLine, anchor); } } } @@ -370,15 +377,16 @@ function addFeature(bucket: SymbolBucket, // "lines" with only one point are ignored as in clipLines for (const line of feature.geometry) { if (line.length > 1) { + const subdividedLine = subdivideVertexLine(line, granularity); const anchor = getCenterAnchor( - line, + subdividedLine, textMaxAngle, shapedTextOrientations.vertical || defaultHorizontalShaping, shapedIcon, glyphSize, textMaxBoxScale); if (anchor) { - addSymbolAtAnchor(line, anchor); + addSymbolAtAnchor(subdividedLine, anchor); } } } @@ -386,12 +394,14 @@ function addFeature(bucket: SymbolBucket, for (const polygon of classifyRings(feature.geometry, 0)) { // 16 here represents 2 pixels const poi = findPoleOfInaccessibility(polygon, 16); - addSymbolAtAnchor(polygon[0], new Anchor(poi.x, poi.y, 0)); + const subdividedLine = subdivideVertexLine(polygon[0], granularity, true); + addSymbolAtAnchor(subdividedLine, new Anchor(poi.x, poi.y, 0)); } } else if (feature.type === 'LineString') { // https://github.com/mapbox/mapbox-gl-js/issues/3808 for (const line of feature.geometry) { - addSymbolAtAnchor(line, new Anchor(line[0].x, line[0].y, 0)); + const subdividedLine = subdivideVertexLine(line, granularity); + addSymbolAtAnchor(subdividedLine, new Anchor(subdividedLine[0].x, subdividedLine[0].y, 0)); } } else if (feature.type === 'Point') { for (const points of feature.geometry) { @@ -521,6 +531,7 @@ function addSymbol(bucket: SymbolBucket, isSDFIcon: boolean, canonical: CanonicalTileID, layoutTextSize: number) { + const lineArray = bucket.addToLineVertexArray(anchor, line); let textCollisionFeature, iconCollisionFeature, verticalTextCollisionFeature, verticalIconCollisionFeature; From b408ef32edda10edb1f4252f10309579c4f7f919 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Fri, 3 May 2024 12:32:14 +0200 Subject: [PATCH 03/33] Add forgotten file change from globe branch --- src/data/bucket/symbol_attributes.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/bucket/symbol_attributes.ts b/src/data/bucket/symbol_attributes.ts index 5b7a53cb14..640d88601a 100644 --- a/src/data/bucket/symbol_attributes.ts +++ b/src/data/bucket/symbol_attributes.ts @@ -16,7 +16,8 @@ export const placementOpacityAttributes = createLayout([ export const collisionVertexAttributes = createLayout([ {name: 'a_placed', components: 2, type: 'Uint8'}, - {name: 'a_shift', components: 2, type: 'Float32'} + {name: 'a_shift', components: 2, type: 'Float32'}, + {name: 'a_box_real', components: 2, type: 'Int16'}, ]); export const collisionBox = createLayout([ From 62fe6059b62ffda6fcfb6796ae5c6f5e62c6a559 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Fri, 3 May 2024 12:38:39 +0200 Subject: [PATCH 04/33] Use a reduced version of projection, adapt changes for main branch --- src/data/bucket/symbol_bucket.test.ts | 3 +- src/geo/projection/projection.ts | 76 ++++++++++++++++++++ src/render/draw_collision_debug.ts | 7 +- src/render/draw_symbol.ts | 19 ++--- src/render/program/collision_program.ts | 5 +- src/shaders/collision_box.vertex.glsl | 5 ++ src/shaders/symbol_icon.vertex.glsl | 10 ++- src/shaders/symbol_sdf.vertex.glsl | 11 ++- src/shaders/symbol_text_and_icon.vertex.glsl | 10 ++- src/style/pauseable_placement.ts | 3 +- src/symbol/collision_index.test.ts | 4 +- src/symbol/symbol_layout.ts | 26 +++---- 12 files changed, 120 insertions(+), 59 deletions(-) create mode 100644 src/geo/projection/projection.ts diff --git a/src/data/bucket/symbol_bucket.test.ts b/src/data/bucket/symbol_bucket.test.ts index f94336a569..0f46103357 100644 --- a/src/data/bucket/symbol_bucket.test.ts +++ b/src/data/bucket/symbol_bucket.test.ts @@ -18,6 +18,7 @@ import {IndexedFeature, PopulateParameters} from '../bucket'; import {StyleImage} from '../../style/style_image'; import glyphs from '../../../test/unit/assets/fontstack-glyphs.json' assert {type: 'json'}; import {StyleGlyph} from '../../style/style_glyph'; +import {createProjection} from '../../geo/projection/projection'; // Load a point feature from fixture tile. const vt = new VectorTile(new Protobuf(fs.readFileSync(path.resolve(__dirname, '../../../test/unit/assets/mbsv5-6-18-23.vector.pbf')))); @@ -64,7 +65,7 @@ describe('SymbolBucket', () => { const bucketA = bucketSetup() as any as SymbolBucket; const bucketB = bucketSetup() as any as SymbolBucket; const options = {iconDependencies: {}, glyphDependencies: {}} as PopulateParameters; - const placement = new Placement(transform, undefined as any, 0, true); + const placement = new Placement(transform, createProjection(), undefined as any, 0, true); const tileID = new OverscaledTileID(0, 0, 0, 0, 0); const crossTileSymbolIndex = new CrossTileSymbolIndex(); diff --git a/src/geo/projection/projection.ts b/src/geo/projection/projection.ts new file mode 100644 index 0000000000..6a3fe3debc --- /dev/null +++ b/src/geo/projection/projection.ts @@ -0,0 +1,76 @@ +import type Point from '@mapbox/point-geometry'; +import type {Tile} from '../../source/tile'; +import {pixelsToTileUnits} from '../../source/pixels_to_tile_units'; + +/** + * A greatly reduced version of the `Projection` interface from the globe branch, + * used to port symbol bugfixes over to the main branch. Will be replaced with + * the proper interface once globe is merged. + */ +export type Projection = { + useSpecialProjectionForSymbols: boolean; + isOccluded(_x, _y, _t): boolean; + projectTileCoordinates(_x, _y, _t, _ele): { + point: Point; + signedDistanceFromCamera: number; + isOccluded: boolean; + }; + getPitchedTextCorrection(_transform, _anchor, _tile): number; + translatePosition(transform: { angle: number; zoom: number }, tile: Tile, translate: [number, number], translateAnchor: 'map' | 'viewport'): [number, number]; + getCircleRadiusCorrection(tr: any): number; +}; + +export function createProjection(): Projection { + return { + isOccluded(_x: any, _y: any, _t: any) { + return false; + }, + getPitchedTextCorrection(_transform: any, _anchor: any, _tile: any) { + return 1.0; + }, + get useSpecialProjectionForSymbols() { return false; }, + projectTileCoordinates(_x, _y, _t, _ele) { + // This function should only be used when useSpecialProjectionForSymbols is set to true. + throw new Error('Not implemented.'); + }, + translatePosition(transform, tile, translate, translateAnchor) { + return translatePosition(transform, tile, translate, translateAnchor); + }, + getCircleRadiusCorrection(_: any) { + return 1.0; + } + }; +} + +/** + * Returns a translation in tile units that correctly incorporates the view angle and the *-translate and *-translate-anchor properties. + * @param inViewportPixelUnitsUnits - True when the units accepted by the matrix are in viewport pixels instead of tile units. + * + * Temporarily imported from globe branch. + */ +function translatePosition( + transform: { angle: number; zoom: number }, + tile: Tile, + translate: [number, number], + translateAnchor: 'map' | 'viewport', + inViewportPixelUnitsUnits: boolean = false +): [number, number] { + if (!translate[0] && !translate[1]) return [0, 0]; + + const angle = inViewportPixelUnitsUnits ? + (translateAnchor === 'map' ? transform.angle : 0) : + (translateAnchor === 'viewport' ? -transform.angle : 0); + + if (angle) { + const sinA = Math.sin(angle); + const cosA = Math.cos(angle); + translate = [ + translate[0] * cosA - translate[1] * sinA, + translate[0] * sinA + translate[1] * cosA + ]; + } + + return [ + inViewportPixelUnitsUnits ? translate[0] : pixelsToTileUnits(tile, translate[0], transform.zoom), + inViewportPixelUnitsUnits ? translate[1] : pixelsToTileUnits(tile, translate[1], transform.zoom)]; +} diff --git a/src/render/draw_collision_debug.ts b/src/render/draw_collision_debug.ts index 6826ff0a5e..d22be8f3a6 100644 --- a/src/render/draw_collision_debug.ts +++ b/src/render/draw_collision_debug.ts @@ -27,7 +27,6 @@ let quadTriangles: QuadTriangleArray; export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, layer: StyleLayer, coords: Array, translate: [number, number], translateAnchor: 'map' | 'viewport', isText: boolean) { const context = painter.context; const gl = context.gl; - const projection = painter.style.map.projection; const program = painter.useProgram('collisionBox'); const tileBatches: Array = []; let circleCount = 0; @@ -68,14 +67,13 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l if (!buffers) { continue; } - const projectionData = projection.getProjectionData(coord.canonical, posMatrix); + program.draw(context, gl.LINES, DepthMode.disabled, StencilMode.disabled, painter.colorModeForRenderPass(), CullFaceMode.disabled, - collisionUniformValues(painter.transform), + collisionUniformValues(painter.transform, coord.posMatrix), painter.style.map.terrain && painter.style.map.terrain.getTerrainData(coord), - projectionData, layer.id, buffers.layoutVertexBuffer, buffers.indexBuffer, buffers.segments, null, painter.transform.zoom, null, null, buffers.collisionVertexBuffer); @@ -134,7 +132,6 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l CullFaceMode.disabled, uniforms, painter.style.map.terrain && painter.style.map.terrain.getTerrainData(batch.coord), - null, layer.id, vertexBuffer, indexBuffer, diff --git a/src/render/draw_symbol.ts b/src/render/draw_symbol.ts index de6daedccc..70d5cbef99 100644 --- a/src/render/draw_symbol.ts +++ b/src/render/draw_symbol.ts @@ -37,8 +37,7 @@ import type {Transform} from '../geo/transform'; import type {ColorMode} from '../gl/color_mode'; import type {Program} from './program'; import type {TextAnchor} from '../style/style_layer/variable_text_anchor'; -import {ProjectionData} from './program/projection_program'; -import {Projection} from '../geo/projection/projection'; +import {createProjection, Projection} from '../geo/projection/projection'; type SymbolTileRenderState = { segments: SegmentVector; @@ -48,7 +47,6 @@ type SymbolTileRenderState = { program: Program; buffers: SymbolBuffers; uniformValues: UniformValues; - projectionData: ProjectionData; atlasTexture: Texture; atlasTextureIcon: Texture | null; atlasInterpolation: TextureFilter; @@ -137,7 +135,7 @@ function updateVariableAnchors(coords: Array, translateAnchor: 'map' | 'viewport', variableOffsets: {[_ in CrossTileID]: VariableOffset}) { const transform = painter.transform; - const projection = painter.style.map.projection; + const projection = createProjection(); const rotateWithMap = rotationAlignment === 'map'; const pitchWithMap = pitchAlignment === 'map'; @@ -158,7 +156,7 @@ function updateVariableAnchors(coords: Array, const getElevation = painter.style.map.terrain ? (x: number, y: number) => painter.style.map.terrain.getElevation(coord, x, y) : null; const translation = projection.translatePosition(transform, tile, translate, translateAnchor); updateVariableAnchorsForBucket(bucket, rotateWithMap, pitchWithMap, variableOffsets, - transform, labelPlaneMatrix, coord.posMatrix, tileScale, size, updateTextFitIcon, painter.style.map.projection, translation, coord.toUnwrapped(), getElevation); + transform, labelPlaneMatrix, coord.posMatrix, tileScale, size, updateTextFitIcon, projection, translation, coord.toUnwrapped(), getElevation); } } } @@ -311,7 +309,7 @@ function drawLayerSymbols( const context = painter.context; const gl = context.gl; const tr = painter.transform; - const projection = painter.style.map.projection; + const projection = createProjection(); const rotateWithMap = rotationAlignment === 'map'; const pitchWithMap = pitchAlignment === 'map'; @@ -384,7 +382,6 @@ function drawLayerSymbols( const glCoordMatrixForSymbolPlacement = symbolProjection.getGlCoordMatrix(coord.posMatrix, pitchWithMap, rotateWithMap, painter.transform, s); const translation = projection.translatePosition(painter.transform, tile, translate, translateAnchor); - const projectionData = projection.getProjectionData(coord.canonical, coord.posMatrix); const hasVariableAnchors = hasVariablePlacement && bucket.hasTextData(); const updateTextFitIcon = layer.layout.get('icon-text-fit') !== 'none' && @@ -426,7 +423,6 @@ function drawLayerSymbols( program, buffers, uniformValues, - projectionData, atlasTexture, atlasTextureIcon, atlasInterpolation, @@ -476,11 +472,11 @@ function drawLayerSymbols( const uniformValues = state.uniformValues; if (state.hasHalo) { uniformValues['u_is_halo'] = 1; - drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, uniformValues, state.projectionData, segmentState.terrainData); + drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, uniformValues, segmentState.terrainData); } uniformValues['u_is_halo'] = 0; } - drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, state.uniformValues, state.projectionData, segmentState.terrainData); + drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, state.uniformValues, segmentState.terrainData); } } @@ -494,12 +490,11 @@ function drawSymbolElements( stencilMode: StencilMode, colorMode: Readonly, uniformValues: UniformValues, - projectionData: ProjectionData, terrainData: TerrainData) { const context = painter.context; const gl = context.gl; program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, - uniformValues, terrainData, projectionData, layer.id, buffers.layoutVertexBuffer, + uniformValues, terrainData, layer.id, buffers.layoutVertexBuffer, buffers.indexBuffer, segments, layer.paint, painter.transform.zoom, buffers.programConfigurations.get(layer.id), buffers.dynamicLayoutVertexBuffer, buffers.opacityVertexBuffer); diff --git a/src/render/program/collision_program.ts b/src/render/program/collision_program.ts index 017882aa26..e330562ae8 100644 --- a/src/render/program/collision_program.ts +++ b/src/render/program/collision_program.ts @@ -5,6 +5,7 @@ import type {Transform} from '../../geo/transform'; import {mat4} from 'gl-matrix'; export type CollisionUniformsType = { + 'u_matrix': UniformMatrix4f; 'u_pixel_extrude_scale': Uniform2f; }; @@ -16,6 +17,7 @@ export type CollisionCircleUniformsType = { }; const collisionUniforms = (context: Context, locations: UniformLocations): CollisionUniformsType => ({ + 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), 'u_pixel_extrude_scale': new Uniform2f(context, locations.u_pixel_extrude_scale) }); @@ -26,8 +28,9 @@ const collisionCircleUniforms = (context: Context, locations: UniformLocations): 'u_viewport_size': new Uniform2f(context, locations.u_viewport_size) }); -const collisionUniformValues = (transform: {width: number; height: number}): UniformValues => { +const collisionUniformValues = (transform: {width: number; height: number}, matrix: mat4): UniformValues => { return { + 'u_matrix': matrix, 'u_pixel_extrude_scale': [1.0 / transform.width, 1.0 / transform.height], }; }; diff --git a/src/shaders/collision_box.vertex.glsl b/src/shaders/collision_box.vertex.glsl index 794bbd7ed0..b6d5957bd8 100644 --- a/src/shaders/collision_box.vertex.glsl +++ b/src/shaders/collision_box.vertex.glsl @@ -2,11 +2,16 @@ in vec2 a_anchor_pos; in vec2 a_placed; in vec2 a_box_real; +uniform mat4 u_matrix; uniform vec2 u_pixel_extrude_scale; out float v_placed; out float v_notUsed; +vec4 projectTileWithElevation(vec2 posInTile, float elevation) { + return u_matrix * vec4(posInTile, elevation, 1.0); +} + void main() { gl_Position = projectTileWithElevation(a_anchor_pos, get_elevation(a_anchor_pos)); gl_Position.xy = ((a_box_real + 0.5) * u_pixel_extrude_scale * 2.0 - 1.0) * vec2(1.0, -1.0) * gl_Position.w; diff --git a/src/shaders/symbol_icon.vertex.glsl b/src/shaders/symbol_icon.vertex.glsl index 25db591804..d390a1dfdd 100644 --- a/src/shaders/symbol_icon.vertex.glsl +++ b/src/shaders/symbol_icon.vertex.glsl @@ -27,6 +27,10 @@ uniform float u_pitched_scale; out vec2 v_tex; out float v_fade_opacity; +vec4 projectTileWithElevation(vec2 posInTile, float elevation) { + return u_matrix * vec4(posInTile, elevation, 1.0); +} + #pragma mapbox: define lowp float opacity void main() { @@ -98,12 +102,6 @@ void main() { float z = float(u_pitch_with_map) * projected_pos.z / projected_pos.w; float projectionScaling = 1.0; -#ifdef GLOBE - if(u_pitch_with_map && !u_is_along_line) { - float anchor_pos_tile_y = (u_coord_matrix * vec4(projected_pos.xy / projected_pos.w, z, 1.0)).y; - projectionScaling = mix(projectionScaling, 1.0 / circumferenceRatioAtTileY(anchor_pos_tile_y) * u_pitched_scale, u_projection_transition); - } -#endif vec4 finalPos = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * max(a_minFontScale, fontScale) + a_pxoffset / 16.0) * projectionScaling, z, 1.0); if(u_pitch_with_map) { diff --git a/src/shaders/symbol_sdf.vertex.glsl b/src/shaders/symbol_sdf.vertex.glsl index b13537bcaa..e5ce991675 100644 --- a/src/shaders/symbol_sdf.vertex.glsl +++ b/src/shaders/symbol_sdf.vertex.glsl @@ -34,6 +34,10 @@ uniform float u_pitched_scale; out vec2 v_data0; out vec3 v_data1; +vec4 projectTileWithElevation(vec2 posInTile, float elevation) { + return u_matrix * vec4(posInTile, elevation, 1.0); +} + #pragma mapbox: define highp vec4 fill_color #pragma mapbox: define highp vec4 halo_color #pragma mapbox: define lowp float opacity @@ -120,13 +124,6 @@ void main() { float z = float(u_pitch_with_map) * projected_pos.z / projected_pos.w; float projectionScaling = 1.0; -#ifdef GLOBE - if(u_pitch_with_map && !u_is_along_line) { - // Lines would behave in very weird ways if this adjustment was used for them. - float anchor_pos_tile_y = (u_coord_matrix * vec4(projected_pos.xy / projected_pos.w, z, 1.0)).y; - projectionScaling = mix(projectionScaling, 1.0 / circumferenceRatioAtTileY(anchor_pos_tile_y) * u_pitched_scale, u_projection_transition); - } -#endif vec4 finalPos = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale + a_pxoffset) * projectionScaling, z, 1.0); if(u_pitch_with_map) { diff --git a/src/shaders/symbol_text_and_icon.vertex.glsl b/src/shaders/symbol_text_and_icon.vertex.glsl index 07471f1d2d..f78d6fe7fb 100644 --- a/src/shaders/symbol_text_and_icon.vertex.glsl +++ b/src/shaders/symbol_text_and_icon.vertex.glsl @@ -34,6 +34,10 @@ uniform float u_pitched_scale; out vec4 v_data0; out vec4 v_data1; +vec4 projectTileWithElevation(vec2 posInTile, float elevation) { + return u_matrix * vec4(posInTile, elevation, 1.0); +} + #pragma mapbox: define highp vec4 fill_color #pragma mapbox: define highp vec4 halo_color #pragma mapbox: define lowp float opacity @@ -117,12 +121,6 @@ void main() { float z = float(u_pitch_with_map) * projected_pos.z / projected_pos.w; float projectionScaling = 1.0; -#ifdef GLOBE - if(u_pitch_with_map && !u_is_along_line) { - float anchor_pos_tile_y = (u_coord_matrix * vec4(projected_pos.xy / projected_pos.w, z, 1.0)).y; - projectionScaling = mix(projectionScaling, 1.0 / circumferenceRatioAtTileY(anchor_pos_tile_y) * u_pitched_scale, u_projection_transition); - } -#endif vec4 finalPos = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale) * projectionScaling, z, 1.0); if(u_pitch_with_map) { diff --git a/src/style/pauseable_placement.ts b/src/style/pauseable_placement.ts index bd9f226993..3db76391f9 100644 --- a/src/style/pauseable_placement.ts +++ b/src/style/pauseable_placement.ts @@ -8,6 +8,7 @@ import type {SymbolStyleLayer} from './style_layer/symbol_style_layer'; import type {Tile} from '../source/tile'; import type {BucketPart} from '../symbol/placement'; import {Terrain} from '../render/terrain'; +import {createProjection} from '../geo/projection/projection'; class LayerPlacement { _sortAcrossTiles: boolean; @@ -78,7 +79,7 @@ export class PauseablePlacement { crossSourceCollisions: boolean, prevPlacement?: Placement ) { - this.placement = new Placement(transform, terrain, fadeDuration, crossSourceCollisions, prevPlacement); + this.placement = new Placement(transform, createProjection(), terrain, fadeDuration, crossSourceCollisions, prevPlacement); this._currentPlacementIndex = order.length - 1; this._forceFullPlacement = forceFullPlacement; this._showCollisionBoxes = showCollisionBoxes; diff --git a/src/symbol/collision_index.test.ts b/src/symbol/collision_index.test.ts index 7b0b89e2d2..7f9ffff5db 100644 --- a/src/symbol/collision_index.test.ts +++ b/src/symbol/collision_index.test.ts @@ -2,7 +2,7 @@ import {CollisionIndex} from './collision_index'; import {mat4} from 'gl-matrix'; import {Transform} from '../geo/transform'; -import {MercatorProjection} from '../geo/projection/mercator'; +import {createProjection} from '../geo/projection/projection'; describe('CollisionIndex', () => { @@ -12,7 +12,7 @@ describe('CollisionIndex', () => { const transform = new Transform(0, 22, 0, 60, true); transform.resize(200, 200); - const ci = new CollisionIndex(transform, new MercatorProjection()); + const ci = new CollisionIndex(transform, createProjection()); expect(ci.projectAndGetPerspectiveRatio(posMatrix, x, y, null).point.x).toBeCloseTo(10000212.3456, 10); }); diff --git a/src/symbol/symbol_layout.ts b/src/symbol/symbol_layout.ts index dae051741e..3e1cb3ef5e 100644 --- a/src/symbol/symbol_layout.ts +++ b/src/symbol/symbol_layout.ts @@ -33,8 +33,6 @@ import murmur3 from 'murmurhash-js'; import {getIconPadding, SymbolPadding} from '../style/style_layer/symbol_style_layer'; import {VariableAnchorOffsetCollection} from '@maplibre/maplibre-gl-style-spec'; import {getTextVariableAnchorOffset, evaluateVariableOffset, INVALID_TEXT_OFFSET, TextAnchor, TextAnchorEnum} from '../style/style_layer/variable_text_anchor'; -import {subdivideVertexLine} from '../render/subdivision'; -import type {SubdivisionGranularitySetting} from '../render/subdivision_granularity_settings'; // The symbol layout process needs `text-size` evaluated at up to five different zoom levels, and // `icon-size` at up to three: @@ -79,7 +77,6 @@ export function performSymbolLayout(args: { imagePositions: {[_: string]: ImagePosition}; showCollisionBoxes: boolean; canonical: CanonicalTileID; - subdivisionGranularity: SubdivisionGranularitySetting; }) { args.bucket.createArrays(); @@ -254,7 +251,7 @@ export function performSymbolLayout(args: { const shapedText = getDefaultHorizontalShaping(shapedTextOrientations.horizontal) || shapedTextOrientations.vertical; args.bucket.iconsInText = shapedText ? shapedText.iconsInText : false; if (shapedText || shapedIcon) { - addFeature(args.bucket, feature, shapedTextOrientations, shapedIcon, args.imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, args.canonical, args.subdivisionGranularity); + addFeature(args.bucket, feature, shapedTextOrientations, shapedIcon, args.imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, args.canonical); } } @@ -294,8 +291,7 @@ function addFeature(bucket: SymbolBucket, layoutIconSize: number, textOffset: [number, number], isSDFIcon: boolean, - canonical: CanonicalTileID, - subdivisionGranularity: SubdivisionGranularitySetting) { + canonical: CanonicalTileID) { // To reduce the number of labels that jump around when zooming we need // to use a text-size value that is the same for all zoom levels. // bucket calculates text-size at a high zoom level so that all tiles can @@ -335,8 +331,6 @@ function addFeature(bucket: SymbolBucket, } } - const granularity = (canonical) ? subdivisionGranularity.line.getGranularityForZoomLevel(canonical.z) : 1; - const addSymbolAtAnchor = (line, anchor) => { if (anchor.x < 0 || anchor.x >= EXTENT || anchor.y < 0 || anchor.y >= EXTENT) { // Symbol layers are drawn across tile boundaries, We filter out symbols @@ -353,9 +347,8 @@ function addFeature(bucket: SymbolBucket, if (symbolPlacement === 'line') { for (const line of clipLine(feature.geometry, 0, 0, EXTENT, EXTENT)) { - const subdividedLine = subdivideVertexLine(line, granularity); const anchors = getAnchors( - subdividedLine, + line, symbolMinDistance, textMaxAngle, shapedTextOrientations.vertical || defaultHorizontalShaping, @@ -368,7 +361,7 @@ function addFeature(bucket: SymbolBucket, for (const anchor of anchors) { const shapedText = defaultHorizontalShaping; if (!shapedText || !anchorIsTooClose(bucket, shapedText.text, textRepeatDistance, anchor)) { - addSymbolAtAnchor(subdividedLine, anchor); + addSymbolAtAnchor(line, anchor); } } } @@ -377,16 +370,15 @@ function addFeature(bucket: SymbolBucket, // "lines" with only one point are ignored as in clipLines for (const line of feature.geometry) { if (line.length > 1) { - const subdividedLine = subdivideVertexLine(line, granularity); const anchor = getCenterAnchor( - subdividedLine, + line, textMaxAngle, shapedTextOrientations.vertical || defaultHorizontalShaping, shapedIcon, glyphSize, textMaxBoxScale); if (anchor) { - addSymbolAtAnchor(subdividedLine, anchor); + addSymbolAtAnchor(line, anchor); } } } @@ -394,14 +386,12 @@ function addFeature(bucket: SymbolBucket, for (const polygon of classifyRings(feature.geometry, 0)) { // 16 here represents 2 pixels const poi = findPoleOfInaccessibility(polygon, 16); - const subdividedLine = subdivideVertexLine(polygon[0], granularity, true); - addSymbolAtAnchor(subdividedLine, new Anchor(poi.x, poi.y, 0)); + addSymbolAtAnchor(polygon[0], new Anchor(poi.x, poi.y, 0)); } } else if (feature.type === 'LineString') { // https://github.com/mapbox/mapbox-gl-js/issues/3808 for (const line of feature.geometry) { - const subdividedLine = subdivideVertexLine(line, granularity); - addSymbolAtAnchor(subdividedLine, new Anchor(subdividedLine[0].x, subdividedLine[0].y, 0)); + addSymbolAtAnchor(line, new Anchor(line[0].x, line[0].y, 0)); } } else if (feature.type === 'Point') { for (const points of feature.geometry) { From 06f2f3ec787d581e5d3976aa94401975b0e3aa38 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Fri, 3 May 2024 12:40:31 +0200 Subject: [PATCH 05/33] Update build size --- test/build/min.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/build/min.test.ts b/test/build/min.test.ts index 6943510773..d001056aa2 100644 --- a/test/build/min.test.ts +++ b/test/build/min.test.ts @@ -36,7 +36,7 @@ describe('test min build', () => { const decreaseQuota = 4096; // feel free to update this value after you've checked that it has changed on purpose :-) - const expectedBytes = 776381; + const expectedBytes = 784958; expect(actualBytes - expectedBytes).toBeLessThan(increaseQuota); expect(expectedBytes - actualBytes).toBeLessThan(decreaseQuota); From effb706cb3346c0dbef656cab6b01ac65258ce8b Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Fri, 3 May 2024 12:46:27 +0200 Subject: [PATCH 06/33] Fix failing unit test --- src/render/draw_symbol.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/draw_symbol.test.ts b/src/render/draw_symbol.test.ts index a7f8514243..5f8de55459 100644 --- a/src/render/draw_symbol.test.ts +++ b/src/render/draw_symbol.test.ts @@ -156,7 +156,7 @@ describe('drawSymbol', () => { const spy = jest.spyOn(symbolProjection, 'updateLineLabels'); drawSymbols(painterMock, sourceCacheMock, layer, [tileId], null); - expect(spy.mock.calls[0][9]).toBeFalsy(); // rotateToLine === false + expect(spy.mock.calls[0][8]).toBeFalsy(); // rotateToLine === false }); test('transparent tile optimization should prevent program.draw from being called', () => { From 00aff6d656f86b2efb01d04d4ce7394d58dbcc6d Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Fri, 3 May 2024 15:54:06 +0200 Subject: [PATCH 07/33] Minor refactor --- src/symbol/collision_index.ts | 18 +----------------- src/symbol/placement.ts | 10 +++++++--- src/util/util.ts | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index d1489b8ccf..6c450f4560 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -19,6 +19,7 @@ import type {OverlapMode} from '../style/style_layer/overlap_mode'; import {UnwrappedTileID} from '../source/tile_id'; import {ProjectionArgs} from '../symbol/projection'; import {Projection} from '../geo/projection/projection'; +import {getAABB} from '../util/util'; // When a symbol crosses the edge that causes it to be included in // collision detection, it will cause changes in the symbols around @@ -326,7 +327,6 @@ export class CollisionIndex { isOccluded?: boolean; }>; if (projectionArgs.projection.useSpecialProjectionForSymbols) { - // Globe (or other special projection) is enabled in this branch. const inverseLabelPlaneMatrix = mat4.create(); mat4.invert(inverseLabelPlaneMatrix, projectionArgs.labelPlaneMatrix); screenSpacePath = projectedPath.map(p => { @@ -619,19 +619,3 @@ export class CollisionIndex { }; } } - -function getAABB(points: Array): [number, number, number, number] { - let tlX = Infinity; - let tlY = Infinity; - let brX = -Infinity; - let brY = -Infinity; - - for (const p of points) { - tlX = Math.min(tlX, p.x); - tlY = Math.min(tlY, p.y); - brX = Math.max(brX, p.x); - brY = Math.max(brY, p.y); - } - - return [tlX, tlY, brX, brY]; -} diff --git a/src/symbol/placement.ts b/src/symbol/placement.ts index 0af042a0ed..6506df744e 100644 --- a/src/symbol/placement.ts +++ b/src/symbol/placement.ts @@ -612,7 +612,7 @@ export class Placement { const textBoxScale = symbolInstance.textBoxScale; const variableIconBox = hasIconTextFit && (iconOverlapMode === 'never') ? collisionIconBox : null; - let placedBox: PlacedBox = {box: [], placeable: false, offscreen: false}; + let placedBox: PlacedBox = null; let placementPasses = (textOverlapMode === 'never') ? 1 : 2; let overlapMode: OverlapMode = 'never'; @@ -650,7 +650,7 @@ export class Placement { } } - if (placedBox.box.length === 0) { + if (showCollisionBoxes && !placedBox) { // No box was successfully placed // Generate bounds for a fake centered box, so that we can at least display something for collision debug. const placedFakeGlyphBox = this.collisionIndex.placeCollisionBox( @@ -666,7 +666,11 @@ export class Placement { getElevation, new Point(0, 0) ); - placedBox.box = placedFakeGlyphBox.box; + placedBox = { + box: placedFakeGlyphBox.box, + offscreen: false, + placeable: false + }; } return placedBox; diff --git a/src/util/util.ts b/src/util/util.ts index 3a5ac7bcf4..25568f9fe8 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -4,6 +4,26 @@ import {isOffscreenCanvasDistorted} from './offscreen_canvas_distorted'; import type {Size} from './image'; import type {WorkerGlobalScopeInterface} from './web_worker'; +/** + * For a given collection of 2D points, returns their axis-aligned bounding box, + * in the format [minX, minY, maxX, maxY]. + */ +export function getAABB(points: Array): [number, number, number, number] { + let tlX = Infinity; + let tlY = Infinity; + let brX = -Infinity; + let brY = -Infinity; + + for (const p of points) { + tlX = Math.min(tlX, p.x); + tlY = Math.min(tlY, p.y); + brX = Math.max(brX, p.x); + brY = Math.max(brY, p.y); + } + + return [tlX, tlY, brX, brY]; +} + /** * Given a value `t` that varies between 0 and 1, return * an interpolation function that eases between 0 and 1 in a pleasing From f64af3fe8e8b02fc8cdd3d16d676a38127c9963e Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 09:39:55 +0200 Subject: [PATCH 08/33] Rename ProjectionArgs to SymbolProjectionContext --- src/render/draw_symbol.ts | 16 ++--- src/symbol/collision_index.ts | 26 ++++---- src/symbol/projection.test.ts | 24 +++---- src/symbol/projection.ts | 122 +++++++++++++++++----------------- 4 files changed, 94 insertions(+), 94 deletions(-) diff --git a/src/render/draw_symbol.ts b/src/render/draw_symbol.ts index 70d5cbef99..bdf6580c98 100644 --- a/src/render/draw_symbol.ts +++ b/src/render/draw_symbol.ts @@ -161,23 +161,23 @@ function updateVariableAnchors(coords: Array, } } -function getShiftedAnchor(projectedAnchorPoint: Point, projectionArgs: symbolProjection.ProjectionArgs, rotateWithMap, shift: Point, transformAngle: number, pitchedTextShiftCorrection: number) { +function getShiftedAnchor(projectedAnchorPoint: Point, projectionContext: symbolProjection.SymbolProjectionContext, rotateWithMap, shift: Point, transformAngle: number, pitchedTextShiftCorrection: number) { // Usual case is that we take the projected anchor and add the pixel-based shift // calculated earlier. In the (somewhat weird) case of pitch-aligned text, we add an equivalent // tile-unit based shift to the anchor before projecting to the label plane. - const translatedAnchor = projectionArgs.tileAnchorPoint.add(new Point(projectionArgs.translation[0], projectionArgs.translation[1])); - if (projectionArgs.pitchWithMap) { + const translatedAnchor = projectionContext.tileAnchorPoint.add(new Point(projectionContext.translation[0], projectionContext.translation[1])); + if (projectionContext.pitchWithMap) { let adjustedShift = shift.mult(pitchedTextShiftCorrection); if (!rotateWithMap) { adjustedShift = adjustedShift.rotate(-transformAngle); } const tileAnchorShifted = translatedAnchor.add(adjustedShift); - return symbolProjection.project(tileAnchorShifted, projectionArgs.labelPlaneMatrix, projectionArgs.getElevation).point; + return symbolProjection.project(tileAnchorShifted, projectionContext.labelPlaneMatrix, projectionContext.getElevation).point; } else { if (rotateWithMap) { // Compute the angle with which to rotate the anchor, so that it is aligned with // the map's actual east-west axis. Very similar to what is done in the shader. - const projectedAnchorRight = symbolProjection.projectTileCoordinatesToViewport(projectionArgs.tileAnchorPoint.x + 1, projectionArgs.tileAnchorPoint.y, projectionArgs); + const projectedAnchorRight = symbolProjection.projectTileCoordinatesToViewport(projectionContext.tileAnchorPoint.x + 1, projectionContext.tileAnchorPoint.y, projectionContext); const east = projectedAnchorRight.point.sub(projectedAnchorPoint); const angle = Math.atan(east.y / east.x) + (east.x < 0 ? Math.PI : 0); return projectedAnchorPoint.add(shift.rotate(angle)); @@ -219,7 +219,7 @@ function updateVariableAnchorsForBucket( symbolProjection.hideGlyphs(symbol.numGlyphs, dynamicTextLayoutVertexArray); } else { const tileAnchor = new Point(symbol.anchorX, symbol.anchorY); - const projectionArgs = { + const projectionContext = { getElevation, width: transform.width, height: transform.height, @@ -234,7 +234,7 @@ function updateVariableAnchorsForBucket( }; const projectedAnchor = pitchWithMap ? symbolProjection.project(tileAnchor, posMatrix, getElevation) : - symbolProjection.projectTileCoordinatesToViewport(tileAnchor.x, tileAnchor.y, projectionArgs); + symbolProjection.projectTileCoordinatesToViewport(tileAnchor.x, tileAnchor.y, projectionContext); const perspectiveRatio = symbolProjection.getPerspectiveRatio(transform.cameraToCenterDistance, projectedAnchor.signedDistanceFromCamera); let renderTextSize = evaluateSizeForFeature(bucket.textSizeData, size, symbol) * perspectiveRatio / ONE_EM; if (pitchWithMap) { @@ -246,7 +246,7 @@ function updateVariableAnchorsForBucket( const shift = calculateVariableRenderShift(anchor, width, height, textOffset, textBoxScale, renderTextSize); const pitchedTextCorrection = projection.getPitchedTextCorrection(transform, tileAnchor.add(new Point(translation[0], translation[1])), unwrappedTileID); - const shiftedAnchor = getShiftedAnchor(projectedAnchor.point, projectionArgs, rotateWithMap, shift, transform.angle, pitchedTextCorrection); + const shiftedAnchor = getShiftedAnchor(projectedAnchor.point, projectionContext, rotateWithMap, shift, transform.angle, pitchedTextCorrection); const angle = (bucket.allowVerticalPlacement && symbol.placedOrientation === WritingMode.vertical) ? Math.PI / 2 : 0; for (let g = 0; g < symbol.numGlyphs; g++) { diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index 6c450f4560..c13b2287bb 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -17,7 +17,7 @@ import type { } from '../data/array_types.g'; import type {OverlapMode} from '../style/style_layer/overlap_mode'; import {UnwrappedTileID} from '../source/tile_id'; -import {ProjectionArgs} from '../symbol/projection'; +import {SymbolProjectionContext} from '../symbol/projection'; import {Projection} from '../geo/projection/projection'; import {getAABB} from '../util/util'; @@ -178,7 +178,7 @@ export class CollisionIndex { const lineOffsetX = symbol.lineOffsetX * labelPlaneFontScale; const lineOffsetY = symbol.lineOffsetY * labelPlaneFontScale; - const projectionArgs: ProjectionArgs = { + const projectionContext: SymbolProjectionContext = { getElevation, labelPlaneMatrix, lineVertexArray, @@ -200,7 +200,7 @@ export class CollisionIndex { /*flip*/ false, symbol, false, - projectionArgs); + projectionContext); let collisionDetected = false; let inGrid = false; @@ -229,7 +229,7 @@ export class CollisionIndex { // The path might need to be converted into screen space if a pitched map is used as the label space if (labelToScreenMatrix) { - const screenSpacePath = this.projectPathToScreenSpace(projectedPath, projectionArgs, labelToScreenMatrix); + const screenSpacePath = this.projectPathToScreenSpace(projectedPath, projectionContext, labelToScreenMatrix); // Do not try to place collision circles if even one of the points is behind the camera. // This is a plausible scenario with big camera pitch angles if (screenSpacePath.some(point => point.signedDistanceFromCamera <= 0)) { @@ -320,25 +320,25 @@ export class CollisionIndex { }; } - projectPathToScreenSpace(projectedPath: Array, projectionArgs: ProjectionArgs, labelToScreenMatrix: mat4) { + projectPathToScreenSpace(projectedPath: Array, projectionContext: SymbolProjectionContext, labelToScreenMatrix: mat4) { let screenSpacePath: Array<{ point: Point; signedDistanceFromCamera: number; isOccluded?: boolean; }>; - if (projectionArgs.projection.useSpecialProjectionForSymbols) { + if (projectionContext.projection.useSpecialProjectionForSymbols) { const inverseLabelPlaneMatrix = mat4.create(); - mat4.invert(inverseLabelPlaneMatrix, projectionArgs.labelPlaneMatrix); + mat4.invert(inverseLabelPlaneMatrix, projectionContext.labelPlaneMatrix); screenSpacePath = projectedPath.map(p => { - const backProjected = projection.project(p, inverseLabelPlaneMatrix, projectionArgs.getElevation); + const backProjected = projection.project(p, inverseLabelPlaneMatrix, projectionContext.getElevation); const projected = this.mapProjection.projectTileCoordinates( backProjected.point.x, backProjected.point.y, - projectionArgs.unwrappedTileID, - projectionArgs.getElevation + projectionContext.unwrappedTileID, + projectionContext.getElevation ); - projected.point.x = (projected.point.x * 0.5 + 0.5) * projectionArgs.width; - projected.point.y = (-projected.point.y * 0.5 + 0.5) * projectionArgs.height; + projected.point.x = (projected.point.x * 0.5 + 0.5) * projectionContext.width; + projected.point.y = (-projected.point.y * 0.5 + 0.5) * projectionContext.height; return projected; }); // We don't want to generate screenspace collision circles for parts of the line that @@ -362,7 +362,7 @@ export class CollisionIndex { } screenSpacePath = screenSpacePath.slice(longestUnoccludedStart, longestUnoccludedStart + longestUnoccludedLength); } else { - screenSpacePath = projectedPath.map(p => projection.project(p, labelToScreenMatrix, projectionArgs.getElevation)); + screenSpacePath = projectedPath.map(p => projection.project(p, labelToScreenMatrix, projectionContext.getElevation)); } return screenSpacePath; } diff --git a/src/symbol/projection.test.ts b/src/symbol/projection.test.ts index 5b3699b8c1..a29a5e87dc 100644 --- a/src/symbol/projection.test.ts +++ b/src/symbol/projection.test.ts @@ -1,4 +1,4 @@ -import {ProjectionArgs, ProjectionSyntheticVertexArgs, findOffsetIntersectionPoint, project, projectVertexToViewport, transformToOffsetNormal} from './projection'; +import {SymbolProjectionContext, ProjectionSyntheticVertexArgs, findOffsetIntersectionPoint, project, projectVertexToViewport, transformToOffsetNormal} from './projection'; import Point from '@mapbox/point-geometry'; import {mat4} from 'gl-matrix'; @@ -20,7 +20,7 @@ describe('Vertex to viewport projection', () => { lineVertexArray.emplaceBack(10, 0, 10); test('projecting with null matrix', () => { - const projectionArgs: ProjectionArgs = { + const projectionContext: SymbolProjectionContext = { projectionCache: {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}, lineVertexArray, labelPlaneMatrix: mat4.create(), @@ -42,9 +42,9 @@ describe('Vertex to viewport projection', () => { absOffsetX: 0 }; - const first = projectVertexToViewport(0, projectionArgs, syntheticVertexArgs); - const second = projectVertexToViewport(1, projectionArgs, syntheticVertexArgs); - const third = projectVertexToViewport(2, projectionArgs, syntheticVertexArgs); + const first = projectVertexToViewport(0, projectionContext, syntheticVertexArgs); + const second = projectVertexToViewport(1, projectionContext, syntheticVertexArgs); + const third = projectVertexToViewport(2, projectionContext, syntheticVertexArgs); expect(first.x).toBeCloseTo(-10); expect(second.x).toBeCloseTo(0); expect(third.x).toBeCloseTo(10); @@ -63,7 +63,7 @@ describe('Find offset line intersections', () => { lineVertexArray.emplaceBack(0, 0, 0); lineVertexArray.emplaceBack(10, 0, 10); - const projectionArgs: ProjectionArgs = { + const projectionContext: SymbolProjectionContext = { projectionCache: {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}, lineVertexArray, labelPlaneMatrix: mat4.create(), @@ -92,7 +92,7 @@ describe('Find offset line intersections', () => { ________| | __________| <- origin */ - projectionArgs.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; + projectionContext.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; const lineOffsetY = 1; const prevToCurrent = new Point(10, 0); @@ -107,7 +107,7 @@ describe('Find offset line intersections', () => { 3, new Point(-10, 1), lineOffsetY, - projectionArgs, + projectionContext, syntheticVertexArgs ); expect(intersectionPoint.y).toBeCloseTo(1); @@ -122,7 +122,7 @@ describe('Find offset line intersections', () => { __________| | ____________| */ - projectionArgs.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; + projectionContext.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; const lineOffsetY = -1; const prevToCurrent = new Point(10, 0); @@ -137,7 +137,7 @@ describe('Find offset line intersections', () => { 3, new Point(-10, -1), lineOffsetY, - projectionArgs, + projectionContext, syntheticVertexArgs ); expect(intersectionPoint.y).toBeCloseTo(-1); @@ -149,7 +149,7 @@ describe('Find offset line intersections', () => { ______._____ ______|_____ */ - projectionArgs.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; + projectionContext.projectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; const lineOffsetY = 1; const prevToCurrent = new Point(10, 0); @@ -161,7 +161,7 @@ describe('Find offset line intersections', () => { 5, new Point(-10, 1), lineOffsetY, - projectionArgs, + projectionContext, syntheticVertexArgs ); expect(intersectionPoint.x).toBeCloseTo(0); diff --git a/src/symbol/projection.ts b/src/symbol/projection.ts index 45ee10ee7f..cdc51481d2 100644 --- a/src/symbol/projection.ts +++ b/src/symbol/projection.ts @@ -216,7 +216,7 @@ function updateLineLabels(bucket: SymbolBucket, const tileAnchorPoint = new Point(symbol.anchorX, symbol.anchorY); const projectionCache: ProjectionCache = {projections: {}, offsets: {}, cachedAnchorPoint: undefined, anyProjectionOccluded: false}; - const projectionArgs: ProjectionArgs = { + const projectionContext: SymbolProjectionContext = { getElevation, labelPlaneMatrix, lineVertexArray, @@ -230,14 +230,14 @@ function updateLineLabels(bucket: SymbolBucket, translation }; - const placeUnflipped: any = placeGlyphsAlongLine(projectionArgs, symbol, pitchScaledFontSize, false /*unflipped*/, keepUpright, posMatrix, glCoordMatrix, + const placeUnflipped: any = placeGlyphsAlongLine(projectionContext, symbol, pitchScaledFontSize, false /*unflipped*/, keepUpright, posMatrix, glCoordMatrix, bucket.glyphOffsetArray, dynamicLayoutVertexArray, aspectRatio, rotateToLine); useVertical = placeUnflipped.useVertical; if (placeUnflipped.notEnoughRoom || useVertical || (placeUnflipped.needsFlipping && - (placeGlyphsAlongLine(projectionArgs, symbol, pitchScaledFontSize, true /*flipped*/, keepUpright, posMatrix, glCoordMatrix, + (placeGlyphsAlongLine(projectionContext, symbol, pitchScaledFontSize, true /*flipped*/, keepUpright, posMatrix, glCoordMatrix, bucket.glyphOffsetArray, dynamicLayoutVertexArray, aspectRatio, rotateToLine) as any).notEnoughRoom)) { hideGlyphs(symbol.numGlyphs, dynamicLayoutVertexArray); } @@ -275,7 +275,7 @@ function placeFirstAndLastGlyph( flip: boolean, symbol: any, rotateToLine: boolean, - projectionArgs: ProjectionArgs): FirstAndLastGlyphPlacement { + projectionContext: SymbolProjectionContext): FirstAndLastGlyphPlacement { const glyphEndIndex = symbol.glyphStartIndex + symbol.numGlyphs; const lineStartIndex = symbol.lineStartIndex; const lineEndIndex = symbol.lineStartIndex + symbol.lineLength; @@ -284,16 +284,16 @@ function placeFirstAndLastGlyph( const lastGlyphOffset = glyphOffsetArray.getoffsetX(glyphEndIndex - 1); const firstPlacedGlyph = placeGlyphAlongLine(fontScale * firstGlyphOffset, lineOffsetX, lineOffsetY, flip, symbol.segment, - lineStartIndex, lineEndIndex, projectionArgs, rotateToLine); + lineStartIndex, lineEndIndex, projectionContext, rotateToLine); if (!firstPlacedGlyph) return null; const lastPlacedGlyph = placeGlyphAlongLine(fontScale * lastGlyphOffset, lineOffsetX, lineOffsetY, flip, symbol.segment, - lineStartIndex, lineEndIndex, projectionArgs, rotateToLine); + lineStartIndex, lineEndIndex, projectionContext, rotateToLine); if (!lastPlacedGlyph) return null; - if (projectionArgs.projectionCache.anyProjectionOccluded) { + if (projectionContext.projectionCache.anyProjectionOccluded) { return null; } @@ -329,7 +329,7 @@ function requiresOrientationChange(writingMode, firstPoint, lastPoint, aspectRat * Finally, add resulting glyph position calculations to dynamicLayoutVertexArray for * upload to the GPU */ -function placeGlyphsAlongLine(projectionArgs: ProjectionArgs, symbol, fontSize, flip, keepUpright, posMatrix, glCoordMatrix, glyphOffsetArray, dynamicLayoutVertexArray, aspectRatio, rotateToLine) { +function placeGlyphsAlongLine(projectionContext: SymbolProjectionContext, symbol, fontSize, flip, keepUpright, posMatrix, glCoordMatrix, glyphOffsetArray, dynamicLayoutVertexArray, aspectRatio, rotateToLine) { const fontScale = fontSize / 24; const lineOffsetX = symbol.lineOffsetX * fontScale; const lineOffsetY = symbol.lineOffsetY * fontScale; @@ -342,12 +342,12 @@ function placeGlyphsAlongLine(projectionArgs: ProjectionArgs, symbol, fontSize, // Place the first and the last glyph in the label first, so we can figure out // the overall orientation of the label and determine whether it needs to be flipped in keepUpright mode - const firstAndLastGlyph = placeFirstAndLastGlyph(fontScale, glyphOffsetArray, lineOffsetX, lineOffsetY, flip, symbol, rotateToLine, projectionArgs); + const firstAndLastGlyph = placeFirstAndLastGlyph(fontScale, glyphOffsetArray, lineOffsetX, lineOffsetY, flip, symbol, rotateToLine, projectionContext); if (!firstAndLastGlyph) { return {notEnoughRoom: true}; } - const firstPoint = project(firstAndLastGlyph.first.point, glCoordMatrix, projectionArgs.getElevation).point; - const lastPoint = project(firstAndLastGlyph.last.point, glCoordMatrix, projectionArgs.getElevation).point; + const firstPoint = project(firstAndLastGlyph.first.point, glCoordMatrix, projectionContext.getElevation).point; + const lastPoint = project(firstAndLastGlyph.last.point, glCoordMatrix, projectionContext.getElevation).point; if (keepUpright && !flip) { const orientationChange = requiresOrientationChange(symbol.writingMode, firstPoint, lastPoint, aspectRatio); @@ -360,23 +360,23 @@ function placeGlyphsAlongLine(projectionArgs: ProjectionArgs, symbol, fontSize, for (let glyphIndex = symbol.glyphStartIndex + 1; glyphIndex < glyphEndIndex - 1; glyphIndex++) { // Since first and last glyph fit on the line, we're sure that the rest of the glyphs can be placed placedGlyphs.push(placeGlyphAlongLine(fontScale * glyphOffsetArray.getoffsetX(glyphIndex), lineOffsetX, lineOffsetY, flip, symbol.segment, - lineStartIndex, lineEndIndex, projectionArgs, rotateToLine)); + lineStartIndex, lineEndIndex, projectionContext, rotateToLine)); } placedGlyphs.push(firstAndLastGlyph.last); } else { // Only a single glyph to place // So, determine whether to flip based on projected angle of the line segment it's on if (keepUpright && !flip) { - const a = project(projectionArgs.tileAnchorPoint, posMatrix, projectionArgs.getElevation).point; + const a = project(projectionContext.tileAnchorPoint, posMatrix, projectionContext.getElevation).point; const tileVertexIndex = (symbol.lineStartIndex + symbol.segment + 1); - const tileSegmentEnd = new Point(projectionArgs.lineVertexArray.getx(tileVertexIndex), projectionArgs.lineVertexArray.gety(tileVertexIndex)); - const projectedVertex = project(tileSegmentEnd, posMatrix, projectionArgs.getElevation); + const tileSegmentEnd = new Point(projectionContext.lineVertexArray.getx(tileVertexIndex), projectionContext.lineVertexArray.gety(tileVertexIndex)); + const projectedVertex = project(tileSegmentEnd, posMatrix, projectionContext.getElevation); // We know the anchor will be in the viewport, but the end of the line segment may be // behind the plane of the camera, in which case we can use a point at any arbitrary (closer) // point on the segment. const b = (projectedVertex.signedDistanceFromCamera > 0) ? projectedVertex.point : - projectTruncatedLineSegmentToLabelPlane(projectionArgs.tileAnchorPoint, tileSegmentEnd, a, 1, posMatrix, projectionArgs); + projectTruncatedLineSegmentToLabelPlane(projectionContext.tileAnchorPoint, tileSegmentEnd, a, 1, posMatrix, projectionContext); const orientationChange = requiresOrientationChange(symbol.writingMode, a, b, aspectRatio); if (orientationChange) { @@ -384,8 +384,8 @@ function placeGlyphsAlongLine(projectionArgs: ProjectionArgs, symbol, fontSize, } } const singleGlyph = placeGlyphAlongLine(fontScale * glyphOffsetArray.getoffsetX(symbol.glyphStartIndex), lineOffsetX, lineOffsetY, flip, symbol.segment, - symbol.lineStartIndex, symbol.lineStartIndex + symbol.lineLength, projectionArgs, rotateToLine); - if (!singleGlyph || projectionArgs.projectionCache.anyProjectionOccluded) + symbol.lineStartIndex, symbol.lineStartIndex + symbol.lineLength, projectionContext, rotateToLine); + if (!singleGlyph || projectionContext.projectionCache.anyProjectionOccluded) return {notEnoughRoom: true}; placedGlyphs = [singleGlyph]; @@ -406,10 +406,10 @@ function placeGlyphsAlongLine(projectionArgs: ProjectionArgs, symbol, fontSize, * @param previousProjectedPoint - Projection of `previousTilePoint` into *label plane*. * @param minimumLength - Distance in the projected space along the line for the returned point. * @param projectionMatrix - Matrix to use during projection. - * @param projectionArgs - Projection args, used only for terrain's `getElevation`. + * @param projectionContext - Projection context, used only for terrain's `getElevation`. */ -function projectTruncatedLineSegmentToLabelPlane(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4, projectionArgs: ProjectionArgs) { - return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, projectionMatrix, projectionArgs); +function projectTruncatedLineSegmentToLabelPlane(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4, projectionContext: SymbolProjectionContext) { + return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, projectionMatrix, projectionContext); } /** @@ -420,10 +420,10 @@ function projectTruncatedLineSegmentToLabelPlane(previousTilePoint: Point, curre * @param currentTilePoint - Line end point, in tile coordinates. * @param previousProjectedPoint - Projection of `previousTilePoint` into *viewport*. * @param minimumLength - Distance in the projected space along the line for the returned point. - * @param projectionArgs - Projection args, used for terrain's `getElevation`, and either the `labelPlaneMatrix` or the map's special projection (mostly for globe). + * @param projectionContext - Projection context, used for terrain's `getElevation`, and either the `labelPlaneMatrix` or the map's special projection (mostly for globe). */ -function projectTruncatedLineSegmentToViewport(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionArgs: ProjectionArgs) { - return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, undefined, projectionArgs); +function projectTruncatedLineSegmentToViewport(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionContext: SymbolProjectionContext) { + return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, undefined, projectionContext); } /** @@ -435,7 +435,7 @@ function projectTruncatedLineSegmentToViewport(previousTilePoint: Point, current * Otherwise, either projects to label plane using the `labelPlaneMatrix` * or projects to viewport using the special map projection (mostly for globe) by calling {@link projectTileCoordinatesToViewport}. */ -function projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4 | undefined, projectionArgs: ProjectionArgs) { +function projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4 | undefined, projectionContext: SymbolProjectionContext) { // We are assuming "previousTilePoint" won't project to a point within one unit of the camera plane // If it did, that would mean our label extended all the way out from within the viewport to a (very distant) // point near the plane of the camera. We wouldn't be able to render the label anyway once it crossed the @@ -443,9 +443,9 @@ function projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint: const unitVertexToBeProjected = previousTilePoint.add(previousTilePoint.sub(currentTilePoint)._unit()); let projectedUnitVertex; if (projectionMatrix !== undefined) { - projectedUnitVertex = project(unitVertexToBeProjected, projectionMatrix, projectionArgs.getElevation).point; + projectedUnitVertex = project(unitVertexToBeProjected, projectionMatrix, projectionContext.getElevation).point; } else { - projectedUnitVertex = projectTileCoordinatesToViewport(unitVertexToBeProjected.x, unitVertexToBeProjected.y, projectionArgs).point; + projectedUnitVertex = projectTileCoordinatesToViewport(unitVertexToBeProjected.x, unitVertexToBeProjected.y, projectionContext).point; } const projectedUnitSegment = previousProjectedPoint.sub(projectedUnitVertex); return previousProjectedPoint.add(projectedUnitSegment._mult(minimumLength / projectedUnitSegment.mag())); @@ -486,7 +486,7 @@ type ProjectionCache = { * @internal * Arguments necessary to project a vertex to the label plane */ -export type ProjectionArgs = { +export type SymbolProjectionContext = { /** * Used to cache results, save cost if projecting the same vertex multiple times */ @@ -543,20 +543,20 @@ export type ProjectionSyntheticVertexArgs = { /** * Transform a vertex from tile coordinates to label plane coordinates * @param index - index of vertex to project - * @param projectionArgs - necessary data to project a vertex + * @param projectionContext - necessary data to project a vertex * @returns the vertex projected to the label plane */ -function projectLineVertexToViewport(index: number, projectionArgs: ProjectionArgs, syntheticVertexArgs: ProjectionSyntheticVertexArgs): Point { - const cache = projectionArgs.projectionCache; +function projectLineVertexToViewport(index: number, projectionContext: SymbolProjectionContext, syntheticVertexArgs: ProjectionSyntheticVertexArgs): Point { + const cache = projectionContext.projectionCache; if (cache.projections[index]) { return cache.projections[index]; } const currentVertex = new Point( - projectionArgs.lineVertexArray.getx(index), - projectionArgs.lineVertexArray.gety(index)); + projectionContext.lineVertexArray.getx(index), + projectionContext.lineVertexArray.gety(index)); - const projection = projectTileCoordinatesToViewport(currentVertex.x, currentVertex.y, projectionArgs); + const projection = projectTileCoordinatesToViewport(currentVertex.x, currentVertex.y, projectionContext); if (projection.signedDistanceFromCamera > 0) { cache.projections[index] = projection.point; @@ -568,28 +568,28 @@ function projectLineVertexToViewport(index: number, projectionArgs: ProjectionAr // Instead, we'll create a vertex along the line that's far enough to include the glyph const previousLineVertexIndex = index - syntheticVertexArgs.direction; const previousTilePoint = syntheticVertexArgs.distanceFromAnchor === 0 ? - projectionArgs.tileAnchorPoint : - new Point(projectionArgs.lineVertexArray.getx(previousLineVertexIndex), projectionArgs.lineVertexArray.gety(previousLineVertexIndex)); + projectionContext.tileAnchorPoint : + new Point(projectionContext.lineVertexArray.getx(previousLineVertexIndex), projectionContext.lineVertexArray.gety(previousLineVertexIndex)); // Don't cache because the new vertex might not be far enough out for future glyphs on the same segment const minimumLength = syntheticVertexArgs.absOffsetX - syntheticVertexArgs.distanceFromAnchor + 1; - return projectTruncatedLineSegmentToViewport(previousTilePoint, currentVertex, syntheticVertexArgs.previousVertex, minimumLength, projectionArgs); + return projectTruncatedLineSegmentToViewport(previousTilePoint, currentVertex, syntheticVertexArgs.previousVertex, minimumLength, projectionContext); } -function projectTileCoordinatesToViewport(x: number, y: number, projectionArgs: ProjectionArgs): { +function projectTileCoordinatesToViewport(x: number, y: number, projectionContext: SymbolProjectionContext): { point: Point; signedDistanceFromCamera: number; isOccluded: boolean; } { - const translatedX = x + projectionArgs.translation[0]; - const translatedY = y + projectionArgs.translation[1]; + const translatedX = x + projectionContext.translation[0]; + const translatedY = y + projectionContext.translation[1]; let projection; - if (!projectionArgs.pitchWithMap && projectionArgs.projection.useSpecialProjectionForSymbols) { - projection = projectionArgs.projection.projectTileCoordinates(translatedX, translatedY, projectionArgs.unwrappedTileID, projectionArgs.getElevation); - projection.point.x = (projection.point.x * 0.5 + 0.5) * projectionArgs.width; - projection.point.y = (-projection.point.y * 0.5 + 0.5) * projectionArgs.height; + if (!projectionContext.pitchWithMap && projectionContext.projection.useSpecialProjectionForSymbols) { + projection = projectionContext.projection.projectTileCoordinates(translatedX, translatedY, projectionContext.unwrappedTileID, projectionContext.getElevation); + projection.point.x = (projection.point.x * 0.5 + 0.5) * projectionContext.width; + projection.point.y = (-projection.point.y * 0.5 + 0.5) * projectionContext.height; } else { - projection = project(new Point(translatedX, translatedY), projectionArgs.labelPlaneMatrix, projectionArgs.getElevation); + projection = project(new Point(translatedX, translatedY), projectionContext.labelPlaneMatrix, projectionContext.getElevation); projection.isOccluded = false; } return projection; @@ -617,7 +617,7 @@ function transformToOffsetNormal(segmentVector: Point, offset: number, direction * @param lineEndIndex - End index for the line this label is on * @param offsetPreviousVertex - The previous vertex projected to the label plane, and then offset along the previous segments normal * @param lineOffsetY - Magnitude of the offset - * @param projectionArgs - Necessary data for tile-to-label-plane projection + * @param projectionContext - Necessary data for tile-to-label-plane projection * @returns The point at which the current and next line segments intersect, once offset and extended/shrunk to their meeting point */ function findOffsetIntersectionPoint( @@ -628,30 +628,30 @@ function findOffsetIntersectionPoint( lineEndIndex: number, offsetPreviousVertex: Point, lineOffsetY: number, - projectionArgs: ProjectionArgs, + projectionContext: SymbolProjectionContext, syntheticVertexArgs: ProjectionSyntheticVertexArgs) { - if (projectionArgs.projectionCache.offsets[index]) { - return projectionArgs.projectionCache.offsets[index]; + if (projectionContext.projectionCache.offsets[index]) { + return projectionContext.projectionCache.offsets[index]; } const offsetCurrentVertex = currentVertex.add(prevToCurrentOffsetNormal); if (index + syntheticVertexArgs.direction < lineStartIndex || index + syntheticVertexArgs.direction >= lineEndIndex) { // This is the end of the line, no intersection to calculate - projectionArgs.projectionCache.offsets[index] = offsetCurrentVertex; + projectionContext.projectionCache.offsets[index] = offsetCurrentVertex; return offsetCurrentVertex; } // Offset the vertices for the next segment - const nextVertex = projectLineVertexToViewport(index + syntheticVertexArgs.direction, projectionArgs, syntheticVertexArgs); + const nextVertex = projectLineVertexToViewport(index + syntheticVertexArgs.direction, projectionContext, syntheticVertexArgs); const currentToNextOffsetNormal = transformToOffsetNormal(nextVertex.sub(currentVertex), lineOffsetY, syntheticVertexArgs.direction); const offsetNextSegmentBegin = currentVertex.add(currentToNextOffsetNormal); const offsetNextSegmentEnd = nextVertex.add(currentToNextOffsetNormal); // find the intersection of these two lines // if the lines are parallel, offsetCurrent/offsetNextBegin will touch - projectionArgs.projectionCache.offsets[index] = findLineIntersection(offsetPreviousVertex, offsetCurrentVertex, offsetNextSegmentBegin, offsetNextSegmentEnd) || offsetCurrentVertex; + projectionContext.projectionCache.offsets[index] = findLineIntersection(offsetPreviousVertex, offsetCurrentVertex, offsetNextSegmentBegin, offsetNextSegmentEnd) || offsetCurrentVertex; - return projectionArgs.projectionCache.offsets[index]; + return projectionContext.projectionCache.offsets[index]; } /** @@ -685,7 +685,7 @@ function placeGlyphAlongLine( anchorSegment: number, lineStartIndex: number, lineEndIndex: number, - projectionArgs: ProjectionArgs, + projectionContext: SymbolProjectionContext, rotateToLine: boolean): PlacedGlyph | null { const combinedOffsetX = flip ? @@ -711,11 +711,11 @@ function placeGlyphAlongLine( // Project anchor point to proper label plane and cache it let anchorPoint: Point; - if (projectionArgs.projectionCache.cachedAnchorPoint) { - anchorPoint = projectionArgs.projectionCache.cachedAnchorPoint; + if (projectionContext.projectionCache.cachedAnchorPoint) { + anchorPoint = projectionContext.projectionCache.cachedAnchorPoint; } else { - anchorPoint = projectTileCoordinatesToViewport(projectionArgs.tileAnchorPoint.x, projectionArgs.tileAnchorPoint.y, projectionArgs).point; - projectionArgs.projectionCache.cachedAnchorPoint = anchorPoint; + anchorPoint = projectTileCoordinatesToViewport(projectionContext.tileAnchorPoint.x, projectionContext.tileAnchorPoint.y, projectionContext).point; + projectionContext.projectionCache.cachedAnchorPoint = anchorPoint; } let currentVertex = anchorPoint; @@ -752,7 +752,7 @@ function placeGlyphAlongLine( }; // find next vertex in viewport space - currentVertex = projectLineVertexToViewport(currentIndex, projectionArgs, syntheticVertexArgs); + currentVertex = projectLineVertexToViewport(currentIndex, projectionContext, syntheticVertexArgs); if (lineOffsetY === 0) { // Store vertices for collision detection and update current segment geometry pathVertices.push(previousVertex); @@ -764,7 +764,7 @@ function placeGlyphAlongLine( if (prevToCurrent.mag() === 0) { // We are starting with our anchor point directly on the vertex, so look one vertex ahead // to calculate a normal - const nextVertex = projectLineVertexToViewport(currentIndex + direction, projectionArgs, syntheticVertexArgs); + const nextVertex = projectLineVertexToViewport(currentIndex + direction, projectionContext, syntheticVertexArgs); prevToCurrentOffsetNormal = transformToOffsetNormal(nextVertex.sub(currentVertex), lineOffsetY, direction); } else { prevToCurrentOffsetNormal = transformToOffsetNormal(prevToCurrent, lineOffsetY, direction); @@ -773,7 +773,7 @@ function placeGlyphAlongLine( if (!offsetPreviousVertex) offsetPreviousVertex = previousVertex.add(prevToCurrentOffsetNormal); - offsetIntersectionPoint = findOffsetIntersectionPoint(currentIndex, prevToCurrentOffsetNormal, currentVertex, lineStartIndex, lineEndIndex, offsetPreviousVertex, lineOffsetY, projectionArgs, syntheticVertexArgs); + offsetIntersectionPoint = findOffsetIntersectionPoint(currentIndex, prevToCurrentOffsetNormal, currentVertex, lineStartIndex, lineEndIndex, offsetPreviousVertex, lineOffsetY, projectionContext, syntheticVertexArgs); pathVertices.push(offsetPreviousVertex); currentLineSegment = offsetIntersectionPoint.sub(offsetPreviousVertex); From 02c409ee3c7aa3ec943ea9ff619e74416e87414f Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 11:29:56 +0200 Subject: [PATCH 09/33] Refactor posMatrix in draw_collision_debug --- src/render/draw_collision_debug.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/render/draw_collision_debug.ts b/src/render/draw_collision_debug.ts index d22be8f3a6..3a2bd69285 100644 --- a/src/render/draw_collision_debug.ts +++ b/src/render/draw_collision_debug.ts @@ -37,7 +37,6 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l const tile = sourceCache.getTile(coord); const bucket: SymbolBucket = (tile.getBucket(layer) as any); if (!bucket) continue; - const posMatrix = coord.posMatrix; const buffers = isText ? bucket.textCollisionBox : bucket.iconCollisionBox; // Get collision circle data of this bucket const circleArray: Array = bucket.collisionCircleArray; @@ -46,7 +45,6 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l // This might vary between buckets as the symbol placement is a continuous process. This matrix is // required for transforming points from previous screen space to the current one const invTransform = mat4.create(); - const transform = posMatrix; // Ignore translation mat4.mul(invTransform, bucket.placementInvProjMatrix, painter.transform.glCoordMatrix); mat4.mul(invTransform, invTransform, bucket.placementViewportMatrix); @@ -54,7 +52,7 @@ export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, l tileBatches.push({ circleArray, circleOffset, - transform, + transform: coord.posMatrix, // Ignore translation invTransform, coord }); From 6cc4e1f9a21a1e9ce7f1b4de74cac2fa4e488f68 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 11:49:55 +0200 Subject: [PATCH 10/33] Add "_" to projectTruncatedLineSegment function name --- src/symbol/projection.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/symbol/projection.ts b/src/symbol/projection.ts index cdc51481d2..3e656ce6f1 100644 --- a/src/symbol/projection.ts +++ b/src/symbol/projection.ts @@ -409,7 +409,7 @@ function placeGlyphsAlongLine(projectionContext: SymbolProjectionContext, symbol * @param projectionContext - Projection context, used only for terrain's `getElevation`. */ function projectTruncatedLineSegmentToLabelPlane(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4, projectionContext: SymbolProjectionContext) { - return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, projectionMatrix, projectionContext); + return _projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, projectionMatrix, projectionContext); } /** @@ -423,7 +423,7 @@ function projectTruncatedLineSegmentToLabelPlane(previousTilePoint: Point, curre * @param projectionContext - Projection context, used for terrain's `getElevation`, and either the `labelPlaneMatrix` or the map's special projection (mostly for globe). */ function projectTruncatedLineSegmentToViewport(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionContext: SymbolProjectionContext) { - return projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, undefined, projectionContext); + return _projectTruncatedLineSegment(previousTilePoint, currentTilePoint, previousProjectedPoint, minimumLength, undefined, projectionContext); } /** @@ -435,7 +435,7 @@ function projectTruncatedLineSegmentToViewport(previousTilePoint: Point, current * Otherwise, either projects to label plane using the `labelPlaneMatrix` * or projects to viewport using the special map projection (mostly for globe) by calling {@link projectTileCoordinatesToViewport}. */ -function projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4 | undefined, projectionContext: SymbolProjectionContext) { +function _projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint: Point, previousProjectedPoint: Point, minimumLength: number, projectionMatrix: mat4 | undefined, projectionContext: SymbolProjectionContext) { // We are assuming "previousTilePoint" won't project to a point within one unit of the camera plane // If it did, that would mean our label extended all the way out from within the viewport to a (very distant) // point near the plane of the camera. We wouldn't be able to render the label anyway once it crossed the From 505ce4a848d92363ac04c904fc03642b79678567 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 12:16:14 +0200 Subject: [PATCH 11/33] Refactor collision box passing into a function --- src/symbol/collision_index.ts | 12 ++-- src/symbol/placement.ts | 118 +++++++++++++++++----------------- 2 files changed, 67 insertions(+), 63 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index c13b2287bb..3d38638528 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -29,6 +29,12 @@ import {getAABB} from '../util/util'; // stability, but it's expensive. export const viewportPadding = 100; +export type PlacedCircles = { + circles: Array; + offscreen: boolean; + collisionDetected: boolean; +}; + export type PlacedBox = { box: Array; placeable: boolean; @@ -162,11 +168,7 @@ export class CollisionIndex { textPixelPadding: number, translation: [number, number], getElevation: (x: number, y: number) => number - ): { - circles: Array; - offscreen: boolean; - collisionDetected: boolean; - } { + ): PlacedCircles { const placedCollisionCircles = []; const tileUnitAnchorPoint = new Point(symbol.anchorX, symbol.anchorY); diff --git a/src/symbol/placement.ts b/src/symbol/placement.ts index 6506df744e..de7f9af314 100644 --- a/src/symbol/placement.ts +++ b/src/symbol/placement.ts @@ -1,5 +1,5 @@ import {CollisionIndex, viewportPadding} from './collision_index'; -import type {FeatureKey, PlacedBox} from './collision_index'; +import type {FeatureKey, PlacedBox, PlacedCircles} from './collision_index'; import {EXTENT} from '../data/extent'; import * as symbolSize from './symbol_size'; import * as projection from './projection'; @@ -515,7 +515,7 @@ export class Placement { let placedVerticalText = {box: null, placeable: false, offscreen: null}; let placedGlyphBoxes: PlacedBox = null; - let placedGlyphCircles = null; + let placedGlyphCircles: PlacedCircles = null; let placedIconBoxes: PlacedBox = null; let textFeatureIndex = 0; let verticalTextFeatureIndex = 0; @@ -843,62 +843,7 @@ export class Placement { } if (showCollisionBoxes) { - const id = bucket.bucketInstanceId; - - if (collisionArrays.textBox || collisionArrays.iconBox) { - // Store the actually used collision box for debug draw - let boxArray: Map; - - if (this.collisionBoxArrays.has(id)) { - boxArray = this.collisionBoxArrays.get(id); - } else { - boxArray = new Map(); - this.collisionBoxArrays.set(id, boxArray); - } - let realCollisionBox: { - text: number[]; - icon: number[]; - }; - - if (boxArray.has(symbolIndex)) { - realCollisionBox = boxArray.get(symbolIndex); - } else { - realCollisionBox = { - text: null, - icon: null - }; - boxArray.set(symbolIndex, realCollisionBox); - } - - if (collisionArrays.textBox) { - realCollisionBox.text = placedGlyphBoxes.box; - } - if (collisionArrays.iconBox) { - realCollisionBox.icon = placedIconBoxes.box; - } - } - - if (placedGlyphCircles) { - let circleArray = this.collisionCircleArrays[id]; - - // Group collision circles together by bucket. Circles can't be pushed forward for rendering yet as the symbol placement - // for a bucket is not guaranteed to be complete before the commit-function has been called - if (circleArray === undefined) - circleArray = this.collisionCircleArrays[id] = new CollisionCircleArray(); - - for (let i = 0; i < placedGlyphCircles.circles.length; i += 4) { - circleArray.circles.push(placedGlyphCircles.circles[i + 0]); // x - circleArray.circles.push(placedGlyphCircles.circles[i + 1]); // y - circleArray.circles.push(placedGlyphCircles.circles[i + 2]); // radius - circleArray.circles.push(placedGlyphCircles.collisionDetected ? 1 : 0); // collisionDetected-flag - } - } + this.storeCollisionData(bucket.bucketInstanceId, symbolIndex, collisionArrays, placedGlyphBoxes, placedIconBoxes, placedGlyphCircles); } if (symbolInstance.crossTileID === 0) throw new Error('symbolInstance.crossTileID can\'t be 0'); @@ -932,6 +877,63 @@ export class Placement { bucket.justReloaded = false; } + storeCollisionData(bucketInstanceId: number, symbolIndex: number, collisionArrays: CollisionArrays, placedGlyphBoxes: PlacedBox, placedIconBoxes: PlacedBox, placedGlyphCircles: PlacedCircles): void { + if (collisionArrays.textBox || collisionArrays.iconBox) { + // Store the actually used collision box for debug draw + let boxArray: Map; + + if (this.collisionBoxArrays.has(bucketInstanceId)) { + boxArray = this.collisionBoxArrays.get(bucketInstanceId); + } else { + boxArray = new Map(); + this.collisionBoxArrays.set(bucketInstanceId, boxArray); + } + let realCollisionBox: { + text: number[]; + icon: number[]; + }; + + if (boxArray.has(symbolIndex)) { + realCollisionBox = boxArray.get(symbolIndex); + } else { + realCollisionBox = { + text: null, + icon: null + }; + boxArray.set(symbolIndex, realCollisionBox); + } + + if (collisionArrays.textBox) { + realCollisionBox.text = placedGlyphBoxes.box; + } + if (collisionArrays.iconBox) { + realCollisionBox.icon = placedIconBoxes.box; + } + } + + if (placedGlyphCircles) { + let circleArray = this.collisionCircleArrays[bucketInstanceId]; + + // Group collision circles together by bucket. Circles can't be pushed forward for rendering yet as the symbol placement + // for a bucket is not guaranteed to be complete before the commit-function has been called + if (circleArray === undefined) + circleArray = this.collisionCircleArrays[bucketInstanceId] = new CollisionCircleArray(); + + for (let i = 0; i < placedGlyphCircles.circles.length; i += 4) { + circleArray.circles.push(placedGlyphCircles.circles[i + 0]); // x + circleArray.circles.push(placedGlyphCircles.circles[i + 1]); // y + circleArray.circles.push(placedGlyphCircles.circles[i + 2]); // radius + circleArray.circles.push(placedGlyphCircles.collisionDetected ? 1 : 0); // collisionDetected-flag + } + } + } + markUsedJustification(bucket: SymbolBucket, placedAnchor: TextAnchor, symbolInstance: SymbolInstance, orientation: number) { const justifications = { 'left': symbolInstance.leftJustifiedTextSymbolIndex, From ffbde56b2f9bad161f7c166a165d19822f4f312f Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 12:28:55 +0200 Subject: [PATCH 12/33] Remove unused code from placement.ts --- src/symbol/placement.ts | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/src/symbol/placement.ts b/src/symbol/placement.ts index de7f9af314..212adcf6ff 100644 --- a/src/symbol/placement.ts +++ b/src/symbol/placement.ts @@ -1106,8 +1106,6 @@ export class Placement { }; const boxArrays = this.collisionBoxArrays.get(bucket.bucketInstanceId); - const getElevation = this._getTerrainElevationFunc(tileID); - const posMatrix = this.transform.calculatePosMatrix(tileID.toUnwrapped(), false); for (let s = 0; s < bucket.symbolInstances.length; s++) { const symbolInstance = bucket.symbolInstances.get(s); @@ -1232,39 +1230,27 @@ export class Placement { } if (collisionArrays.textBox || collisionArrays.verticalTextBox) { - let anchorTileX, anchorTileY; - let hidden; + let hidden: boolean; if (collisionArrays.textBox) { - anchorTileX = collisionArrays.textBox.anchorPointX; - anchorTileY = collisionArrays.textBox.anchorPointY; hidden = horizontalHidden; } if (collisionArrays.verticalTextBox) { - anchorTileX = collisionArrays.verticalTextBox.anchorPointX; - anchorTileY = collisionArrays.verticalTextBox.anchorPointY; hidden = verticalHidden; } - const projected = this.collisionIndex.projectAndGetPerspectiveRatio(posMatrix, anchorTileX, anchorTileY, tileID, getElevation); - updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, projected.point, opacityState.text.placed, !used || hidden, realBoxes.text, shift.x, shift.y); + updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, opacityState.text.placed, !used || hidden, realBoxes.text, shift.x, shift.y); } } if (collisionArrays.iconBox || collisionArrays.verticalIconBox) { const verticalIconUsed = Boolean(!verticalHidden && collisionArrays.verticalIconBox); - let anchorTileX, anchorTileY; - let hidden; + let hidden: boolean; if (collisionArrays.iconBox) { - anchorTileX = collisionArrays.iconBox.anchorPointX; - anchorTileY = collisionArrays.iconBox.anchorPointY; hidden = verticalIconUsed; } if (collisionArrays.verticalIconBox) { - anchorTileX = collisionArrays.verticalIconBox.anchorPointX; - anchorTileY = collisionArrays.verticalIconBox.anchorPointY; hidden = !verticalIconUsed; } - const projected = this.collisionIndex.projectAndGetPerspectiveRatio(posMatrix, anchorTileX, anchorTileY, tileID, getElevation); - updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, projected.point, opacityState.icon.placed, hidden, realBoxes.icon, + updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, opacityState.icon.placed, hidden, realBoxes.icon, hasIconTextFit ? shift.x : 0, hasIconTextFit ? shift.y : 0); } @@ -1341,7 +1327,7 @@ export class Placement { } } -function updateCollisionVertices(collisionVertexArray: CollisionVertexArray, projectedAnchor: Point, placed: boolean, notUsed: boolean | number, realBox: Array, shiftX?: number, shiftY?: number) { +function updateCollisionVertices(collisionVertexArray: CollisionVertexArray, placed: boolean, notUsed: boolean | number, realBox: Array, shiftX?: number, shiftY?: number) { if (!realBox || realBox.length === 0) { realBox = [0, 0, 0, 0]; } From 1a82f9d0380233285d9ea851f70ba11719f648eb Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 12:29:22 +0200 Subject: [PATCH 13/33] collision_index: use else-if --- src/symbol/collision_index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index 3d38638528..e03fc412aa 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -542,9 +542,7 @@ export class CollisionIndex { const cos = Math.cos(angle); vecEast = new Point(cos, sin); vecSouth = new Point(-sin, cos); - } - - if (!rotateWithMap && pitchWithMap) { + } else if (!rotateWithMap && pitchWithMap) { // Handles pitch-align: map texts that are always aligned with the viewport's X axis. const angle = -this.transform.angle; const sin = Math.sin(angle); From 67064919003fc7e71cabe936aa872d65f8aee731 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 13:03:42 +0200 Subject: [PATCH 14/33] collision_index: avoid creating copies of points --- src/symbol/collision_index.ts | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index e03fc412aa..abc6b0307d 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -580,17 +580,28 @@ export class CollisionIndex { // 7 3 // | | // 6--5--4 - const points = [ - basePoint.add(vecEast.mult(offsetXmin)).add(vecSouth.mult(offsetYmin)), - basePoint.add(vecEast.mult(offsetXhalf)).add(vecSouth.mult(offsetYmin)), - basePoint.add(vecEast.mult(offsetXmax)).add(vecSouth.mult(offsetYmin)), - basePoint.add(vecEast.mult(offsetXmax)).add(vecSouth.mult(offsetYhalf)), - basePoint.add(vecEast.mult(offsetXmax)).add(vecSouth.mult(offsetYmax)), - basePoint.add(vecEast.mult(offsetXhalf)).add(vecSouth.mult(offsetYmax)), - basePoint.add(vecEast.mult(offsetXmin)).add(vecSouth.mult(offsetYmax)), - basePoint.add(vecEast.mult(offsetXmin)).add(vecSouth.mult(offsetYhalf)), + const offsetsArray = [ + offsetXmin, offsetYmin, + offsetXhalf, offsetYmin, + offsetXmax, offsetYmin, + offsetXmax, offsetYhalf, + offsetXmax, offsetYmax, + offsetXhalf, offsetYmax, + offsetXmin, offsetYmax, + offsetXmin, offsetYhalf ]; + let points: Array = []; + + for (let i = 0; i < offsetsArray.length; i += 2) { + const offsetX = offsetsArray[i]; + const offsetY = offsetsArray[i + 1]; + points.push(new Point( + basePoint.x + vecEast.x * offsetX + vecSouth.x * offsetY, + basePoint.y + vecEast.y * offsetX + vecSouth.y * offsetY + )); + } + // Is any point of the collision shape visible on the globe (on beyond horizon)? let anyPointVisible = false; From 5c3dd5f78bd03a192aa8b4835b3c5c58a254c1d4 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 13:04:12 +0200 Subject: [PATCH 15/33] collision_index: refactor AABB projection using map() calls --- src/symbol/collision_index.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index abc6b0307d..df3fd61f1f 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -606,21 +606,19 @@ export class CollisionIndex { let anyPointVisible = false; if (pitchWithMap) { - for (let i = 0; i < points.length; i++) { - const oldPoint = points[i]; - const newPoint = this.projectAndGetPerspectiveRatio( - posMatrix, - oldPoint.x, - oldPoint.y, - unwrappedTileID, - getElevation - ); - points[i] = newPoint.point; - if (!newPoint.isOccluded) { + const projected = points.map(p => this.projectAndGetPerspectiveRatio(posMatrix, p.x, p.y, unwrappedTileID, getElevation)); + + // Is at least one of the projected points NOT behind the horizon? + for (let i = 0; i < projected.length; i++) { + const p = projected[i]; + if (!p.isOccluded) { anyPointVisible = true; } } + + points = projected.map(p => p.point); } else { + // Labels that are not pitchWithMap cannot ever hide behind the horizon. anyPointVisible = true; } From 123e6b27208b4060267253a28b741ed03d9cd77e Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 13:04:28 +0200 Subject: [PATCH 16/33] collision_index: remove unused code branch --- src/symbol/collision_index.ts | 45 +---------------------------------- 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index df3fd61f1f..6c99fcac0f 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -323,50 +323,7 @@ export class CollisionIndex { } projectPathToScreenSpace(projectedPath: Array, projectionContext: SymbolProjectionContext, labelToScreenMatrix: mat4) { - let screenSpacePath: Array<{ - point: Point; - signedDistanceFromCamera: number; - isOccluded?: boolean; - }>; - if (projectionContext.projection.useSpecialProjectionForSymbols) { - const inverseLabelPlaneMatrix = mat4.create(); - mat4.invert(inverseLabelPlaneMatrix, projectionContext.labelPlaneMatrix); - screenSpacePath = projectedPath.map(p => { - const backProjected = projection.project(p, inverseLabelPlaneMatrix, projectionContext.getElevation); - const projected = this.mapProjection.projectTileCoordinates( - backProjected.point.x, - backProjected.point.y, - projectionContext.unwrappedTileID, - projectionContext.getElevation - ); - projected.point.x = (projected.point.x * 0.5 + 0.5) * projectionContext.width; - projected.point.y = (-projected.point.y * 0.5 + 0.5) * projectionContext.height; - return projected; - }); - // We don't want to generate screenspace collision circles for parts of the line that - // are occluded by the planet itself. Find the longest segment of the path that is - // not occluded, and remove everything else. - let longestUnoccludedStart = 0; - let longestUnoccludedLength = 0; - let currentUnoccludedStart = 0; - let currentUnoccludedLength = 0; - for (let i = 0; i < screenSpacePath.length; i++) { - if (screenSpacePath[i].isOccluded) { - currentUnoccludedStart = i + 1; - currentUnoccludedLength = 0; - } else { - currentUnoccludedLength++; - if (currentUnoccludedLength > longestUnoccludedLength) { - longestUnoccludedLength = currentUnoccludedLength; - longestUnoccludedStart = currentUnoccludedStart; - } - } - } - screenSpacePath = screenSpacePath.slice(longestUnoccludedStart, longestUnoccludedStart + longestUnoccludedLength); - } else { - screenSpacePath = projectedPath.map(p => projection.project(p, labelToScreenMatrix, projectionContext.getElevation)); - } - return screenSpacePath; + return projectedPath.map(p => projection.project(p, labelToScreenMatrix, projectionContext.getElevation)); } /** From d73c7aac376398b16d78e5d951c3a4f064ed42b3 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 13:38:04 +0200 Subject: [PATCH 17/33] Fix merge --- CHANGELOG.md | 5 +++++ test/build/min.test.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1ca2e1dde..1a67c7772c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ - Fix normalizeSpriteURL before transformRequest throwing an Error with relative URLs ([#3897](https://github.com/maplibre/maplibre-gl-js/issues/3897)) - Fix return type of map.cameraForBounds ([#3760](https://github.com/maplibre/maplibre-gl-js/issues/3760)) - Fix to run benchmark with MAPLIBRE_STYLES environment variable ([#2122](https://github.com/maplibre/maplibre-gl-js/issues/2122)) +- Fixed symbol collision debug view (`showCollisionBoxes`) not showing the actual bounding boxes used for collision and click areas. The displayed boxes now match actual collision boxes exactly. +- Fixed symbol collisions using inaccurate and sometimes entirely wrong collision boxes when the map is pitched or rotated. ([#210](https://github.com/maplibre/maplibre-gl-js/issues/210)) +- Fixed symbol collision boxes not being accurate for variable-anchor symbols. +- Fixed icon collision boxes using `text-translate` property for translation instead of the correct `icon-translate`. +- Fixed `text-translate` and `icon-translate` behaving weirdly and inconsistently with other `-translate` properties. ([#3456](https://github.com/maplibre/maplibre-gl-js/issues/3456)) - _...Add new stuff here..._ ## 4.2.0 diff --git a/test/build/min.test.ts b/test/build/min.test.ts index 4bdead87de..a48cc72eaf 100644 --- a/test/build/min.test.ts +++ b/test/build/min.test.ts @@ -36,7 +36,7 @@ describe('test min build', () => { const decreaseQuota = 4096; // feel free to update this value after you've checked that it has changed on purpose :-) - const expectedBytes = 787777; + const expectedBytes = 791799; expect(actualBytes - expectedBytes).toBeLessThan(increaseQuota); expect(expectedBytes - actualBytes).toBeLessThan(decreaseQuota); From d084cf76188f8b38fad4ef9e1a2844336c630a55 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Mon, 13 May 2024 13:39:44 +0200 Subject: [PATCH 18/33] Change changelog formulation --- CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a67c7772c..2bfdbfdb05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,11 +8,11 @@ - Fix normalizeSpriteURL before transformRequest throwing an Error with relative URLs ([#3897](https://github.com/maplibre/maplibre-gl-js/issues/3897)) - Fix return type of map.cameraForBounds ([#3760](https://github.com/maplibre/maplibre-gl-js/issues/3760)) - Fix to run benchmark with MAPLIBRE_STYLES environment variable ([#2122](https://github.com/maplibre/maplibre-gl-js/issues/2122)) -- Fixed symbol collision debug view (`showCollisionBoxes`) not showing the actual bounding boxes used for collision and click areas. The displayed boxes now match actual collision boxes exactly. -- Fixed symbol collisions using inaccurate and sometimes entirely wrong collision boxes when the map is pitched or rotated. ([#210](https://github.com/maplibre/maplibre-gl-js/issues/210)) -- Fixed symbol collision boxes not being accurate for variable-anchor symbols. -- Fixed icon collision boxes using `text-translate` property for translation instead of the correct `icon-translate`. -- Fixed `text-translate` and `icon-translate` behaving weirdly and inconsistently with other `-translate` properties. ([#3456](https://github.com/maplibre/maplibre-gl-js/issues/3456)) +- Fix symbol collision debug view (`showCollisionBoxes`) not showing the actual bounding boxes used for collision and click areas. The displayed boxes now match actual collision boxes exactly. +- Fix symbol collisions using inaccurate and sometimes entirely wrong collision boxes when the map is pitched or rotated ([#210](https://github.com/maplibre/maplibre-gl-js/issues/210)) +- Fix symbol collision boxes not being accurate for variable-anchor symbols. +- Fix icon collision boxes using `text-translate` property for translation instead of the correct `icon-translate`. +- Fix `text-translate` and `icon-translate` behaving weirdly and inconsistently with other `-translate` properties ([#3456](https://github.com/maplibre/maplibre-gl-js/issues/3456)) - _...Add new stuff here..._ ## 4.2.0 From 2587e7740f783039d7c1bec546f785384e1aee27 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Tue, 14 May 2024 10:54:54 +0200 Subject: [PATCH 19/33] Symbols: fix pitchWithMap texts sometimes having a wrongly shifted collision box --- src/symbol/collision_index.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index 6c99fcac0f..6e62ab5fcc 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -19,7 +19,7 @@ import type {OverlapMode} from '../style/style_layer/overlap_mode'; import {UnwrappedTileID} from '../source/tile_id'; import {SymbolProjectionContext} from '../symbol/projection'; import {Projection} from '../geo/projection/projection'; -import {getAABB} from '../util/util'; +import {clamp, getAABB} from '../util/util'; // When a symbol crosses the edge that causes it to be included in // collision detection, it will cause changes in the symbols around @@ -423,7 +423,8 @@ export class CollisionIndex { // We're doing collision detection in viewport space so we need // to scale down boxes in the distance perspectiveRatio: 0.5 + 0.5 * (this.transform.cameraToCenterDistance / projected.signedDistanceFromCamera), - isOccluded: (projected.isOccluded !== undefined) ? projected.isOccluded : false + isOccluded: (projected.isOccluded !== undefined) ? projected.isOccluded : false, + signedDistanceFromCamera: projected.signedDistanceFromCamera }; } @@ -468,7 +469,7 @@ export class CollisionIndex { pitchWithMap: boolean, rotateWithMap: boolean, translation: [number, number], - projectedPoint: {point: Point; perspectiveRatio: number}, + projectedPoint: {point: Point; perspectiveRatio: number; signedDistanceFromCamera: number}, getElevation?: (x: number, y: number) => number, shift?: Point ): { @@ -518,6 +519,18 @@ export class CollisionIndex { const zoomFraction = this.transform.zoom - Math.floor(this.transform.zoom); distanceMultiplier = Math.pow(2, -zoomFraction); distanceMultiplier *= this.mapProjection.getPitchedTextCorrection(this.transform, translatedAnchor, unwrappedTileID); + + // This next correction can't be applied when variable anchors are in use. + if (!shift) { + // Shader applies a perspective size correction, we need to apply the same correction. + // For non-pitchWithMap texts, this is handled above by multiplying `textPixelRatio` with `projectedPoint.perspectiveRatio`, + // which is equivalent to the non-pitchWithMap branch of the GLSL code. + // Here, we compute and apply the pitchWithMap branch. + // See the computation of `perspective_ratio` in the symbol vertex shaders for the GLSL code. + const distanceRatio = projectedPoint.signedDistanceFromCamera / this.transform.cameraToCenterDistance; + const perspectiveRatio = clamp(0.5 + 0.5 * distanceRatio, 0.0, 4.0); // Same clamp as what is used in the shader. + distanceMultiplier *= perspectiveRatio; + } } if (shift) { @@ -570,6 +583,7 @@ export class CollisionIndex { const p = projected[i]; if (!p.isOccluded) { anyPointVisible = true; + break; } } From 3e6d2063ea0a9f4774eef5cdc9df68c1b225b67c Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Tue, 14 May 2024 11:05:08 +0200 Subject: [PATCH 20/33] Symbols: fix pitchWithMap symbol collision boxes sometimes becoming oversized when zooming in --- src/symbol/collision_index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index 6e62ab5fcc..d8ae7bc2d9 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -516,7 +516,7 @@ export class CollisionIndex { if (pitchWithMap) { // Configuration for tile space (map-pitch-aligned) offsets basePoint = translatedAnchor; - const zoomFraction = this.transform.zoom - Math.floor(this.transform.zoom); + const zoomFraction = this.transform.zoom - unwrappedTileID.canonical.z; distanceMultiplier = Math.pow(2, -zoomFraction); distanceMultiplier *= this.mapProjection.getPitchedTextCorrection(this.transform, translatedAnchor, unwrappedTileID); From 4640469c0ff922f156874182a721b39a720470b4 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Tue, 14 May 2024 11:31:51 +0200 Subject: [PATCH 21/33] Symbols: update render tests --- .../text-translate-anchor-map/expected.png | Bin 1937 -> 1937 bytes .../expected.png | Bin 2063 -> 2063 bytes .../text-translate-anchor-map/expected.png | Bin 1768 -> 1770 bytes .../expected.png | Bin 1961 -> 1955 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-map/pitch-alignment-map/text-translate-anchor-map/expected.png index 042161f8d595244b1a719da17e9605b1df1c1f32..05438cbcf9d1fd7f53ea2f6bf33513a608ad9464 100644 GIT binary patch literal 1937 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFt2u~NskP61P2kSeox5^&> z_D}rR6t?lYwXS}Vd_a?CKzX_O?QOZqIXOM2^>+7IzuVDV zw)^b$+AkN~w?yfR=|nUv3xB;m-szWIpKSBJxMfE_Jv}|szTQq)Sa?m`-dXAMD%-^4 zDjJpD`wa5$+00t@aN}{g<1gM)K!Y-ntktLg|_-J0gsY!dA^ zx5+fyB42R>(+}kj{panMZ>==Wmam(!`~A-LZvA~T*ySo37Q6QwnVPzWhl|gWh$a!v(n8 z=2;ZCE%l!M>Cfl$n}H!}@|i2MZO^w`*)ld26M#`wncm)R$^3`=2LBt@wuX47^ak_k zIu9=_bl!41*TkADlWou6Z?|)9ZfbRxubpzZoxk{=zMES_`O~R6%UWAx>&8^QT$)iPa>?ZPgJ%AUPbbwa>;71Lzh7^EJ+4~!xo*sk3HSH>)~mm_ zW8!Ubod*%_?B7jzUsqRI>`P*uZI=7!+3b9`&C4BUxy`TprFnaM{_~^a@lO_Y>m~jE z_I8d{X_s{Vo{6XR_s{9;aQ9 zRQ%j8uI^{*we|7mO|Qos2Bwjldn%2ix92_m^?H5!-Cd=?BzEEI)uVeVKSylKk(_1C zd&$JI@Da=U{r{}OV@pM)&2k=eX|GGDsF(qaxJ~8n`R<)tF{12p+{M7ow?Mv;?Pax;jElWc>yij$#M@2YXA*)UQIF93-raBa2i#Ac`ONIj?#|B6XFof8!@~^+(S&J& zKp=>Vvy&GH1O{9%NJ9-U0mMgPAdtGBixc*IGI*ggGxvSA5pP+<=|H@3bti@~;GKuC zL<23Fxw(M8SKIbm0WWrc9W94#Q9WOUhc$th%Gx^RaKR?K9NHrlUXq%);B_+lDRoYs|FxD zHZ~SL-hQ{S(Zak{YPtA)YL8&S8vlupL+~S?`8^2&mj%}2Gj~ZkNKymY+6w0wzP)^7 zRb*vh(K$Czn=*SlJb5BpA5EOrSe@;uBESx$N-dHWM_+Ndpgg@}lk;>V+J`_A1y+5s zFSdD@lWMc|X-TxqLx|Y(%&F;D#ci8&wbEf$&PZ%)KG2s%l6Wn)F4>nL@$?#B8fv8X z?v#{yNioqP8rt63s^hG>T}@3rnZAjNq$JA|C%Udf43ou`IT6n;Muef9Su=l{ z`LV9A>M0$~8duKTQY2pVZ+fyek<+rpNPWIOnU^A@sH3mS4tslhldfE;yv;Z6DN#pE z!{b%fPrZXGRQxn#N}Sgv%L(pKcg!{_ytjN}&_C`$ZSC%!ay3FpTG~hB4%HnMg$7#n ztP(~wLs^kHZqFz!o6NWQAY`^Kh9oB&^wa^BaH({l1r_)n5=E?;o~X_I9j=_C3IKL9;5qXu~oyK z&Q`*O=JBxk!Ft7ypjMzwZf_i#5L)Kqy<6OYh=fpP5FGwY+2M0D;(}6zAzy=7>xOEJ5C&R#yc0{Mzzopr02h`G`2YX_ delta 35 qcmeAd=oi?qk!|xjHV;Oz*YnqZt54^hlzou_2s~Z=T-G@yGywqncMVPe diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-map/expected.png index c62c863281aa4996da20046f87fb5079e02ebf15..a1867048902e9d678c5de91c94b5a75de84138ba 100644 GIT binary patch delta 1119 zcmV-l1fcuq4eAY$Bx$ipL_t(|0qwy}Xdi?DhvBzB{`s)Y+GdHJpkMUC=3Pz2RjNAp`Hp=35YpWBRX3TaT7dPcA2ei{a{UMn@)vp zh!a^`Hn-pVJR2^42}zZcAO^CNkOf?S8X#SUr6qn)=I7C67$9Ay`FVa2mX^?E3X*CK zkp9yyUW5Y&U}Xh%?u7g9L;oEEq$}{^i!buhOE2+VMn^|^{`u#*`R1GX+TtSIa}VDz z7{HMuuww`R$`@aJ!OF@CQ&UsiaKjDg>KPzif!(`zGc`5ES3dppQ=WV7Iks7o_K->9(aI<9(sstuDOOyn>L{f%Lycgrno8x9#68R68aQ|#EWgIjOC zm4gQla`fm?E?l_4Yp=b=wr$(kw{IWA;SgP!0n$}6Ha5oi_&8_Jo@H%qjY~fK@I#(` z_E|O@Kh6ul&A>6>XTZ;aeZZT*wsYs$zkfe>-gzfy&Ya=o$&+l~zMUO^J9hBsqmQz4 z=T4q}`e`O6CfK-fBf4?}q^o3XY>e^oan7DS%j)VXmwfWcCmcI=j9k3PFZidw0w;jK z0gnN{otWU^haYBodYZfMzMK2+zn__z8MbcS%I3|RIdS3y=g*&KKGthC8MLG zjE|3V`t)g5S68{@+H0?WWol}Qty{LR@5m8;!Z%FTD-+ns}KKLMi{OmJ+ zdEIp^0lx>{1YQ9C0PNqji(fA;^1%lmuw}~@?zrO)E?l_4@#DvTnVz0zW@d(uKmM2l z2M+McE3feCtFNLfH$b{dCMG7>wQCpGUw=JGxMXBxgvTF$oVmF<-gx5;-Z*%WwfEm= zVr`A#d+)uM$;nCf?%m5xH{Hb1qeuDZ zqmS6Rb0_D{onv$^bQE2_4Hv(J^lw^Pg86xV5SEr;ejZ(hAgNZ6RBM2AnUUq lI7H=>AO^CNkOi$4zXLmmCwc8iQk?(*002ovPDHLkV1h78Dq;Wt delta 1116 zcmV-i1f%=v4d@M!BxaYHV(nz3? zTZQP|gNT=chzK%}vR;N-L18c$IM`8`2=!E`N}!liHKMci5I4btvde6B>mSynw&_&p zhB%S6Wp4Z4=UI2@OGv5|k>R?N5C&6!)&S`WEH3h2V{Q&zp#jnrnw#SXx44L|LXcEz zfb^es=@J|~2+PZ`b0^$)ANpYokgmduFTTi2FTKQfS-*Zg&p-b>+qZA$YYPjoXAj>n z7{IY(uww`R$`@aJ!SeDllarHd-MSTBI|HPvuzUAzCMPHP%BP=x%5%>>$F^;M+j!)W zM;I9yVQp=V$;nB+vUc($pYGYi3UECz0j%Ro7cRiaqiqXR#sNH?BkC==95o8A(t-k3;yY^z)9e5 zz+=E~$H#g2;fI-;n&O^&?&1FX?`L{?n$4RxbN%(#bMoX#E?l_4h7B9gwJ|`tM%J%i z&)C=)XU?2qWo3oSZn)up1|}yb*}Q2J`;Q&tCw$Wc@FQUU_1F2+#*MuB=9|3y^2_Yq zyO(|Y_OW~SZYCxsICbh2XU?2K*G`bGkU3DaNz;vyz&aKzWOSd+)uMiHQmJ?c2vKx7@<<s{ diff --git a/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/expected.png b/test/integration/render/tests/debug/collision-text-translate/rotation-alignment-viewport/pitch-alignment-map/text-translate-anchor-viewport/expected.png index 4380be8c0957cc531dac084ea81e38267205ca90..4472d7bafddc30524befa998f04047c238c6dcd6 100644 GIT binary patch literal 1955 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFtEKe85kP61P2V*ntw#puV zc>d?y%d?(t@y+I8+tu?e?bS+V?Vb`rF9FBQlpez^e45jE+qUn1@otIHmv!OaoK{7! zF$W&$&0L^xMI_SX%OP&>+>j+No<(~be(Swu@_%bzPVjY0i5WfbpI1hmP4(ys@#qR2 zMf3`RtBw=<eVs3xm>>~{L+9FX>hED-=R5H7@{9e~ z9RrswPXt>%>0;oFd1)u-*j7(-m#b_^KHgVosvWi_;rqM0cSF zr|`V0uGNS?XZ=cm=x z%`4mOyZdh1#f8r8H#Vp9TbI9ka`MHg4~%(A8mv=H|z5 zZcdLZd3cC*Ud1EMZ#Lf~>>2Br=djIVuH*b8X2JW0t*+`3i?v);$IqXY_v(J~^k5YvA4Uq6<=XS~n2kN*w(zmn^* zdrCeiRDXY$`uJF{4=~9*Xy!LEF*$PKf`Gc;oCjA{2J`Uq14DQV&)4tYjSUPAJfB~G z4ro^Qy8ZvE^7j2q>)Z2@tz6droc^pfyMOP5E-0p@NINSvX-j#0+ZLBT`F39EAG7?HAFh7C z*S)^p9uyr#r**eP>8_KIl6v&*c7FQbHr_v_cdhQtnEiNew|L}>_sh-g&hf|B&E$S- zwt4gBJ^y~ama!~q*|*PbTmJoXw%_j@K5&3xwpngcLBRxmyB`fVZ${2qw($CEP-J|3 zydjZU5LCi?r(|&*JN|P%IOBzg#$Pqz^}QSr8gus0A*Rryi&kn%fO7K7|1qntF1nia z@jcK*QESEidxlP2H9=%`^OhsamR%5fsi3>?W8sz-F3*jlh*}}=k8ReovK8lNZv73c Pd>K4l{an^LB{Ts5%j$wa literal 1961 zcmeH|`BTz)7{_5rP*f@%H^Ty3DR#3}6H8M=OY_(^yKFS0O-1v-#VeCcOFTDs(=Jy@ zlTgDe!6U!IbaKG*TvVXwN{?yDf&*$^gXI{_idCz>V9rJS6 zha=%25J=zC!}SCR1O~2PkTw)J2r=d7K_FO^r|SW43i$ogtG|fTw+a-~D&?neTi$G# zxR=_(SbL}*GEI%{cFxv@TfQ(ZiAckk{H7U2f8bfUtq6JZIW->8)NhNgi>Mn0JY}=; z9F2zs8+c{Lb@319e(V=2F?&7XP4iJFwdhq_4}Z3)cPdh{EXP$(mr@oy^pZ{GyDC?^vPX zaAp}pJZXa4{qz*+!ktJiVka@Nki7?w;G)LMdylj14Gr&Xz~mZvzZft+M~cuhGVpd| z!_3SGy=~fy3A-woVWD?3{@ogj4Y3o;)2~~>c5(1eDuAcm^Bw;xt+=2pf^EIK3e#9^ohLCGH#6P=zG-i8s9DK{v;`4=+QNYxj$}W2#rxx-Axuz zr*YQLmid`ske~4(Ygh8=A&QDJUtiz*qvU=vr%BesaFGqxXWny&kD24D`pBG$%G4ib zmG{Mym32e`!oqHTSW$wH2(cI_3c&*#h*{!u>h;j-$!rpt9r;>bb9YT3+B5Djnt2ot=pa3<#id z#u9!db2{a6E6(UelT5_cK)_PO@Z;+jTe^lCNEPL&7mWNG!i}nY*pkJW{>1rqEa79X zJ6bW{X^HEZso5L~uA-tLxK=ck4v|v%_4SD=dBBIpNyKCFXvf_>q(+Pm1Oh4C7n@Oi zhGT7G<9cdqY1J{#@B>s{aq$*?p4+!JMWeZb|Fn2gB9S!8)Kd1eq##n# zCS}KpWxIHxNcB>tt~2D}+hP)X3bvwJkk*ILXtV%e$&QLY4FRtoTITQ>85xv?F56`} zfBlRy;qRA~N@eZ&E@U^|NeGyH8Qhs?Ijvcln;xhou09dHc{dzcucIx;MG~FRE1a(UWdaD3k&uGM`3cgdr2S zC}0}|YX@Dac%fPxZgJ4>8$&}Y`;N8JFyvk4Hl1^?Z1j)x-$*k*O(0-&=(fATB_)Z{ zxEmT_gWval)nBi9Rf&p4;R-s2QE6K75YcB)kneoBH1$!Mn|rST{8q=8`mYSA9a1D0 V%b9OYvVbob Date: Tue, 14 May 2024 12:16:44 +0200 Subject: [PATCH 22/33] Revert oversized collisionbox fix --- src/symbol/collision_index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index d8ae7bc2d9..6fb76a0c34 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -516,7 +516,8 @@ export class CollisionIndex { if (pitchWithMap) { // Configuration for tile space (map-pitch-aligned) offsets basePoint = translatedAnchor; - const zoomFraction = this.transform.zoom - unwrappedTileID.canonical.z; + + const zoomFraction = this.transform.zoom - Math.floor(this.transform.zoom); distanceMultiplier = Math.pow(2, -zoomFraction); distanceMultiplier *= this.mapProjection.getPitchedTextCorrection(this.transform, translatedAnchor, unwrappedTileID); From 6ddea2ccb936ecffdaefbffd13c1a162114a6098 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Tue, 14 May 2024 12:17:06 +0200 Subject: [PATCH 23/33] Symbols: more render tests with collisions enabled --- .../line-overscaled-debug/expected.png | Bin 0 -> 32837 bytes .../line-overscaled-debug/style.json | 65 ++++++++++++++++++ .../expected.png | Bin 0 -> 47552 bytes .../style.json | 64 +++++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 test/integration/render/tests/symbol-placement/line-overscaled-debug/expected.png create mode 100644 test/integration/render/tests/symbol-placement/line-overscaled-debug/style.json create mode 100644 test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/expected.png create mode 100644 test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/style.json diff --git a/test/integration/render/tests/symbol-placement/line-overscaled-debug/expected.png b/test/integration/render/tests/symbol-placement/line-overscaled-debug/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..a0408c5ac3b028264cb65dc631abba56e6a8d29a GIT binary patch literal 32837 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�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
    1. (?~KP8QkB} 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%0D+6Ic&SW^SbGM~F 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 Temx^7z^@ldnu_)ER+0Y)q_N*J literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/symbol-placement/line-overscaled-debug/style.json b/test/integration/render/tests/symbol-placement/line-overscaled-debug/style.json new file mode 100644 index 0000000000..50cd396499 --- /dev/null +++ b/test/integration/render/tests/symbol-placement/line-overscaled-debug/style.json @@ -0,0 +1,65 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 256 + } + }, + "center": [ + 13.418056, + 52.499167 + ], + "zoom": 17, + "sources": { + "mapbox": { + "type": "vector", + "maxzoom": 14, + "tiles": [ + "local://tiles/{z}-{x}-{y}.mvt" + ] + } + }, + "sprite": "local://sprites/sprite", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "line", + "type": "symbol", + "source": "mapbox", + "source-layer": "road_label", + "layout": { + "icon-image": "triangle-stroked-12", + "symbol-placement": "line", + "symbol-spacing": 20 + }, + "paint": { + "icon-opacity": 1 + } + }, + { + "id": "point", + "type": "symbol", + "source": "mapbox", + "source-layer": "poi_label", + "filter": [ + "==", + "maki", + "restaurant" + ], + "layout": { + "icon-image": "{maki}-12", + "symbol-placement": "point" + }, + "paint": { + "icon-opacity": 0 + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/expected.png b/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..a44c6fe0cb5bc40abbf34b7e60b82ace2dc0588e GIT binary patch literal 47552 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/style.json b/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/style.json new file mode 100644 index 0000000000..5b3f4f4d0c --- /dev/null +++ b/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/style.json @@ -0,0 +1,64 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 256 + } + }, + "center": [ + 13.418056, + 52.499167 + ], + "zoom": 16, + "pitch": 30, + "sources": { + "mapbox": { + "type": "vector", + "maxzoom": 14, + "tiles": [ + "local://tiles/{z}-{x}-{y}.mvt" + ] + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "road", + "type": "line", + "source": "mapbox", + "source-layer": "road", + "paint": { + "line-color": "#888", + "line-width": 1 + } + }, + { + "id": "text", + "type": "symbol", + "source": "mapbox", + "source-layer": "road_label", + "layout": { + "symbol-placement": "line", + "symbol-spacing": 60, + "text-rotation-alignment": "viewport", + "text-pitch-alignment": "map", + "text-field": "{class}", + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ] + }, + "paint": { + "text-opacity": 1 + } + } + ] +} From 9b1aba6b839d726dfb67e896885954c7dbb5ba9a Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 10:34:07 +0200 Subject: [PATCH 24/33] Remove unused arguments from drawCollisionDebug --- src/render/draw_collision_debug.ts | 2 +- src/render/draw_symbol.ts | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/render/draw_collision_debug.ts b/src/render/draw_collision_debug.ts index 3a2bd69285..45caece6d4 100644 --- a/src/render/draw_collision_debug.ts +++ b/src/render/draw_collision_debug.ts @@ -24,7 +24,7 @@ type TileBatch = { let quadTriangles: QuadTriangleArray; -export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, layer: StyleLayer, coords: Array, translate: [number, number], translateAnchor: 'map' | 'viewport', isText: boolean) { +export function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, layer: StyleLayer, coords: Array, isText: boolean) { const context = painter.context; const gl = context.gl; const program = painter.useProgram('collisionBox'); diff --git a/src/render/draw_symbol.ts b/src/render/draw_symbol.ts index bdf6580c98..4d96676f91 100644 --- a/src/render/draw_symbol.ts +++ b/src/render/draw_symbol.ts @@ -103,10 +103,8 @@ export function drawSymbols(painter: Painter, sourceCache: SourceCache, layer: S } if (sourceCache.map.showCollisionBoxes) { - drawCollisionDebug(painter, sourceCache, layer, coords, layer.paint.get('text-translate'), - layer.paint.get('text-translate-anchor'), true); - drawCollisionDebug(painter, sourceCache, layer, coords, layer.paint.get('icon-translate'), - layer.paint.get('icon-translate-anchor'), false); + drawCollisionDebug(painter, sourceCache, layer, coords, true); + drawCollisionDebug(painter, sourceCache, layer, coords, false); } } From 13a52f39d450f87900abf980d1737d3aded6e319 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 10:36:10 +0200 Subject: [PATCH 25/33] Refactor bounding box projection --- src/symbol/collision_index.ts | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index 6fb76a0c34..2f91c0d6bd 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -551,22 +551,20 @@ export class CollisionIndex { // 7 3 // | | // 6--5--4 - const offsetsArray = [ - offsetXmin, offsetYmin, - offsetXhalf, offsetYmin, - offsetXmax, offsetYmin, - offsetXmax, offsetYhalf, - offsetXmax, offsetYmax, - offsetXhalf, offsetYmax, - offsetXmin, offsetYmax, - offsetXmin, offsetYhalf + const offsetsArray: Array<{offsetX: number; offsetY: number}> = [ + {offsetX: offsetXmin, offsetY: offsetYmin}, + {offsetX: offsetXhalf, offsetY: offsetYmin}, + {offsetX: offsetXmax, offsetY: offsetYmin}, + {offsetX: offsetXmax, offsetY: offsetYhalf}, + {offsetX: offsetXmax, offsetY: offsetYmax}, + {offsetX: offsetXhalf, offsetY: offsetYmax}, + {offsetX: offsetXmin, offsetY: offsetYmax}, + {offsetX: offsetXmin, offsetY: offsetYhalf} ]; let points: Array = []; - for (let i = 0; i < offsetsArray.length; i += 2) { - const offsetX = offsetsArray[i]; - const offsetY = offsetsArray[i + 1]; + for (const {offsetX, offsetY} of offsetsArray) { points.push(new Point( basePoint.x + vecEast.x * offsetX + vecSouth.x * offsetY, basePoint.y + vecEast.y * offsetX + vecSouth.y * offsetY @@ -580,13 +578,7 @@ export class CollisionIndex { const projected = points.map(p => this.projectAndGetPerspectiveRatio(posMatrix, p.x, p.y, unwrappedTileID, getElevation)); // Is at least one of the projected points NOT behind the horizon? - for (let i = 0; i < projected.length; i++) { - const p = projected[i]; - if (!p.isOccluded) { - anyPointVisible = true; - break; - } - } + anyPointVisible = projected.some(p => !p.isOccluded); points = projected.map(p => p.point); } else { From fc16852e029570654534c44cc035dbee2dea8c87 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 10:37:10 +0200 Subject: [PATCH 26/33] Use explicit type for projection result in symbol projection --- src/geo/projection/projection.ts | 8 ++------ src/symbol/projection.ts | 21 ++++++++++----------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/geo/projection/projection.ts b/src/geo/projection/projection.ts index 6a3fe3debc..61b858bb05 100644 --- a/src/geo/projection/projection.ts +++ b/src/geo/projection/projection.ts @@ -1,6 +1,6 @@ -import type Point from '@mapbox/point-geometry'; import type {Tile} from '../../source/tile'; import {pixelsToTileUnits} from '../../source/pixels_to_tile_units'; +import type {PointProjection} from '../../symbol/projection'; /** * A greatly reduced version of the `Projection` interface from the globe branch, @@ -10,11 +10,7 @@ import {pixelsToTileUnits} from '../../source/pixels_to_tile_units'; export type Projection = { useSpecialProjectionForSymbols: boolean; isOccluded(_x, _y, _t): boolean; - projectTileCoordinates(_x, _y, _t, _ele): { - point: Point; - signedDistanceFromCamera: number; - isOccluded: boolean; - }; + projectTileCoordinates(_x, _y, _t, _ele): PointProjection; getPitchedTextCorrection(_transform, _anchor, _tile): number; translatePosition(transform: { angle: number; zoom: number }, tile: Tile, translate: [number, number], translateAnchor: 'map' | 'viewport'): [number, number]; getCircleRadiusCorrection(tr: any): number; diff --git a/src/symbol/projection.ts b/src/symbol/projection.ts index 3e656ce6f1..04f4793116 100644 --- a/src/symbol/projection.ts +++ b/src/symbol/projection.ts @@ -33,6 +33,12 @@ export { transformToOffsetNormal, }; +export type PointProjection = { + point: Point; + signedDistanceFromCamera: number; + isOccluded: boolean; +}; + /* * # Overview of coordinate spaces * @@ -441,12 +447,9 @@ function _projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint // point near the plane of the camera. We wouldn't be able to render the label anyway once it crossed the // plane of the camera. const unitVertexToBeProjected = previousTilePoint.add(previousTilePoint.sub(currentTilePoint)._unit()); - let projectedUnitVertex; - if (projectionMatrix !== undefined) { - projectedUnitVertex = project(unitVertexToBeProjected, projectionMatrix, projectionContext.getElevation).point; - } else { - projectedUnitVertex = projectTileCoordinatesToViewport(unitVertexToBeProjected.x, unitVertexToBeProjected.y, projectionContext).point; - } + const projectedUnitVertex = projectionMatrix !== undefined ? + project(unitVertexToBeProjected, projectionMatrix, projectionContext.getElevation).point : + projectTileCoordinatesToViewport(unitVertexToBeProjected.x, unitVertexToBeProjected.y, projectionContext).point; const projectedUnitSegment = previousProjectedPoint.sub(projectedUnitVertex); return previousProjectedPoint.add(projectedUnitSegment._mult(minimumLength / projectedUnitSegment.mag())); } @@ -576,11 +579,7 @@ function projectLineVertexToViewport(index: number, projectionContext: SymbolPro return projectTruncatedLineSegmentToViewport(previousTilePoint, currentVertex, syntheticVertexArgs.previousVertex, minimumLength, projectionContext); } -function projectTileCoordinatesToViewport(x: number, y: number, projectionContext: SymbolProjectionContext): { - point: Point; - signedDistanceFromCamera: number; - isOccluded: boolean; -} { +function projectTileCoordinatesToViewport(x: number, y: number, projectionContext: SymbolProjectionContext): PointProjection { const translatedX = x + projectionContext.translation[0]; const translatedY = y + projectionContext.translation[1]; let projection; From b375b47e27b487b95bcc75f388d71d3bfd8ebe5a Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 10:52:49 +0200 Subject: [PATCH 27/33] Add render test for distant pitch-aligned text collision bugfix --- .../expected.png | Bin 0 -> 1585 bytes .../style.json | 54 ++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 test/integration/render/tests/debug/collision-pitch-with-map-distant/expected.png create mode 100644 test/integration/render/tests/debug/collision-pitch-with-map-distant/style.json diff --git a/test/integration/render/tests/debug/collision-pitch-with-map-distant/expected.png b/test/integration/render/tests/debug/collision-pitch-with-map-distant/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9593a4eeacb14415401c5c87c8430d0d16f99b GIT binary patch literal 1585 zcmeAS@N?(olHy`uVBq!ia0vp^4h#%T3><7gmeIPb*$fPiI z@b}(I0e81zspGBB7WFo2H0l*ET#%rBy!D-^ioo`7CrY+mmyBUF@1Q zYYb-kRD5|MXkGT^!Kta*HnqQ|%$zCNCvSglTkdU%(+8?Qyj(uN=+~FbygNG%mRLQ# zu`&6~*|Qt>>^U>rJYS-%apQ^V4M5JNOG5R3KC(-{yR-A~-sG9=^M~`_7)q$;Hpl6+S-3TleE3d)@E1=Fgrz zlQ?|fL|fv62M3$~07EKfU(L*`S3~*aY)(8oJG=7VAIsn0-X`DPmfMs1z_#M|H{JE| z`=4E19iH>!-|zQ3Yk!+ne|wYo{@z}oON^#93ffkFYFWSUSC@79yA7K*9s2h6_RU?T z+S1pqU;p{>xctu2*J2>!fT0a?CO0>C&CjRP_tgHLHeEm7$k@2~)ctGMt_9rOl**kf zDRB`PPZ3d3k8W+vzO%c$f9Fn1waJ{)Kzw_9{_`W9!gFjYC;j|cc}zih*8KU;|NQ){ zqo=p2{(qfb>@J|J`i(u6#^QQ04=yZpzO$>e`*^>+@wCQ?xwp1-E_Uz#^y;eiy12ck zfXo~F>+L^({%lkIt;gT)XG?1<>oKMG2mS5;9{KwEdgaegs=LeIr=_O0E?ue$N>K(p zD|%8BT>R(RJly?$Uvg>b)U8`h`Q+`+0HZM?KHfdGvU28myWc(h_J1ZA^6W{ztoc8& zajy0G4aMp;e?C^WHP+wQJ-xpApUkpgH^UEnvX+Pb+jdU27)7HYFl0ku$9{&{GR)Z* TxZ)lHs{#g3S3j3^P6 Date: Wed, 15 May 2024 10:58:46 +0200 Subject: [PATCH 28/33] Add render test variants without bounding box corners --- .../expected_no_corners.png | Bin 0 -> 33013 bytes .../expected_no_corners.png | Bin 0 -> 48112 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/integration/render/tests/symbol-placement/line-overscaled-debug/expected_no_corners.png create mode 100644 test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/expected_no_corners.png diff --git a/test/integration/render/tests/symbol-placement/line-overscaled-debug/expected_no_corners.png b/test/integration/render/tests/symbol-placement/line-overscaled-debug/expected_no_corners.png new file mode 100644 index 0000000000000000000000000000000000000000..142725fe2d8f71f9ec8c21d55ffed1d8e83ddf17 GIT binary patch literal 33013 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 literal 0 HcmV?d00001 diff --git a/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/expected_no_corners.png b/test/integration/render/tests/text-pitch-alignment/map-text-rotation-alignment-viewport-debug/expected_no_corners.png new file mode 100644 index 0000000000000000000000000000000000000000..6b41163f31140d0f1568daa959e344d7e2916980 GIT binary patch literal 48112 zcmaI930%+X`u@9+Bq2m0Dw2?-s7$3OB4r+v43!~iFcc}$APE(cN-AUyElVv!DoK)r z5YePER|=KXc|WoD@0{~Lzq4PjZLdYX-_PfH?&rR*`?{|C*#R>xrgWC>BmLK3e|0vS zI(hbAf3@Ww+x#UZ$^T>=cxeCEU)QghO*WeA*5*@cN2{lsO6yym-?o>uORAdWx6aPS z&c<)LghbEbJvZDR_xi!hm*3wxr7S7>)x37gtF<3zHLSn(x$we;&(-U~4^8p24>^9^ z-Fdgvt~~?y4G8m=ami`P{_*o$if2m1N#FZ5o(6+5y-E$2-f#;ZzT_XR?Ts5HjOzUZ zF84-R?u5;(kEq?pf$2wt(tWUE_P4v;DN7aW6S>9OpUdp>VB{?an_~XaG z9J_(4suCr4hYcIHvbm{2%KMSmi5`P3Y!V9;3_ZttD|;mV{r9M67nf$QzxLYCX=P7& z`Org$e3hksO&{ykJbulZHB#PAwiXr^r}NiZMCu#4x#_0`Ex-0^&DymCCQRsOB-PuClWmAZ6SVDl1WP_Wif58ofF#zR;_r@oYju zW=2N)5hF%O7`^lA?yYQf)yGG|puV`>-;0N*eVey%;Z#RQO@3QR{8{LU6RJap4%O-t zBr`86Dr%uduNyaScI@1_+%$2a#$*$d5*FZ**UOhL)z#H)?jIZ?<$W+ZcV6~GQ(3>8 zNlE%|w*OeV*L2_{lLZUpdj+-+%rKrf@h=`DE^l{wNpW>a`rP^RyZ7!LU=g4G`gPRD z^_35!G!|Wvi1C`o@AvH+s9YC(B{6wzL&JfnAZ3|t9XobZoUrxayLYQ4`J{|zDm1y>pxA5zI)fSOaJjx*R31I_eEJu@fzn;{8xB*xYVzzd%*)W z7XK|}^lqSvRNCn2=H{!ueaN3YWr~hMU0t2c<%O3PYPh+($KgO`Ap^J9g~d#$D(==LosDUnJW z#PWHJNKH+R9OLSD{J65@(Km0be?M{8u3bm<>3sR}yrT_vV9b#(?h;zwR2B|MV#fJX2k6_0`4f+Tsg`cMj0fI&k~;M9ni7E@Z5@{OHM(T^8{J zhYsD7{rTn9z`VFAu7m!pRHj|x<#o?BBO@aTM~U|BRXoP+O5LGsWwG_g>n%0a)x}-C z>f8PNQ8gvuxogX>A3fydGuI{D^fQi`DC@J~@WF$3cDC!FpkpWV{1u;id7*~>xN&jp z@#;}5jAY>M-BJSv40!kC_3Ih7wuAEX^Xu#Di+MNWnA@*jMV#YhjHgbO+OBDpbo==- zubeY;;&}?z%g4)3H=>(Qw%O0`pUcASkCi0m8pI_ghR!=TKj!(z;H*_7gU{aH-W-tI zB~HqrS???}_w`HXO{bj8@7}N9jEx&dP1>nyMxfPgov>XT#9kT;Z~rK%s4!i-c4!zU zWcI9CMw2H?n8tNGIXggEs>S^Ng9j&0obb7EWBixo%KkEv?b!00oYXFg`V(DTv<>gn zlx6aQMDy|17v!LheA=^DuaNNY09CWP4mYj$TPMWl@(wSOT?apW_)sCplt&~}q?pxK z1kAcwOO{NZF{88m2@7}w2RZ`ad z`=wh6mO-ON9TYqL>CMfEC-IgmNA<~jzfmg9NiF}`vn$(wZoYBjhQ4cs%*W>m_Fvy- zsmn=A7$uE0Gc!{h3j8=4IwzXb?YXj=Xd@3II^IXOMUfn5)t2b zXZ5JqxkJ18luZ6wU2T)<-Cj;kuKND41TD^qoOFA!6e6KDRZm*6a%J+{w^^Z2pFVx` z^5q`WI3u2U{<&_FlEh7_&2h`6OZ)Zg*>h@$Pu^-(b@kmb#k;y1*wmC}NTuloH#If6 zHPvKxlPK}8`TpH5-LJD)&b-x+)?W4T^;MDa7-+iJ=FaYJb!*nIKbe$tgcl~_{4L^F zYMniQ{*H~7vebeBhe*2I(F$|r@Yp|Ve*-|v9r&J5BgfmtMny(bSDeDy6TV> zFU-$QaxSaajWZ2ek+G*ItL_ssSVLp)rAu0kk%nH!N=sK*L>mOLIBIHsJ7ce0=`PNj zN8ceD54`7}Gm-VX9y-{P9sBQ--Fx`3fQuOBYbaN4zCQq9L_7Y3@UOC=WUoqcAqtY5ox`Fk=}#3U#8zA!&<{<%Tp#`P^} zEV$vWla-ZK|MREL(>oa%-Q?w`DDiXCPL|r~yS$a!db7V#z2tzQIoRakI z*^+KPRiv`Q*RQiUV!8b0!mDe0lHQNx*pYW+eNykPy*hj8(i#6 zYW+18E5pv6JF6d>#*2DaFI8=x;%N{TFi1=5@XN*ZU#B+*nzpmHmT@a6kV=0V&|@%l zX4L4>qRzbEXnsViO^nyK@84Hkdv*EM=NF$hf7(25^Ywn$U+;VEnCWWt~d&$m3H$y z4OZC?l<7efI=uR)bCd;vI*`9wa{U`6?|=PD(%0{=B-@jFrkyk1(QmL-dm;J zy+;o-b90XSmF4M@WCg8=9Jj4o2T18<%P;dtEzJn*)_m>ZLkl*Jzv$;D$$rcldg%9) z3_T>xlgvJ&s--2nV8McmVJkEDb?etJXHau<^WJ{r4jTjo1Q0V9v+&@lJ)4ZOWA68z`7Ij&&@iQ|M#_PbNI1v9ebXK zpjDC5o9*doaP7_3VQnMFZjvVE^4DhM=61chc*eqo3Vnk7BG&)-^7=uvVf2R5%E~G8 z=l9xvG$Nval*%&@?&PraaO#JH?n>Q=_j5>{%a^NgJhc>BkMOy(XIG^8bd*ZV52-&! z#Jqq1zV6J$ixr`k1}Xyvv<=Pj2@LG?JR-ehqFShmjOFOjqmz=8yD2I@aC-9e>7A_5 z!Iu|bsN=bThP>_6>C;y#Q$q*wSHsQkZmFrMQPI%}H5fj8_$LZ!W8>D+(o#yi%odKx z8fgDYV)t34b|yg-AjDs)rSr(WlN5j ztARq2`ycacT(frFI`^_5J*Ul^O%<#)t#3>}&NHYbJ!=2{uDyHru6zIa^T{h$ zLXI3!kSJL^)vEpV*AJgvSW<9#Wd~kGLPFv|WTg4x#eIg&KVSSlKHBc(-)ow_C3x}L z-Y2JrU2!PT1_RECx3Fz#{xwQhSNuk7TwKAm4NB2o&0{ug+Em}rFw*wE+}*vscbTij zP9d-y}qpWV!b0Q4X_?oG9}gmdDY*>sY+yk|lk&eg9PQ;_^y@ zg^ENeo)A!V$@ACN4<9}x{rdjOjGR1jWH;Wl@!;XZU#}Pa+SgmhuKLlWt|gy7ne#4& zzusG}ad21#JSf~&b+c{^Jy3FTvPfjSSO~4szt^u5t*LY8 z%DsO5I?`bK(VN?TJkHD8nYAkR-+zx1W{JOJBCXoFv2G1pVK!ri?WHlEP5QTP-Et_n z;!81(nSZWh*RF$y3<&^5`5pcD-?44mwVS0bXEox>moIz!jNUUV&NT1Mn};AjGH7SD z&;T$v4dLeQMJ3OcY{(#!+2!;R*zL-dD{k*%{Ez6a?*q<>zj-sNu+SF>|WRy5|=&Xo>8Px%*|? z+S`X7IdX5whMOj=QK;GsW04R>^wo2Gd-3|06Po@&Eh9+EY>v5F4{zlroq($2&p*0@As7DR(7WnJZ5OY` zC()vZ1@WI>a;-~f)?|`e*xT}Q=T9$2dj5P>6gyKr=`8`pA*!irX|8%(Q9-1ePoLhY zL)ZQ%cw1hHZ0-KxOniObeor4&GkwJ_bV+9WKzIw$v$aK(+=&YoqM6uJ`HT%q}KOKl@zc&;abWt+cTi|eam9|P~ zmaIe@)r-aCr}1@Z(3 z$5V56W}DE&mX@Y{Oh~a{XNMlz1Ewi;(s%n_U{5kW6(8@vVA=Mb5jlQgVe+~WLBI%W zj~WvK`qJVH?a{-tEAZE7}k2bnFs)4<0;NVtGQc$)&pA#` zoGvnfldJ2><7}boph3Y04^AeXojiGx)7~ALqQJp4L{(zBesEG-FE6kD9@Rz{?-Uh9 zcj)i7qh;NLBO^U}_!_7Fz2=EHJw?-@SjIx_Z== zjqhh4)?B(r%j5jg>xWGOdySk41l#NF-PUw}|D0HpzL4ob)=68$F zJ^(9YuD0?xhbiXx@f~cVQ)Sea0TZ`xp8z(pw6v7$0iNvMy*s#*K5ypy`KA=btv8PW zz(iM~C1)nnHaIwVvZ?9gmoKNSSu?~w_gKa%?U=mPvVNz)FnNQuwL^BEAZ3Z3fAgn> zU;h25>Ek8d0PaD?PCHx%lw9C&%5u@7-c$&nm5pwM^QKMUaOr>+=W69$J31T)xTg21 zuwzw9m9qXq)46gY+!3PxqeZcJOAPB z^j%fM$3?WsT&2BSJN(@oYikQ$KpfThCn{3AqVBY~)i0OyZSrWI?xyeKpRK>8OP7A$ z7d3b9^V{*)yUkL%Z91_U|8TU~p{2t@^ebHf$gf0=y=J?G7=Pg)CZEY`2tKG^n^Se(vu=oNX=gFHl7HnrjLj&gtIK`nnD;Zi}O+{?GbXRC(o5qvT5Nlk#T>!azYrve)p% zKB+b~r#p4&qDEAaleM+ASzXf=M@|De^Uuy3|Ly6VPp_|s{qv75wSc&^>e``;VsUci zv9imV{nJUUR*QHk=qm|HNo`p_Ekdyw4BzYY-w-D{=Vd&Fgus(4`Yq z{QLLK)MR~+dM%gaNNRj=NQif6Xpiln48UnD919SL1)^bvuGq6@kK5beDF?Dv$@T1c znL-2)Yzm>7*7B^d(46XV?e*rq?Tk2|1m=nOc%6e$bF!zdZdwsWRWl@5)!}qd;d9PkgcXHBNzI^$Oy2sNU z3X_5fm)$(B?)sN^d^^dL21_1<>)iPMa-D!M;IWlj3NHY;hCd5()rSu+_m#K4os|`k zsxffjE^)#rrZAQq2ICb{Nlqngfwi%)7IYB#V2W+zs=jG>TyvvIN65psV4Wt?$WRYv0r!*fT$pv$^9!8B5RK=IVWT_U1oTH;T z%04@b`73Z9!J(n)PQ_08yLay{Zm5hN3`2ADXrF1*r@w#qt{A4xC@$~Oix>BJ_cNzY z-=>l1-~VB!5jS?^ueF850$TV{J9Rg_F=xLoUcAVecC9Hj0gQ;GsTLZ1`0(B6mL_|$ zbG$`V?5R_JX=%nEK7JI>b17o%rlE8gHspe&fBzjIwQJ`c*=msUW%pV;&*s|bTACx6 zPfI0vd3n+E!RZ791l*`j>qO(2XJ3B*5G4<=h$9^X9K#vq#i^O3V$3h{%3o zX&B`1-(lS5PyYevf?rko^==APvnH+62w6o%b6ChNMcefyoUr0LxhLt|OVb^$6A^6W z3E@p^O%fmf^HU-XV&le5n`+9#mVr{)Ol4pPg?aXw6N!mEV5!Dc-Po05H;@+ZXH`nH z0Y?NFMx~z-O^T+;1j|gUw*w>bjI?1%1qc!%>9k@1Cw;}HWmL~_bHDTwO7o*BYN3DH zjeh<5iMSL9Y0&h;)&7P}ZT!*6O(2&h>^-fR5!F?{4oNpG!3W-@JfWsmw2e*x(Z4O{T_&9>E6MY4woX^hl&_NL1`dhnne;3WAibP}?XmfZsdfii(p`gA~t4jqCg8cD985uO6k zmGbj-)uYv;tTdICcL41;5?K!)Qi=vP>Ci2|xw$R5Y~Q$~0*Du-?RDL@6gqck%a@7B z*H^4_c5z7qT9Mcqd8J2mO2h?G_Ngc(deg^eB=7g1K1~i$RW*x+#)fFJva&j$3Ukth z&tn~dIaDTUA{>=pNO7?Zv>H)F!c~!K7k)?i+O{8#pm;bf0t*OuCsWC5Z{F(3YN406 zR9O>?&YL%%g1RIlak?fEOM*H;RIwTmmfcZWI`+(&fDa$m&YnFRC^-;u;NHEdJUXP< z-+%uta1|OD*&0FvsYMh}2TkwXFGT7+pPz+;nT}{xB64RFU#;&zHqt zyC#2Vnh6?!ii!&Oq?F#?!(%+s9EAwV0T!KV2g=O_X!TwT=|*R9Ff6QxkmqFPcHgzo z(z0t+N{aysMP`Y}YX`E+n?5W^DUI>(A8To4rRd+KU#Va;AeBWT0hxF2)$1+{ZIYF_ zxlH!q;bj}Ve)hGT@J&v9>6kGztpchC7C6{J2#AB!)R5~{acF_H(aG5*RaLpaeiT_o zL*~LD)PFdappO6sOP%SUJFw{*xsHHyc6BYYdqvqmh}p5@FTV&_m#<&HCRxp#DGL;; zaM9G%ywUjKoK;A4bS_IH9~&D>`4f@*;OOYU=>muh8Zu;v=n%({h>m$RyZc?)yI1B` zeQ75T4-b)tytQP_WLB^|H=4d?3tE{-q8X|A`nA->a(sXc5P6x^?1fS>RecGo_bC}ZbK+dgo-?Q0#W!H%MVD8!r%am2O7`g(vy7$y71Ru^l3wX; zW#vlkaOftfOK=Ky4UiYN3Xk=lfy@L=Of+S+zy0?n?>KhKW+Yn#U?zcT4+aLs9zlPNOzbcaEsoOIdghs z?pLy>{K`mH=0<1oip|y4=^h(6(1q^thH&d8FOk|%va)h>2SdjjDX6PThVSaodvcwG z#t-tGb^{lh!ImQB>mfI^m=ilVZfAqNwPiLOSf-ly;-;D74Mkz zNKoFHr&h4SFRg9oCc_h+q2 zYo#m{KHbmGMz2&JKR$A&4OAkX@2=F(i;VbUa5co{xb97 zgFn5xwx1N~GVsvh!!AYJf2ho0VhFA z9FyA{CG}SIX_J|rzAOLS0>RCY$-q_0@ba`@0E_48P|b^Od5qa_*sO0F7hJUt9Tmn+ znl+I01_=j)mu$AcEznyh1*1pJ02ilyL++SP^pZ@`C3_ns<*E8a#9qC6h`h!QQDW2( zBOg34r+B&5=IAY=9C+2IE1f=bCY7dp?$8DlO-r(zXasC+Z7Cp$tMdk+2SGoo8X5|L z3El~0Ks%)=5C9EKEX08UFpscOHtUW=+|>LdrSeljqTnZ~!-7)AD)5{}=h5reLDmWO z%8=&+3=H~{izKfn+UHUkGq^eTrw9K<%kYPiX zrPHQO84kKn=oz6HM6VdV{d;eBclV7OH&#C!SM|vL{o|9Ye4^v)v35B}Gx}{QG=hKS zI0@qP22z&BvRjH^bM_y$K(uV7LY@BSm1ErL)4P}b`mkWss8IyiG(=Dml_IBV1VqF5 znmauNTX5ijto7FSgWx|fLC{?}UlpM7*7kAY=h_+ZOfcqzj(_S!>NP*@_%}ig)xF!r z1a#%ENXW&NmHzSZgT0;Nrb_9}g$UY^@=F&W#e+pc>`(!dSXY7*Qk=Ev57q2eb@K;V zE;hF|*U%E!PETq>?+Zgcd&!b)gpn+IksQQ3LC-mF*~0t|5^MZ$RyfmHV--+_~BaqaJRseQdi7@|B>ddrQ*-y#MkA z@tr`>*HA>n1gp)S6vEaDKn-~YODzlxW%~_Jojtn;rv3_? zbt7d~$fvYk(!Sm#a;heqLFIS8Fm2j2DH$13lFv??=NFd(c?t^)6{JBOU>K|iBjFnz zB_eW6!7FJ&@N+ZZ$Nzg+y73Z@^epC)`oWk8<|kO^Sb8{IeA!eX++M-#40KA=Unn~$BWyOCNT)KYxE561s2DD0pOwN*$mL4#6?9u7_6vw3T z@yTo}5`IN@U*nw!T(AWKm>xN@8~KO7Gs(XT*jx~KKnfZ)ZRgU-DANS$3kO|cshKpX z9aLyWQIQg)<;DEUXs?G*3cb}uD}KYhR$&jM4??NH`x*-`?f95wmpBpt@6&e}JvGZq z{`Ob4+R#0%^AmhE+kd>yBni_*(_PJ6ym(L6s#5us`t|@M=vTHN`RAAGH9vk-E^97d zMkfy<@P)PlgoN!?7%4QauZ6C;BR74RTUu5IQa^F=;=b!&{tYZ@s?Y<^JAHUMq`znV za%;~9TX61bf|w@3((soYs%b*P2*I*YiUofkQPkuo+VQ2EzZ9B*KZ#ix2?{?wC<(In zSn@od*a4isHp85XPth22eRGIpB~_ zf{i3kQRu0a?O+QV1@j^D6fHh7E3B+X7^2@S_$7>VcPHYnJDrd)c-XMO7)>=bNd(dR zhlVXma#Hz~15u!;xYx-Qf~FSo9$e+LWy=)Vi}D>y{Mg3d4ui}?RBz$KDM!$$*Bu+x zCCVc6P<>;gHVY5fnikC$gC5*TCX_qQpID`*6<-$^5?UJY*_+sw zMs7`I2}`ixJQh@gpy8Y86-GgXA(p~RVa5Weg8CvSyyjuLoH+MrqC{{7?e z9UOEoEqwd#+mF!b+#NG#w>@_3$IQ8R^zJ{jdqGc3GdBOCRaTmBr-m5N*Zgxm$s10! zU|4qD97db}NEv&DV2P2E+L7!UgJy*o(5LT@?!CiJIR#|Ci1#S9fB*ey5J5XEOVG}K zomm5q?c3jXg^`2&Qz`VIR^A}7@X&O_-j9}X4#p9>C^y zL0WlgCHe&mdiY;7X?ahcOo9=1NmeYWII3+cEvn4134M*;jp**})ES}#BgIr>XDgMn$`gom2^~angLclM7?I7WKsF3d1QH6ugtDz@(KT_iH zwmCUFtMGHU{^*=32Jx3K2cu*1k@R#{UGZ9wcy&CR+c+su7cjlx zR10#d4Z>i7AEFa$D*QU0>K%>hcN!ZTOLgoRV+m&>MDyQPACWk{8bLQnq_bozbjxqw zzJXVCtoj*xMq(jsoP&o#c;*(1w?p@$;m4jJ^=lnAQqfOB*$$L4Jm{lb7k72t^DB51 zt-XG2+Sh-=eOQoyz`%5TV6)HEtH6QZMRE?#F1K=|52k&pRcfhG5^BC8#xo3G?=1lt z$i=Wufv~#^MB@iZ3o;kT!zQ)u*VW~z)#|Of!w|0aEbIqOLPXXKV zdXqe1C^H!2z~257jy9i~e-4HfPlr=-CwWalk>I!j@9*uaC+uW{3JMD7btuadv~_d> zf`UxmDe+svHDQ9GOnB+4rW?y%d<k`{(?r^kN3|k3K50l1H`R6fqU~C_(hi!HLXqV~;Tys;EdU zpo!i|k8^qbD_wjdQ-~<^U>jP>x-nbp)Co!v9cCaIR7aqvFEFC?!-r|nuqHeksaw-Vr>P-~}Ao`m=F@d-14in527=)FW-V9G;e#_eM!l{RnoxqKni zQ}h!thZ!{2ujF*Pzdso!{PK_$LgE8PYXTZ0QCEOQApYbNq%z_Yex-r14#FGA_bVa^ z!#K;r$q5dU_u4=Hs}!~XtA`Mvc(R4}Y1&C)KrXqz_NumHp?)hky;R@;^dm98}bCSOk1i*^YU+XFBU zMTz(C;zdpDq6+~tD9`@sMk`kiWQ!=Xz}OwL&)i8*Z^!Q{fq9&;>t@qiEJ}766rze4 z8m!vUECk*W0=v~e0LM#~$J}70IhbC8@1rNB^DLi+K^-21=C@IhToCCoC_3a}ZRmYm z8EIFA0hM0m>sJ?WXg8mAA_|2&obFRT*~)^}S~!8pYLH(puC5?e0Yo7rKvg>cqGBu9 zPT`QDtZB-3>y`>%nftXoJDgLCE0{`7Gj$K@Y_&R)r0w5I(;pAn^AIHyY1(v~Xs0FgoFAhbYO)%-|liJ~9^ zSKhpNBeMzioGgLa??DhgbJpeU;U$hGTM-CW;LsKVEK&32?QKX15< zuSi+KqvD7`dlJGhjf>R=gn!0Pc5?&-BWq#Ng;Oh4WD%D)lWb1KX334}b;ZYbHGH64 zVM@pR@p+h-1AqY#Zu3hYzI=h}87&@!ZxSDlExoV8gsr3WrfuCi78bm7UtK!&>41^6 zYohvjp;baxB4kOFOv8G!`*G_?%d?BV^UfWQi3xqTx_zI{yQXc{6+RkxdtvchB!Dj5 zMN>m9^n^38OSfI>_KQaw5IsHYwDs&)DG2|aW7z)x|`&6CnU~P#W(|w8o)j2>0h&7m1 zg;uY5kB&wPYIp&Jn;V+=T>kwpudgSgU(+8lG9Vd?RY22fstrV)j8FksT#|88Z(3i` zel7F*HJUa?6+IET$;az3ye`0&oSrD*&?rG%W& zBp0DcF1)^ZICZ)Bk&5I&&M7o7d=7hq@L>mYvi!{rcfry295(*|4@#F!(&^XHNVXX- zJW%a1wqGnzFA$q)ANgGVo+%kF1A6sOYQ{yAQ~-p~M--v=fyLxgKr$=&uc#1MHE1{x z?{HK-$S)Z1Zc;Uj9d4>ZM zQMQFK9?La5EGs8>=i67-?=oB@)|1Ihv@o($C_}9h92^o1Y;lXyHmA0|@|UYO{oL{} zvOwX8PN#M<>9=-EwOwn~#$?vYy=rS#KDagF`LcSxZZ$HZa{E$Ec^FV(1E(%M z^e?Ka{6nb$riGOUsnBfNv=#aV4!Vv>C6a>h`h4~I5gq$3Jn-sKM{@_q)KoFE$36*&eCUZ1ZVG0~EqVi1qu>r$}2Z^-P zlZdP!yuxapNIy^kEkke|VK~C^)--#Z$oTsrRjlSyPchAS)0ZtNWq12-m@H?~r*B_kAeLa>xwDO+K2cSdu&Y>9aYKo{hyT=j<2I1a zK~+xL`RiM=Tj=c!VWl!)HmU#CcPf%M;q8TXy8;qkw0o`iqUwim8dKWEn!*g1z_%}l zWo`XIW+X(-T9wtE_6`q|)mm^u{H#vhuJ4*ILOMvTbY-|)^2j;gr zFZ^3NIzqyLyZ{)-@pfT8rmo>+fzUim7kX*inf7=xgD4o0Pl7_kHj3uZ!Mmk|>x_vy}$jCa@O zxLEB)T)vpnyj2vEVF@?Vpz(zc5|_6_yh}31=&9!BZ*%mD-oh@G3$0rS7aY4gj@O7D zre*LvYC+riH#d7y`FHQ%Z@)WM9m*EB$`uWUA|^xPO77Yz=y<5KZQI6`I32Okx)(Fa zUqQSzr~eG3;ONnZrmA{_@Zz61pCPV=`Q>6#sdRt0;x@O|vR>#x5^dXHR!;l#^yCz) zy(mj?feVq!G{XYnRYo1njuH<}+>j7-Tr14!V(*Obtm#B?xXa5O8NII8o>*B#FTl?v z0!vDA*S#xyG3MEb2=6%*3I=OIudK+B z=F8YgDev15H)Aj%B;0BoiudU@p1wJACbf>N&4LKm$hJC8=(A&lP8_&onq^sUAvWWYx_?(+FenU`tR=$ zRN*p!nq3#-Pd1R&=>(h)sS#4Lv6#A znydXiD#sNGdBjP7uSPchA}FG}$BE}RUM<@J3#Tt$w1aDhywGAqN5bg#D(#wc%YNZxLGsH1Vw4-GB%3b zMcy~2tU-uFd{B=9Gs{xTU7Rn&@Uo%H^I}be?!Sh>e{Q{PIMhxh7Cl?!4FI2OjQH)P zTl%3>3OkL^Dq%ivWm##;Q)oHh{Q0sD^X7T1KXl01`s~?y&#mz3L6!JeMYkNL(iNo^=|O!`t{58;+ksTp~K3&0isvu&TDUL8yR** zTXRguAXA<5qSxc;8#DmMc+`awcYr2JP~=5b@&EHg7-W42Gb>Jimz&m>&~ss(79CD5 zKfJ{4OOu#B=Ae5zAbyBo<$j0#f{d#WM!ltvz4<#8C3@D=*2hk|z&hAD;z zG07wfthr~;y{xR|kD&B~HS^z(7t34*?-}r)Rg0Oq+qvwnvkE7cjiW+Bi6u~E5$>kW zm{I;@?6`64E`|Z8>S80F4%q+S2V>oEL$1B*GNhyTM8Z}8HH;KFEgu+=fPtVF6iDq< z2%3ug`rKm^riM($u^DYksb|#)lO$Q>B_@Mo)un;C4ln=i82<#)#tzfg>gMO2^$Ksp zq)ws!zz|qTF~`b6p^Qeh&b3AXKn&K{*!-37d^)U_c;&fsoih7vvAMc9`5?sxvO$eR zkm!zr@Am84^JK{JaJ>!vi&k-Xg-Jn7`U1B=fgCRJkS7xo_5++m6*tJmS1i;%`RRvk z5rk>U;&>;_qe?j~Gh`)%O%`C2BwUiRoJAgju78;XvPO1!TDi+eb?8)bxhvq*N$we zYPRA)QPq@LavY&*xACINS;8m?orennp1hxod3QCK5A?Wdk*TbNPMhKm)hfZnhZySQCKNTYNg z>6NwJI6V9`T2tnV%g5EF`HaEfY(Q`#cdI}Y--mRY4iZB9jf1RX>d*03gPjhlhghjV34E+?b{kK$?s1^C}@I*@08UX2oBy^Q47=!;v)|+9)&iW)j(zh zFV@%|1(|bkfEeQv2T+sqnYkt9=TZ?Dawf~ErRsaUUprPJFY{(K0FNhyg%57u{tLdC znf3^@W657lm4@K|{wA|_Pac3g^X1l0$1gW(EgFCRbVvPV3bq_$ml_0C`%b+CTY?gR z$({kEfT^m+w3CL7dHX?ZrL*@01eCC1ad>JI3(T1%6RO(hYef}U-{ABHWNU+o<*nUz zvSCpvzdmm;57+jk_YoEWP|Ce~_k`hI3{40ZMoROy1e$s{sSNlFQSCYALbk=uAB=I2 z316fvVP>cIt;MU}3N2knYH49bo;;x2fMBV!XK8 zwRpB}U`JnL5U?0}tahiLG=T$yb0`rW2qMl6bN!>p*Bl2oVk^1o)=$!Hu+YH>U@Q7VT=hlHFsXQz#qU8#FNp_ttOHDM%=6uPBA(=GK7GR;>3_5DOlJpvZjx?iN-Xz zUif$!SMMG`JkOkW=t;be09C<^YCjcH~+95HSj>;0E zDyAB1Z&q#J&ugx{x>yWfr!?ejz+O5CSV_9Ol9(8dyAuqI{3b>cZ?*iYa^+wFZoHM1 zrP{`-50Glxp-bW9IZs|mdGAn`;urNjt^c$;cK4rueVU)sPIus+ANE!*-Z<9G+IZPhhIhSYJ_1u}hCG{vG|(sq|?jTA&d) znE(9t`>HB?vKm_&CR8@$??5PUK4;#%x%0>^-@imz+E@ORk&$6TQf*{s$#s)x6PBH! z45JV8Fa{q6GgpZP@2aZenH@NbN{YNYM?}V5DGN~0*6N;t*Efw!H2-w?vA~O zRxGH`p+lvOWC^t8XyZ`om<&XCi1`tvmii7%I8Kq3m^^E;ti;x>+EBN~vJyO>oC&|Q z{*##CYs1Qcw;Rru<*IECc&>9uLqI(I2pphOC}|@h1m)1 z6J16KK_tXWw%NUSky&!>DIV&3D0PA)CVO#6QXO=K96NB&0FZ&Wo+YZv!(YWSC0fWg zScV*L)R-DvI4gbszGH=z$&^Wp3akutG@oe;g|)8&G1#u3rR; z2Bv?=i2$h4L!mB`PF)v`}m#-9Sl{@z!+K`-?L}`5WHgYOMIee z!6^BlNVrB843~CFk)UySa1VrLA7d4}2S;|Q@43;^{4>c)6Tbjg_{gkXy}DR<3wId_ zZfx+k?`c9PUKVd*L=KFe&+H`X0jP=&T<0`nY)_xgg`L2p3IJTS$c``?U;99ZyPpud z?szp1Ul{rZU~{Zw zAoW*1Vg!fUM02Wni0>04kWjoOP6}or9AYs)OctO*Vehkj!~(ks*Cj8BY#9qB2!!{n zi&Mh+JRJg<#TGQ902^>(ub5#J+zx+Rh|)y19W$naouwKb2aR+??H0m4&P@)h)lirh z=!MG^S={yvO7XN}ds-_l7?SpMm$0L|jb{grj{B0di+MVM!??{(K|z5gFE26-aRDt; zl(T4i2AH^3Oqp}B+{R`Hp5IfJ(fcZz$}21X>^1~SWGAx_`b`-Kx>(y>gvisY1mKNQ&dGe2;3X=9!&DMVs%B4uKxK;oCe(OzC-4m5~H2) z7I%py+G-(y=S1iUWT3o1Go1)+z&j#lxLfyvr={s`Z5e3Nzh2m|JYjETx`;7;$w8{Bf;JK1$;D0JN~@tf3n%0XvoX8@U90V*o(rr}#eYdYzZp*$ zI=DA6y2IyG7q$E1b6juHDmjw$@g6K7X zC7cE!v55Pc=we*XaI$aycrzVeAcUHXxTFQpd;)NaLjV*)?aS=HZ7(P!mRnm!uay)2 z719!GBiAvgLYsos9%`b`KE*Z(VYyGANyb~e=JFW1^ph7Z?BpQDB|D+X2+T-vch#iL zQ|#h8gfz~uB_n$kR`ixakFc<)Fz18`p&4TR$4@Gg%uwF>H{Iul(j}jEELe$gLkYtArd5NTiAaX)xoY+8i(RW`V;Rv+O5#I#Dz(%(J`ccR-~OgaRQ7bs0wasNrXt8 zseb3AEXI1ycqNRrumG`)W4J9vLBJ@3&w?@${|%)w)F-qwjxcyH)Gq!D%$z)H)l3?x zNfi&HvT8Px2h9tw*qvQo z8VVF?(6ERPP3R%|cWeHYs~RiK;ci6I#~D&;9L1%Lj4o3l)Si4>t!WLB0xKzCfi4L8 z&r4*&jp-|KC`5~C(#@n>j$VY1Y226*eD*};iOZHLp?T->dadV&nGvqCh};ih4mrUw z5UF2ELf>@TwlKbet+QA@jMxM@!W4B zEe7NIf;g>p=h20w6l|IZ_>Je_@$h(f1pjhHL+3PI>rLy4t~F#xGyze27B0LO4lZrG z^RKXJ^w?l9h)O3-et@rL-j5Fti+H(Mvo9Vyl~$5se@n`<6LZ#E_?zXim&_PWt>N}9_i z{rU2Xm}i*ffo9e|{mBC&TUqO@=B+G7ZCOBS#Y&=C^tn`; z?$W+u0c54bodbe;9nUxJYQr}^d}znOGm;a7$_?XjAM(_ihhSqVm#v!zL!`a6Znfla zNP5>)@v8Q-=Lx+DW;T@G;);gwJQ_^bSA=2V!0_?{iHWkXOQ~rG9g48LACEw3tvkn%KFMk*xI;LtYD*|?7*zY@I0*pN5=S)> zh+E|4T^+iL>r2(;VnH9`ZVHgYSLTSEC~ABR!lIaOfdGqDzfp6yuSk+;_goKz#we~h zvL%(@z{)$GGDQ9o7thcvxH0oU#EKhLIR9KfDXvxg`|pDcBy^$$I&P!2J9UShg2|LA zB(*U;s4dE}#j~B0t%TbxfPQ7CYw&>s6G>{k2fWj$qk&?7nln>(br5$p2=gK@Cjboh zN1|jHinfEq%u^8_R2tZ1A;7YJf?}a6Pz8?zcmXD2f?DvbDZgH&;IvLZ&hHVCd=s9| zOSA`@KfTzQT|NLp1~`VaQSpV03qQtrdkl(aroWkXX}3aa82*5=Y)-nxdov`V)$JJ zPe%L2jNYXGL1S$qF>fevk>Qeu%0w!#fCFz2)$E z=dBhOE{QuHjOe<-aCxgw&;wyhaY6$kHfPHDB7GqV8$@?Ck|jyfrEvDSs|CvxkoDKE zUnDndKz`g9!UbK5P^a|Aa2pB)@$LYl*0qKHjO6~>0SYqOtw6A>6{BD$u4Opq-WA(y zcz#5txI8O$GSnn}MWg_FC=;BPlNd(pDAATc6kH|>29ubq=j2(UbfYc_MuIu6-jEr@ zIrep7A1BOPZ<8Sgxdy-nAM1w?1LULy9VzZ$g*^bFb2G7cW-8J63E=Mu2C zPIQ?jy=;x)uOUYhdUedPO*p?d;n3Nk>cdtp5w@aybg!aGesm0^*uZwPP=`%l`FGCS}&i3H{g$dS06SCc)^db&LnHdk=94YVXwYN zMp|;0g3M~a;EWZiRX<#HDRg|YCSVmR1vxs$t}OBwdaO%Zi(;N+*g|`9p}|P_U8o{)$&0Xpacj0&hzLU%1z;_^kz8?f z-4X8lKxU+t@nXPcF%k`j+j{h%4uWlabA>b!=%8D+aV)??g)D+d22URUgt9AZ(k-e> zj+V54IwU~BpGp{#UCu-*SBKs8J<13nNPsI;Lnzn`(FUoStsWJv+e(_AKD$SV*J9)X zyvGO|Z6#Nn*!=j?@b|R@(H`-f%@C8~en0x>-mM4(FkRdmaDOZ#UI-lNvxJzb7|zn;S`c!klq_*f{GXArUDLr zPW9KVH+jj2%tsUZnJ3@6Br{vTlKTm)_HxJ^uYcCXLDlfO$} zWRyzD_a8sT{dajmXz~0D>k2Z#`bC-%)61DFW6wLZu@@%;%Vo5#7z)42+z7av4uMw1 z@_tT^?Nly?_&rJ)ZiGTlpBG=ydR^-zav-6dQ~lx7Cp;^zy5NI}%C}EaoH9kfswspY znkL$5ai&-^r?F8Up(OPwEqGy-k=7tz4&5XNS^H_V;SYUIq!a3iny08Dt;SfoP!^-1JvE>{|Ek zBS(yMO3VmzfKpR&2Tr_v*5}P)5c{EN!t)*!(A-LKYF*1WU+*Tdb6=NH>GwW<3keI$ z6q$j_m3)v-;M9pr%7oTjg8kV9LrY&>2XWDnJ@TaR7S5v~{}UChp}{X$x^NI_WZ%1D zZfB=gQMo*VITx|&;<7A?ojvSzb%O^}*e(WwdiGGr(fUt_ld4g( zGzVc6z`6B+_Nn1Xbn_j&!>vY3p`bwti0f47(eOneNV%NxHCB-`F`6Z(F=K|}>9fYO zS%wibgrgtX3Il7-NgSCTenl3>($gvY+)U}u0My99Pyb$Nm*491=CfKXbNyCl?*wFx*{)z7iqVJ%}l7j#17MVGF)mqfTnX1o@p-C z78h62QH1|CG5f}vY7>%RsCXA6y@sgRX%oy@p%F#7PjoK_~4# zL4rOPWL;N-`W+~H+=3JIXL&ecd>g&%qQk#W7MEyYO3>@!B5`pN^`5-hk7%DHLF1sPCWhmirAG8K7+C20L+ z?mXL~Tidy?AcR~?ac4^zGG$f`59{h%;o>NX<>zUj4=EtKFyM;EWLg2tDyG+HlORY4 zJF)J}7cXKtEDah|QCWoVjpTz(5&ds}rU35{xWf6(D3P)hmv?oO_NAEzv-_#gKw_8R z5xkY1Na4a4txbZWB#?UeKW+KyPUgT#(kb}ZF>$fbZxZyOxNZ!xfgmJehMQI8z;i5MQTHabQB>IZiENk76u$8EHo-As3O9$RD1rsjOYJXTjv7T^WFac&0^mf zoy{SKO47`7%JFVdN}^H@Gu9juCT8WZo2@w{bRsf2wWT(PM3|Wz?vUh=a||~_LJo6C zLv7Um`TBm_eeeD~{=dg#zuO_-!~64oU+?RBU9Z>c`fym|6(_(qi2({YG=KP9-N~>O zLCG|6ivm}td>BV1K#Zl8kw7~IYsv4Sr{cBN9@b`^52`9kD5}AC0Ro^#ut@My>dAP+ zwl2E#iXXu9>g@h?@~MJxJI-Fdd~C(xhhK>1%iWiT&v?eBHbf=1)l@}h3M%p|8Tl;W zA(_@G9g!`Ih6D++@R5?T_F$2$Zj-w>2+}1`cWLTa#&?*_1!1GM8<~QhgsmmkQO^CN zRxkg2{@+U&)Qs3-To)RS5RW)hz^a#p&QcqR{LQ<q?S~AJoj2D2sG}5P5a}e6 zQOATn(#B24X~ckJwgw>v*9QQ>OiscTgBeu)d<<`QU1(@wAF_<3D)FI${!^7u-+dFOr=oB&iG0A4v{r_WH@)@O#G~=t*s7M7>6J zBOE}Llk{f#bT*ag7sW6BWEU9;kB~2kP4gKsfP=nUlgbtg%}2YwJDUEeKS>l=!Ge!r zP1UejL#CeW4E&H@d1vXFs4>iNID-QzsK4nE$~2Ql2wTDU2mvB~J-P&vgtYF^wxMy1 zjlJ^ljx?2P*S^Ljwgd*d4lO(&0a6f;#?j^AgUTcmkCSfTa2VY3j#lOihjF{9X1aCD zvhI8_1Wo+=cc&>?a7xOK}KvkNT$}wiQmm(99yp+@LcD=3j>UKknS+r{k1Y1JL zfA%FAhAEbe2OuMHI#p0owrxgPsK;kWEX7wDVC}OMON*y|7%EcsmHPqG(>m;Q3xZ8( zEWjEWQ%x^@0oR`Npi@0e@xEOGR19D?wx35*+d@vFlv9dhrgfr}x$@ANXG+`!gs5yw z{;r(?b~$WZjLz*;;(E89CRMM&)ZX2naCdB64%MP zSu1!D3vdv-xq4!DI)*ZM+ZbJVm6JAW$hF;j&s7`%9&9x;z`+bbXv9Qg#V)i%PEw_#eL^kx2zkwWn+V+eirZj^4YGB zuk1OU`{~55_k>$~zI|iDhrfCp{?Ny#ms8WYn3hX=S-)YuxM`*Usq&H-gR94g%q*Qv8L`sYiR8kN!j z(bX|ud*bpWDT-!;*=)ye$`O2*Xj%f74MvH_R_ci}{3O)T%*~sf?iY3cHV|_BM>HhT zT5%s4snYZ;cw=e}@^C@t@LkYUQ$15)ZYbi$4rDJALkKfO2FiOPl6cve$wh%y3u~tH zE4DDXHohQ<8=#pMVGRn=M`{X*2g7gL#O|>tN{Qvj{fR)Zsxi40Jqut<;~W?i_g{YX zdB(Q(3xM6ZKUdyG&P<|aMAM044g1lhlGSh#MH`KfL*(n-8v=02?iARJ7IVP)o)^!Z z%Y$jct%7^*|9-!QMm{($xtdNBz7u&SlEAw2YoRy=wxDke3Hr%t`sw&y!OBl(--^yh z%1&9{0h(PqG?Db5-RP~vt-fTIQI$!y;_uv2 zaIE=4E1#uFbqQJXd*kz%CeN<3XM;HuG!v%EmI?qzBXCfwINWdXFH#l0x&~UU zXl1B1x7VC@Su~5;Cj>q6UH4Z%tx9d$?DFNc7oN@!_hxOAx%5wZr(1n>}z304|;X)D+t zKy%220njuij2)|{j~d#*!MeA&EajRC2WT73b5K{~)D(Ne)oDda#8voG0T{6}1Tb`u z;Fuo1d)LL{gWtLNqRXC_w3r$k8+RG?xW$kmL(9g-W%T9v(^w^jyP9#UQ*Ut@4j^FR z_f^lr0_9$}p&Ucu`pyU(AQEO&&8C?EFF^E}-GI`?#iLIxH)a8jh9yh3rD1h!Vn8_K zW_9}E8S`mTKl_i0h*&}(!Muee(KB;!#}OUpQZCJU8v9-6tUnmx;Se5b75m4V2q}w6 zeu(qsQuK76dWQjfhd_Fd66QFkkO-P{|I1ZRTMN(_Fn{OplN`*Mj4^4{xbZ>b&^m$t zz;bHG3~oagfWKe(c~prVEPM$h3knLGGFci>(xZ3BxI0>2!)B{c|+fKEyj+)X>O`_O26mb_8B=-0rI z!a!ztXb}M0wD3HEX1Q%KI4I~(L3I6(Uv`nz-BNNx=UNOF(RXv6_Pey}@%!YabeFvY znzDzC1iD(UPyW}l4@Fs-`01yywBKeunb(50CuC5;9q#UlQ17b#c#ybwF@#pKNp1if z!&|m&nV6U;s~x~#`5FQ&aNn~yf|mJ?7_3bBhH+9?FmFW=^Hm1 z5)OOiD=^ao=MGq8*Hw6d>ZCDz2^QpcW)YA#J<_bRrnq$8Zh)WNZRgIQA%}D5sT@L^%d{Lu7_mo4Z|vrKNr^7&ZItU=aw+Xb z2EymFl7kWV7@r#MxW*mfwWlnc>Y3e9@nB^2anekw*6^m{bd%`F#}l|}@2`PG3gR3U zN3X9xu%etrgJ;QVgPE`BQIqHOBhR~j{d8#q^My18SW(ggI+VTa=RlTt`~v;~4P!Pi zdzHM)l+YMwAey`t@EE}thx?s-NlD={5~rI}c6Vz*-h%|Bvw8!f?_=6beKsYt{LfeW zo*sXX*Aa`iV41xEQrggyle!E-#(*X4OiX7rL5-^k-M60PDb?s*uST$%52bEUbi#V2 zERu^=t$%>HmQ2*!h#XAAEM$2u2_flmQoega<0YqJHy|dJK#>}k z-%uS&{tgT#z!hozFile8?+DD?LOJJ;nNDZk;}xT6E^PfC{iQkB+bc`Kb zHxNro97p*9K=8l~HoO{tZ0l1{L`ze2!Ux5Gr8`Wv(2s_Gqv4QSRK#kRZLp z@|4*v@VE4ZT&?oHWDFV?2$a#XvCCJikf`;)Xf9_g z&v15`+kfSihXsF)XrwA6Qjvyom)tpF1&!w)-6w{HnQ^HiYd_gFx2*oDDZ4}D1OrPA z8GE<>$xae|VPX)}W_i?$z1MwgeM~7C`m{%*sAqW6WKeOKG&QOxwaYd{)sA)Ed~-L} z?2Jo5LLZTGq+~R~Ox7@X1g*nsh(x+O{?+y9pF`gJTOmlU1{(CYKPERJdDcgne&05H zXA|SvLZUV|EwXWrA3j8+pdN+jdSfB{5Z?xL>e6KauZ%vkypnp8Je@+13=e7uzaR@D zQeT@{+Kk_D5Dlgm<3TcP(YP(}P2|mZzHE!X{V_o&?FW2@$f3juzH!4IBdU;oJa!%_ zIvP2QAmB-M>Tu1>)1K=um*-4xOZ%3NAK45wjrd%oNHp7-5px1bHTW}`KVBBnR?9tj z7%sg$CCF(+1WjcFgX9CtoPb<8mQ4eDRLjXos$tyDaE1_+U_lYe`HdoBmya2k4*9mo z$d}>zL1-b4E?BTYI2~*<00<7+d9zj#ap0O1Dxj1wM5tHcIZW!Z45SK}7@-In0U;yCO<$xJPdn?@qWo-)esbn9ukCE<3n!&7H$j- zAZ^g5O+h)@e(nEf2gq4UPP`0^L9Wky&#(*)?B;DH`NvhI7H`ZoKq*t^Y^VicDOZzm zWTA(8N0wa|AB>$b1J8wD@P3^^-zs8vi2L(PV@MgG&xoi-8Ucyk4$e2ttt3)&@@Yh1 zK#S@zDF%XldCNXqgK9LC449YNQh$pZjsqQr?b|!ZpO5A>CsV39*^kjgm6D1ijtU&_ zWhoh%`Y_;pzVnj?cFmfNg|$tu1b31}A+DtfO`0#D8EaI*YAZl73Ej>lFBljO;FE7t zR7SjON8WvV3IZIY7x3Iz%=xU%w#m)tFW_Q~_oi_UE8|^Ad$D6Pjc27I#s6w>8_|e4 zS*AyrIe1D3G&4+nSO#@;251GgioS7TNN~kH^{HL!b<+Vg-jt9-P0xx)2o4USDQH?b z17a&C=D7h|iX_8Dg;#+Ogz)iiMbB~aOYG`tNuz?32oO>75S<2$G@}ovE+>-Qv-E_3 z?IEEN%#7X(WLFXiQ4-0o5gsS0#12?~^!zF>&VDr%y`1t>;JzBu*z)qU>ZSnhBsk2e z`ik?)_@UK2nkTgGcHpd{l9}5~jwZ5S5vv{^`&GbvJygJofdo-x-T1&bQEP0B8*t;j z=Wt-et&UJF%&w88s2gcM2`7&TK0LzZLuI|)R*TGvIWh-4qaY0_^Iwn0#0QABhfhW; ziJKNgk@%M1?1O$)3}YPJ1`8qG1=LBLEVmmXvYwr%`57ZGv!v;>Xg%DjZprY&SXQb?zcx z8g>BeWSm4m))X&gpiJl-CM{d|#Pm(!9fC`AL$Tj?hY;fFg}JVH8!O6#qYjK}kN8#f zV4Zn-wblc(Jh$8#D5GcUTDo|n-D}VDgj zBc1>bstJL|bQ%OyMA7?54xpYSJ5g)x+k#wyG)gGJqnr|R>QW6}p;M1rvxSigna>EJ z>(@1~#R}>kiTBZ?1`4+w+*{BU zd|H>=rf#~uk7#Y$*pqkJttgxiOBMs$C3vPYZH|S2a5#L+od?H3zoFX69;xFsBy_eu zu1?s#o7SB28KcYNbTCyOAsSTK@8p-v^dk)lWs$|TM`BXp2E+pEj(sgu2&?K~TOu25 zB*JA#=HNE4M+!l*6%ZP!d`EQ!}bo! z4b}pRO&J-S9qMqDQIh|V->{#^70CPP`9_#Vr&eHw;;JGS985EKv2E4)QHktYzg7zk z=aL=lkH~&l*m+KVd`%*zNOdAapoOPE)8|2lr!h^uoHI!qA6J4zwiBa^fG`O75+utZ zMrxW}`(M2el^!-xPcoYHoa$N5t(^%)0LUNZji$ov)}Y1dW00G_W$s#`d+pzDrM_BO zJ*IW(k7~~qAN$93x+#+G!r>}Y z8@SE#khVm6>8^BgcJACh@uH0GI5iOKp^cT&xjj@;cB5>D=`tb_BR&GovIFQWle(1+ zqfL|SR8V;4jHLi4_B&yc_lbj?gx{!B9QP(aQbQ%`RtHeQ|N$Z)dLIm2H9IepNg=A%jhjw)0vaC?ds7bVYl6qz}p zlBvW8vD!Mt=G0s`1|NbjmwaJNFr>^@W%5PR!s_wUzLArbtmMRcz;KL^Qu!*i`>pI@ zhmM%glIA9~WXRif=Kb$MMaK$$L$Ks3q3$-Oa=p(p<8qQ>2kB9S2XSFw=B-fOyzo-# z3ziZ}g^%EijZLQFWqv-Jg@X|l3_NZUuajG|wIFyre!&Q9>RKH&#@dY7>PzDftPU51 zh1?|N&_aojocz$O(P`%V zg#!0+1zM1Z1HLkWjM4>=i5WLI$7$vOD%{5}c0g=`Lj!K7hnaL74^mw5I%uNw?g!a> zb1-+1(<=00J}Oy)7Myp3do}yUKdx7rU$1(;3!Rra+eQloLapvs)28{j9dPKG|0?MB zw0n6yO_k%Qcn5^ksxHBk3S!zobRrT|fqYoW-3q3uTrk+SuaUO$HOLRTtf7XYiU8Q4 zqXL!#gP)9>vJ*sTcjcWm8YqJ99)3*_UUR&eaN&uQ64PG&HeNPpPI;x}WlR!DFS>_N zu2o$pKW+_Ej%eBf5~&xJeKHM@9*klw!7`>kY!uqzM{lV;P`=IgVaSTEu!TS5|E3XWjb z0)30($_{;{iOOvgZT|#T znufuU;X#vPq1YqTLzL7UHcgtO+X6NMz@*j-WF1^IYSTESGg`t59-~7^h(3I8n&Yx# zC`y2=8Fvw+Ii_+&N_?B~y~LoJYZFyRkx7WoWPrhqAmI)P~AorK!>#c}N9{m6S7X;a({ z60jl%W+Tl61e8{I6?iH=US?0yhu3ewT9Kxn!CW=mIF&2)0!=s)k`+0nn_Xt+63e;Vx@q9*9sn;M;Dy@p)Tf;KM`wsoW zAk6bH4r;O7G;AadH+hj=t5zW-A%deC(HDlzhBr9j8}8z^F-Odag@|L-fl6A9o#T5S zqDTBdkQ?0;C|tA;9Bk{>Oc4dPEkU~iugQ|^80>{EQZY5xEs7MUP*52}!?GQqSdn?4 zQaMHF3W^cpx}rCoEjaiGAcCrQ$1`97+W+%W2z>#m;du#iNdY0eyHyAN!pw7&qn(}I zAyYgwo)MBEt}Z?sw;`4%^ac0@z0Vs{f(L&RaDM1kDlS@WXy3c18B^B`k2NOF`DsK0 zFw)a_a^jECR^#z$;yK1H%A`B=^Y;&fi!Q?{jSPB0Tm_p98%j5_c#KP*nax(>Aza&ti!<)oCDrQg_K= z@xv^R$Wwr2cpHMS#?wlc`v5BZK>D$8K<(k?5Q)i;;GT>oIgvCFnt(fydl~?^3Nj<(9hCY%i^<1kF{$OfKZ)Ys0YTn~ zV#2z_=v=Pc!i+#c$Zqv4iG-K7$*pqC82yqfa_CWu;Pu&O5|`F+j=VKGi;qr7f+lor z)}Nm-=z*0~FC^HuG6QsiPQsY5uoyZLq+DrE(1k%}u$zD_A)Hr}R>VBOVY;(APHK0- zfi^iCN}w~n%sQ9g|CDhgs*bwuuMD7#ZzTh`tgHkPUC;+j#N>>NM=loV-DrkWu*>xK z395X-IgBHNx+%v^w*)Bg#Keg1SthP3XIQ?c4cBmYf)2AW zvHvr!<$5=_2=}fHxv6=ZZQCq4`MgN5P46*dT1MLkG3LJV3o4y+Fr&#wx{>4J0ziuw zPpv?T3LdJcYqcqTHJW0ksQ_ezg>qcf7sP8g=0X~Pp>0-um^D`E6ZCTG8h%7EOxbbm z+O^dbo=Mpt+r^6yZvR;53WY_vycC>Zkkn$tdBp4HTVISkdb~#f*Cml|V)pI@Aayc( z1}ab~5!|pfHnf^3$hcQ;(DdQxLCZI@Cnn=lZQ;(Tsb{UPW_2f1ORIS z6ka}JZyFNZk*d?KBk|{dt)S@33X7xXUACcTWD5Kw##85;#u3iP6_AcJ7Y#Ahl$%ne zQmPRe*qnSnw(B&kf+t>}ySW}iA7q%MZpB$9HJ#qz?61F`WQ`?iqRLlZk&@EKw8jA9 zxr^Do>`JaMZmkM8B5p9#u+e5Bd6g3n4r)y)ArIetGP=O8O~0{i)~&mc>QVpMvoU71 zJUVuC3mX^xVPWgKb&79zHaK`=`H7XUFSICc^^uhs<94s3832|mr6;hCIoyON6o7q5 z*zq8|!#xh6A4O9C^M`%7V%a83k`Q%kzIxJo5KF(W!6m-ugVD0PvzhwTV-qUe0T_Da z4VAGTcTCZ}{D)uQUro-&E&(1viAP{3;&9n(tgE&KXF0>Q8E!W$m-?TOW|F-~>onVW z+O%)T97T#E1Cvv>yskL8lwTZj`bkmE05%-KnA0R(gY{yq9-Mj{5b<*wy{b5p+ImXr zDXZbbpR3z>d6K+_#D{@cH=a}NzuI;b3@3$mkI4tHvLhRX2_?XQMG>_{eD~jr2GCUt zpwA!N&|>b^xrA+aET(&u?|5$-Q+FvtG)jWmQiG74Qj@^w68pf?jBf{Y#bH*KaTq!R zsl3!SR{W{y+xg-5NsEh%6OOGISRlRqhk)DwXn34@@C@}&ALy~PHlR~F5}rw_qM9{c z)JK$|&6{uG@29#M>{7%M4i_DQmW}ESQ)+LVo31KH;*YiS%W_=oY|>k zM*8<9ekrKfp-uLhA^EPh9Dz=ye?&_Bhw)i`VC5&m^;KAN1 z8u^lBi)ieU24*^OziGenWc&8L5tX&+=02gIch5HbDCfyYVS?b86!lz>dG)*c9}K@; zO@aERMec#r?y6T_b~5(5FKRXzjVO^h-Q2wS&BzA8fxwu>d9?a|da`1_|G@{}o=&TB zi$81FF>bDX#IcQ=LcOd4zb^I2-8g91=CS+2zKb5TGb$sZQJpu__qV9?=IBwc)v43R zQ0I-`pZ^kS{MHa`#dOBdF9As`NRoH(tsT@4G`jAe3mQ3c0A~QjRon?U%k=fB-mR#C z_^wZJwAjY*A8sH&YD3d^rjuji*{vy-rc6_plz?(mc4{c(O3@j^ZKIHZDVqLzu_@ly+^(bN?I#^mG{LsTNHh<0(|O z(BoSIGU1o{>SYvpmlfAs;0nXl12bqxal2Ahq=B@OP(kwB7`GL-RicLAv8kEdXzH=V zQa7?uX*7tLA;hQV@fp8YeNceIU}Pe)o*Z`wDb$Y3cmQz!;biB}u}$3y&lkw3Y7!8gDNzVVx%BPalPIlaw8R4?CM4Ym^eC@oY=CXEt8lQ+0V2AHkS9l z;SNReZ(WK&`hLhZ$R=<>T6Oud|LziVKCzc+-8~YV{JfE!oX`IS5K4o-ATLzz0f>Mq zv=rxJZz>=YCH?Hxs|ZJ6TkA69wMd@JxH6*uT5UcLHzn9Kc*S^=1+&Mdy?fWFRz-B; ze?DJS+u>U@AqVy+Y(-C^ASwfGy^ZC)N2LO;ndl6rj}Hn1hD)}BRgTGo;z+f%-P;*Q z=aaI721KQ>BaqQ}2TbCc!Y7vgVdb8pd($8-Q-a2FoG~a(ICUyeW@>~9g*HAu_ZW#) z+C{n`@XpZ{n!bVY!$D=4!muwJl({|WSt5B1`Qq}})Z68iGm7Uoq#-U2Am{HC6fGWy z@oB6iFEvE~IYB}1#Ulhqnix_gXFvO@AO7!!Vhe;_pm(vtZ%ExYZR>?1F!j z;?vTTX$3%?FB^;$GinHzI`xYz%sSUfn@0-!7xy^q(Xai#8s|*8yyLPz>>-*UP;k6$ z{?D@tF+D5GXO$9VK#zqt3=&KhN=sFyh(gvm9)mV~NDHZ)z6q!b+lCRUufd!Ipe)3k zR$yon_5S)c^rQ%rdctHPQj0LZU?}dj`G!Kd>%KR0;GS?M0nhnQYN?PUsWfETl zTID`0KQ_9)zSqrr5O{-LR=ISK^Z*v?Lfr3j76{a{KHDLEG{ zaYaA^>)oyC9i~5tsCpq>c8RVl$|J#X$3;X~?i?OKbR`Eyr9}wP$m>^szQAXnWQc?4 zT04&{0}`|8Ok0_@2Vaq;WprV61}soQ5n}1_^x=(>$ku$J815i4-iwmp!XPoadv7ka zs3TTjn({8|aw^odTen&u{RH^Y})7iHqJOwch3OWE03e`{PdqX}hoc~SHFAMsui(XL2V^Q|jr1)j6 z)Ay%sjFaCm&hQ`=!KF!LXhhBGm#3@41)TPCBk}~Boe@P2QGiBUS^D*HxhRc;e2|=-*xw$n>P4>pb}!cz&>8tLg#k^npj{0- zz!pQ>#;SvwmZC8f=USdebe$wLklSeUuYV8L>=EJ2%yNibwCFZc7ZEOGko5TL$6pD9 z<$G!7FPRUK3Pi>Vw#V^xy)><1_gc(Wy~6(}9H|;;;x%`VMGuc!HKCVQIj@Cf=j}W~ zUONXXk=P#lxr3iv2HJ z@kB>~c2Lr(?IU8OV#7}piXdKrvUPBG_gDT&DNQvXV^Qu~h#COMHECNTJGiv(liK2ueGpYk)7_THt)ZG8|#4$Ted9nZ9X$5D|=5oK%-ty zj+}J38Q#VdtV6jAjCe}6!VI$Z1u6m);RaLpg?ZIg^Wihdb0D|;+sDQ}DJ_~=PnV@_ zLvI80^%2H5Y?qKWX1RB`VBj8~rt_QOV%@n+UZfOetV3|=3YU1wAxcaT0?Z5Rax=u? z>(ncAur+p3bAWLtO-iH+bY$AkA#vBGCZzeul_K}{jve!$LK9m_u*h%8FTClp$mfR( z0L^eL`HzYNScu%w@E<-9k-kNNSBS}4%;_-+!;)-~ZpgANhyh+n(pr21isy&$W-fvAFxR z$&>!^_)x%$BkQl+^C-Xi*_eM`yL#|^W=Y9falBH8AVZKixL{ z-Oq;q`|+;Xzn{8NKedzBzjK>gxPG$7o4T9XI1cU~{BietA$e3aVq*vyoxJCsvz$?7 z{7;{O>iq{cEcg*Eh7z*zc^ATOW8@dIZ^qKog$zyrzks907d;{SmFCTz87G6xmguq@ zY9$VS&{(PFz^F#+@+W3N=%dRr6Mmpl6!ipY+WFVEE((FQLvE$aiJV~c6g2a^5;>-2 z?yM$@>To;aH_7|GMOz}#u4&V-XjqMS@7+G$0HjN9&72^T4OzScM8wg7AX1It+2Ih= zjjUZGp`g=gjuN254Qy*$a8nEmj|uA*z#0!NH!ZUYkqrW@@XW<&Ppz(KLnbYxHt za33!2VJVf&iBjUoCU($W!y=nKX$BY>RO2xiprRvqM&xtzc4b@078^pShR`6HH!2=r2AFC*>;P%>O7A&9nO#lp8?C`gSDnuNa_QE?n=r2MKnh zb+q3!sThNVyh&X;P39R=C3bX0a6|(MTLe~;#O2Lzb`8D;ZS9uONB2ZEQ3=lKaNrTmV zoUX$lz;i%C9BOLe7QwJ>4hjGg;&dBv9X($CK1kV$M2hf_fsM&+h}Vadq6lI~)tH%` zy`Jhw^bPinYe>!kHe?>Q+d6wWkYD8AT5-@~)|?C%I?b}#hpMw`v(x(REC}ny{%O|{ z0gjWOVc8+FuzXw~Pms=AWy|7i^6uO3aQxu%`zw`F3m?B2?xz@_C0I@K&VGv5%v1X1 zk|KZkuhgEizvBW%Bt92$72}nG2-xl#rp>f6wj+=#eG$>#{gPK=Dtd%xE`*kuP=?|{ z%um7JF`mKsX*@hr@>R0+0{PMB$SRcgDT6Q~@(lYL088dRbe7i+%;Zpna#8v7htlSV zw#vB5c}hGe9{6d&ofObe{NyCeu47n3acxSOgRBBP9TX?@)f?}E_01isru609um8a} zQ4Wvehx2=J6WZdU7pMSLa}=lG(Z}EjxIdQJX`pn>VvC2cQx1DNpVnuhh#KNmt?oRL zU6619RO9v4I)hQvXcgWW4`%u{kl2M7*=gTw1&9uhL04`lh5V+;ePSNayTzrBgc)+E9fNs|6*m^79`< zUq6y&g>eI+%{9yh6G%IWMd3T6xGRhU7%Z!(ctGiigY9QxlE6Pz6E%xEi}Opnp8kes z#Q^>W5-OBd$hju@FvS+OH|qv=&{rnUNi6!*Eov#rfkVuG@<9Rv`GR5Dn!};R7*xkZ z7u~x>XBLRgthg{fF)<8(0+CCBPEgA*0G-#P#su*>);F|C|Ni}DfbO%h39rL_M|K=@ z?DV8A<&act>S8iMtD0y!r&;7!%VTW8n*aYl!{`sc2munqNIH$3*x_9aOk z(WPlELTBWp-Mw35wfD#g;+EOyAKx~s>%tayCNhKS%CQq|)gam0FXgn< zZs&@IzL9CTc>Rz?r&dD-KdJTsW@!Afs=283JPsU{2upd(^GlLi8kT*V;Q~wnbKG)0 z>{KuC7dW_4Ls$vU7Y_htr@?C@Xb(t+7j9GZ4yXwk#g%ZV7(!%HL`w(5vJlW8hB}Pn z3NZ{yU{t2o98%`Zt+QXfr=?-KfMMjDT=vxM5O+~IA$FKWzOCc9G3>skK{-VuWl&TF_!Jpncfx-{+}3KuQj109n~#{2aKa^Y3SN7)N%0O zt3Dw5thc7F#Kf5KEy-rKu8D~VV3z$l?DBzqxC*^0Ftfo@h>SMxe5=Ba;&Gv>qN(FW zb5eeL%$gz6dRk8Yf$M{>%QPJn3$jBIbB#&3DP!TRjC?b0!f%*>tILe&DSJK53aJEk z4!6ql#YUAk9g799VbB$mT(02p3)x1w5Q(rb!sm_2z4kE-Uc){IpbCQzm9}ISSmE(^ zZ?%e>unFxG5e#s5_i79b(#Tx+wN+k1hKtZINHOi79sBXb#I64-5N%EZZdipg5w38R z2;}uNv?hVWs~O;sAqQhFW`9Cn#M>7~Sk|>JI-`pcv|EpVD3Z)V(1Ih3)|qEHLN4xj zn?gVKw}9V3bm8EG&Bh2S1veE8M@}0P@x#Rj%mg4(Py2*)wlyyNbL6)x+A?67tD)ceICt~hlDqlt$!ZUG4J?_vB8sc7|EaT9(3?uT+(ra3oR%8+Q} zj|JK>6myyJ1!xv~uAD^<#wI7?QgCQ<5(qguT!7J*uC%_uby|}l6iLo{%>>;v%NeGUTHV`v({le-`6JYuAvYnh^lxGN9)xHx3E&?r|*c z1u<9*CZUau(Vx{|(CJgt8&Al}+pgltZbWG2vDmaNQUUaWe?+zKH9I0hn%rOW}2UT8T& z18Cq|h;9?z-ZNz^UsgaUs7Z_$GqR~d*?|)9n-%xD!Vh5y(V7V$Va(p!hmoO(K{CFO zycqYS7mGE4)im^M%)ZGJbScnG$GAQAK2&gV?+GN1f zK>8~0RDv(TDpBP%L0I#CK#w3W6qphARCAK&TMs%z6H~Kue!enUzM@(BU~mrTsarX` z6n+Seg>!BdGn;!)nklj|t|KoNjCZE?!I^;DbRaeruyHkjj_O5*n7~{{jRGh<9+EOe z6o@cp^EiN9W##xcFn+sh#16L3Wdh zLN!NTQicnc2lr|8ldb#&q4h8VpRyT-28?9kL@Ni#TjT~bBSt**R0Q(A$xh^xjW#f9 zBRU(C3~sfU_@aA1fX6~NBQ9|K+3|5y#q@5>nROxCSGu#9q5eoLC|Gq8 z-;W#BMfyqI;0eO8Ia6s8K58DMdKkR4mRi z2$Yits1ZN_ZEB!}q}eaWfJ>eI)a@m^h54)vsN-4_kFvlVG&coDDp6!CXJLi7p@^2D zRm?;@c^SuvI}}BR7UY&jBa^V|3O95ePNh$E7m{FP_jhvOyMX0n_X&*$O2(uynPMP& z9WPB5h=Rc?ZvfZ>!1WFGXm86Z8|FkJ%99-g9AaA&D}gbow3HXv`}6~2Z6@fk4X@kFEE;k&}sA}iH&k~ZY6y4;K}>1DaTNt~anrC}SUrz&Z| zrgK)4Q;9yvR#`<&=2g-CtLJUuZ-GU$G>q&+*MkqZ7GH-TF2K>4WwF})Tk4a}*2}J9 z6a#B<1LianN%rZny#ueo@;h4}2ONPo4)#%vxqWHEah(H&>9`x`0xe%okHab^D17pr z1<5P(&6~R)rOzt!l$;b(T?GWpzM;DX;OJ#&!T1t+X=vb;XT^_{{|H3LLn%p&XM@ed z!a!IybNHtDtd(~CLX$P5la!I~fn*>j1+IboC}AX#Rw#8MnCR63`*X_vQ#;td?8=}o zI94<^XiWBV;lAXaVL~k`4txJr*2~WGmEqQ5CtH@r?M^u%GBGJGsWTvSGR*| zo=KR;kwM}~eamThqxcUdnUQ$wVtFzITVs+SMXzZ+ybi)~F(Nm7FtgE{maGipHs}LM z5(ajQk@D~){EIn3VxwpcW1dMxBr~i9pe%|@@ZoI``OS*67$;3-(-7}DAdR;OLC1u1 z@tkNl8}bI*cZjP;io#xk4$KHbCtK_i-hKc5b?gSbl6iH>56E#%WC@vlReZ@wMoh;( z@ic&#;(H)IaFCd}p43m!vO!^bUPSQl$0KQNpwHT)M{y7XS0iPj1z@KUv zbBe?rjkaoZhrwaP Date: Wed, 15 May 2024 11:11:32 +0200 Subject: [PATCH 29/33] Fix missing docs --- src/symbol/projection.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/symbol/projection.ts b/src/symbol/projection.ts index 04f4793116..7bf8b599e8 100644 --- a/src/symbol/projection.ts +++ b/src/symbol/projection.ts @@ -33,9 +33,21 @@ export { transformToOffsetNormal, }; +/** + * The result of projecting a point to the screen, with some additional information about the projection. + */ export type PointProjection = { + /** + * The projected point. + */ point: Point; + /** + * The original W component of the projection. + */ signedDistanceFromCamera: number; + /** + * For complex projections (such as globe), true if the point is occluded by the projection, such as by being on the backfacing side of the globe. + */ isOccluded: boolean; }; From a51694348b0862bf7380702b12b155f7189ad3fa Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 12:10:48 +0200 Subject: [PATCH 30/33] Add symbol box collisions benchmark --- test/bench/benchmarks/symbol_collision_box.ts | 114 ++++++++++++++++++ test/bench/versions/index.ts | 2 + 2 files changed, 116 insertions(+) create mode 100644 test/bench/benchmarks/symbol_collision_box.ts diff --git a/test/bench/benchmarks/symbol_collision_box.ts b/test/bench/benchmarks/symbol_collision_box.ts new file mode 100644 index 0000000000..c298a1e1aa --- /dev/null +++ b/test/bench/benchmarks/symbol_collision_box.ts @@ -0,0 +1,114 @@ +import Point from '@mapbox/point-geometry'; +import {Projection, createProjection} from '../../../src/geo/projection/projection'; +import {Transform} from '../../../src/geo/transform'; +import {CollisionIndex} from '../../../src/symbol/collision_index'; +import Benchmark from '../lib/benchmark'; +import {mat4} from 'gl-matrix'; +import {OverlapMode} from '../../../src/style/style_layer/overlap_mode'; +import {CanonicalTileID, UnwrappedTileID} from '../../../src/source/tile_id'; +import {SingleCollisionBox} from '../../../src/data/bucket/symbol_bucket'; +import {EXTENT} from '../../../src/data/extent'; + +type TestSymbol = { + collisionBox: SingleCollisionBox; + overlapMode: OverlapMode; + textPixelRatio: number; + posMatrix: mat4; + unwrappedTileID: UnwrappedTileID; + pitchWithMap: boolean; + rotateWithMap: boolean; + translation: [number, number]; + shift?: Point; +} + +// For this benchmark we need a deterministic random number generator. This function provides one. +// It returns random floats in range 0..1. +// Taken directly from: https://stackoverflow.com/a/47593316 +function splitmix32(a) { + return function() { + a |= 0; + a = a + 0x9e3779b9 | 0; + let t = a ^ a >>> 16; + t = Math.imul(t, 0x21f0aaad); + t = t ^ t >>> 15; + t = Math.imul(t, 0x735a2d97); + return ((t = t ^ t >>> 15) >>> 0) / 4294967296; + }; +} + +export default class SymbolCollisionsBox extends Benchmark { + private _transform: Transform; + private _projection: Projection; + private _symbols: Array; + + async setup(): Promise { + this._transform = new Transform(0, 22, 0, 60, true); + this._transform.resize(1024, 1024); + this._projection = createProjection(); + const unwrappedTileID = new UnwrappedTileID(0, new CanonicalTileID(0, 0, 0)); + const posMatrix = this._transform.calculatePosMatrix(unwrappedTileID); + + const rng = splitmix32(0xdeadbeef); + const rndRange = (min, max) => { + return rng() * (max - min) + min; + }; + + this._symbols = []; + + const symbolCount = 20000; + for (let i = 0; i < symbolCount; i++) { + this._symbols.push({ + collisionBox: { + anchorPointX: rndRange(4, EXTENT - 4), + anchorPointY: rndRange(4, EXTENT - 4), + x1: rndRange(-20, -2), + y1: rndRange(-20, -2), + x2: rndRange(2, 20), + y2: rndRange(2, 20) + }, + overlapMode: 'never', + textPixelRatio: 1, + posMatrix, + unwrappedTileID, + pitchWithMap: rng() > 0.5, + rotateWithMap: rng() > 0.5, + translation: [ + rndRange(-20, 20), + rndRange(-20, 20) + ], + shift: rng() > 0.5 ? new Point(rndRange(-20, 20), rndRange(-20, 20)) : undefined + }); + } + } + + async bench() { + const ci = new CollisionIndex(this._transform, this._projection); + + for (const s of this._symbols) { + const placementResult = ci.placeCollisionBox( + s.collisionBox, + s.overlapMode, + s.textPixelRatio, + s.posMatrix, + s.unwrappedTileID, + s.pitchWithMap, + s.rotateWithMap, + s.translation, + null, + null, + s.shift + ); + + if (placementResult.placeable) { + ci.insertCollisionBox( + placementResult.box, + s.overlapMode, + false, + 0, + 0, + 0 + ); + } + } + } +} diff --git a/test/bench/versions/index.ts b/test/bench/versions/index.ts index 966f71e527..1f161a6d9d 100644 --- a/test/bench/versions/index.ts +++ b/test/bench/versions/index.ts @@ -21,6 +21,7 @@ import CustomLayer from '../benchmarks/customlayer'; import MapIdle from '../benchmarks/map_idle'; import {getGlobalWorkerPool} from '../../../src/util/global_worker_pool'; +import SymbolCollisionBox from '../benchmarks/symbol_collision_box'; const styleLocations = locationsWithTileID(styleBenchmarkLocations.features as GeoJSON.Feature[]).filter(v => v.zoom < 15); // the used maptiler sources have a maxzoom of 14 @@ -73,6 +74,7 @@ register('FilterEvaluate', new FilterEvaluate()); register('HillshadeLoad', new HillshadeLoad()); register('CustomLayer', new CustomLayer()); register('MapIdle', new MapIdle()); +register('SymbolCollisionBox', new SymbolCollisionBox()); Promise.resolve().then(() => { // Ensure the global worker pool is never drained. Browsers have resource limits From 0e8ceb6da27f410a1d610ea10d0871cbf069e5a2 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 12:20:16 +0200 Subject: [PATCH 31/33] Only measure collision box handling, not grid performance --- test/bench/benchmarks/symbol_collision_box.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/test/bench/benchmarks/symbol_collision_box.ts b/test/bench/benchmarks/symbol_collision_box.ts index c298a1e1aa..3943dd8401 100644 --- a/test/bench/benchmarks/symbol_collision_box.ts +++ b/test/bench/benchmarks/symbol_collision_box.ts @@ -83,9 +83,12 @@ export default class SymbolCollisionsBox extends Benchmark { async bench() { const ci = new CollisionIndex(this._transform, this._projection); + ci.grid.hitTest = (_x1, _y1, _x2, _y2, _overlapMode, _predicate?) => { + return true; + }; for (const s of this._symbols) { - const placementResult = ci.placeCollisionBox( + ci.placeCollisionBox( s.collisionBox, s.overlapMode, s.textPixelRatio, @@ -98,17 +101,6 @@ export default class SymbolCollisionsBox extends Benchmark { null, s.shift ); - - if (placementResult.placeable) { - ci.insertCollisionBox( - placementResult.box, - s.overlapMode, - false, - 0, - 0, - 0 - ); - } } } } From c7250ccfdfe794c83d29e9b3a076bcd75e8ea5c5 Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 12:38:55 +0200 Subject: [PATCH 32/33] Minor refactor --- src/symbol/collision_index.ts | 20 +++++++------------- src/symbol/projection.ts | 5 +++-- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/symbol/collision_index.ts b/src/symbol/collision_index.ts index 2f91c0d6bd..cd4c1bd788 100644 --- a/src/symbol/collision_index.ts +++ b/src/symbol/collision_index.ts @@ -408,12 +408,9 @@ export class CollisionIndex { } projectAndGetPerspectiveRatio(posMatrix: mat4, x: number, y: number, unwrappedTileID: UnwrappedTileID, getElevation?: (x: number, y: number) => number) { - let projected; - if (this.mapProjection.useSpecialProjectionForSymbols) { - projected = this.mapProjection.projectTileCoordinates(x, y, unwrappedTileID, getElevation); - } else { - projected = projection.project(new Point(x, y), posMatrix, getElevation); - } + const projected = this.mapProjection.useSpecialProjectionForSymbols ? + this.mapProjection.projectTileCoordinates(x, y, unwrappedTileID, getElevation) : + projection.project(new Point(x, y), posMatrix, getElevation); return { point: new Point( (((projected.point.x + 1) / 2) * this.transform.width) + viewportPadding, @@ -423,19 +420,16 @@ export class CollisionIndex { // We're doing collision detection in viewport space so we need // to scale down boxes in the distance perspectiveRatio: 0.5 + 0.5 * (this.transform.cameraToCenterDistance / projected.signedDistanceFromCamera), - isOccluded: (projected.isOccluded !== undefined) ? projected.isOccluded : false, + isOccluded: projected.isOccluded, signedDistanceFromCamera: projected.signedDistanceFromCamera }; } getPerspectiveRatio(posMatrix: mat4, x: number, y: number, unwrappedTileID: UnwrappedTileID, getElevation?: (x: number, y: number) => number): number { // We don't care about the actual projected point, just its W component. - let projected; - if (this.mapProjection.useSpecialProjectionForSymbols) { - projected = this.mapProjection.projectTileCoordinates(x, y, unwrappedTileID, getElevation); - } else { - projected = projection.project(new Point(x, y), posMatrix, getElevation); - } + const projected = this.mapProjection.useSpecialProjectionForSymbols ? + this.mapProjection.projectTileCoordinates(x, y, unwrappedTileID, getElevation) : + projection.project(new Point(x, y), posMatrix, getElevation); return 0.5 + 0.5 * (this.transform.cameraToCenterDistance / projected.signedDistanceFromCamera); } diff --git a/src/symbol/projection.ts b/src/symbol/projection.ts index 7bf8b599e8..2df4470d5c 100644 --- a/src/symbol/projection.ts +++ b/src/symbol/projection.ts @@ -137,7 +137,7 @@ function getGlCoordMatrix(posMatrix: mat4, } } -function project(point: Point, matrix: mat4, getElevation?: (x: number, y: number) => number) { +function project(point: Point, matrix: mat4, getElevation?: (x: number, y: number) => number): PointProjection { let pos; if (getElevation) { // slow because of handle z-index pos = [point.x, point.y, getElevation(point.x, point.y), 1] as vec4; @@ -149,7 +149,8 @@ function project(point: Point, matrix: mat4, getElevation?: (x: number, y: numbe const w = pos[3]; return { point: new Point(pos[0] / w, pos[1] / w), - signedDistanceFromCamera: w + signedDistanceFromCamera: w, + isOccluded: false }; } From dc4b7a40f14ca53e73c1932886ff1342af0135ac Mon Sep 17 00:00:00 2001 From: Jakub Pelc Date: Wed, 15 May 2024 13:01:45 +0200 Subject: [PATCH 33/33] Fix benchmark name being inconsistent with file name --- test/bench/benchmarks/symbol_collision_box.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/bench/benchmarks/symbol_collision_box.ts b/test/bench/benchmarks/symbol_collision_box.ts index 3943dd8401..23aa8a5ff0 100644 --- a/test/bench/benchmarks/symbol_collision_box.ts +++ b/test/bench/benchmarks/symbol_collision_box.ts @@ -36,7 +36,7 @@ function splitmix32(a) { }; } -export default class SymbolCollisionsBox extends Benchmark { +export default class SymbolCollisionBox extends Benchmark { private _transform: Transform; private _projection: Projection; private _symbols: Array;