From 4bc0ce0f03530e45c106dbaeeedc96dc7ac96573 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Thu, 11 Aug 2022 21:31:48 +0100 Subject: [PATCH] do not scale displacement --- changelog/upgrade-notes.md | 4 +++ src/ol/style/Icon.js | 8 ++++- src/ol/style/RegularShape.js | 8 ++++- test/browser/spec/ol/style/icon.test.js | 26 ++++++++++++++ .../spec/ol/style/regularshape.test.js | 33 ++++++++++++++++++ .../cases/regularshape-style/expected.png | Bin 7294 -> 8250 bytes .../cases/regularshape-style/main.js | 12 ++++++- 7 files changed, 88 insertions(+), 3 deletions(-) diff --git a/changelog/upgrade-notes.md b/changelog/upgrade-notes.md index 9531174088..c145ac5424 100644 --- a/changelog/upgrade-notes.md +++ b/changelog/upgrade-notes.md @@ -26,6 +26,10 @@ The control will now by default keep displaying the last mouse position when the The `PluggableMap` class has been removed. If you want to create a custom map class, extend the `Map` class instead. +#### ol/style/Icon and ol/style/RegularShape + +`ol/style/Image` and subclasses `displacement` is no longer scaled with the image. If you previously expected this unintended behavior you should now increase the displacement when setting the scale. + ### 6.15.0 #### Deprecated `tilePixelRatio` option for data tile sources. diff --git a/src/ol/style/Icon.js b/src/ol/style/Icon.js index 414c8cd4a5..128d2dec45 100644 --- a/src/ol/style/Icon.js +++ b/src/ol/style/Icon.js @@ -293,7 +293,13 @@ class Icon extends ImageStyle { this.normalizedAnchor_ = anchor; } const displacement = this.getDisplacement(); - return [anchor[0] - displacement[0], anchor[1] + displacement[1]]; + const scale = this.getScaleArray(); + // anchor is scaled by renderer but displacement should not be scaled + // so divide by scale here + return [ + anchor[0] - displacement[0] / scale[0], + anchor[1] + displacement[1] / scale[1], + ]; } /** diff --git a/src/ol/style/RegularShape.js b/src/ol/style/RegularShape.js index d92b775168..5457707065 100644 --- a/src/ol/style/RegularShape.js +++ b/src/ol/style/RegularShape.js @@ -179,7 +179,13 @@ class RegularShape extends ImageStyle { return null; } const displacement = this.getDisplacement(); - return [size[0] / 2 - displacement[0], size[1] / 2 + displacement[1]]; + const scale = this.getScaleArray(); + // anchor is scaled by renderer but displacement should not be scaled + // so divide by scale here + return [ + size[0] / 2 - displacement[0] / scale[0], + size[1] / 2 + displacement[1] / scale[1], + ]; } /** diff --git a/test/browser/spec/ol/style/icon.test.js b/test/browser/spec/ol/style/icon.test.js index c319a494b6..8c0714dbd4 100644 --- a/test/browser/spec/ol/style/icon.test.js +++ b/test/browser/spec/ol/style/icon.test.js @@ -243,6 +243,32 @@ describe('ol.style.Icon', function () { size[1] / 2 + 20, ]); }); + + it('scale applies to image size, not offset', function () { + const scale = 4; + let anchorScaled, anchorBig; + + const iconStyleScaled = new Icon({ + src: 'test.png', + size: size, + displacement: [20, 10], + scale: scale, + }); + const iconStyleBig = new Icon({ + src: 'test.png', + size: [size[0] * scale, size[1] * scale], + displacement: [20, 10], + }); + anchorScaled = iconStyleScaled.getAnchor(); + anchorBig = iconStyleBig.getAnchor(); + expect(anchorScaled).to.eql([anchorBig[0] / scale, anchorBig[1] / scale]); + + iconStyleScaled.setDisplacement([10, 20]); + iconStyleBig.setDisplacement([10, 20]); + anchorScaled = iconStyleScaled.getAnchor(); + anchorBig = iconStyleBig.getAnchor(); + expect(anchorScaled).to.eql([anchorBig[0] / scale, anchorBig[1] / scale]); + }); }); describe('#setAnchor', function () { diff --git a/test/browser/spec/ol/style/regularshape.test.js b/test/browser/spec/ol/style/regularshape.test.js index dc9f4e05ba..de1defe8c9 100644 --- a/test/browser/spec/ol/style/regularshape.test.js +++ b/test/browser/spec/ol/style/regularshape.test.js @@ -117,6 +117,39 @@ describe('ol.style.RegularShape', function () { expect(style.getDisplacement()[1]).to.eql(10); expect(style.getAnchor()).to.eql([-15, 15]); }); + + it('scale applies to rendered radius, not offset', function () { + let style; + + style = new RegularShape({ + radius: 5, + displacement: [10, 20], + scale: 4, + }); + expect(style.getDisplacement()).to.an('array'); + expect(style.getDisplacement()[0]).to.eql(10); + expect(style.getDisplacement()[1]).to.eql(20); + expect(style.getAnchor()).to.eql([2.5, 10]); + style.setDisplacement([20, 10]); + expect(style.getDisplacement()).to.an('array'); + expect(style.getDisplacement()[0]).to.eql(20); + expect(style.getDisplacement()[1]).to.eql(10); + expect(style.getAnchor()).to.eql([0, 7.5]); + + style = new RegularShape({ + radius: 20, + displacement: [10, 20], + }); + expect(style.getDisplacement()).to.an('array'); + expect(style.getDisplacement()[0]).to.eql(10); + expect(style.getDisplacement()[1]).to.eql(20); + expect(style.getAnchor()).to.eql([10, 40]); + style.setDisplacement([20, 10]); + expect(style.getDisplacement()).to.an('array'); + expect(style.getDisplacement()[0]).to.eql(20); + expect(style.getDisplacement()[1]).to.eql(10); + expect(style.getAnchor()).to.eql([0, 30]); + }); }); describe('#clone', function () { diff --git a/test/rendering/cases/regularshape-style/expected.png b/test/rendering/cases/regularshape-style/expected.png index 20581d3a2b5e5b186ee3542d3fae1ac9b942a86e..918749233101f119659b66d26ee63ec767a0b5dd 100644 GIT binary patch literal 8250 zcmdU#_dnI)|NmcS*jutWNHioX3E3;jN+q)Qiery(vSlTNY~mOZvUk=YB4lr}3EBI5 zdB1PB&p+_}<@5Q4b8g3Vo$K|yp5yVnKZUBRDv}X15Q4Rp4l$M8Tl-$ z{RVkD#*eRwPq5o8O)@A^pqtdm$S~pTRKlhtz&pv}&HkIE(O#eZDdyfCaYA+#>cAQ( z;Qg-*h%LZ~1`6N{hhr#%G$6`mK4M6QUI8XW*m46RG@{3Y*h#bgH~*0e^(s8zc1&jg ziQBY&)J$mR!t3K+M9o&<1R5VF(saR)=Hea(oTe7j(;MHpoSO{G%*&c7U zc$KpwPLZNY5Y{$#AS};8m6@5zM*YAorY_trx9<&py?)fjcqKtuOY}_EF=03xyeX!q zM>RGsE~C17l)n(~;8#~-^2eBMP0njmR-cr!o3E&e!%|d($1Ckkj(1m7S>!eIXo!f2 z4qH&?GiCZZI*iYYUabgi>~D;Ze6xs}-~9ZUlS}OZ8FzkE6XCJm!R~H4u|`ZDFKTsIhdfVpC0Y2*|Y#TId`tuy`EkNJ{PD(@Ay zK~P>^o_6Kyl=;oQwPC^97Bag3Zq3cbHMbCN5TyUrO~q^VkNuX}nml$PM&DM8<+`K$#E32FB5ll;E;c^_?R=8Oaa^gT^!cERPyxOdxrvyBM!57G@ zkY_z>eSLjMWMq&wPmtCvc~#ZO0RasIIT)h-ot(V95ikI2<>=HD`L|JK2MZ2{v6nID zGA=`kxyUOJZ5ZC2J9nzQ4tO1%oT#o|y}HU#&6o7^y%J}!PT}jMoG(^3HVBBhN;9;* zhzpXc5x5%ltP*O|aDT-=9thI?JLe&KY-=*T`aMd{{SSRXsHHT>N0dX`~80 z|K1>GwIz`aj#={1=AkXCsK_iTB3H=b|Gdy=T@GO;Yuyl#YO=`N?Rnfaets%C-d9a` zeYQ!s+$!F#&+ntA_K?;>X)uVGnAqVoLLlC3`pwRhx~*msSUve*u!SEXMqPlO^nItP z>JudpPCH6qGDqFE~{E9Ny21QR8)|y1 zU7&w#e4O8Fe;rdaveRlRAk9ggQBo2Og20a$Lp$N0lTKoz+F-c0;WlsZGk#K4x5}n^ zd|}ONtxq!-cVCZ@Qv+{F)Y{7(9%MNwZTiY*S%nPb4_u|^sEui zMC0cf>o>#iR13sgf#tdtwr@L4o5SulDD6=}!oA)|rEJX%(@BaZw@(_+p9cj5Ak)6G z6%-V-OkbS4adLAD)_%L^JQ;LdFFfYcH&sa;6RZh?7d^%4tcjl6vpD5I5bat2F_07u zLQ)Lqj9-L~{D{s%V5B zgrTpd_PANiyOw%Z{A1qL$9)7){9B;hIK+cnqQnRq}Bh9?nQ4-bl zR^#muvYL$Jtq4OMXn$O$Kr26eYJ#1EqnSU`mJf|aAMT`GgnytOkF#AH{(4Y~@1=F? zs>Ipu0F}p`e2Qs84oD=@Uz z!CW}04;aR2sb{v}YXck-N??37WM^sVP@VW$jzb!_#lM}M=%lrCnhfqUw;J8b*RwO< z{ku19GwNa}E;9xZVLoy^7?5$97JAXy+#hOTg{w&p)8D0W`agqlEXFLysw z?UH}Q!EYp=Gav*ad3o6qLaGD{(UZt2Q1RRiMkKxXf&ylG0{v#Y-?*1LC?vhw;2zC zauU2?C8>oH_H!3D96Bg zTe#K{YzfMbA4kW>6O`*jTvLohx{Q~#97U~~9BM$jB?jz6gM)#&xi=>2y@uD?xX;sB zdcb#F^T(Gx7_D`?`}~VGtZ8U{qSD?VU<1n?w02+)uB#Jo9DeBbmwEALQt-}F@5#gD*aq|jkQ)4{{Ip?#yFL4hdHpX2B{Gf)?<|VKfM@{~p-8Vb2#4~Wz`FQs`J>W7*)s4s zx}KSpm9l6zQANd!^EgA_N0wJrjhIz~RFq!V>ma>HWt^d!u0Gc2E7@q;Nqs(5@AZ1A zvb=mdjP}kP1&gTApJC(E#xZVS&!}n%%(=5D%ZHelzRAfAG((^atnj(mpEcY{!hjes zD{g{a%2zRpwQa5~j6lzPd#+8yb9b3A?o!WPi&}wlb90+MTz{N=&dbZ|I`;h|&r82| z@7}4?L_PS==dw_?W@t_h7f>`NgZa-a?d;m3uPGLTQ+@vYc_!li6i95BVxc{pLGbf% zCKuN2a@igqF9b6+wu;or=E$|x%nTie(K*L|bf1Q+GMLW@bk z5-3-cl^KGgjesXEEiDb&W!#OJzdXGxYz7gb;NRV?vPnX2T=v%iq_UtsOHxa{K$*8o zX}%I2*Z-+@?D6;CfD}3`Cui3waJvUNx=bhMED@WXbXnyR3XCyyh`{C`GA0?l0O=#$ znusYnhCu}{?{FGx7+=p6e9MiySW+v=HEpYX{Uszr2z0;7e{}zEA|>c>nn)?&EgXYR z61F3@WNyO8q!!|B<)gVEsCMvWN;hMq;QfwB+el9GxF=?~XO zmg-Od49JJV=W7Cb$tW^avjUlh7Sgb>Jq5;Fal{)N8$OL(y*rWoaPYENn+GVo??B6- z7rPl=HN0T}`gEk;>wcgVeHKKB_$zS=v86JQX?%o3hV@nsOb`nTi%PE)@=OJwiP z;pt9q-|yc66cUHf-rk<2t!?YZv1ft@t9cmS!L+X=C-qohGsB=hJ;TV$9X`ybhG`NQ zGm0&<_y?FcoQ+lr zAA=mxL2*FC&>KRwJJ%489zCKAYh(99nJ$C%CVcc;y}svHfU+mRp${nvX&E3|n9`z$ zO7Mn1g~%o|Gjto{IpSw%>nXa}lOmRB#{FFpMv32g)JM6bXflggxlsQ2;H+V*lLmVv z(3EYWo}q3yT51N`0E(hl)qY~ol>dgV{%STeGsYS!q@p@>RlxT?A%XCu=x63QDI;FY z{9)^|ye22|Kz~-~39>1lzltX*CdU8A59Qd{*qOPw+lOjU+!iZj2mOUF^CxXjZu-!H zlIc@VA#nVwO)9)JxGDDLQwO*d5mX=VvI;x(g*rPs>BU^vi{qn7C9Poru!c#}wI>K- z0u{+L4q0sT$60>-+y6d!r7ZgPR~B)f>B6~-UP%+#-hmBc7h&emSc9(xxN#83a34w2 z-E`nRv@Z8~R$s^OoKjqH;@$H`yamhArzz&xqlR$A7B}*oTH$WvvS zkTc{MedsdKU0q#oggx>LfwP4>AbccN?r&bXzk`_NMUEM+oyE7cvIz>t1YHml0yBn0 zM7W4eIu-RH} zA_z!A}W>7cg!ZsW+J$HQPoB-eYJTu=U<4-le(y_>aM zT*|xNPxSX|Iy*Zzo%5A!7qj43k-Tkgep^Ym9Z3!g2nObijgOy?R%B&xP85e$8>V+) z$p@uB-KIPU)Fh5R$7kE#fC7Sp;K3y-&`U&)-SWXn1JgXgY#eTlD;|2BlOkl2f0diKeE11w-R1_Z_lE6f0i{j z%YLfB+t+@w=IX-2Ld(=H_PLCEx-5oo*mv2U<<$xDcQGEsx0~_ZnUGB!d^4dNiyvk~ zMQV{SJ}`iS7{h0Q+O*#!Ec2c3ZEaK|_(-n(ky1<)N$B+Q<;!1|Lb-k$-&2?fx~HLZ z%BD9XqLjgop?oZGLJHtpwH`ZM?NODJ0z9aT^LB&E*DTP?;0rrFU-{xd1oV4wko|Vo zD7=C(#DBl{L%Dv($VB;FVO`Z22-{jWIG#i8P7EEY5^eOCG!8X8h`v!qQ4%8#MFeUc87O_XrIQJzTi!OB5PV zABEV1A#)20$v{iGU)2&38yOi%#ndbL=>!@Z8+)IcO78!C=Ag#0n)&C?pDOxv(!mhB zIw-r_;~fUqst0IkY4PjvWM#tYg?n#o4Zbk=Zd?*jL+?{iRJ7kfNp$-+oRAWSRssQG zIf4z;B1O)|Ycrdf{xTh+*Rh|%h_8b@- zY_s)NhmcAjZ*Gj0XYk^)%gT5|vJNNvcI%_xa2s{!SlB>+f3f3&GOiAU5ojjO<$iP! z=V`qg8PQJoXrKiTtpvQBb0q5bP^0#eH~SpbAa42k$Oy@hD)o9w{4*_7R*WH{sR)ZD@T{M* z8hd*?&T`!v4ymXnV&aY@oj*+j0u~YyV&ugv{GZP3-*eQ;4=r)w>{he-*<6Zmqokp7 z@Pa|&=#Zc14$=ftz&5lz+8CSRq6bfgB^hBhH5-M!Ki@Q6hq%;I!ym9Q1>JKkFZq(#Jiiw!gwnopl@gU%|s`WQm8UUHq`B0VRDuNPZI-0E3J z-SeJ>g@qwuVLKz=mm<$}Crt%1@;dkJT>o@XK~0J%?|{*77MHl|@ObU3hPHOcpProI zwaX(2=o^@qi}on$7CzstVd(wZX9>>-54|qJS<*v`)G@)1?It`zCl69bw6Yz>SKnw>9Sc+8V7Fii-l zY|YsLHA$ACVPFsUlZ{FvfyDGaOFoMp=F{_oMnzXw;r{-9!xC*~Tw-~7dBT1BsgMBb z+h9x3=&i1;q0dh}gznwDd=fr-(kjorTL8HjmFvK&^xG@}#ZXtrOiWCu(|Bu9Izvd^ z$B#)ak&M|78r)^i1#r&{(A`R^szHO+E}~2Jl8rpnp$^+~^1xv^IXT1KM+0*+GGO3B zT7as!6keY`F@m<6o)mv~f8SHjAWw@!LLznL80@~TfoiQ?qNrB6c(G%Kou>P%^S88{ z;(n3yic93Xcg;`L9tKuBEg7F3??tWv0SQX~m*Ib)Q%4AzcNB8@ zsZ8YX)(QO0g4LbE(afbtG=K=G$DF3A+X#(@=7|;qSvU(r^;4m&3Ik?Zk=0^@i zR8Vo>vmnq@uvvGm?Y^KXa$=~bV_}K7qg#>wxz+VkzAxdS@z9r-z)mVYhp_aFHR1O+ znRekcyfVnwb@Yi2ZBri0gQa-a!5c-+NQo=#3>QyWW(K{vnj!Fx+?30+-#vH4f0HTnnsDpVH!l-n_Ov%mbha0ndBIgQ;1H1o&Tg?7GN5wX> z8wxS9$9J9iu&{doCX?!IAJOIEGpeT9WHzd!@W$z`=d_jU%i-~hlt%XVDJcV^ykwl^k$%+p#gL=9x5cxdMVy!UFH$2T}QINnD`!y**s#pnHCZ~O~= z1J;VG&U|}+{PW8uPRI92$x5{*tY7S)={&<43~9R&c2V5Ptx!13oE-I+yUP3*^ObVIs*Ef9sv<1{tiC;QTc&$GUCU)bEM%Q!C1fR-&T zn}!DOlVT*aJ-zm|5!7VNuz~Nx-||#Es|bf{qN0p|tb-dO9up?;61s{WoScj}JakV` z;ZowHwk#h@kDSDUooF#kUGaCZ&!s{D^X%pSrh%EFny0iGKVZ(X1|QeN;)tL;7e4A^xgA(2skMy zV-OS)8j5DTnKNkJH!?z)sDhuTMGWQ)0I#UmUzMi+BJn9H3BA&P9lOw*CK&}98PMIg zYY=FmWN|7aO}4_aAh%t=-e!d>F+g3)q$q51enCNr>xK@FeC+q{KmVMW?3bBviKDg( zz?1$sJ^-Z*BxR9Er_(L*sG=fX+&|^)e*VdGlX4w)+At#_M(-LjcV8`(w|fxtL(kZ| zJUpcCXJcbJ5&{Ard@s%p&h+C;F09ioKa1})6~|zFL5Us2QSuGIiw9PmVS9fswdH30 z0jp}NID@*qkoSDmFt8TT+TfuMU2vR$7nGRb<^VN?4RV8vb+UlLM_=y$oeT>K!Uu6& z^X4!tEG*?y5i_ou#f+AUYPK}FHVxc6{^?Y+259G3S68{zW z?b#BOgTb|FZ-bdreF7wm-&fN%Ns*C}DJdz@@9LiYTj-LNxF$6%GQ}d|00B0tC@bra zGwUB1*j_F8ItO}RmVO%z?-4#0NHm2Uw0+Be|FZ56XR`E&foWA$Rh9H+Di3W~#=uI@ zn=lt}wTtAiV=>R&8?<-znOBY9OMnRtZQl1u=kQoOkbG}g_kOCt)0CMI8Qg~^I zB1%gImYqehRyS|gd%@KQ1<^z;l>uB@*9iLVzBDcUsi< zWPBRvP7D~Hy{d600+~np$&)7`%0Get;}j7!zDkTIY(KSb84C6@0*pCQ>KM@wmLUe;S!$+Mfh1`XjLq-Af#^`n>g#2jXzn%Y`^?_*~nVd1$I zY?|w*M&NapLX4Lq7hpjGa%Mt}M}dK(kfpVCbMgZxht=OVqq+bKp9AX49Zb>CAfBms zSiBgSn6?WH&WORRNJ>V=Z`|y|hYy$KUHoMIn}6yp&IXeT3aNrY4q;)}k&md5$Oi<9 zdsK|w70~IVM^NcESQ9`>L1hiUBAmUu(K&1cE6XyT#(fEmE ZVb{wn4Ak!m{uuyzB(Ex0BxC6J{{a27KTH4s literal 7294 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 G9r-`5Pk|2r diff --git a/test/rendering/cases/regularshape-style/main.js b/test/rendering/cases/regularshape-style/main.js index 261415b1eb..8ff5f4159e 100644 --- a/test/rendering/cases/regularshape-style/main.js +++ b/test/rendering/cases/regularshape-style/main.js @@ -11,7 +11,7 @@ import View from '../../../../src/ol/View.js'; import {Icon} from '../../../../src/ol/style.js'; const vectorSource = new VectorSource(); -function createFeatures(stroke, fill, offSet = [0, 0]) { +function createFeatures(stroke, fill, offSet = [0, 0], scale = 1) { let feature; feature = new Feature({ geometry: new Point([offSet[0], offSet[1]]), @@ -26,6 +26,7 @@ function createFeatures(stroke, fill, offSet = [0, 0]) { radius: 10, angle: Math.PI / 4, displacement: [-15, 15], + scale: scale, }), }), new Style({ @@ -36,6 +37,7 @@ function createFeatures(stroke, fill, offSet = [0, 0]) { anchorXUnits: 'fraction', anchorYUnits: 'fraction', displacement: [-15, 15], + scale: scale, }), }), ]); @@ -131,6 +133,14 @@ createFeatures( null, [-50, -50] ); +createFeatures( + new Stroke({ + lineDash: [10, 5], + }), + null, + [-50, 50], + 1.5 +); createFeatures(new Stroke(), new Fill(), [50, -50]);