From d3781e7f0bdd2dba06b5220f8637b19101410853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Wed, 12 Feb 2025 19:05:47 +0100 Subject: [PATCH] Improved restricted areas rendering --- gpxsee.qrc | 2 + icons/map/marine/dw-route-line.png | Bin 259 -> 4365 bytes icons/map/marine/nature-reserve-line.png | Bin 0 -> 4377 bytes icons/map/marine/sanctuary-line.png | Bin 0 -> 127 bytes src/map/ENC/mapdata.cpp | 52 +++++++++--- src/map/ENC/style.cpp | 96 ++++++++++++++++++++--- 6 files changed, 126 insertions(+), 24 deletions(-) create mode 100644 icons/map/marine/nature-reserve-line.png create mode 100644 icons/map/marine/sanctuary-line.png diff --git a/gpxsee.qrc b/gpxsee.qrc index 8eca235c..1708da6f 100644 --- a/gpxsee.qrc +++ b/gpxsee.qrc @@ -214,6 +214,8 @@ icons/map/marine/24h-anchorage.png icons/map/marine/dw-anchorage.png icons/map/marine/tanker-anchorage.png + icons/map/marine/nature-reserve-line.png + icons/map/marine/sanctuary-line.png diff --git a/icons/map/marine/dw-route-line.png b/icons/map/marine/dw-route-line.png index 2bdf923290a2006753be4b56f17f385be29f7231..8c6201c889bb41c2c5da090581a9514f5b9ddbdf 100644 GIT binary patch literal 4365 zcmeHKYj6|S6<*l}JHkK%A)&!Ei;@&mvf78VmbCSPu_R*!WHi_~#*+-}Ve50voe#A%YrqZGGwGGR(OZe0Ttl9^;C6cQet4so0g2}zpPX&N9T(6cM~ z)n=ySndYCRxxQ!b{mysK{qDKP+Ky1w>e<%Ytr&*Q4pjQqLthLnzhEZ(ZOxn84c$pp z7YGLeKfns$0g#qF%mS8yvt;djuyZWAST6JrLz@S-fic?cmKkQh6YND<`*E;~vzQ#P zX-f_^8~Pq-4A{3oe+ZiLNM@}8u#HcF`K<@bU>@yP2ZAA-vD1{@;Rb(-VL6K7Xa=Wg zj&^e_1!&9D;}IE5*EiIk0hV^f>kS3GUOcX;VI_hvEZy^y-F)TovZ7Zvo!;_%P0=U# z@UCaL^L~F((}K>>lDDnD<__Hd<&0oqp!2b3hw9`1kY4&|X!uvX?Y(%xwzgMhRdw3e z58wD{`C|*`c3&I$^uqg}F2RmDc@38?S$Gz3A&Le-g{e?y6#rAMQBY@e5b9{huqg?%W{nz0#BZ%X72lt<)YE zxzd$5k9IVic=P_|Zg<5!`}*rHiM2F4ylnWDLzf;W|H{{T)U9W>B+m>i-7XwHNRnHh zyjXCmZqRnuqoL611?;)XlZW<*OV(UlcE^nuKi>cP^SgSj72Pe7vi48DJbGg&b);6& zj;-l@q3!3ly>@lsjAQ*}z3;i-eXaX6XL<0g!MztoROgPLtvj`7F|jSLFp_)Q*~P*0 zx%O1sGfTZC=sxSITkgGk=M3FAw>1ZUD;L^O! zHR^htBgs@M zWluTms@6c#9*>8l7?NQKKoE(Rm@cG=SmI8DBE#WB2}x7px}wH#gHsUIq|V!HFprPM z7mWvlWAw2^Rt3<5Obc<6wo_y@N>21h=>BFP$p-X|9*LTkI3m}hgqqYO-jgA$FKULf`)q^^X=#hMhGF=K9LVj$o? z#ybf;x_1){s9=!usZ!DiFW}>C#`>JBN{Y;xrpM!wN?b0H5S^Y9!s&6j2*H8EgecK2 zT9TctES5~53d9n+5R;HW1>|-Gcv!(9(oRt%XpbNePRY#@qAUUr3e$p{rd=*7Jb_}J zra)E-k%>_mR5DP7B?{5VHs#c?_5#BadbjPNHaGhj97kq+_ zfOM=3*Nm3okEl+-B18W2>EY`Tt)E8ma`4#|n!GI9}O3F{!7tcN8$0_!G9 zM2CP}lq}FLVKRF{4eKdEL#rATMJ!3c^WXy!i!BeNSO zjhZpK<5Kd!G$}O!6N(J@WyYX*K`kW5ieXkWqwIW(pX^zDiz@*2^deKzcUrD#xu&GR zl)%&3H7(ba6qpitI=lXFa#_b;r%()j1*PC+Y35Vj7`$lB6xXcwVHEZ>wrJM&{Ye

IaOBkYXCIaM%5~J*OV5^VegQl1UU_F8w)x`CgE>R@_!~do zCk<>raiVL_tvv@eF8KVjyZgjYdhlRq9k#Sxf8dAizm-_2-{v^HxpT0~;en`Dn|zyp z@}2AFZeH$qx9f|OUBN$Jw)S;x`f8w>eCWXE(z*JNdeW9%6`MxhNj5I^AG%DveDCg| e&F>cs&gH)s`0-~ierFMcjRpKwzTcE@e(>K7ecccM literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^GC<7E!3HFyWpvK~DYhhUcNZWH1V5d3*8?fe0*}aI zppNSx%;=;sy8jwxjg2lZLWI za@bq{$=BzbX`E~j*3*e*2)HC?!R&r|*|dDqw|C}5?ED%b&EusdTJtj~JVHWFLi-7) zjMSB#w=Cao6OpKP^jx@`vzwZFB82@K>f&~CFRR)vmUGEF27gv&Le*7%K&?? y)4jrc=MMaM@3H>e!DE|5>)kw$ZenHc_im8a6?U1ms$A?l$SzrO)rfe*SohAs5E3{AVD@jkA@BetLM zdx;&kK_Fr!DP;XhLkpc+m3A9hM+r={3S|^TLER=ORE0 z5uU#v%Yz57v{*3vq3g&jB$@;hBlvYZzVnG!1|LmallFf$IP}}z_Fg=1W80f|)O0%P zhHgDw_Qc#-T_e}8Ui|CT`M9g8`al_9axUiFRnu|fSm)f0TiX`fKdlHxo}-uYKN#-X z_Y>>zhMvJkZvNwD(KqYf7fVX+t6`2G>^R@?D^INbpUc*7UnzGF?@s?^&mFUuCs$t| z-k}Yk&5iH=>9LkBZ{-8e^*3A+SJCXylA$;EUV4`N#J|d?uK#dd^M^+kZ4wUtnk3i1 z`1icC4M*+wZL6)Vx{JLKJhS&1alwj_CHLNX<8sfbSD);)Rd%&TOWLn|{m!ky)S*>M z^4N;b*V=x0_sJV`XB_J<>HXOI(aElJoMp@Dqum#;tFFz@KXi89d}5-=VLT)!f@w)ZG1+rLb`Geg^Hkakzh9 z|DjE%4~~pjzT}g7z3*Rppaj!OxIu3SRdbRWa|p63B1bxwFwP4rUY01HBEjq5_1h-(WChzv#mX;M;2=!zQ04NO5)n{~h44(s@6 ze6d6*GzK5nvMc}}WLij&w1XmJF><1ZrdPB8NH(Bv_0Ynt2}IT*O>Is}sGBtg^q9_KY8th6>+S0giV;%+tjY=$GdI8y!EOjL^PS&K@j1@DTiGhIo z815wN(cDdAunL8^fGRZ`;qd{#-PoU#RY{RKQ;e`qkKhyp!Yd<|a7m0r_(Td39!5k+ zVB9nx&RV#6`JSMi#wpb^^ph zNd>A>h)#^kfRX{q=V86zt zh{!~|(OfVH=SpjNznyVVoZT8$Eadn zB^);|1t& zh%zN3XT;<4$)3sRni|nlLK2lW0*}BIl&AR*3SVp<)RM{8skO*B1t5%|7=mX0lQ1%y zFlqFR(Tt19|Kgt2z%QeN<^{cw9BYPI&WyJ69e%QB@g42}(9@etiQj3urs{B;V&;a5-!UY1_6?h3(+)@|a7ssMHwM>KdlJ8uk2+2UPkP|no(P{qtkIr+8%?!aNkJWw6t1Epc_A5T2vFFcOtZ!P%j zY<%V49{A#WN36Mv*8KVX25n3JTh^Xab-mKb_g0q$?%eUh)}PLvy}Ym0J!{R$;5&KY z;K-cqpR~_k=nC{~xv>Ae^BosX-~ZKt94zMd7vAYB*#F8JYt-LnJOIn?xx5o!{tDp!iTz+0pfg)QKYwj1m@S8MrR9 Vep;RKc@0o0gQu&X%Q~loCIG-XAnpJF literal 0 HcmV?d00001 diff --git a/src/map/ENC/mapdata.cpp b/src/map/ENC/mapdata.cpp index d68c866e..fd17d1d6 100644 --- a/src/map/ENC/mapdata.cpp +++ b/src/map/ENC/mapdata.cpp @@ -285,6 +285,24 @@ static QString weed(uint type) } } +static uint restrictionCategory(uint type, const MapData::Attributes &attr) +{ + uint catrea = attr.value(CATREA).toUInt(); + + if (!catrea) { + uint restrn = attr.value( + (type == RESARE) ? RESTRN : I_RESTRN).toUInt(); + + if (restrn == 1) + return 2; + else if (restrn == 7) + return 17; + else + return 0; + } else + return catrea; +} + MapData::Point::Point(uint type, const Coordinates &c, const QString &label) : _type(SUBTYPE(type, 0)), _pos(c), _label(label), _polygon(false) { @@ -328,10 +346,18 @@ MapData::Point::Point(uint type, const Coordinates &c, const Attributes &attr, subtype = CATLIT; else if (type == I_DISMAR) subtype = CATDIS; + else if (type == I_BERTHS) + subtype = I_CATBRT; + else if (type == ACHARE) + subtype = CATACH; + else if (type == I_ACHARE) + subtype = I_CATACH; QList list(_attr.value(subtype).split(',')); std::sort(list.begin(), list.end()); - _type = SUBTYPE(type, list.first().toUInt()); + _type = (type == RESARE || type == I_RESARE) + ? SUBTYPE(type, restrictionCategory(type, _attr)) + : SUBTYPE(type, list.first().toUInt()); _id = ((quint64)order(_type))<<32 | (uint)qHash(c); _label = QString::fromLatin1(_attr.value(OBJNAM)); @@ -377,9 +403,7 @@ MapData::Poly::Poly(uint type, const Polygon &path, const Attributes &attr, { uint subtype = 0; - if (type == RESARE || type == I_RESARE) - subtype = CATREA; - else if (type == ACHARE) + if (type == ACHARE) subtype = CATACH; else if (type == I_ACHARE) subtype = I_CATACH; @@ -389,17 +413,19 @@ MapData::Poly::Poly(uint type, const Polygon &path, const Attributes &attr, subtype = CATMFA; else if (type == I_BERTHS) subtype = I_CATBRT; - else if (type == RESARE || type == I_RESARE) { - uint restr = _attr.value((type == RESARE) ? RESTRN : I_RESTRN).toUInt(); - if (restr == 1) - subtype = 2; - else if (restr == 7) - subtype = 17; + + switch (type) { + case DEPARE: + _type = SUBTYPE(type, depthLevel(_attr.value(DRVAL1).toDouble())); + break; + case RESARE: + case I_RESARE: + _type = SUBTYPE(type, restrictionCategory(type, attr)); + break; + default: + _type = SUBTYPE(type, _attr.value(subtype).toUInt()); } - _type = (type == DEPARE) - ? SUBTYPE(DEPARE, depthLevel(_attr.value(DRVAL1).toDouble())) - : SUBTYPE(type, _attr.value(subtype).toUInt()); } MapData::Line::Line(uint type, const QVector &path, diff --git a/src/map/ENC/style.cpp b/src/map/ENC/style.cpp index f39631c3..7d2621cb 100644 --- a/src/map/ENC/style.cpp +++ b/src/map/ENC/style.cpp @@ -70,17 +70,24 @@ void Style::polygonStyle() _polygons[TYPE(DRGARE)] = Polygon(QBrush(QColor(0xa0, 0xa0, 0xff), Qt::Dense4Pattern)); _polygons[TYPE(UNSARE)] = Polygon(QBrush(QColor(0x99, 0x99, 0x99))); + _polygons[SUBTYPE(RESARE, 1)] = Polygon(QImage(":/marine/safety-zone-line.png")); + _polygons[SUBTYPE(RESARE, 2)] = Polygon(QImage(":/marine/noanchor-line.png")); + _polygons[SUBTYPE(RESARE, 4)] = Polygon(QImage(":/marine/nature-reserve-line.png")); + _polygons[SUBTYPE(RESARE, 5)] = Polygon(QImage(":/marine/sanctuary-line.png")); + _polygons[SUBTYPE(RESARE, 6)] = Polygon(QImage(":/marine/sanctuary-line.png")); + _polygons[SUBTYPE(RESARE, 7)] = Polygon(QImage(":/marine/sanctuary-line.png")); _polygons[SUBTYPE(RESARE, 9)] = Polygon(QBrush(QColor(0xff, 0x00, 0x00), Qt::BDiagPattern)); - _polygons[SUBTYPE(RESARE, 2)] = Polygon(QImage(":/marine/noanchor-line.png")); - _polygons[SUBTYPE(I_RESARE, 2)] = Polygon(QImage(":/marine/noanchor-line.png")); - _polygons[SUBTYPE(RESARE, 17)] = Polygon( - QImage(":/marine/entry-prohibited-line.png")); - _polygons[SUBTYPE(I_RESARE, 17)] = Polygon( - QImage(":/marine/entry-prohibited-line.png")); _polygons[SUBTYPE(RESARE, 12)] = Polygon(QImage(":/marine/safety-zone-line.png")); - _polygons[SUBTYPE(I_RESARE, 12)] = Polygon(QImage(":/marine/safety-zone-line.png")); - _polygons[SUBTYPE(RESARE, 1)] = Polygon(QImage(":/marine/safety-zone-line.png")); + _polygons[SUBTYPE(RESARE, 17)] = Polygon(QImage(":/marine/entry-prohibited-line.png")); + _polygons[SUBTYPE(RESARE, 22)] = Polygon(QImage(":/marine/sanctuary-line.png")); + _polygons[SUBTYPE(RESARE, 23)] = Polygon(QImage(":/marine/nature-reserve-line.png")); + _polygons[SUBTYPE(I_RESARE, 1)] = _polygons[SUBTYPE(RESARE, 1)]; + _polygons[SUBTYPE(I_RESARE, 2)] = _polygons[SUBTYPE(RESARE, 2)]; + _polygons[SUBTYPE(I_RESARE, 4)] = _polygons[SUBTYPE(RESARE, 4)]; + _polygons[SUBTYPE(I_RESARE, 9)] = _polygons[SUBTYPE(RESARE, 9)]; + _polygons[SUBTYPE(I_RESARE, 12)] = _polygons[SUBTYPE(RESARE, 12)]; + _polygons[SUBTYPE(I_RESARE, 17)] = _polygons[SUBTYPE(RESARE, 17)]; _polygons[SUBTYPE(ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png")); _polygons[SUBTYPE(ACHARE, 2)] = _polygons[SUBTYPE(ACHARE, 1)]; _polygons[SUBTYPE(ACHARE, 3)] = _polygons[SUBTYPE(ACHARE, 1)]; @@ -162,9 +169,14 @@ void Style::polygonStyle() << SUBTYPE(I_ACHARE, 2) << SUBTYPE(I_ACHARE, 3) << SUBTYPE(I_ACHARE, 4) << SUBTYPE(I_ACHARE, 5) << SUBTYPE(I_ACHARE, 6) << SUBTYPE(I_ACHARE, 7) << SUBTYPE(I_ACHARE, 8) << SUBTYPE(I_ACHARE, 9) << SUBTYPE(I_ACHARE, 10) - << SUBTYPE(I_ACHARE, 11) << SUBTYPE(I_ACHARE, 12) << SUBTYPE(RESARE, 9) - << SUBTYPE(RESARE, 2) << SUBTYPE(I_RESARE, 2) << SUBTYPE(RESARE, 17) - << SUBTYPE(I_RESARE, 17) << SUBTYPE(RESARE, 12) << SUBTYPE(I_RESARE, 12) + << SUBTYPE(I_ACHARE, 11) << SUBTYPE(I_ACHARE, 12) << SUBTYPE(RESARE, 1) + << SUBTYPE(I_RESARE, 1) << SUBTYPE(RESARE, 2) << SUBTYPE(I_RESARE, 2) + << SUBTYPE(RESARE, 4) << SUBTYPE(I_RESARE, 4) << SUBTYPE(RESARE, 5) + << SUBTYPE(I_RESARE, 5) << SUBTYPE(RESARE, 6) << SUBTYPE(I_RESARE, 6) + << SUBTYPE(RESARE, 7) << SUBTYPE(I_RESARE, 7) << SUBTYPE(RESARE, 9) + << SUBTYPE(I_RESARE, 9) << SUBTYPE(RESARE, 12) << SUBTYPE(I_RESARE, 12) + << SUBTYPE(RESARE, 17) << SUBTYPE(I_RESARE, 17) << SUBTYPE(RESARE, 22) + << SUBTYPE(I_RESARE, 22) << SUBTYPE(RESARE, 23) << SUBTYPE(I_RESARE, 23) << SUBTYPE(RESARE, 1) << TYPE(CBLARE) << TYPE(PIPARE) << TYPE(PRCARE) << TYPE(I_TRNBSN) << SUBTYPE(MARKUL, 3) << TYPE(CONZNE); } @@ -382,6 +394,8 @@ void Style::pointStyle(qreal ratio) _points[SUBTYPE(I_BERTHS, 6)] = Point(QImage(":/marine/fleeting-area.png"), Small); + _points[SUBTYPE(I_BERTHS, 6)].setTextColor(QColor(0xeb, 0x49, 0xeb)); + _points[SUBTYPE(I_BERTHS, 6)].setHaloColor(QColor()); _points[SUBTYPE(ACHARE, 2)] = Point(QImage(":/marine/dw-anchorage.png"), Small); _points[SUBTYPE(ACHARE, 3)] = Point(QImage(":/marine/tanker-anchorage.png"), @@ -391,6 +405,66 @@ void Style::pointStyle(qreal ratio) _points[SUBTYPE(I_ACHARE, 2)] = _points[SUBTYPE(ACHARE, 2)]; _points[SUBTYPE(I_ACHARE, 3)] = _points[SUBTYPE(ACHARE, 3)]; _points[SUBTYPE(I_ACHARE, 9)] = _points[SUBTYPE(ACHARE, 9)]; + _points[TYPE(RESARE)].setTextColor(QColor(0xeb, 0x49, 0xeb)); + _points[TYPE(RESARE)].setHaloColor(QColor()); + _points[SUBTYPE(RESARE, 1)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 2)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 3)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 4)].setTextColor(QColor(0x30, 0xa0, 0x1b)); + _points[SUBTYPE(RESARE, 4)].setHaloColor(QColor()); + _points[SUBTYPE(RESARE, 5)] = _points[SUBTYPE(RESARE, 4)]; + _points[SUBTYPE(RESARE, 6)] = _points[SUBTYPE(RESARE, 4)]; + _points[SUBTYPE(RESARE, 7)] = _points[SUBTYPE(RESARE, 4)]; + _points[SUBTYPE(RESARE, 8)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 9)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 10)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 11)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 12)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 13)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 14)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 15)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 16)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 17)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 18)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 19)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 20)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 21)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 22)] = _points[SUBTYPE(RESARE, 4)]; + _points[SUBTYPE(RESARE, 23)] = _points[SUBTYPE(RESARE, 4)]; + _points[SUBTYPE(RESARE, 24)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 25)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 26)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 27)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(RESARE, 28)] = _points[TYPE(RESARE)]; + _points[TYPE(I_RESARE)] = _points[TYPE(RESARE)]; + _points[SUBTYPE(I_RESARE, 1)] = _points[SUBTYPE(RESARE, 1)]; + _points[SUBTYPE(I_RESARE, 2)] = _points[SUBTYPE(RESARE, 2)]; + _points[SUBTYPE(I_RESARE, 3)] = _points[SUBTYPE(RESARE, 3)]; + _points[SUBTYPE(I_RESARE, 4)] = _points[SUBTYPE(RESARE, 4)]; + _points[SUBTYPE(I_RESARE, 5)] = _points[SUBTYPE(RESARE, 5)]; + _points[SUBTYPE(I_RESARE, 6)] = _points[SUBTYPE(RESARE, 6)]; + _points[SUBTYPE(I_RESARE, 7)] = _points[SUBTYPE(RESARE, 7)]; + _points[SUBTYPE(I_RESARE, 8)] = _points[SUBTYPE(RESARE, 8)]; + _points[SUBTYPE(I_RESARE, 9)] = _points[SUBTYPE(RESARE, 9)]; + _points[SUBTYPE(I_RESARE, 10)] = _points[SUBTYPE(RESARE, 10)]; + _points[SUBTYPE(I_RESARE, 11)] = _points[SUBTYPE(RESARE, 11)]; + _points[SUBTYPE(I_RESARE, 12)] = _points[SUBTYPE(RESARE, 12)]; + _points[SUBTYPE(I_RESARE, 13)] = _points[SUBTYPE(RESARE, 13)]; + _points[SUBTYPE(I_RESARE, 14)] = _points[SUBTYPE(RESARE, 14)]; + _points[SUBTYPE(I_RESARE, 15)] = _points[SUBTYPE(RESARE, 15)]; + _points[SUBTYPE(I_RESARE, 16)] = _points[SUBTYPE(RESARE, 16)]; + _points[SUBTYPE(I_RESARE, 17)] = _points[SUBTYPE(RESARE, 17)]; + _points[SUBTYPE(I_RESARE, 18)] = _points[SUBTYPE(RESARE, 18)]; + _points[SUBTYPE(I_RESARE, 19)] = _points[SUBTYPE(RESARE, 19)]; + _points[SUBTYPE(I_RESARE, 20)] = _points[SUBTYPE(RESARE, 20)]; + _points[SUBTYPE(I_RESARE, 21)] = _points[SUBTYPE(RESARE, 21)]; + _points[SUBTYPE(I_RESARE, 22)] = _points[SUBTYPE(RESARE, 22)]; + _points[SUBTYPE(I_RESARE, 23)] = _points[SUBTYPE(RESARE, 23)]; + _points[SUBTYPE(I_RESARE, 24)] = _points[SUBTYPE(RESARE, 24)]; + _points[SUBTYPE(I_RESARE, 25)] = _points[SUBTYPE(RESARE, 25)]; + _points[SUBTYPE(I_RESARE, 26)] = _points[SUBTYPE(RESARE, 26)]; + _points[SUBTYPE(I_RESARE, 27)] = _points[SUBTYPE(RESARE, 27)]; + _points[SUBTYPE(I_RESARE, 28)] = _points[SUBTYPE(RESARE, 28)]; _points[SUBTYPE(SMCFAC, 7)] = Point(svg2img(":/POI/restaurant-11.svg", ratio), Small);