From 161f1bd61c7bd315e51ca0631e597ab7b3630c28 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 11 Nov 2015 10:49:12 +0200 Subject: [PATCH 1/5] Fiexed diagram for measurements (A18) height_neck_back_to_knee and (A20) height_waist_side_to_hip. --HG-- branch : feature --- src/app/tape/share/resources/diagrams/Ap2.png | Bin 31010 -> 30961 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/app/tape/share/resources/diagrams/Ap2.png b/src/app/tape/share/resources/diagrams/Ap2.png index d39de94b034f4638e3cbabef635fae3f1b9b8ba3..99ecac5b62857e5b365fbb936b0f280da20f09e1 100644 GIT binary patch delta 29634 zcmXV1by!sG(_T_qNt&B&3$mrMso18-%61SsFo*1p(>q?(PQZ2I+?Hyua)F zhYL7opMB2EGc)(x_ne$Fq|;NR*pHalSTEnQe|9xPkCUT-9XodNvCs9?`L@G}Wp~A> zMW|ywu3*!kVq`P4BQfG@|Hh0-!Vhoft8r*YHFRo>wl-OL{IDIuUhb7Ep3EMil^X4Z6Uv8|a`Nw{wKngZ>$xD7Z|ElT zH?Bjtk*B+pOiASNgtVS>)%$ z!5GJ!xQ7;AB~t%EGOrdSUX~3a!{QXDBDSNdy?Y>*?Esw$03Ve^1Zfa^6%bSoqza{|nt5)CdbLV9gqL7}%=N9>Rm7}iTg&`pwN^mZd zk!mazJf8znxdCv`$=;tE?NF{*_>h26w$T!~Kk@2GeslDQB$>!?{!Knu?i`K?c5s6I zi|CaVVz1wicBWjQ9%?Rh8epB&fXdrIMRSYRGD(Z2Z|?N{H`x#*K; z)_X5eHloQlDzY`P`CVz@z+&}2wX~A*Q6p79miMH0&bvbvi+x;QW+RV3#g_z>`&Q*{ zNNwQ4-_%Dn+Dw?G#W7Pb@To|4a8Mt1qY@u)MAL?!03ny;xAA5iTSf-Kq3Le(dIj+W z=0yu;q7^~2N=aPv*f0s%TunUA;20+F;OIvKYFdI^dh3-K6{hMbO+F6q88wTmnOUvX zh659PmubwN-`nwktBTf07xJBTip^(UCFLvX^)!CBsh%-eEF(7zZG(XqcJ@W8 zkZi2a8Q;jW%XjzkMW)-ZHm20xDfzf5O;Dpt8`n)~wZBM4Sp72FE}ZgqJl}*&&u`p> z2$e-&)t9|Dq>qNQL<a_%1=v!4E&T4XHMI7?4X1Z=a8fNI%CX1TBrkm+Co9@HMpul|pw0H^UNxV0F~ zh6&0R}{R68=ITR$EAp|8S5=S^e0<>N#5BLyG9P{m#Ci%{ZRo9sx0faqhY1u+j zXd;pDgeY$-8<%REP&%@Hv;15a8iU6k6!GP*F}?h|A*?GN;+z7R!Wb~8067v-UB46( z0{-3A+e1d-DObq-b3iI`b$QYVghGd|dnVMOI}sC3Lxa)IgR}ldCz8|=6M_7*_zO1^ zav*?;*$+BuW$(|IB_VfOv5R{U1~341<| z$JiYe799$d;VBl&^5*@yosHom5g{(IqoJUH)Nro1fuj$En#T2;Up^}5Rc^Av8a%4J z)3t;GCpt0XbAg@a`~|8I#eJ*&G}Ts^XS7K(|5t}*h;%*h9Q`Ji2_JngUga{O z;5=xcfeS9+#0U3)0i;N%0rM|;{hLpVSzLI$#IqM-*~7>iB~>_(>J(?tf+{G*;slj&qa{Z{N_ z%>%+GluzI%h(H5EW7DQsnhZ$CbhhuXCV#jw&@B84+g4bYFD|zvssGuGHKc&^6}q zL0%m3-jCOmUl_CEla_DBt6K9Z>-&FAMXs6o`O8GgOaA_gigv+FWPT#2F_l+rdd0XY zwzxdZw4sWi2rl8{HEpZUoH&f)--i5O_HZCyEWhTdD(cVEBn12o1)?j&lAVKMzr1mZMC+!a) zdxbua?Xf6KgQSp(%buV7rTMDdWS)L-5Qwhj zzeGCL(^sT?V)gexgsgY8bC88|eFVH^Uj)iS!bbHg(y%qccONl93ihVmT|t6c(cPs~ zbOgHbR=4k)KGr>V_xX;cMPa)CJLm=Knd%yC+i?#OT|o+qTz~9<*&aR_mLXyDY>HvEZBdo27Df1#xTHFEp( zzEQpKBN-hx8YP`vJu0ZdzhIzBWHIbyX*mDx)dzoSxq=M%JK0o!YA`*RsO64aGGs}e zJwtHKrq~vCw|$ubuFd%!Y@r(;R8QQc+aXI0gkd2U!k|is!uLu@kfF;<3JwPrkY^v- zzbZ}A>{*@OwG!AbEZWpex&o3$b8_X4I)TbpuqKC5Xg4DBS4d`?bS$BnryqCoN8zvX z2O}@%KLaZ*y29ccFP_7yS#`%Ca|Ruu2wgDjP+op8J@wqi`|?CZc~0yRt4_DU=&J5Ghf$W+N7`h5m~~;?FZj;_M$m z=Xy5IKs!wN~90&%>()`lhlJcTPJ4X8!V8qlO~@^dNMo1^W-+I7W;p6P!`PmVPSRSCC6S^4Eg~8YJnt& zzbz+-zr~+IbeRdErA6## zK>cH-d_o z!(cN{B$_x!1*YA7ERS!{YA&PXul_Bul?k|LTifLHEkNIhoGif5h3XwQfQ2^Jd}NM% zRfEB1nK$tEpir2Wl?&bnx7->8F7|a2TY6x@RFpO;Q$H-fH_9&E`15$N z;?xt8`%SHpmPrq=>-Bq$dNO4x&A|jMA!3h|k}}-{;dV9H`w3TGxE{H)t9Hycf-BNq zj?daXb49KpB7FLXvSHcIC94b0hZiB~lh?UuxGamW<0s7=O_DC>)M>V$g?zga=I)Cl zb4ot5=Z9}$2~s7;0%h!HT+{Q2l7@l4QN@xEKXNzYLM+c1eshN(PTx1#@Wv^>b=F$E zdMMg?f_xp!H*=+!C%>g&9(gQot!(jL-RYn_heOQFECJj?3{3(%s;%uql~w*jPogKs zIYqp;L^?Ikl{+W^p3%ADF(3Bvy8Q4ILiCHd5GH9)ix#Bg=Cf%jhz3fsWVry7fd7Vz z%a~uE+GK941WM&_?l4bckKwaSVmrQGW-a;B&PB6kjRisl(_yS2-{_lc30jp2ea2o)bGlqB6f&&CZyt6|i$%oD zFfaFxS;EwC_<$s(Fo^Lthdd%5_$a~v8WjgvVfC$le1Fx~g@e$cu4Jo841WwEVJ}n*+%gK>6$O`PD)z02X7n z-eOqT$%Qv$bn~+ed3?mL8lCq3M%G&nbX-7WK&NbT0;LvevqEFD2#lg+kwyd~LH@f= zq=>1jM;f_H^(XI2P1yoni&+*@Z12iuCPd8%c(dovhn?ALHnF+uvKCl>Dq$)#@ynF8 z`RXThxWpvCa>I!i+;Y-%q3VNvPv8pw*FHEI_w8s&D>Lu9d(&lxD4xxY(EfUZ`jVQ) zeA${^)oQ{AYnPr3YoKfU?J0nmvg%ck?$wO3?Z)Hp;iP$+%!GJd%(|(`pfoNLZPpND zbMQwqi_b-CBqu#LZ3Ra4bu#x;p9;VSxa(L0-DEC3kaW|K8hzKyz9g{hiBrT73Ezq@`I!;>8T9wWD%T`!(4=T#`r&A?q2uf#qU3Fz zah=1%_s!n`42yeWLYIE$5C&L2wcA42@ybNgl|pi{&~;u3c082gRBX8pCefV{XMP`C zUODD^U2Y>V{fZ6@lrn%dp+V+)s6?Znh)RDxuH}oWfB2wy94P)Y@Y$718ykqhhPTm1 zssH7BOz$pQ^T%IUJY~zhwfx^a^%B3N2<`}FPmCE-#}x%SFCK3!3cQ|`?vWK|m*Ztn z?GMCs{{^#6+qNvWUA?9P5TT*gWNvrg3o=3+GZMPHpe4SY)BsIZPG}4SL_I0f`rvm} zukGeDRdY{-FjHtxe2Gv0#@Sh#2Ma#*nJ+m;C*ub1m0m}iESP=#gGLuLCwshY_RDP9 z+N)^Htz7J>bOELx{bE<<#mWP>eJrDOKHVPeD9sOiJwyv>%K%wl=%`)5K ziW4uTa(aUTP;)o4HiIMArgUaVMx`vjDzt6<7W4(W+{8NiS#ylVfPx2EuO9%Kr-so_ zG?}?wve}N@h{nwiNTShXM-sjMX>-3PI%nMhJW3pQP;9YC*`XuOvdc~ScJWCX1KWuH zKO#981-D#*af)R{Lx&|C8e*|05YWsJIkg7OwGuKgGL1Gnoc20seJaY|Qtde`atYdE z8gCS1?+@t*`@=~G*|*hHrfu1cVdePfJ#9awT2WG0)-8+CeSLp*e(~~!S|P0HdbuN4 zDV*KBbgTuF^1RsrZUQ)3e#_H%GWL?a#y1qP}~Xmk#m#EkFq z_m4x?CCov~>xaOT9*o8(PNKuq@;EY$gzFy42ukSXg8D*MW~}J{17g_@lbjdvGK9aREdj4HsRH2U ziyjtEWbSr+{ub>0!snntF`O5KK|<=_&$9A)RD&`UKmjWMX-LnTJQqv#=^u3te4s34 z-kCet0ol9%(?f-UwTkJUB(TCpJisr#GycuFb5Y#z-qgJRz;KWHRikSFVZFA-`yU#L z1YlJz&iEL}jKRccQX(*z2$!@uY4^hj9K54%5{N(*!-{`o0QMFgX1Sb zeqb$jU@Nj_S@QNfi8I5lQ)YpErfBYPmT78Dh24*1Y?&|k%X=C*z|P8<73m{@yE*;bTt35m>)qEdKA<5Fo1H1 z4}x5&c#Q>@xc8tP6jnI@Hd!@~n+^jAKL$I0z}~Aa)jO9Sky@!vu)ib1<1N=b(b^wCSEkF)e1#OX-8n%vYD#55RDqOA^+Z+H?mbv}TrOxIUOW#~-o0%*E>at_X%l%McfLkAtkoRIedg5+u@3NcX;;s21u=LueIQ3$16nS5r7xuec zaq3S60yWN`y{PC^pp=|JpZj0?N|F_E^)KSL=bNO;F<8aCqQ$(DIe|j83bYzXAO8cQ z)zN-&pV=|7Rn@d$;4|zkDvZGs=TDO+#tT18ic>4%ih58*#CPzm7>IJEWILl|I3xkK z51VeY92-56S$EU{bW=QRA^FO7j93RlvHo#+Sn@8LvwqXEgs`y1@IO8laOYLBk!G;k|3&Zt3#rzddmt{h}U4~GD$YK#^G5JM7qul##|RcU}i4PG<9bH)MD zlsfHZN678=AlIn3gc71lBiBjYFGp*)mV3`t01R@v;F{KZwhrvGzY`?0X?2#MedV73s8*~BDG)B{pN-v5hU+4`+7S|z5Vg&Z(A>Uh@jjMQkv&Jg=wuL9bcMhdA zt>dxKdq$d7IR#SgS6aEUsEqZ^ zd25)S0x{`$47V6ptZpYAo|sO|>hcATI8gcVA?C}5VtW=W2GY_rEQz)sr22XB3g+U1 z8&#{KQ~LzKN{=4$YmTl99gYPvB14sO#8#P*(;{WUqC^T*nki@xCVmQ}Q(gYZJT6Ew zHrL_dVJ+)3tx7j69U@9|XkZYmR~Mw#Ey%-%;@?PS8wgTC96>C^)9%TQC}BJ zhF4aeZ%73=Rb&3Ye-6sOZ1zP(-zJRt=oSGKArJ=Cn7oymp*BbaA7r?$j%E;Qg_8vd z420%x1wHl%v8ts&zH|WkRaJI>mTZADS3O%nxP~oF3``VQ8|{WBb|3`Cr{;+?iir07 z@8)sp&2mg^2#|St_G_4U4H%ii?_4Ce2)VvBqk=k&WdIcc@@gCUeivYx)to<@5qFpM z6snpK*S#e%56hm9rJ6?&w$vY$QS+PTkV^NBztO|RjQlbT-bt1G9Yi1=yIqjn{jY}J z5ym@^Y!cwZw;OY7f<4^FKBsI`w!xJ6YtJ&;Bp@1(RWk)5S$@2a0YE|~7B`b!XDf@&l{#c}@ti*WP(|GjuVLFz2B)6$cHw_L3}ei^5~d011TC6H!G z=MYwsx<}B+xPG9Z`m~6H#Z8A`EkfID@$N5CK_GvJ-)BV5+MNSkQsaRwYpQY0BMo@7N2xVV9~D2f0J^ovCA9vD2kZzZx!S*bxFi_30eW$veiD*1(6=D|hDLM$x_ z*Jmvt5H(0nN?cXCTsTNj!$5@2=sKS*#aOtS478-kIJ5!@5vzXZoUNWmf&o4=ru%8c zPS8IL&YyJI`SINBu<;s{BI408sVr7wZ*&s8w6_OKx^N!s3Nzzhc5WWsfgM%X8n~}* z4Gfq>kd%6EC6cI@wvh8M$~SL{c+Jhu`?hQWyqS_I3rXq+y+kb>5c%MOvbWgb3D<#$ zieC-TWRy2gQ#R8p>a*WIJ{^=aT5j~Pp^A%KjB(W1>dhw0Hq(8S@8-nTRkEs27wa9o){wl^K3&`?oLHFruE5iz;96 zD*Qd5j;)dF#>?yTKR(^VnqjaYdBpdV=2=Rg8}abBe~jW&Q_F3aWoC6N!_DSjP<=O@ zEji)x2p&QJ9jM2x%AN^y(CGK)JQAi!Y*?)No=6qVzI+M!;9SRLs!KPI@k*PDW({d4 zdF$Nzw8rY)?k{CbfA^#6Y7PB*`}Nk1N92*zS5@2r`R+x^O!dR93|}d`1PII{Y&vJ5-b(`;V^RiBb2{rN>kw9?n8X5gZ?| zK~&xsmY+U>^TvJx_(b~I-~*9yfZDvqcuJ~c>{gsYIpW5V3O9Qx&&0%ZTZ z{y7ll7HK1+qes@uYO1P3>HMWXfBtQML4|{gjB*&+wd}Tv2TJF&!9@>9`Sif=3|h0F zBF8ug43ca2l25AK%>yLKtEvp?g*=DJgTf(Wn|4(MI18Gof*iJ?X(03Caf&kABugr9 zsAV%xKcpKANqBT0wyUkwO=jRzj|3`d*gw-p%Mzs=U8uI6Ez$G3*d6x*PL*-F$iu(R z$Kyknj!zNW*41zGC#${hO9t6>BE#O}C+oT-{^p7UphVH;kF|hUS)QH8KK<&(`y1C> zo@SfsP&UH)a3~o)6z!*iy^M^hig`g#ipS|ola^Thk7MJo)FIu4)>dRt68n+OZw(C% zvFC^L*AZshL#b+NYQV#K-mHb(FV7!@IM#oEdZ<5`wG*=ci@!YqkPn+Ly684}S%nCI za{k>#N$WqxFz;P9oQvq+l@4brwVd8K4lw0WKJ2*L3HG7!e%O7>`{2_$y?_e}3NrD0 zENE&nhjlbmRaMp0Tzwb5 }!2c@O!a76(5w{0dkegj|w3d;(m7-ukIjOX89B}UDVM6e&ToYk%uq#M3PmPav3unAZLc%Nh{adry^U~0j z*3{e_`J**UrrFzANTzyAPm@qBYf09*kpwMFjgau2_0uJ&?LTP;7kq|K59a^Mz}gEp z@!EIqzm&^QUb5u}eJ18@YY00&J{}ktATjuU>MxA8dnp967qEZ4K&q#|0o+~Q@BN&C z4^Lp4lKAwDO1HUr0Fj?Y&vsHhqZS2bO5Q8Fxh)QD`#{??lbTOj?pMB_5BI@yU_Ne{ z8)yQ0pr7NvxgzlIBEp<9%Fa|1^;3r2IHvQMhdgptgT=_Z638m!?cqaT6BHOwe6Oya zA`DBkDz}q#Y~S$PE}^+e=d`pCfX>bwxgtge5kCjRTPomCmYHOqGRoFU9zz?#N4`L1 zWt<|JuJ_uK#IIg~+S&s`?w?#XU_DU?1Y$6m;{~X3x#jC{+WFC8kf_%cQd_Rv#(#@} z7kYKtpnBR9t76H0Xw)Rz@iZ)gA(q|Y5G2FphN$K%yXA(<1|ZemZl?o*ps^LI=g=aN?GzO*<<>0h1q@9 z^8+{N;coUNQzDi^HqzyP(_Pf_^{5#)wbWH>vK@!8Z2j$jK$-tNZ3S3s*<%M5A~8;E z^}!)$zh?0`+tRZ;9KpZ(U37ais4jQx=chkaqp25L-@BtX95Q~ACg^e?ebkz-yI%2% z%K2T|vf$qRN^Jk|@a@EC>z&oc1fuAN(ro0Lt&^s6eqEN64xm}XTs86Ecvv2mdn`_r z?Ph~XlQ?UQ?*v0F;%kN^>48N0?`&|Cg*e>%9KDmfOc?fd z_-fjeC-Y|c3n?4CMU%g&70}({(F{SGoe|v85BEE6tB-~|BPVXh5BkOGY+4oe>s_aS zmq7S9=%bm%tCi-fYn?LV%8pKzR9=VKR8Rk`XfYXjRl*>mxC{%{T0$vJpS%TO(fBSU zGgLE>@TqYKhNa~;uXSe2L5U84LhM$*pWC?A9u0Evf4|*A$J0zQLHa21uY$|tED%_2 zzwx-?)uPL|y<8zzKW-|L7g_Jv%FObQ8`mYZPBx;Qv(tozXjV8W8=uGaNf(w$Y32x*aaHJw1+U+&$_t12}uwjhK-Tf z49qFyk(0={q13BZpjs8$R37u048cl}p~it2KVQ?wxQgDdq7i!p0dpuI3&-0B13MkX zAsyWwtZz(hp(NGUHRlvF@cw3QG)dF{h;KmGuP{B#zXtCt^N7P*Lltjm)fHZw$aRof zGz<&qGljQuXffIdmM;NAT^|o7FvC@#cE&FVlinc7`=AF!`yjPlaNUKe@nbrPMCS%8mq6)wYi z$j`yIjygmzy(BysAa%MQQ5<|wBBe_JSb{W04)Mj226-bPu$F>I(v|>$W4HHFHPc)6 zNv+(sbg$`fNEJAET&@Jv)G+gor3w27 zea!#H8ZCWmSw!otKDn(OQ-*HN1vFDkiz@&2n{Auj{j#$@VNWUv zX!WMLRoXdYAkdLp?e}YO?x7V&%zB=F zt3cALbeKX|Nz4u~m%@gQc&ie=9c&Uh3I=^napL)E5FpR$zGww#b4-q!9BY@Sx|a_N z0!JzRnx33Fz&Bbr_F}W~H{0+QH-3;veBB);YB5Qu^%#N($W-?Ue=XC=1 zk~t^(v|uo1;la9m`PBd&>>DJIM*~m&6E>h6M%&6x9kJjopXpeFQ zx`~3Xfvbm?guQ2&QpT@d8u>rLP~USnPoK-n0W(6$a_ynm$(m`Sl(b;zm*Y&_ySdMt zBkXSuY&SK=tdB{{F^>n0m*CrfJN%-iavl{xs0F=iAoZ z`XRINRBEm*9aN`>C7ogX(!Z2e-OMv}g>aRZgnY+#TjR;{-#hI{fNe^IiTZ}l9AHZK z&A)MW>pgjBDM9ZUC3DAeqI^vf=|1o7uTP7hop)y?o3(HHoT2tZ6pzfE^zQ8CyfQAU1z9u+S zrY<1}Or<<-+?5Ow^>_)(707vAR^44{o?ZHgGm5}jx_U{s!lz$ng+&8hk<>j1!=^|A z^is{woa;v%L6?M|qB!579oj^$;)383bo_rMdPz^W30ZC+w0mG=3|e-lYW;72jp(Ng zutIVL<7RY$^F_nRIWq#K7zHoUQP3fI%B83qZ?yhf`<_IKr334ob2POuU<58o5Yf@- z#utsD(-9`GZ*tr=yzQ`go&eNK2qrKnM4!7>jucmi>QHd~x066567?S9AJvQ6ZCS1) z%S4M;C}%Mf`~w^*|r(Fa0ub<0k>#v$Sw8bc=Q ze#Z<`8uEECWfGQW3X_X&O4ELPuh4S+GZ)@7bp5ybWr1;JbCPvK0cA{|Bj+R|M|V%G zB*@%Psicu@n#wS{LZ=#&fUjv<3fOqi!)?;9*fhCqlO;{=@C zy~ld$iwP;Ydz{f%gcp> z3sPYE2>$*`rO)iuer?xBX2F}JLkA9{FuzMEj6EUctNyox4NN_^QwePxt~z>0CXS@? zke{$hxWu}Jo`W!)$9>zD2@?jdR`Wwdq?jLUeVKV0toQ?bi=P{`r80G*5DpMT# zZ6wLKL>SSxC;nc>t4cKkJpa#(V^Rx&;5=_75VdSPl`mSFOp3h=29 zCQInQcy{@+zplE70Wi+?eEQ+{kl*|;9FVNN-wT{L%VVEG5M~gTEM5p!FOsOjp_qxB~g8r%|wDfS;=eL+3 zdTzv0$}4B*37_OL6{7*9zfCsgp8Cb|rJOtN+C^^+MvWG@5>kCf7u6?!EneQs;c#(#Zy6$3@FY6vNN_g1N0q#bk>PwaScDkGKlIRs(UudJ03*n#B7BL z$2f!EH0C!eg*^Vuza_pa^_YMen@Jl@Ce?bPeo9W_x=%YcS=7Ch3HtHIsU#cT0LZOa zUO?h?RN-52ojP`#p+NU-Lbw5g*ORp;7$JM%d5F=b3d_NCAM47p%H6b(CYx#-uP5*! zm!hUcTGel(jUs0OK3Ql*jy3G)Ptl=JmAJqV_XaT66PY(`=Sa>n2Kzd+buCzUJzwaG z8Dcivs&6!6GygQ2*;pOfuk}5m*ebc`DYT5|q(az_n$9j@Wc1qw`q@alYI=1Dp%z$N zMyA)#rGrv(PZt=(^|`zMSxE#EY0&0G2Hn`O&Cuz1>O0?Z17x6&XXzMDJk%m`W9P-U zVsq`<8FSTu>br?1m{;T(`49rW35;on`UR|$zW@;e?}cz>{^FPAc8rnACh)(9LmBzM z(wwX1jO~Z#$zV8q00!d*XcHnaptO^SH-p=kzcC;mK)byo#D~)F4n} z#$0#>HZ5=(q&-oz?W0DV4b_Y7*6Y+`fiA$6Q}Y|1Q^~Le4Ej{>{-};jn9E~9p4lq= z0+F2j#Cld6UeyH1b&>9_ydYD9GnEVUH*TLkEtm4BZM^p&0^TTz(F}a6jmLWl4+)8n!tM5mgzyD7vVThQkdg+fi;};-+ zbX*JLhVAGw!j~ag^@X!9=`86|S6!Ov=7I#_>Qy7pxPR2KjZ zUsm2ACVDxyWN0-kdllByCJRnfo~LP>yNsBX3CK9edr`P92+1yb`SNEzJI3LMJXfOmGs=Hn{cg@WcnI6EG zVg9l^>35h=LBNqW;jMQ9h(Y1)_eu ziS5VF~{*;wH`kPRZH}dN^&|43_}t_{Ps~9Ks|d!@jgI z8rqSB7x$2J0}9qhrdMi2nMF~^O8E!7<3u_w^B$(n2RC2cx>ty*tIg-zw=Qt3ALErR zj^3&7a73fgM(6WK8NhsB9|7WQ3WI*UwjRG$u#*dyBO)fxGCXJ9v)DKNvR+fUd^RI3 z$Q}7}e*=N|2wLgF7}=7l%m$PGXqG!~4Ioe=H_L(r#)dhj zlhV7iQirln>>j?!s?^Z3jjm4jmH+v*{c#ly)*sx^5R6O42eVtM+uH1(9JYy~VUYbe znPmok4OxIQ6aB}m-=6)~@`u1^T31_5dXJ;XY7dugALs9QlwwdoD~YVrR#msR9uXuQ zn&rlOOZAoO!)t4uYxV$}%h7tZu;?R}wPDQtW^$5kZ_l#b@OO1}adUHJW#z%+wV2QI zV+=$-90t2zd~V(^OnfX+qOLQlJGneC0NxY<#Wrs8eMy7z`JAU2E$P~{!*BFDCbgIE zmS2EALM!}PVB>B^mhpeP!U|=mygdh#j&^*k?mV`N)QjEM!$Kk=uzx-Hq9d0!UtIxg zgdq8dQ;Vf{Nn&d1X&+tdL%*^Q6DDIXJz34Sd6>_v-nCBgGVn6Z_q~@e_sc@H!QLpc z#e<@9o5c~1)}?=0&)@eh??8rY9TBS@JFgP@NqN}0kWS`DvtEGw;lz6P)-?URaTd={ zD!^JM^iFuS~NWfLQp>+Sd797j~8r!Ra zB(dt&e3NrT+_Y^OrQ`Jowl}G-?Jjh3{T^ zym?mmZ%!sQ{!x%!A5>?!Hh3nw;j& znw`|f#4LyKL3G#sJJ!yO$FoltWx&uxf(*4%R>>P-*EIdCComY-T(8kQKv#&- zZzV7cTUuGY87c(~YDE8?AGY-G`OnO;xPDP~_FlzciL}`FwV+mTf1USPzd5>Oi+6VVOGnd%Tvoz})FdBo{ZK;WA?Ev+9_Kq8*X~UyR1X6%7CYc?bjc?`lNse4 zie=xtzCUR^fsK!f-5;`y_a03ZSY1%m?_?TCd&lqZFL0SK&{V%hVV{25c`4f@p`Wk0 z0US3qx5<7~-B8RsD=}|8(bD{4zBhFj8&s=#vpcU|D-{%3haTfFDrXK1QA zMHl$CGa~xci3WBTE>ke4b!9Gg9|YJdRm<^kPR^nCsE6!i>fk(yU5^3-HP|WBu65ZD zzL+U`KbFa~WA&!>#VaU1!co47fdwufL)ftK0l}t*@rg0PXvKB80Z1#~@|gCQ-3%yr z7zQw`0D`P`^@&U_J`47AS&sy8BEy`m4_kJYY5L_b`unLLOq0*x!z>ce6cwmu z#tD=q!I$xl*vzeHnn*e>z$N22&W zg@tC^&Gz&9cE@0LmcMYi@C9X^`Hi_3Y&YA0i8y>R-MX~N4{@HmJ>AKka{q(zj? zrmoqeCz`F{>Fxkz2n12r?HPIiU|V!w9lJ+MJCD4*WI(vc&CSipk(j#;pnCW_0pWP; zqDT(3IMGpNY_mw6OWzkDjV6Ov-EMDW>6Ot&t0CUXXv#YJM7)SZxB>#5l zuzl75_E=oI(r{F>Na?W|2iT}^^-pM16FJBbrd3m1OefDS*D-ufo9+ar{5F>Lw?YR{ z&!*`8anZ92&eQGF`#|}_!0d9Q<5UB3X200=kBC54N3~1}? zKb`hcT|a+*XQr->4tmeaD|2jTX^G~WljD!=)BT^eRZ~;b9YKQ9hReS+wzAR!vt4fR zDGfTaO-s`z6mzz*IReF|rgHUd?2KkTFFB1iKR?~OHj2{ydNyDt#>%bI(bfixJr)Z6 z{ew2MRf_&5UQ{hy=_JZ#danIvb2AEvo5#ybers#%bp-gEd}5kH-u}K-Kz6>pF91M_ ziiB4!0RRH}SzP?>FQgRTYM9yhQfy z;UNrMF>bNzk{w9H!a@WR5<;(*TClBMweQ3o6*(WOvYh0zS-9BC&pMtf|0RaBdFcA$ zErO|@KCnab*p{Gxp2rkm2v7~+)cusx&W`2}R!SGx5nx=9kZ|#i@XyA^#)^uwU@}`- z2;@B57NzRHSpwL9!vvnqaef6=Rp(0Rv~Pb;7xs-7>zAVVj*OIGuS~!6`G=CKP~&=} z4YIJc{ot@JrKI!>SUswcGDx%e(jL6M_6Hv39Zh7x8nW_DSn&Um$vMw9aNn8tMt zsJ!WREplH}eSBJmXNc-*=fBg!KWz3%Hje3;9nF<*{A~{?(kS)W zPBq7)5UMimk4It;)V)GAdAM-^{d>H=zyFa~GyhG!sJf;`y)41W$w}<-LIq@DZGC?G zy^riL$Og99g5ulJ!6p5RMxLDjRj$BYhn(#Nac`H2))&v;ad1@~%@H!aFx=>!ogJi) zl9EK+Y@SBLX}q<77*pr40s5O}T_WhT9XZ)wIw$PBJLUq&EFbd8(NN?ekdbC}b`ZIs z9RP0bZg;X`sKi>TsxB%9*$=K^8u!;4ppT`Ou3_y!d3*o1did+}apQ`X zp^J;le@=g;p<8aZ+7d;^kL;`ZZn?qb;CQ+5q!p0hv%a4Ny!^nKexF+Wv>tH@Dzlo# zTKOA+2hh>d^_kH;AzcG1BIom2BE{1=x$w( zD4NaU`!@Fv*w}g45#QqZs2J>^xc0;SVI_I5_h~nY6QK75Njzqr1Ep~K;GDg|Lay`? z_WXYxU3Vaq{~td^=9e-fGtM3%t5BJ7%HAuSID2LD2!-s!osn#^b9T1unY~BhY_d1M z$IoAP&wZZf^Lak=JzlSu3m@?QBK`1->+HI^M-UU=z4m$9!OF_@_4ViOTWi2?nT)`| zZm)e+y_8qV0?D=i^f3Hg@Y<^SX&HX7CW#p=%e;FZ)5c2(aoVa z7vvDi31tpV;1LLtMi3cRJ2dS4+;nI>dmq%2K4ufCV4n#_-(T1w59qNh1DDO+|LIpjY!b2VKwbVXbiX$DT;pp~gWK zfIBBzRw<#Vk)Wx>x8}Yqm<8e{$Yf81uw4sjuch3fJ+~CN=i#3o0|iC#~E5dbg1L`^GwZ? z?$j{T`U>x(|9%;x+n>PDCF7e14oz3{{$!`u7gwPOd{UALq-nK75NPh9bO0?)RxHnR zmt{`_gILhmJzW}<^Fu~Oy@ex8Ka3r<4y@TrB9R%=^3Be#d{V4M8F3!VFzs}&f0u~q zDu_~*J|mD!hVJ5pat>(hDxBD&lH{NF} zVvt4fIHF^IeYI8I)Z5nwuKOksZS?7}i#kEt+|EM~iv|1%VZtqQo-nSS_gdwH{96oa zs=c`m32a$h1bjeKE?l6|4)nLV6ZYd&=Og=G(=nolPtS$X#0EN9B= zhE}q6x&&@cnjC9a?x8Hf1M*vj4F}2+IH|MRtzAV!oK{n-59_jJUb?$uInwG2HMp8? z{BHmxR98flbh}Pp`-AsTCQm`ZTSHz1xKF6Yzhim!%?n%he5ZyMGVga1w9;ET*KpCA z`q5YVChhtVtzGCpIz0SdG)4M+EmbM5&6tN;n_}3ttox@w<52wRykVA54i& z`0i8E;Wt%EWVDc_kx9G-Ct}0NwW`lWIv{hv$5(u_dovf}|Dl)9gAB9P0!}pyrepoc zi-Kcd{)gECb7~nl&_zF-zL=!xsy)&F9v&mO^>o*ij2G*l)k; zs@%PbF1+T1tP%BsgxiEJm@vr!2)nx3b_DPtl?ES9=BgJwm!gS@I}d%FK781IalJPL zuK%Tz3&OzDw41XtNB@J~mQ`;Z9mcxr^O@L*r&a?+w-)wL=9%Bboeb4e5Lz@|bhbH^ z#StTa{wKsSY?D2e%xYj1klJf=HT5m~Ryy?(35B-H%i~eQ44yo+v$HEHcos=icPF45 z?h6{}v;G&64ah?;R?9>q4C9nt;dErZQ*Q-T*s8_=RE#J$SC3%Q;E`CvN0r7v?WPz` z@>ILycA8CapL{Vo`VVys!Z`#Q+|-qnVimG*AbBHR=Wg5B{u!X4z%#l8+-N}SvflSB zrZ=m)vhu~*a+>tzzlHA#MQ`(rL3?jBKhDL~l_2ol!(7l!U2OSfSY;>cRpwHAc|7BI zc~r{uGT%=r{OW>7`gGA03?U#K9Pl8d;-CM+2?$On2#kNtcDoX5UDo@>7M?T*k)UB9 zUz2a6-xjs4Pn^frf&oKZsjsX{Er@hUjNBU4`N7mf&duoi#vUkjyMOcy;JaR z*#Zb5E)gFRH|+6K+*k2v)!Sq}aF}KLS##-PG=D?H*5v$r({a{eu$E>+B5%lAui<Ezk~xd2)RC@E_;`HDdNB^UFEt>^pJN zyCm)H{?s5wa*GTqAAd$hei?V1!d$Jbe<|n)g2ZGc#iu0bYH9tjn?m9dW7z>9F8m;4 zX5r9$#RgK7e<%R`>=kr5=9C78UwaN^RC^JSe@}Ixr*XVv$rO%iM@;mCslPv1gA7XC z)Kq_4&H5QUl7PU#OR#sWAWj{%H>q(Rcbfh092+b?B^KAD5~5gr}hV&^Td(hX@y z4X|POUS2vvC#LK^tF+LX1MnU`#zEg5@fAr#Mo?1@GotYFLe zyJhvlbi8#pR$OMbErek0%jy27l8z<95}BclFu#al{LQ3h~DWOF7K*5wx$j!_KgFBl!l*^zd1y`R0 zq`9n!L!IjzeWwskDJLG&pl#fkG6(;^2cbWe9~Abylw%Rsi9mwrbU~-2dIl>H^zl*% zN`nSdD)Gu>5S8EPMRIw+IBpmN5wjyq_lZbRrfO)MI*b~KB@vcr=rkjFf!IVyq;gV8 z{b&lVjmH@6SBVd;A8f$}29ipXHJw!u#L`VC zLrPbal3;R%w&}TqBABJhR1NzD{mSue7}Uea*pQv=myAj)dh?cGY0>@x$K}iWlcvhf z{6~pi&RC68*OY9yMxx8_XY$j#3cV8)*EVG)0QfV=`Xwa9gS@h`GC~Vy?3UE@=ixWL z&{hz<(MJ?gEuE8Z34m>Qtz1Atb8r8{c&Etm6YTy)j1MaNy~%rLPx_6ve`u$9*)Ohy z5K8Js>6B8|MxprAdnvM-L$to~;(#t|C%b_Jf%ZqR5Rt1A=k?mI-NXJM7}wL#ZGc`D zpWMX7_%}>^mnGo{DS`G#GBQ?a7EbQe<@&znnOt}G0;VSbax1_jkl1@-Z2uZoLr>n2 zq8R;ne9W9bhZp_WvP4<%n8Vn`lG@QS(VCuhK2;}z9+u#@*&!RKPRNKCD{qBbVr=Y5!Xp+&FhuVR@Ss7 zQM7E=(rdnkHbEBAHJWQ@dSZH-+7Q!^Oa$agDdt~awv`p)L%U);v|I^+1n3>ev~9Ka z_OU##m2yfWlDT`}u2g?Y!n#Go5{;XVF9WUYpvh@mdU>J60!=HUy;&`yH4w$HtGIC~ zh+bH=5g+%mZupU>V(6*j%54uU(H=)%_IHh)@$6Qn&LX7Fi=Fg3wroLupY6?+N_3rV zUr*iEKuJ$OC@j%B@D-33)3ous(gmoFzn3dxsAnM@Zws=O$yVBpzRcwRN^((orxlH< z2!Xv7UHq@s{sEIeUBH)F*0G$uaeaaRWR)KmO2v^AN#rz88!0by%X_{jgIH&Rkd+_< zft4A477iVUu2HHtyS3jtaM@^U@%Ky<)a5iVU8&hxX1pmA7Y=|cM#dO~`~RJ?=cbRt zbJrTALJHw2b?ZIr8h*7De1^@3`7k`een~r-wn%EkOfZHSrFu-IHn``4`OpbQPz^3d zjTlnS0M*~=DN7RTffl%u_Rp#mY2%N)24;w!;>1JbhZ_L|WZEah z7iT^}euGUm--SR_g@FZMB`SxTTS8>+nV)MZDkeC{)VJAJLGTFgu z*)#McROPpo6efvGBHmaf|DS4ghu%)Pgh+rRLv8eL^M6v{}B8%;V zH9(Fe;f&`)=c+xm9P#N@%ARnGhG1~Xy4?>}aU`r$VPK7gi5~~VKIE6LQMum1#(qaR zZ2>r}>P8y5D+fj!Hf`R7cU`%>Ifq>o!8vWx3aa#hjp250$Ms`DQ*AX>)N8}1Jwb^}~GLPoR=|CFP6LexJNGeC2|2(N4--+|kat0(?xnb+E zJ3ZYISppd(|8fcxrguOUu9Tw0I|PT&cpP4wSK>C$wQT96!)oy!;Be1nnSg!Ma|aKs;%vC@L?Psr>E zEh%9}ABfvsAk6Uh+?cz#L_GT3y77w0s4k)vabrR=#+{~Mp-?EqNyI3Vp6w!9=eG+x z$-bJURrdo#UR<}fFs>*Ne1y~y#IcSO(&4!Sw~I5?f#Fhrx0H%2(Gh&%e7>#yAA}iZ zZnIXCpvH{~=@sJFQA`Q|pD0$M{!7w!42yvA#X#eg^jt)WbgJ(5zC9+MV(ah(Tlq25 zE{;)`{ecn=go%MaJ2w^zzV7e1cUy7Vx-7t}AxKPkG}W*mobVGb-=U=SxVq--_&8BR zPmb|?~2aRk@PhfXIwd)Y+O^60}|@{jOLL@lK>7T zScn7m@_v+)q2S#iTXWRfW93Ajmq~HZ0CJc`Ucb*DYn{kFxmhksO9RxGPvAIqRrpLJ zpJttF;ONUFB|v+2w2mthB%p%NhpdJlmM+64ovAH#P={tF-fh`eMzF@#V3>FfE9lw*Z_lPUjlf`)+2X4rKmLOl0rV7}`Ht&K821}KiJiaKj z8p@0i1hj6Bkp!Q$N~Q{!dGYid^48MnQKSv0WVUHDk^Pe17bci5h4>#`vwiQHek@Xw=J{O(oOLFXV@!9 z!zZ^{ttDuY&rAI<==7ft+=WlzUb!df`R2FP7qyW?JZD6?@rA8Olg!Q-x+yo?h$ZUd z)O5_dA2?(&m_Y8IRnUsIG9wHHPXdlS0Zv#MF76-1T)IIVVXGvvECYN-H+evwr61Sb z*ksX%_H-7K@s|3T64B+8_^tow2>Q`Z{dhgzyf`np`Zh0qPfFkaxkr9Z-V?|x(aJOG zZd%{s2dV%}j>C{nKdCLHPy|RfF;jyI_8=Mp)G*mYEDKCW62aHk8*v!wOY{qn1Sj=N z!IA(eJu(P}7m6Q6w*gD+k=0MST_VNWq{u7d<F_e$RoYFbj;@5@B3M)@Cg&?J$bq z23$B4t;*d|cDnd50Asu4L^5vpoYXAQgJLxg{ec?FE>#>Sog?*FCUX3wd z{_uU`)i*54Q{zP?7Nw%NnbMxoyi5NLUp=R>-5=C#13D8TmIU!l*ck|yu2(P|&xpEO!&pSi_vW#1`m zY)b!Eb$zm9UMrc(}-l^P+o{ximI1bFVpFfVg9DV0*lkO&B^PEY=c(anEaPmXty1!vL;v*WGXaJE+BR#!{#zUN4Mybq=kgAsrjrjGV8;yO z9R7X`x>zfAimPb>D2f%=HwzrL04SX&~QpYdn+CJ)5=+}s*~3+*hP%r`ybuq-W{E`$CHQR98wJs9uFtRLlkPSpL~pZLzW zA!|6^%G8behSZ~V>;LR>B~+ya^HcdCla~*ax;9JiwLg2^q4T;E2fhs(A}x(yZI{tW zQ+bT2iiuipqU^72Hv$wE8d9t3J~Dr@L(p<63C7Ps_qndFkDspM>64#k@6^q3rpR`& zA6fN^UrkR5k)~n#+|JIBCw)!t#5@;w~N~t42ty(`w{2;@;{!b zQCr%oM%Wu3dTdVt#shC$cT{~J-DiXR{tCOvnsT)G!c*yXGXUh)+ZW%sGgxGlhhUz< zs87^J=PDb^7dobu#-%syucvTAse}5CMC-znMRLDgRZUH-ezmHrcOi@K&ybXF^QDe> zVyF^s!C0yxcb~Es2hxS{-!gnlVs!<9JhZ#b$cmOV(ye&0!^zJfeRp(82_WASt(o)< zMi1|%2?knf0ERT7yC9bshTY211Wkp>HCPwYLC%2}7WKN$C5Cam z#fMnGAoSs2`am>TZkS)SYhaloPN&uZ_f7_SGF}QW^pv@u| z_Ar##|2z!0&ojWYB3VH2>jv!S<7%N^{RyQQHVE)fGYC9XHP~2SUBh;!LM4@A?Jh=@ z1~oB^&&3RHHdQiWL`P8aB;7z$7BrYJ%84Ph_;95g zz&FR*@)xl_WzT}MhJclE-p`|s!%(Vc6d3~G8--^LBnsOIXTaWu3IrLmG?&;=t2lZd|8F6d3 zU2HB%5x=}%tYnE;W~B!okLs051fU&vA&T}PF3pPgM-0AwtI9PB4EoPP1d?ulm@aWY zj)itt@Yr*(vv>NO>p_6?RM5N*eg;d9wg%9`QvS z<<5}2NZXQI`1j2UC*TAABS-({e+N^Qo5ha6g->TR;KC1|sVa_^I_@7Bpd#oNI?B<= zuOT#-g#6GI0lBs?b7|THA_;r$sTjSTkNDU7kz($5A-xz7L4yGAOA)&LrPmt|P?ir8ELUMu-PeESUfhN7kLr0` zr6vA}zqfFjPmUckKEW$VgbI`&@61(ObY5v{swd}yNVoY?ziolQmS+0h-JP8?P_XO; z2$i(O@Rk}@pM$WslG0Ln1C;F!%V5fK{MPii%DwIPbslj|79Vhm;zZ!W|0Qc1pkK?p zLdgk#CEt$w02cu&=5iMK_SaqhN=Y&JT<$U9G>bLvjfH>Zoo>A90JCXSkjCqy-Pg$A zN!~{&7DJ8yg!291~3&`?(Dkk>g@V9L3SA)+S1R#H3 zsuD~c1mTl?I}pBEBy-TwYvrDFeIdw`lvA&-_t;vYvd2X`oJrj2HEIQg${ioamix!Q z%>yw30GP%0#S|89e#B=4k)6?!`vedYQqu9UF(~=!n-~!1B?5W!^r?`vbXh<=GX~!N zaL}z$ZrEl$#)u!KprC-0UR&#Y9PRDx?SJ}<>9b4*2tD{F=><-Vc{M#7#O>eS#ntLX zpHof8x?A>0QbxuDIKpe0(T*J+##b%?L`JJZUcPyAw8d0x+9XY>QEj!ewMBv}t#kL) zh^v%|tt~4gK;*u-iGc!d&Im2UsrIXD(>4g?sGf7j89Ov71sMoov}{&MKeAW$RK!e> zpJcrJEjYFCAQTj?+j*i=QhulZ{tWu;e4SB~^}sUsCs)1>_d2DRQJN^7y)c_SZ}d5J;yrvz0^ z?ZVFGI9A!qO#!2n_d6e%z-a~(nA7?%rW<@tj6sM52n;y)m9C!IKDn^9v4NzQmhOUL z5Z8Rwvl!s!8eDe+r2kC3EIA-{GgVY&5_xMqzA`^ZV^z7#82f=*v{?i`1UOXmxZZ4P zJZvRyy57)jDk`-%E`Q%Yl%;sITU1zhHvo&pf`~!<)r$%mlhY3#9?^3Sx&=&Xy{%{! zarp3-x?tb_+UG|lwdWiCfy|QUYfI-7vKeXzo$XKhW|`U#E>9XyWFe>JFD^<~zn07J z;iHD%i!Ovm*b<^jA&SgSf z-b8id5jyQ^iy@QK{}1tvu|AzRuqSzw2b?!ks9pjOA&nPvH-kZ?sDp3%smp46QC=qoxK#zBRZteh^;**=3+4HE%v1zZYvvF#E{>#@s#RQ3_ z?B1m$<`d@L$ECRxTy?S98M>woUMD+%u0ObSNnLCm>^69$S67!-SCc{5^y6Q#2QU*V z@0D$qT#N>h`6GH!{jUiy@XW6@iGy7jTnJ_F12#*iLm2X8)^!4efKr9Gdu)4eg2`qn zsl2+Z-Q{+-$Wp}SO0}`qO0KHkMh~&ggO3K(yh&zLpJLu5wZsn~7k29|c7U0k#tTu% z>0a#MTezxY!C7B%{|!ZK^XxBuUI`J^C-Z2}1gNH#a6i?T$E01upzof;YncF5>dl~C zg>`2NNc8(n-3L984?NpNE@Z@&~= z=xdIf(Ge8AP^3%jN2s3+ghL1H8sX-s-{_be2|Xc2rEhG@2{?~l4Lw~IEabVh5DvPe zUVqMQCvLy$edtPt(z23afw}&G7YVFbgDKr3pPo|h_|B>1mZzF_0iEO#Hc z6iay>`7}AkjS=<5OLD&J4BC&@i}vy(%mZtxm80=fdOC{c1zO0XZohZJrZ16ZjcmOd zTqld9$-ec$63*~-Ne_H^o^U-&CGvxgB6IFOxdaE3h><+|4`#~9Ctb2AEG^bDlJLM~ zPkp5s8?E;z@c$Ogn-`S&J+$q}pQ|*R!bkkxx2@yAWRoW025ETJCQk2lV#}MO;%l;m zF;4}e4})Ii*ZUe-aM|q-L6HHx{Q@1rt>|DCnQkvN(U6Y~Az(Bm6U!L!FUM#oUN5fK z_T{VWzJ_TTXJ`?N3<}#QAHl=g(?0qIfBX^ms!0GCSX=*9zmIybH^OQYuv%K#W`Pf( zdBOrqi}8Pw8^KAVsgJ>rQ?X;iIf`?(d-RGV(Y%L>g3R5PjS-A{VBB6UcwewK5FXxlW9SFgf_YHCVc78ZZaWH#L=Bc@! z%dqA=xW0jmrn0=Hy4u>9dvE(5IYvw3@oS_xLtLXhElzpdr2Q*k+}N_cFjzzm?3r-q zQ!Ny#4^7mKfGTx~*W=0?ZWG;hB+VKOMzgdMXA{urSy1GibZd+z-*_U{&Ff`c3>bK8 zgHUzSi4@>e>qpMzXxWF?Rbsm5 zd47z+jZ1X!2f7`UP(LQvFm7hm;nSzDP&85rdF`IlqQQxNFHzjn$rTAS;S5+rqudN1 z{Zd9u4)J@$ke^cDLHi!^*Ut%j+t8StvpgnL!Qm@vmyNsM-t*Dnuo89+fASs6M7;hq z`_~_%)m7LOSaln=;0xNio3F#xh5XUQOGpPp9YWmzD17}6tDw5Eec76&w1zYKDbkG3 z*YE#b?)aG*t=%Nt%g3#R6g87qBe|WVJ?QbR6lXkY`d&ni2UIRR7oPvdd|+Fp>n`SL z8bsl5-n|41pLBOKCZW@F)pOH}86&&HC3iIcW1F!ASP$KYzA#qUfd&{YNF2Na+5QLc z{zk*~yVxz2l%tP*zve`^yc;r?jMxKTRP*qcSi)WY$(qHyY7CyegLn2{z1Ca%J`L#? zQt3}pk}E=dO<(uo4#cY6^XFl@JO$bR=Z0$S>FILDjat+k-)3qh1MxLyN)t5%^m`XI zSBYYZu8b6Q!4c75VPLwNYXUewkw)~I`c3uI93VsixfM+&EP|NY$^V{yfu7=*NYdSN z#dcZFl=9=`K~wm{4)223$r3z$tOS@)Bz$}G)8HNW`q!SfhyOJlsS>@$l~=5~{1cd$ za7dlKrFmS&5_jZBcu~dwWv%Bz8N>F5$%n^%-+l$lPU{2jwc6H>3V8EJk{8S8GX)ld zre@1HoUeUr%Ri}f4$sQ1#D1Bf@tCX8;LK*CLsb6JIf3>qv%r{phgEhn)-8N0D*xgt z-5WRB-L1D7stW|H@my=28%=X$ukTB%#3ra5+QugTQ-Ep=CpX6Qr>oi5s*s}NYBwle0}BpP^2 zLe3^16VDsg1B{y*hZl&Wge>y@&RqyCHJsDX>NZc*PL0$zUe3^$?HoA7ycH6)q>4)% z90tZ6f+7l-QE>IwhyF2ZQ>ELvMP2$ce@wl`%oFbL?aRA)QlWyiNc3e;Dz9RZ2ER`( z*a?QGet=$dj(x@(x*q0^b=?AE;`PLa0-RlLc=r<}Jn8uZ|4gf<@etg2T;om4#weZ& z=|!w%cd<@74N|>6CkAT4h8-?jx&cwpKulv|q`RkIYKj!!qoUz^2}i;4L6;<$U|!k> zL+w7tovJ(9(|6Z3h;_Y_1uDl$d!VMuU<5%!Ul190S24@DX^e*d$2YZiN0lY#+B&mY zV8kdPXeyNx3>9l|(L72$UDWn#!tGcmE2c$8JX8JLtT=7)Ls6g%X*r;53HeLp1|BjEzfzmUy|6E9t z{%MFBt^98EovUI`XPluZF+4F^B|1Gw!GI5aI`*#?pdm3_ifByrtCR?nz$; z-NoCD+a;OBd%3?YU!(4h>1sktr6FIM#i{33GTk%5qd%K6I{iT*qO*4EexvHS7F@#9 z!h0=+(<;Q>lQQUqzYa#4f@t2fL={rE+gR^`1?~fbrvABl(p?TXqD(>Ya=8UiJ@!D9 zf^po>{B=oK-i1GaLKnMmmef=?j=zoCf-V8XdVpctvrrgw2aNb5oa4hIqZ$q}-P4A? zK6jhyANZL-P5PHjP)rJ$O81(~<6z`hxgotK@9K6<>qOa9=1g8zUzdi1H{5fu92ui~ zhtY9!rR9TRvA72tocwb1{tKx##SquBAy@wA9JDFrRlmmGJB6{%MipAChj$}mlp-!y z2dQFScQDTT=CKYtl(DD@B{M$zMko1gYH5O@&u_$872|Wt;yoPx$^*QmZdg}1$0|2-iALK z?HHoey2zK!Eqc`8mc#cngStNgSzumOIfU7d`eUJu+gPc~cxko-**wno_Tk5eSf-hi-qB`3Ncwh3 zmq=RmnGMOMbnU60&7z*m;&=a{k}nO_({uF$b2U|WuuU~j!4Z3Kh1OKIte&B?Y6 z#b~svixP^>AM-+LU)?*~$6X<+s?I3VcD8@h=@o9z7B6s{`J_9WbJcidfBZ(RA}cqN zSY$frLs9j6t{RPSa`uaI&AXSQ=~`W>sc+xe4NSiU1J{agc%nZ2KZ&<545B!JV#nq5 zreef^tTTULwo)<+0+kM`Q$2VpTSnhK$@QqSCMe>UM`MZ!N{)p=Alu@s4bCt9O*LZG zirosxTLR@b^%dct>YOWCXB~>)D{#VQuycM+*YEh#-a^*1e13Bs?O`Z? Uj|=?gEf9#3{9CyanRkKz1KyhRhyVZp delta 29690 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

XIpI{Kk zjzsKSS2o22Tvg?YM@2XjvnpvmQWXr0VCIyR9}xY-VmbP51<2a%q|bfmS1d>NLXZnj z`j_60uKf_qMepJ!(uEF+CR_MiWXT8KwmdL*q5|c?RE6=hX}5M=;XdG@J(?&7l%xn973}8=Z*n$(c^+`Q?wf-YG*ifyvPB*JuY`e*WfQpxa5o{cv+&mn2 d1B7a?WSLjCRPZOab0P3iReGjaqVV?P{{ajEAe#UH From 0bfd673ab89cd325575f1db4fe1fe7627185921c Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 11 Nov 2015 12:15:42 +0200 Subject: [PATCH 2/5] Fixed conversion measurements. --HG-- branch : feature --- src/libs/ifc/xml/vabstractmconverter.cpp | 37 +++++++++------------- src/libs/ifc/xml/vpatternconverter.cpp | 40 +++++++++--------------- 2 files changed, 30 insertions(+), 47 deletions(-) diff --git a/src/libs/ifc/xml/vabstractmconverter.cpp b/src/libs/ifc/xml/vabstractmconverter.cpp index bb9df7c15..167831e54 100644 --- a/src/libs/ifc/xml/vabstractmconverter.cpp +++ b/src/libs/ifc/xml/vabstractmconverter.cpp @@ -94,10 +94,8 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() names.insert(QStringLiteral("lowbust_circ"), QStringLiteral("under_bust_girth")); names.insert(QStringLiteral("waist_circ"), QStringLiteral("waist_girth")); names.insert(QStringLiteral("highhip_circ"), QStringLiteral("high_hip_girth")); - - name = QStringLiteral("hip_circ"); - names.insert(name, QStringLiteral("hips_excluding_protruding_abdomen")); - names.insert(name, QStringLiteral("hip_girth")); + names.insert(QStringLiteral("hip_circ"), QStringLiteral("hips_excluding_protruding_abdomen")); + names.insert(QStringLiteral("hip_circ_with_abdomen"), QStringLiteral("hip_girth")); name = QStringLiteral("neck_arc_f"); names.insert(name, QStringLiteral("half_girth_neck")); @@ -129,16 +127,13 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() QStringLiteral("half_girth_hips_considering_protruding_abdomen")); names.insert(QStringLiteral("body_armfold_circ"), QStringLiteral("shoulder_girth")); names.insert(QStringLiteral("body_torso_circ"), QStringLiteral("trunk_length")); - - name = QStringLiteral("neck_front_to_waist_f"); - names.insert(name, QStringLiteral("front_waist_length")); - names.insert(name, QStringLiteral("center_front_waist_length")); - + names.insert(QStringLiteral("neck_front_to_waist_f"), QStringLiteral("front_waist_length")); + names.insert(QStringLiteral("neck_front_to_waist_flat"), QStringLiteral("center_front_waist_length")); names.insert(QStringLiteral("armpit_to_waist_side"), QStringLiteral("side_waist_length")); + names.insert(QStringLiteral("neck_side_to_waist_b"), QStringLiteral("waist_to_neck_side")); name = QStringLiteral("neck_side_to_waist_f"); names.insert(name, QStringLiteral("neck_to_front_waist_line")); - names.insert(name, QStringLiteral("waist_to_neck_side")); names.insert(name, QStringLiteral("front_shoulder_to_waist_length")); names.insert(QStringLiteral("neck_side_to_waist_b"), QStringLiteral("back_shoulder_to_waist_length")); @@ -159,10 +154,8 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() names.insert(QStringLiteral("shoulder_length"), QStringLiteral("shoulder_length")); names.insert(QStringLiteral("shoulder_tip_to_shoulder_tip_f"), QStringLiteral("across_front_shoulder_width")); names.insert(QStringLiteral("across_chest_f"), QStringLiteral("upper_front_chest_width")); - - name = QStringLiteral("armfold_to_armfold_f"); - names.insert(name, QStringLiteral("chest_width")); - names.insert(name, QStringLiteral("front_chest_width")); + names.insert(QStringLiteral("across_chest_f"), QStringLiteral("chest_width")); + names.insert(QStringLiteral("armfold_to_armfold_f"), QStringLiteral("front_chest_width")); name = QStringLiteral("shoulder_tip_to_shoulder_tip_b"); names.insert(name, QStringLiteral("arc_behind_shoulder_girdle")); @@ -199,11 +192,8 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() names.insert(QStringLiteral("armscye_circ"), QStringLiteral("armscye_girth")); names.insert(QStringLiteral("armscye_width"), QStringLiteral("anteroposterior_diameter_hands")); names.insert(QStringLiteral("arm_neck_side_to_finger_tip"), QStringLiteral("neck_to_third_finger")); - - name = QStringLiteral("arm_neck_side_to_wrist"); - names.insert(name, QStringLiteral("neck_to_radial_point")); - names.insert(name, QStringLiteral("shoulder_and_arm_length")); - + names.insert(QStringLiteral("arm_neck_side_to_outer_elbow"), QStringLiteral("neck_to_radial_point")); + names.insert(QStringLiteral("arm_neck_side_to_wrist"), QStringLiteral("shoulder_and_arm_length")); names.insert(QStringLiteral("leg_crotch_to_floor"), QStringLiteral("crotch_height")); names.insert(QStringLiteral("leg_waist_side_to_floor"), QStringLiteral("side_waist_to_floor")); names.insert(QStringLiteral("leg_waist_side_to_knee"), QStringLiteral("waist_to_knee")); @@ -218,9 +208,8 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() names.insert(name, QStringLiteral("arc_through_groin_area")); names.insert(name, QStringLiteral("crotch_length")); - name = QStringLiteral("rise_length_side"); - names.insert(name, QStringLiteral("waist_to_plane_seat")); - names.insert(name, QStringLiteral("rise_height")); + names.insert(QStringLiteral("rise_length_side"), QStringLiteral("waist_to_plane_seat")); + names.insert(QStringLiteral("rise_length_diag"), QStringLiteral("rise_height")); name = QStringLiteral("hand_length"); names.insert(name, QStringLiteral("hand_vertical_diameter")); @@ -239,6 +228,10 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() names.insert(QStringLiteral("highbust_b_over_shoulder_to_highbust_f"), QStringLiteral("strap_length")); names.insert(QStringLiteral("armscye_arc"), QStringLiteral("arc_through_shoulder_joint")); names.insert(QStringLiteral("head_circ"), QStringLiteral("head_girth")); + names.insert(QStringLiteral("arm_elbow_circ"), QStringLiteral("elbow_girth")); + names.insert(QStringLiteral("height_gluteal_fold"), QStringLiteral("height_under_buttock_folds")); + names.insert(QStringLiteral("neck_back_to_highbust_b"), QStringLiteral("scye_depth")); + names.insert(QStringLiteral("across_back_to_waist_b"), QStringLiteral("back_waist_to_upper_chest")); return names; } diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index 258727f88..5462132e2 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -792,10 +792,8 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("under_bust_girth"), QStringLiteral("lowbust_circ")); names.insert(QStringLiteral("waist_girth"), QStringLiteral("waist_circ")); names.insert(QStringLiteral("high_hip_girth"), QStringLiteral("highhip_circ")); - - name = QStringLiteral("hip_circ"); - names.insert(QStringLiteral("hips_excluding_protruding_abdomen"), name); - names.insert(QStringLiteral("hip_girth"), name); + names.insert(QStringLiteral("hips_excluding_protruding_abdomen"), QStringLiteral("hip_circ")); + names.insert(QStringLiteral("hip_girth"), QStringLiteral("hip_circ_with_abdomen")); name = QStringLiteral("neck_arc_f"); names.insert(QStringLiteral("half_girth_neck"), name); @@ -825,19 +823,15 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("back_hip_arc"), QStringLiteral("hip_arc_b")); names.insert(QStringLiteral("half_girth_hips_considering_protruding_abdomen"), QStringLiteral("hip_with_abdomen_arc_f")); - names.insert(QStringLiteral("shoulder_girth"), QStringLiteral("body_armfold_circ")); names.insert(QStringLiteral("trunk_length"), QStringLiteral("body_torso_circ")); - - name = QStringLiteral("neck_front_to_waist_f"); - names.insert(QStringLiteral("front_waist_length"), name); - names.insert(QStringLiteral("center_front_waist_length"), name); - + names.insert(QStringLiteral("front_waist_length"), QStringLiteral("neck_front_to_waist_f")); + names.insert(QStringLiteral("center_front_waist_length"), QStringLiteral("neck_front_to_waist_flat")); names.insert(QStringLiteral("side_waist_length"), QStringLiteral("armpit_to_waist_side")); + names.insert(QStringLiteral("waist_to_neck_side"), QStringLiteral("neck_side_to_waist_b")); name = QStringLiteral("neck_side_to_waist_f"); names.insert(QStringLiteral("neck_to_front_waist_line"), name); - names.insert(QStringLiteral("waist_to_neck_side"), name); names.insert(QStringLiteral("front_shoulder_to_waist_length"), name); names.insert(QStringLiteral("back_shoulder_to_waist_length"), QStringLiteral("neck_side_to_waist_b")); @@ -857,10 +851,8 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("shoulder_drop"), QStringLiteral("shoulder_slope_neck_side_length")); names.insert(QStringLiteral("across_front_shoulder_width"), QStringLiteral("shoulder_tip_to_shoulder_tip_f")); names.insert(QStringLiteral("upper_front_chest_width"), QStringLiteral("across_chest_f")); - - name = QStringLiteral("armfold_to_armfold_f"); - names.insert(QStringLiteral("chest_width"), name); - names.insert(QStringLiteral("front_chest_width"), name); + names.insert(QStringLiteral("chest_width"), QStringLiteral("across_chest_f")); + names.insert(QStringLiteral("front_chest_width"), QStringLiteral("armfold_to_armfold_f")); name = QStringLiteral("shoulder_tip_to_shoulder_tip_b"); names.insert(QStringLiteral("arc_behind_shoulder_girdle"), name); @@ -897,11 +889,8 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("armscye_girth"), QStringLiteral("armscye_circ")); names.insert(QStringLiteral("anteroposterior_diameter_hands"), QStringLiteral("armscye_width")); names.insert(QStringLiteral("neck_to_third_finger"), QStringLiteral("arm_neck_side_to_finger_tip")); - - name = QStringLiteral("arm_neck_side_to_wrist"); - names.insert(QStringLiteral("neck_to_radial_point"), name); - names.insert(QStringLiteral("shoulder_and_arm_length"), name); - + names.insert(QStringLiteral("neck_to_radial_point"), QStringLiteral("arm_neck_side_to_outer_elbow")); + names.insert(QStringLiteral("shoulder_and_arm_length"), QStringLiteral("arm_neck_side_to_wrist")); names.insert(QStringLiteral("crotch_height"), QStringLiteral("leg_crotch_to_floor")); names.insert(QStringLiteral("side_waist_to_floor"), QStringLiteral("leg_waist_side_to_floor")); names.insert(QStringLiteral("waist_to_knee"), QStringLiteral("leg_waist_side_to_knee")); @@ -912,11 +901,8 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("ankle_girth"), QStringLiteral("leg_ankle_circ")); names.insert(QStringLiteral("girth_knee_flexed_feet"), QStringLiteral("leg_knee_circ_bent")); names.insert(QStringLiteral("arc_through_groin_area"), QStringLiteral("crotch_length")); - - name = QStringLiteral("rise_length_side"); - names.insert(QStringLiteral("waist_to_plane_seat"), name); - names.insert(QStringLiteral("rise_height"), name); - + names.insert(QStringLiteral("waist_to_plane_seat"), QStringLiteral("rise_length_side")); + names.insert(QStringLiteral("rise_height"), QStringLiteral("rise_length_diag")); names.insert(QStringLiteral("hand_vertical_diameter"), QStringLiteral("hand_length")); names.insert(QStringLiteral("hand_width"), QStringLiteral("hand_palm_width")); names.insert(QStringLiteral("hand_girth"), QStringLiteral("hand_circ")); @@ -929,6 +915,10 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("strap_length"), QStringLiteral("highbust_b_over_shoulder_to_highbust_f")); names.insert(QStringLiteral("arc_through_shoulder_joint"), QStringLiteral("armscye_arc")); names.insert(QStringLiteral("head_girth"), QStringLiteral("head_circ")); + names.insert(QStringLiteral("elbow_girth"), QStringLiteral("arm_elbow_circ")); + names.insert(QStringLiteral("height_under_buttock_folds"), QStringLiteral("height_gluteal_fold")); + names.insert(QStringLiteral("scye_depth"), QStringLiteral("neck_back_to_highbust_b")); + names.insert(QStringLiteral("back_waist_to_upper_chest"), QStringLiteral("across_back_to_waist_b")); return names; } From e286ae84769d374bb10a7f2b5d166e35f27e9633 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 11 Nov 2015 14:23:39 +0200 Subject: [PATCH 3/5] =?UTF-8?q?New=20measurements:=20(H41)=20neck=5Fback?= =?UTF-8?q?=5Fto=5Facross=5Fback,=20(H42)=20across=5Fback=5Fto=5Fwaist=5Fb?= =?UTF-8?q?,=20=E2=80=8B(L22)=20arm=5Fneck=5Fside=5Fto=5Fouter=5Felbow,=20?= =?UTF-8?q?(G46)=20hip=5Fcirc=5Fwith=5Fabdomen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --HG-- branch : feature --- src/app/tape/share/resources/diagrams.qrc | 3 + src/app/tape/share/resources/diagrams/Gp9.png | Bin 0 -> 13821 bytes .../tape/share/resources/diagrams/Hp13.png | Bin 0 -> 10320 bytes .../tape/share/resources/diagrams/Lp10.png | Bin 0 -> 10182 bytes src/app/tape/tape.pro | 3 + src/libs/vmisc/def.cpp | 110 ++++++++++-------- src/libs/vmisc/def.h | 4 + .../vpatterndb/vtranslatemeasurements.cpp | 29 +++++ .../ValentinaTest/tst_measurementregexp.cpp | 7 +- 9 files changed, 108 insertions(+), 48 deletions(-) create mode 100644 src/app/tape/share/resources/diagrams/Gp9.png create mode 100644 src/app/tape/share/resources/diagrams/Hp13.png create mode 100644 src/app/tape/share/resources/diagrams/Lp10.png diff --git a/src/app/tape/share/resources/diagrams.qrc b/src/app/tape/share/resources/diagrams.qrc index a12f6afa4..ee4476135 100644 --- a/src/app/tape/share/resources/diagrams.qrc +++ b/src/app/tape/share/resources/diagrams.qrc @@ -22,6 +22,7 @@ diagrams/Gp6.png diagrams/Gp7.png diagrams/Gp8.png + diagrams/Gp9.png diagrams/Hp1.png diagrams/Hp2.png diagrams/Hp3.png @@ -34,6 +35,7 @@ diagrams/Hp10.png diagrams/Hp11.png diagrams/Hp12.png + diagrams/Hp13.png diagrams/Ip1.png diagrams/Ip2.png diagrams/Ip3.png @@ -66,6 +68,7 @@ diagrams/Lp7.png diagrams/Lp8.png diagrams/Lp9.png + diagrams/Lp10.png diagrams/Mp1.png diagrams/Mp2.png diagrams/Mp3.png diff --git a/src/app/tape/share/resources/diagrams/Gp9.png b/src/app/tape/share/resources/diagrams/Gp9.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a7da4eba14c8030c85fb978adc8d9fc1f34e0d GIT binary patch literal 13821 zcmX9_1yEbh*L^^7XmPhv+?^lZA{DePRv@@r2u^S>MGHlP6?Z5e9Euiqmmm%9R{YC< zzMajy%*)Kn-MhQ@?mOq)Zy(j)5#rI{0RTYw;l1K#)YT0D&{}cOQQrbZDCkiaT*!Mp zSJdxw|NEfHbEJErZeqKAP*cKQ!^g*`#B!SV#Q^{&;Dh2DEw9BxKhH!KUB9E_)xk`k zLiYZVmc{&;N|G9qL9`&=UtN7C4xyIk&%9p@y&VvvBJfA_cTr^_<^$231>P`Oyhg)( z&4GWYoZfwKpgx+}(#*Yf{Z3o=dUW*QLRHsO_xeDFPTjVls0F!S)qXcbNi6^Kx5@|$ z@Uo9KRJ&nEIp8(e!{UB!4UOrs{cxRES7?g$(I`c3W<>S#_2vTo|68IG9EptoEaIE>#Bs>+*-7;!MH@fp)9VQz%5m zP;oACivR%RL2wLVy1D6v)=f#Z!GQ^9`RJbN6q0^p=5RD1A~$6JYNzHsKH4I!ne-d6 zd3m4Yis?wZh#J}BuVin5Kq98|Ct{(12qKfv;V4NAU3FDrGXU5mG!N(YY={Yja`H`ATK=dLSH$;MJ~>~19(hfykoV;U@>%5N z$8x|L{Z)y#NI^LQEQlWY8z(S_IE+~BCG7VNzJC-A{c!pmYU)T>xdNQEI*A| zig4x)>CLY3sAr5PW#lL;YJSVHHzOm-`^i1~1ejcLSXhnz12lv!@|5xmy4KJ(RMEhF z81hs#sMRWh9q8ud8v8wi8J+2;1n_!;?8BHqP{V5aF`t#_%O0&Xyx=l!2~Jrw0LN5g zX|ZNidGzfIX_abpTAMeixnThBGlzy@AD)C<*uJbL1r8c3VK`PZUNb>p;EOj_BshV5 z7%u|_ApY;80l-EGKzj=e2j(CH&`qeASea5dTFVl!08vptZyw}1G{h*}TmZ&*%>!~3G z6xPejb?KHb#?khhj#hMz`l!-hlZ{|4DfiSU7gB7ZMW6#VdfG3nS^b!;fR~P@4K=W` z$ZyLBznYA1y!kj7L45N%x#X&WTG$4^Z%3*GMWxcT@ScAXDcHlx5hzWZ$fB08Fv4-P z=g{FWXs_M=C0^QXu)>5|t_fL0GYk1b#7QJtWxXcOx&M-2ZxV9#1(75PlJ#S)7uSaz z=OYAaFPo9aOGam3t9CSTcEU}mOo-%hY$OG71PRQD#@%vv`xczI&y!WFn@XTh`Mdd_ z5s^PIN>c$K@){PdC86>`b*X_DZ6Ncn-$>(=1+RTO8$VI_8yq6}PNvrperTaYApn{g z6*um4JJ63e&RhdjD6L2L1*O!yG|SCU3aQn9faOhR4CEu zcV>IspQHA%kmcA?ecGw0#ED};Zh6N7`e-qm8!HuJ)hL(~Fv*wDSJ9;a84k`P9lfUh z#$05UNV$mSr_hxbee zXZc_&Fad@EM3Udzdq_~_{q$NBBJC?4L?|2Cdzu#fi43HbyGpQJs$2`P?W^wm!GFMy zSDM6(uU*`e>cn$K&z2BP*B!ng0RQZ;92xY<4bsi3F6mRW#?q`qh6c$KAX447O!+lg z-i=_>_+q!e-xRpf`h2w!7Q1-Ea2?4P$o!>`xq>C*neGsqaNfJK*lvT2<%j};3DHGb zeToLrF5^7kcQ!B%l62zuw)~#`MoWA>kXijEJOvQY?#@=z+Y}jkC8(3%Ketm zn*M99H8UpAJM4bQoS4MY6MjGiU->*2$pkGf{wfGA zv*3YHcL@K_|EWrb4!@G{>m~gA^~EHrh^kohio@DEi#hkR(gKAMi-Nxpw=(1(1#|y? zKJRibxWfk$VICyQs0~Q1+DV}6AL)s<`8FxSbeQ|fv*<1=Lj7-AnXoK&ryAjrDF1!i zlE8@0M&ZK8^dfT%xWDs)vv5LLwJC<{-{7)H+$C=O$__Y*XGXeg1xq2JlD;f=883eD ze`YJLvR7Xy;NQ&oVMb|$P@YgMCe$GL|9cDU5MmQ`7>2{J`ko9+bb*!CMAJN|e3)9hQrT(~}+w zZHyPTKTamB%;Eg=W(eJt3)()9E!ci?&zStN@uQkH!bKAV#shG2g>r6W_iDP-G8e7E zLJmwDUIOa`=%4EveT3mYnA=9xW;~CCl83zbAhVrszM$oW=x#kzA~ia>%5Q(j2jpiC zKrdZkL+U_a(2m7Wfpv!o6y^A<^z{FFp%@R8I!Eoin(O5r>ytdyrNw-L!L<})J>!_x zQyx$RiD4A|ZA?LfL1nQGepRvx1}bt>M9{&_Z%FT`S+M{tA8u3o1?705BgIP+|gRDOK>izG5jL_BA=Z@Yg1yW|%hri2<0;NYwOep4?E`DV%z+m;%~(u(;>mHZJ)CZ+J%)1WzLl3sMe zN&o7=v3bgV;zvICZjSiKES>&|E=Mz5z?Blcu|ZuCa-{9bsM!=j1!`8o<#*3}d%qI} zeYJjeX5gv}a`>hFg@Z*)K@ZXU>7|T~QU6jEGpjVCN?VNdGQ-(M89rCi*p_yy<{zi zvP(R{FkK0Uu*9KuRY?*~M;qxaWzjr>1crZ1S260120qH{{?H*{YIVgt7GMPB+W)!N zp;(645~?b*VgncQyl=Fx{A70Da5IlKa`>iWAguc0c583|kz?+F;6Y_@gekT0k6+{8 z8%ff~Gj5+tmjt!4mH(oG$ijDhGe4U=WR-^5M(TpWS|dFK5-qv#VDmfb0?VcYDuC#< zStl+;TM!)6pvdvdigMa)_cInCu&pQ9F#3#CC--lM{XHZmY=6X zEj#kBS!`zSg|JqbQN9n{&Ry97JXuL*T+NoT{upWgj#q7G9^tT~GpiJBgXQ{TqdFri z`7%1cpvBif!J)rwN)8>+8zW+(d<%XT=>IK1Szp8hVO|>F()RS2Dt&d|)5!aob}JGg zmrW7?mA_95L%&)ZKkMz@J=S;+J&)hrf9aV$aIZRDWIK%UI^yVyQ}O(Y2P@c2&7N%*UiE-(wEr%# zC_2!bAoZ|j49FAp*{}Mq1#g0X3{Hcxl!mKU$ZJJN5QKWA-lFusEtgw;O;t!OTgQhg#oLI=l8vWz&M3!P1O zxCSLR3_Y3z(W1_YTa(=b>}Cm-{5(vO@r2`?CPW`O9kp2XMg~e)Xide@I{zH}DCHx0 z<=Iach0Bc7zA49HYQNYWQ(+v-*>64=n0<6Hk?G(3LmvNK3J0F!(N$ykm#C(uw3n{J zNLaI@g{2{#ddI@wHWMMA18j_dvaJt|623_(xbDzK2dDO&Z^x&?ya1#hhV374C`S<| z+6KSOJeRFssjVh^LC7yuU+3FfKxCbM^v3FuW8?5q4igX)5Bu{9_*tXoWc%PY`hL(` zRcMlczk+BZzu2E zb61*)3I>tx@?Fq@OK9KnV1?@V`ykMC#VRg}1A~ z9bQ7LD}v0Ye0f5PQ`kEww-&2*Z=(ov8tZ(-OhcUx9^TiZi%TX|)yJFvSX|C$cPutH z*JI{}^$;m?L_*$d#873iq0ZE|nW9`&3p8X^HS1yR;ubHT13*gH@zCys?cdJC3rV1u zMT$eVi4!6fxQ3pxQN$d`J7VKgRm8 z2HC$wQ?|e#M;?CHqdFi^Mkkx}@HerwvE?#IXD1Ksb#x3YxD5B=Y5w+dGTZq>0)zJs zw%o%m|Hf(0)gh&bxcI3wWfW^+k##JCjQ`&xr<+>2yB{(>$?I>+%;aO$iqkk~9nb)_ zWr}QiyXTeJ8hrXDHeIe18&jHJ3kLdx7&Fmbn=CbM984RH7#`=_FH+j&F4{c>v-8oI zNE@FumRRCPsn7>KoOH+eKb{*mU(V8Y-2WYOn*Vj=upDrnPRZbfn4+h5%zijvZ*GxN zi4%v>>U-OCi1^p!m1r5q=U}QjTY`NPv+^$J0HWcY3uSb`)XFi6pF}jaL+t#O{%mbk zf&c1oyjasW-iiw2sk)B4mH-+mD&LEVCw&6ZtZk?Eo7;47^HKae|HrGwj_oe&4#XUk9825qpXQO6FO5+JnB!-83&Zs|;n0pTkU(?urBi&oGoUd1CZvCYsrj>~Z!b z@Ij?4(CIgkw0G8*l)1OuT=^)}YG$PM@M`o4g?E67XFWI^e;i!YR`C1ew@LjZ+t-r&;#ISKCaw6QQ@UOG2PJK>@G=+rvtC(Fc`5!;Ei9MX;>`XaB zeZ@TO#5@NHaLqy$Ky%zL{vP>m-;Mc4RRuikuiefzR<@ogFX6O2-tNm?RmZJ3_tT#n zH9^nc8qR(F`tI(QA`7nOMo6U3A@!o|W%1zzTad&G*xTUw^ZE|K5f-O8Ja`C%26pbK#2CTh>=$>}yd?zedp& zVbNOZAcMvLDVCtwMHePh@QXKSP z9QSlbAK*3;`~>^-JgS{j;%YefN%DvC7MV829|5gQ4oMElPj1Y#in@gHOu2j1VHP#| z%EF5DHCQ%7u8iN;$|n7j&TSc9LCD`#tvgG_EpE#k41L>PL{J13a}Ulspe!EysI>h;GyKZJgB6 z>aQHU7yxNb<8ETr@K}LkUV;t&F@}iMlJtHEe2IP7$@OvPo!o7Sh94IhS2Tw2)q-`K z(Q&`rS%!V5p7aJH?} z|C*fJ&UoAPs?Uo1oT#X1@22yeXo``yEe{3vW5wy|x5`R#h5_A}3zk0tP<5{*D&U~R z)lSkQHl?AlF(!um`J?ykZqff*;s08Ld-fxnB{ctY$()hT zVf)Nc=V7wYi9maq ze;+JM1N=iWgbE50NC;XMPfEnb`yqll9ue4bE+eA4-fcsC>i&Br#vc-Vr_|<>dYBB8 z%t$AvZEdX-Q-lb3PwF}{32S)IH&0 zNT)yb;Dd24RGaVLtvzL3w;dlbKI|+FDaX^x`W^&f%RWRI-=Bak$Vexbi$!Gedx|=l zqz^Z3173eoxEY;6n(lBZRJ&Nw1V5)Uvt+^wc?P5wW1T#=;UlBJbtnp=G+?|PH_XhW zzg|8Uui;7gNA1+=jA%Q4Ky*CrKc#IW$a8aR{=2UY$h;W|pk|N5wrCfwYb&$0b~VYI zn^OLyA~OD~yh>s`4m;buPyd%6wgUH4Sxx6yRP@*nKe8C{?|IJTh+0SGwpa1`nqiDtla;wxE5$u0J5+owPFo|CFsSUx!! zn4eeVW3O*`D=8(Vg9x`wf+xh2tFgQ$8WDPAYpBS?SG<3;S|nw8hQ;2ie5aL!;VE3G zr=Yp@FEJx^L;kR!BdY%u>Qrnyl$?~JihsDz(WT+cFuT@j;tp|FzH*No8VbfhY~=bS z)E7mfU@qMS!XjvPks~jqopJe5v*a6$SB&dDusj6%>z`|Tq^d6%S;Eo4`mDhQRynDD z{=@~=nTePHk^Y^n#>XKxcZu{&8jiM}RxU&`mDd|J{{||{Xx_M4F>8Uh$ffn#MSY^F zXFmV{-J*p#INq8Hjp-Qy1_59wEYdwrm~R(eNLvt$k8^Y9(Gw^80@%&LI6`lnMgU&W z(tIb=u3iI6!S{cdo~7z@ln!ldRDos)KFqk*s^H!`%+ymX?xBu?PjU=iaLK1rSC1vcTTG^;60P*pTsf_6S z{5&(zOreVyyT#8c~i!zIpl664qXV8!Usx2k>MP|A^Gbn_um91z~sC^?lf1Z z&4S;H;2Qc@$_iJa>sZumQmB}bRd71B%yjE! z1wLVW)t;H{GF@?>mMqsaI*y)fNXU`X>Bet*EAL>cw|0=Vy@fHG)j5w-`o~pA-WDg` z^NMi^->c!B_>zD%wTYoz;k53 zB@Dd8HIF?1m3ZBsthGT4@`;zgctcKl<=hc73~~@|JVP)?f(N;s4tCDN3&kYiaOE14 z%Fe}=yN}4?amzaGe?AQ`OZD(V zme`KTafBTdvda~Ok0W~gOF4y<-AHh3+vek%Zlid*T@XIvaM|YhB3n3^@oHgwxS$l9 z4^Z@2H8IM6_xwZkDVAlW4h9k(VB9^u)>nAgzLHt^j@XMNe0Npv)M*WMC$ZskU-@m`e;R2D zPeaLJ;pUZo1kf9I0d7oPr!RWrE>MV!D0)gUAveChn4v3@D`srD=EXRtuIs1npt8a| z=)1a-w>9JN!c-ZhZ>MwUATuf}=4Ym$AHq{yc7I{kLvzthn6DbwmxV>sMW71j?PrXG zNr46yTSA0IxX`Xk@suYpH@dFV@(NEjm4)y6VxT>3Q%qy}g8BY|v&oD#xEqG&GD%~g zJ6N7LXb0YGvQ~C!?i+U0dZjy5K%k90YvZF|t}@0+#yCm|;CAMVO)l+$13U|*)jT2zUkg=ox!8u~BFl1+Vip2( zl|Gxl>Hm&;x%80Pv*>+44;~7W%J3dLQ?16Tp>RN+sjY}&>gv*tDg4NV>e(EXv%+Jx zb4qrL7v8El8}-q8gz<<(lbRa9N1tct5xe56D|QFkK;+<(6_?Y()jzOh4;ZmqoEbaB@1e z2RZ2y`sCag>>p~NIx ziKXshjsZ0JT7n_heiCE^S(=3hHN}{3DNhL29>kuCPqmI|4_nf_C6%stNb-8pu4oEd zDet96h(#kw41eUBCkd15h`OSPc>_oZ9?nr|gKO`H{nrLgcg=WyiV_U^ej)a8PM2`( z<=lCBdi%;`H5mK*SCJI@b8xKXa1*e{ZDM_rlJ`&si59V5CwWVeU7!?naxygbGU+an zTtK(X(>{nQd}MhL7YwcW*f^Y&Yi@-pafmCa9l4*#V*}MI)7k+m(!Kx2C8|$(_g*^`=y_%LeNG;UzN<3h{k8AF+4Jo(Lg6` zOiCL8Cj;fl-g)($ZYHz2IhG=~E7A3sScE->TQA(5oQ2_+){!431kW$TVArQ=hVE#5 znkg{Ecw!`8OUEVY@JKY{P)JMDAma*x0hW*=J?tHGBPqf zfWtjSR)(QBUc>3igVLwiNm`Z3QyiRGB6itEcuF5hPZzi9*Ify2(Ges%?wgm=EdKQ4=H5B;e8-G zt`J8y`|xSnL8_p{UtDukz_ymN!TYJ)O8tp$WGGTdw<)pu)bgeKt=jqTwU!wf=YqE; zd=vG<#pD_%*T-&SF}&Cy?Hd20-{yG9$7c+pWoHYodrB1kl@eC!$rAwJUt=gAY2KAr zI2b8fi!Jw(laUt+1``u$cYzT0=JI;X zFus28{V%XS>GBYgP8gyx8(NMp`X+;JyygS&6Kbp$shEjA7t^A5wsnm9gB36(1DTc( zJaXSdSd>&)a|dU$vw4N@VjzVV|7ZfVgnsVkPz-%rG)y>R2vczz@qmWdue@Kf6cp#j zKQgKO&-r&L*7-AggW4?sj+EE}UgP@fI#`BOQML*-QdB14RVJhg@n=YGwPh5rSPv)o zhL#{CQ|#nR5Hv6|AxhKXf9ZyZq&B^iK@i2x7csc9OJA$WeLPHqnxz@WPy<>;G|M11 zv`OG$KMWKOMLRYxPToxIScO#7^P0J(Hr3ljNw{(kZ4b^Kp?g*(bc)h;p#99;qLK;`JH~%ZXrwBT{0Wtd@|A+T`)3ol2O9`Fz*ta?X(SKS^ zf~hHs{)gCU)s zgE~>{;@o#MI^-Zj64x-D9{prem5EP7|ha_`~x)m%qzrhh~QW#*X zt)H|aZ$2oE9H*X!?H?7hw!W8s$*0th2AGyMv=`E43-HgI&`vMuQ-NCC#+RCiYwHQp zkyh`9qiEEBm6E~RS83vSz9Y|C^vnaf``MZowlXcH7fg1$iyZ1WC z{Z-HsO2Wmvw*2=u-o)P!mG?O^O|vi)Bs1F2LCrI6Ot1&C?*Ex|=?c+Gyzl3n56$oQ zcnHB0`7ykr{18pe+GKhPo00$sF7bKDlfCR>aq;UI7lk1GCIr$d{2*7iy{S*AXv@BM z{&hZsXYCEb>cCA;jaLAF`2w^mZXb3F`bVHPkOG36*2UY}V*s1>r9P0qJ&CsLAIlL~ z#+pNOHB+k}S3(SYXX)kZ=l&B-uS;FRK{T5q5728q9-}yV;eArzwasDGjU%z)Q~?3N z6k5_en9d7;!Qh?@#2}Xb^7m)c`E}4Yxc=fcT2KUXtPI6ox_3M7Cd}9!jLr`H4Kl!q zp9Y^ir6KgmyZF+GbQs{(xVmBQ>!e*vysc5$Gwnf;j2muY-;kyiT$Mm{xP8`P-f3FYkh`Q-hUCvBxJ>oY8UPNVDW&)0;yY7Nl zArIVX3ld-QvA@op)0MV+024U)y*Y*dV|$+-)b01q9`0NIbantj5uY#mb(5Y|W-1D5 zG`nEC9)`^A(Sd$(hY`#Lmd#ClJKDD58x&4~t5HDOhS2Amv?&MWSA@ln(bLo?ZU{#{ zKmfx0--jdrgXi35c`$(byGG^`%SxJ1 zdQXB%KfY)g9i%iIH4H}Pyu!SCUK5+w5W(&V`OXVj`<5c|BpLBYPMvasE7g1&;l@!{ zY3tzqxKzqWl%Z65fw@;7BxDV{X}L01m*3ZzG-@oqvbXPEmNzdg3QDE55iE1k5;UFW z8#(&z+E0&qO>xjTsc8u+19Nd$c{5I_8aBd)u_*yK#3!a}WNKE1y;%wyJdnKdXVFI9 z2*No#1wkwh$IOK{H6Y9?*HeeEmWJ7sS!Jv}Z>AL~iu-O+-=)^7I^RAPpwrGj+*Y)GIUTSQw#apl*o0=Riyx2d-$3CP2OJ{4M>te zqjw>g7#^gJ#fEjMx>);_;?Srk`E)t;?GR9)Nl3|WI8KUIuJ zf4&Pc0l9kEUv?J!7boFqpzD&vvE?)%04+hF%X?rn@kPb1y_xv4Rz|d(o1c@p>p}u* zS!)ccvF1k8Eqgt%Tv_!tranFCd8IYOP{y;lfsm+OZCpO{Yu^&#P zR>|aAqWuTd(mr67mIo`_?kdm`hm(KDOq5gp4o7ly>Hi7-j0P!z-u@a)9r}XUBRA!% zFHN%_I}}L7Qx$3Kn$cx-#XoYw3~y>W$>=K$w*P_8b#h(h0Xb9-R;Dwy4@pm#ZKLVp z&4BBnT^rjRiu3n;+njh9E0=}fV<$?il^h=~&%1SLBi--+sR(!6>2>cYd_YiGscKmj zI!?`&`N`(8C_h&tfMe1lYMWeW&Rwx@~NNV)Kix4~8fVrdEcMRZ!;U_Y0H-R$vc!duM@)d1dC$ z3T12t`7ZYsj0dTNqO0DxR+GpCGJ3|ROHXM>`*cr`QzNx#IM0@A1n6>+mbf=m47BJo z^i@8cuW@r{VOP_9%-7uG*c^th?&cQW6sGyE)SrmI7cV|jJXG8`{=Y|;jUMivaa_TK z5Fbs2JCuGK$Ep4I$W7GWG_!g;XyJbv=dt^@;I{s?#%`A$cV3TwP4UM5Y8iAkRM(Bk z4_kHY^B%iW&6Ut>KdwO7Hx1dR2hF_4-6T6p1b+s*Wj=F>~1{ykif zPb_@NYSAn??x4BpZt;3)Rxv(Yw5{Nt#F|#qUlH$_5N~kwe01&pS7fx#MJYi zE&%$ky2_$2b{fO=Fs*?v>lMQnpHC<=)@=>!n-V`;?G-R;blgrUCt6D4f=xeWw$Q$# zc7mVpT{jq>J@=7z@cxH5A$?J(epsfxQ}hh7UmEvktt0Qa;RU6bq!JAJK$)iz(8fk< z$caE=;JZ)uhf>Sd>?23HpXR|DiKLpyx4KPium}YezofFc+AUqR#!D97gkb|!oc8%q(w0UQp?6tbHRes>t?O% zqh*iq%MGampqeh7>h7}9+UN;dkclif{SAGULqbSAQ#&&Yn)excBB)$4hn|GytG5Z> z|I^LI&Z?fO8kLh&nT4u$+}e2mLrL0?;e4$(c*W-^LfCrk-V$t8Y=g0N{~#5z@3Dm8 zSBed`IvAK%k;4LD*Ow@#nqMqOkg}V74G?xRqG8-6EN>d0a}Cn$>L}=9Z5BJ*(j7^5 z*SKp&S@?{`(y}kMCstbSIFU|Oc=ZTho|cbSE-h4<^J#D-Hu?!ERhUf*3UD5(OsBOa zQ3HFhi2n1oI@oCy!qvFDMIO#Amh318;R6#P9g&QFU9A-QxBC44=}_6v-8_b)C=G4C z`k`iI(G3&X&KmWC`}tsKt`-DWu+aFy)@lp#s8HQ#t@1OVsL0XqRW%im-xS}|X}>Wq zD0MN4#Z0ezKY@4KJ|R>pkNb_`*8P4ys@IuF|K!fQ5%bn_u_UGMiya$-%t<+YV?JiU zoanIuU%O2cYom(;v-i&2LP-}?Zd=~5ebsSwRPCy+{O$bd+qmJ@M^|CFAuk0P@m0s| zWG?hdOI|kX&qZq}u>HRl)1*_;(|CsVrYNU9vk=E(*@tE`p%^)ooOrEs(Xhg2RmT~^ zn<;Q{u=VHS1kKsSq|1Xilv8ZFPuv~4IEPzdzvo8u-fHV)np;k=N~+4giaw!=2Of43 z!u5@m9R)3HZ2jpy)5X#Bb!{v%Z>#cAS<$1Js*+A%kaz}^%T4;68z;fPzOr7Ti>Uli zjVmGhvY#z~K2(OX#&a(|->JNMFD{MO+OXU0i}I(BRg>`jN5QR$oz7 z76tP?_ip&|S+k-+^_0*Su?0u=O2gAUe#IA$ctC3=t(5=qNhte1w7(TOKJ8dkuSH3Kr7wEq8X}s}iBvzp8k1J3=9#ek- z1I@Au`d@_otEOx_+{f7W@R1UOj|*~Y&7>^9HIPB_b%ues-1lOpOZ?7*XGMCoX+=Nr)~AdkLt!_n3rha>i#szdT~)V#KE6OvhDR(ZSwZnM7x&v@q-IP%`Ag| zY*{54kp2%LeX#-+YEe?D{!kVaP-D9!Dz9RkBwaVC zPYHu%(h&8>MUi5J>)SO-|E8MY={-@RAHsCCY}yqXhRCaAk2mx!HBDr_TE;<8{LoWZ zS8>hz?53)&YHyb7Qcq9D{VPXomeEw90#$8IO1>@`Po8f!rImaq|IA_C hJjTySQ(7M7L>EoX=KgF;ph~xZ4@&BamGUOR{|B?#_y+(0 literal 0 HcmV?d00001 diff --git a/src/app/tape/share/resources/diagrams/Hp13.png b/src/app/tape/share/resources/diagrams/Hp13.png new file mode 100644 index 0000000000000000000000000000000000000000..7691066651926c2e59ca4315b2cc63f50f23ab74 GIT binary patch literal 10320 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 Date: Wed, 11 Nov 2015 14:37:32 +0200 Subject: [PATCH 4/5] (N04) 'rise_length_side' renamed to 'rise_length_side_sitting'. --HG-- branch : feature --- src/libs/ifc/xml/vabstractmconverter.cpp | 2 +- src/libs/ifc/xml/vpatternconverter.cpp | 2 +- src/libs/vmisc/def.cpp | 28 +++++++++---------- src/libs/vmisc/def.h | 14 +++++----- .../vpatterndb/vtranslatemeasurements.cpp | 11 +++++--- .../ValentinaTest/tst_measurementregexp.cpp | 2 +- 6 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/libs/ifc/xml/vabstractmconverter.cpp b/src/libs/ifc/xml/vabstractmconverter.cpp index 167831e54..2d8738e6e 100644 --- a/src/libs/ifc/xml/vabstractmconverter.cpp +++ b/src/libs/ifc/xml/vabstractmconverter.cpp @@ -208,7 +208,7 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() names.insert(name, QStringLiteral("arc_through_groin_area")); names.insert(name, QStringLiteral("crotch_length")); - names.insert(QStringLiteral("rise_length_side"), QStringLiteral("waist_to_plane_seat")); + names.insert(QStringLiteral("rise_length_side_sitting"), QStringLiteral("waist_to_plane_seat")); names.insert(QStringLiteral("rise_length_diag"), QStringLiteral("rise_height")); name = QStringLiteral("hand_length"); diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index 5462132e2..babf25724 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -901,7 +901,7 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("ankle_girth"), QStringLiteral("leg_ankle_circ")); names.insert(QStringLiteral("girth_knee_flexed_feet"), QStringLiteral("leg_knee_circ_bent")); names.insert(QStringLiteral("arc_through_groin_area"), QStringLiteral("crotch_length")); - names.insert(QStringLiteral("waist_to_plane_seat"), QStringLiteral("rise_length_side")); + names.insert(QStringLiteral("waist_to_plane_seat"), QStringLiteral("rise_length_side_sitting")); names.insert(QStringLiteral("rise_height"), QStringLiteral("rise_length_diag")); names.insert(QStringLiteral("hand_vertical_diameter"), QStringLiteral("hand_length")); names.insert(QStringLiteral("hand_width"), QStringLiteral("hand_palm_width")); diff --git a/src/libs/vmisc/def.cpp b/src/libs/vmisc/def.cpp index c310a7bb3..47f06f728 100644 --- a/src/libs/vmisc/def.cpp +++ b/src/libs/vmisc/def.cpp @@ -257,13 +257,13 @@ const QString legCrotchToAnkle_M = QStringLiteral("leg_crotch_to_ankle"); const QString legWaistSideToAnkle_M = QStringLiteral("leg_waist_side_to_ankle"); // M13 const QString legWaistSideToKnee_M = QStringLiteral("leg_waist_side_to_knee"); // M14 // N -const QString crotchLength_M = QStringLiteral("crotch_length"); // N01 -const QString crotchLengthB_M = QStringLiteral("crotch_length_b"); // N02 -const QString crotchLengthF_M = QStringLiteral("crotch_length_f"); // N03 -const QString riseLengthSide_M = QStringLiteral("rise_length_side"); // N04 -const QString riseLengthDiag_M = QStringLiteral("rise_length_diag"); // N05 -const QString riseLengthB_M = QStringLiteral("rise_length_b"); // N06 -const QString riseLengthF_M = QStringLiteral("rise_length_f"); // N07 +const QString crotchLength_M = QStringLiteral("crotch_length"); // N01 +const QString crotchLengthB_M = QStringLiteral("crotch_length_b"); // N02 +const QString crotchLengthF_M = QStringLiteral("crotch_length_f"); // N03 +const QString riseLengthSideSitting_M = QStringLiteral("rise_length_side_sitting"); // N04 +const QString riseLengthDiag_M = QStringLiteral("rise_length_diag"); // N05 +const QString riseLengthB_M = QStringLiteral("rise_length_b"); // N06 +const QString riseLengthF_M = QStringLiteral("rise_length_f"); // N07 // O const QString neckBackToWaistFront_M = QStringLiteral("neck_back_to_waist_front"); // O01 const QString waistToWaistHalter_M = QStringLiteral("waist_to_waist_halter"); // O02 @@ -875,13 +875,13 @@ QStringList ListGroupM() //--------------------------------------------------------------------------------------------------------------------- QStringList ListGroupN() { - const QStringList list = QStringList() << crotchLength_M // N01 - << crotchLengthB_M // N02 - << crotchLengthF_M // N03 - << riseLengthSide_M // N04 - << riseLengthDiag_M // N05 - << riseLengthB_M // N06 - << riseLengthF_M; // N07 + const QStringList list = QStringList() << crotchLength_M // N01 + << crotchLengthB_M // N02 + << crotchLengthF_M // N03 + << riseLengthSideSitting_M // N04 + << riseLengthDiag_M // N05 + << riseLengthB_M // N06 + << riseLengthF_M; // N07 return list; } diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index 8d7a3dcec..c757049d3 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -413,13 +413,13 @@ extern const QString legCrotchToAnkle_M; // M12 extern const QString legWaistSideToAnkle_M; // M13 extern const QString legWaistSideToKnee_M; // M14 // N -extern const QString crotchLength_M; // N01 -extern const QString crotchLengthB_M; // N02 -extern const QString crotchLengthF_M; // N03 -extern const QString riseLengthSide_M; // N04 -extern const QString riseLengthDiag_M; // N05 -extern const QString riseLengthB_M; // N06 -extern const QString riseLengthF_M; // N07 +extern const QString crotchLength_M; // N01 +extern const QString crotchLengthB_M; // N02 +extern const QString crotchLengthF_M; // N03 +extern const QString riseLengthSideSitting_M; // N04 +extern const QString riseLengthDiag_M; // N05 +extern const QString riseLengthB_M; // N06 +extern const QString riseLengthF_M; // N07 // O extern const QString neckBackToWaistFront_M; // O01 extern const QString waistToWaistHalter_M; // O02 diff --git a/src/libs/vpatterndb/vtranslatemeasurements.cpp b/src/libs/vpatterndb/vtranslatemeasurements.cpp index 75da2960b..48f637e08 100644 --- a/src/libs/vpatterndb/vtranslatemeasurements.cpp +++ b/src/libs/vpatterndb/vtranslatemeasurements.cpp @@ -1821,12 +1821,15 @@ void VTranslateMeasurements::InitGroupN() "Full measurement description."); InitMeasurement(crotchLengthF_M, m, g, d, "N03", "(crotch_length - crotch_length_b)"); //================================================================================================================= - m = translate("VTranslateMeasurements", "rise_length_side", + m = translate("VTranslateMeasurements", "rise_length_side_sitting", "Name in a formula. Don't use math symbols and space in name!!!!"); - g = translate("VTranslateMeasurements", "Rise length, side", "Full measurement name."); - d = translate("VTranslateMeasurements", "From Waist Side down to surface, while seated on hard surface.", + g = translate("VTranslateMeasurements", + "Sit on hard surface. Rise length, side, taken from waist over hip curve down to surface", + "Full measurement name."); + d = translate("VTranslateMeasurements", + "From Waist Side around hp curve down to surface, while seated on hard surface.", "Full measurement description."); - InitMeasurement(riseLengthSide_M, m, g, d, "N04"); + InitMeasurement(riseLengthSideSitting_M, m, g, d, "N04"); //================================================================================================================= m = translate("VTranslateMeasurements", "rise_length_diag", "Name in a formula. Don't use math symbols and space in name!!!!"); diff --git a/src/test/ValentinaTest/tst_measurementregexp.cpp b/src/test/ValentinaTest/tst_measurementregexp.cpp index 203719859..c000c23aa 100644 --- a/src/test/ValentinaTest/tst_measurementregexp.cpp +++ b/src/test/ValentinaTest/tst_measurementregexp.cpp @@ -330,7 +330,7 @@ void TST_MeasurementRegExp::TestCorrectOrderMeasurement_data() QTest::newRow("N01") << crotchLength_M << "crotch_length"; QTest::newRow("N02") << crotchLengthB_M << "crotch_length_b"; QTest::newRow("N03") << crotchLengthF_M << "crotch_length_f"; - QTest::newRow("N04") << riseLengthSide_M << "rise_length_side"; + QTest::newRow("N04") << riseLengthSideSitting_M << "rise_length_side_sitting"; QTest::newRow("N05") << riseLengthDiag_M << "rise_length_diag"; QTest::newRow("N06") << riseLengthB_M << "rise_length_b"; QTest::newRow("N07") << riseLengthF_M << "rise_length_f"; From 833c5071486b7a86429df68052b6256fa66ed6a3 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 11 Nov 2015 16:26:48 +0200 Subject: [PATCH 5/5] New measurement (N08) rise_length_side. --HG-- branch : feature --- src/app/tape/share/resources/diagrams.qrc | 1 + src/app/tape/share/resources/diagrams/Np5.png | Bin 0 -> 6445 bytes src/app/tape/tape.pro | 1 + src/libs/ifc/schema.qrc | 3 + .../schema/individual_measurements/v0.3.3.xsd | 72 ++++ src/libs/ifc/schema/pattern/v0.2.1.xsd | 329 ++++++++++++++++++ .../schema/standard_measurements/v0.4.2.xsd | 66 ++++ src/libs/ifc/xml/vabstractmconverter.cpp | 13 +- src/libs/ifc/xml/vabstractmconverter.h | 1 + src/libs/ifc/xml/vpatternconverter.cpp | 45 ++- src/libs/ifc/xml/vpatternconverter.h | 4 + src/libs/ifc/xml/vvitconverter.cpp | 49 ++- src/libs/ifc/xml/vvitconverter.h | 2 + src/libs/ifc/xml/vvstconverter.cpp | 49 ++- src/libs/ifc/xml/vvstconverter.h | 2 + src/libs/vmisc/def.cpp | 6 +- src/libs/vmisc/def.h | 1 + .../vpatterndb/vtranslatemeasurements.cpp | 7 + .../ValentinaTest/tst_measurementregexp.cpp | 1 + 19 files changed, 643 insertions(+), 9 deletions(-) create mode 100644 src/app/tape/share/resources/diagrams/Np5.png create mode 100644 src/libs/ifc/schema/individual_measurements/v0.3.3.xsd create mode 100644 src/libs/ifc/schema/pattern/v0.2.1.xsd create mode 100644 src/libs/ifc/schema/standard_measurements/v0.4.2.xsd diff --git a/src/app/tape/share/resources/diagrams.qrc b/src/app/tape/share/resources/diagrams.qrc index ee4476135..0f814d09f 100644 --- a/src/app/tape/share/resources/diagrams.qrc +++ b/src/app/tape/share/resources/diagrams.qrc @@ -76,6 +76,7 @@ diagrams/Np2.png diagrams/Np3.png diagrams/Np4.png + diagrams/Np5.png diagrams/Op1.png diagrams/Op2.png diagrams/Op3.png diff --git a/src/app/tape/share/resources/diagrams/Np5.png b/src/app/tape/share/resources/diagrams/Np5.png new file mode 100644 index 0000000000000000000000000000000000000000..737e6bef53cc4c2c4c83be00dbb4c98e436cafac GIT binary patch literal 6445 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 EA3U;WH~;_u literal 0 HcmV?d00001 diff --git a/src/app/tape/tape.pro b/src/app/tape/tape.pro index e1e8d5c2b..be72682c4 100644 --- a/src/app/tape/tape.pro +++ b/src/app/tape/tape.pro @@ -340,6 +340,7 @@ DIAGRAMS += \ $${PWD}/share/resources/diagrams/Np2.png \ $${PWD}/share/resources/diagrams/Np3.png \ $${PWD}/share/resources/diagrams/Np4.png \ + $${PWD}/share/resources/diagrams/Np5.png \ $${PWD}/share/resources/diagrams/Op1.png \ $${PWD}/share/resources/diagrams/Op2.png \ $${PWD}/share/resources/diagrams/Op3.png \ diff --git a/src/libs/ifc/schema.qrc b/src/libs/ifc/schema.qrc index de7259a73..6bec8b207 100644 --- a/src/libs/ifc/schema.qrc +++ b/src/libs/ifc/schema.qrc @@ -6,12 +6,15 @@ schema/pattern/v0.1.3.xsd schema/pattern/v0.1.4.xsd schema/pattern/v0.2.0.xsd + schema/pattern/v0.2.1.xsd schema/standard_measurements/v0.3.0.xsd schema/standard_measurements/v0.4.0.xsd schema/standard_measurements/v0.4.1.xsd + schema/standard_measurements/v0.4.2.xsd schema/individual_measurements/v0.2.0.xsd schema/individual_measurements/v0.3.0.xsd schema/individual_measurements/v0.3.1.xsd schema/individual_measurements/v0.3.2.xsd + schema/individual_measurements/v0.3.3.xsd diff --git a/src/libs/ifc/schema/individual_measurements/v0.3.3.xsd b/src/libs/ifc/schema/individual_measurements/v0.3.3.xsd new file mode 100644 index 000000000..a6a241e53 --- /dev/null +++ b/src/libs/ifc/schema/individual_measurements/v0.3.3.xsd @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/ifc/schema/pattern/v0.2.1.xsd b/src/libs/ifc/schema/pattern/v0.2.1.xsd new file mode 100644 index 000000000..65456be2a --- /dev/null +++ b/src/libs/ifc/schema/pattern/v0.2.1.xsd @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/ifc/schema/standard_measurements/v0.4.2.xsd b/src/libs/ifc/schema/standard_measurements/v0.4.2.xsd new file mode 100644 index 000000000..788adcbb1 --- /dev/null +++ b/src/libs/ifc/schema/standard_measurements/v0.4.2.xsd @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/ifc/xml/vabstractmconverter.cpp b/src/libs/ifc/xml/vabstractmconverter.cpp index 2d8738e6e..268e4b2d4 100644 --- a/src/libs/ifc/xml/vabstractmconverter.cpp +++ b/src/libs/ifc/xml/vabstractmconverter.cpp @@ -128,7 +128,7 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() names.insert(QStringLiteral("body_armfold_circ"), QStringLiteral("shoulder_girth")); names.insert(QStringLiteral("body_torso_circ"), QStringLiteral("trunk_length")); names.insert(QStringLiteral("neck_front_to_waist_f"), QStringLiteral("front_waist_length")); - names.insert(QStringLiteral("neck_front_to_waist_flat"), QStringLiteral("center_front_waist_length")); + names.insert(QStringLiteral("neck_front_to_waist_flat_f"), QStringLiteral("center_front_waist_length")); names.insert(QStringLiteral("armpit_to_waist_side"), QStringLiteral("side_waist_length")); names.insert(QStringLiteral("neck_side_to_waist_b"), QStringLiteral("waist_to_neck_side")); @@ -235,3 +235,14 @@ QMultiMap VAbstractMConverter::OldNamesToNewNames_InV0_3_0() return names; } + +//--------------------------------------------------------------------------------------------------------------------- +QMap VAbstractMConverter::OldNamesToNewNames_InV0_3_3() +{ + // new name, old name + QMap names; + + names.insert(QStringLiteral("rise_length_side_sitting"), QStringLiteral("rise_length_side")); + + return names; +} diff --git a/src/libs/ifc/xml/vabstractmconverter.h b/src/libs/ifc/xml/vabstractmconverter.h index 3f73b6c46..24335f863 100644 --- a/src/libs/ifc/xml/vabstractmconverter.h +++ b/src/libs/ifc/xml/vabstractmconverter.h @@ -40,6 +40,7 @@ public: protected: void AddRootComment(); static QMultiMap OldNamesToNewNames_InV0_3_0(); + static QMap OldNamesToNewNames_InV0_3_3(); private: Q_DISABLE_COPY(VAbstractMConverter) diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index babf25724..e75f854d0 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -43,8 +43,8 @@ */ const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.0"); -const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.2.0"); -const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.2.0.xsd"); +const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.2.1"); +const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.2.1.xsd"); //--------------------------------------------------------------------------------------------------------------------- VPatternConverter::VPatternConverter(const QString &fileName) @@ -100,6 +100,8 @@ QString VPatternConverter::XSDSchema(int ver) const case (0x000104): return QStringLiteral("://schema/pattern/v0.1.4.xsd"); case (0x000200): + return QStringLiteral("://schema/pattern/v0.2.0.xsd"); + case (0x000201): return CurrentSchema; default: { @@ -152,6 +154,13 @@ void VPatternConverter::ApplyPatches() V_FALLTHROUGH } case (0x000200): + { + ToV0_2_1(); + const QString schema = XSDSchema(0x000201); + ValidateXML(schema, fileName); + V_FALLTHROUGH + } + case (0x000201): break; default: break; @@ -215,6 +224,14 @@ void VPatternConverter::ToV0_2_0() Save(); } +//--------------------------------------------------------------------------------------------------------------------- +void VPatternConverter::ToV0_2_1() +{ + SetVersion(QStringLiteral("0.2.1")); + ConvertMeasurementsToV0_2_1(); + Save(); +} + //--------------------------------------------------------------------------------------------------------------------- void VPatternConverter::TagUnitToV0_2_0() { @@ -665,6 +682,17 @@ void VPatternConverter::TagMeasurementsToV0_2_0() ms.appendChild(newNodeText); } +//--------------------------------------------------------------------------------------------------------------------- +void VPatternConverter::ConvertMeasurementsToV0_2_1() +{ + const QMap names = OldNamesToNewNames_InV0_2_1(); + + // Structure did not change. We can use the same code. + ConvertPointExpressionsToV0_2_0(names); + ConvertArcExpressionsToV0_2_0(names); + ConvertPathPointExpressionsToV0_2_0(names); +} + //--------------------------------------------------------------------------------------------------------------------- QString VPatternConverter::MUnitV0_1_4() const { @@ -826,7 +854,7 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() names.insert(QStringLiteral("shoulder_girth"), QStringLiteral("body_armfold_circ")); names.insert(QStringLiteral("trunk_length"), QStringLiteral("body_torso_circ")); names.insert(QStringLiteral("front_waist_length"), QStringLiteral("neck_front_to_waist_f")); - names.insert(QStringLiteral("center_front_waist_length"), QStringLiteral("neck_front_to_waist_flat")); + names.insert(QStringLiteral("center_front_waist_length"), QStringLiteral("neck_front_to_waist_flat_f")); names.insert(QStringLiteral("side_waist_length"), QStringLiteral("armpit_to_waist_side")); names.insert(QStringLiteral("waist_to_neck_side"), QStringLiteral("neck_side_to_waist_b")); @@ -922,3 +950,14 @@ QMap VPatternConverter::OldNamesToNewNames_InV0_2_0() return names; } + +//--------------------------------------------------------------------------------------------------------------------- +QMap VPatternConverter::OldNamesToNewNames_InV0_2_1() +{ + // old name, new name + QMap names; + + names.insert(QStringLiteral("rise_length_side"), QStringLiteral("rise_length_side_sitting")); + + return names; +} diff --git a/src/libs/ifc/xml/vpatternconverter.h b/src/libs/ifc/xml/vpatternconverter.h index 5da3b07e1..b62ef6b5b 100644 --- a/src/libs/ifc/xml/vpatternconverter.h +++ b/src/libs/ifc/xml/vpatternconverter.h @@ -60,12 +60,15 @@ private: void ToV0_1_3(); void ToV0_1_4(); void ToV0_2_0(); + void ToV0_2_1(); void TagUnitToV0_2_0(); void TagIncrementToV0_2_0(); void ConvertMeasurementsToV0_2_0(); void TagMeasurementsToV0_2_0(); + void ConvertMeasurementsToV0_2_1(); + QSet FixIncrementsToV0_2_0(); QString FixIncrementInFormulaToV0_2_0(const QString &formula, const QSet &names); void FixPointExpressionsToV0_2_0(const QSet &names); @@ -83,6 +86,7 @@ private: QStringList ListPathPointExpressionsV0_1_4() const; static QMap OldNamesToNewNames_InV0_2_0(); + static QMap OldNamesToNewNames_InV0_2_1(); }; #endif // VPATTERNCONVERTER_H diff --git a/src/libs/ifc/xml/vvitconverter.cpp b/src/libs/ifc/xml/vvitconverter.cpp index bdd3eac36..b518967aa 100644 --- a/src/libs/ifc/xml/vvitconverter.cpp +++ b/src/libs/ifc/xml/vvitconverter.cpp @@ -40,8 +40,8 @@ */ const QString VVITConverter::MeasurementMinVerStr = QStringLiteral("0.2.0"); -const QString VVITConverter::MeasurementMaxVerStr = QStringLiteral("0.3.2"); -const QString VVITConverter::CurrentSchema = QStringLiteral("://schema/individual_measurements/v0.3.2.xsd"); +const QString VVITConverter::MeasurementMaxVerStr = QStringLiteral("0.3.3"); +const QString VVITConverter::CurrentSchema = QStringLiteral("://schema/individual_measurements/v0.3.3.xsd"); //--------------------------------------------------------------------------------------------------------------------- VVITConverter::VVITConverter(const QString &fileName) @@ -93,6 +93,8 @@ QString VVITConverter::XSDSchema(int ver) const case (0x000301): return QStringLiteral("://schema/individual_measurements/v0.3.1.xsd"); case (0x000302): + return QStringLiteral("://schema/individual_measurements/v0.3.2.xsd"); + case (0x000303): return CurrentSchema; default: { @@ -131,6 +133,13 @@ void VVITConverter::ApplyPatches() V_FALLTHROUGH } case (0x000302): + { + ToV0_3_3(); + const QString schema = XSDSchema(0x000303); + ValidateXML(schema, fileName); + V_FALLTHROUGH + } + case (0x000303): break; default: break; @@ -257,6 +266,34 @@ void VVITConverter::PM_SystemV0_3_2() parent.insertBefore(pm_system, personal); } +//--------------------------------------------------------------------------------------------------------------------- +void VVITConverter::ConvertMeasurementsToV0_3_3() +{ + const QMap names = OldNamesToNewNames_InV0_3_3(); + auto i = names.constBegin(); + while (i != names.constEnd()) + { + const QDomNodeList nodeList = this->elementsByTagName(QStringLiteral("m")); + if (nodeList.isEmpty()) + { + continue; + } + + for (int ii = 0; ii < nodeList.size(); ++ii) + { + const QString attrName = QStringLiteral("name"); + QDomElement element = nodeList.at(ii).toElement(); + const QString name = GetParametrString(element, attrName); + if (name == i.value()) + { + SetAttribute(element, attrName, i.key()); + } + } + + ++i; + } +} + //--------------------------------------------------------------------------------------------------------------------- void VVITConverter::ToV0_3_0() { @@ -282,3 +319,11 @@ void VVITConverter::ToV0_3_2() PM_SystemV0_3_2(); Save(); } + +//--------------------------------------------------------------------------------------------------------------------- +void VVITConverter::ToV0_3_3() +{ + SetVersion(QStringLiteral("0.3.3")); + ConvertMeasurementsToV0_3_3(); + Save(); +} diff --git a/src/libs/ifc/xml/vvitconverter.h b/src/libs/ifc/xml/vvitconverter.h index 10c808fee..b2a265d01 100644 --- a/src/libs/ifc/xml/vvitconverter.h +++ b/src/libs/ifc/xml/vvitconverter.h @@ -61,10 +61,12 @@ private: QDomElement AddMV0_3_0(const QString &name, qreal value); void GenderV0_3_1(); void PM_SystemV0_3_2(); + void ConvertMeasurementsToV0_3_3(); void ToV0_3_0(); void ToV0_3_1(); void ToV0_3_2(); + void ToV0_3_3(); }; #endif // VVITCONVERTER_H diff --git a/src/libs/ifc/xml/vvstconverter.cpp b/src/libs/ifc/xml/vvstconverter.cpp index ea6c2d4ba..0a928e054 100644 --- a/src/libs/ifc/xml/vvstconverter.cpp +++ b/src/libs/ifc/xml/vvstconverter.cpp @@ -40,8 +40,8 @@ */ const QString VVSTConverter::MeasurementMinVerStr = QStringLiteral("0.3.0"); -const QString VVSTConverter::MeasurementMaxVerStr = QStringLiteral("0.4.1"); -const QString VVSTConverter::CurrentSchema = QStringLiteral("://schema/standard_measurements/v0.4.1.xsd"); +const QString VVSTConverter::MeasurementMaxVerStr = QStringLiteral("0.4.2"); +const QString VVSTConverter::CurrentSchema = QStringLiteral("://schema/standard_measurements/v0.4.2.xsd"); //--------------------------------------------------------------------------------------------------------------------- VVSTConverter::VVSTConverter(const QString &fileName) @@ -91,6 +91,8 @@ QString VVSTConverter::XSDSchema(int ver) const case (0x000400): return QStringLiteral("://schema/standard_measurements/v0.4.0.xsd"); case (0x000401): + return QStringLiteral("://schema/standard_measurements/v0.4.1.xsd"); + case (0x000402): return CurrentSchema; default: { @@ -122,6 +124,13 @@ void VVSTConverter::ApplyPatches() V_FALLTHROUGH } case (0x000401): + { + ToV0_4_2(); + const QString schema = XSDSchema(0x000402); + ValidateXML(schema, fileName); + V_FALLTHROUGH + } + case (0x000402): break; default: break; @@ -263,6 +272,34 @@ void VVSTConverter::PM_SystemV0_4_1() parent.insertBefore(pm_system, personal); } +//--------------------------------------------------------------------------------------------------------------------- +void VVSTConverter::ConvertMeasurementsToV0_4_2() +{ + const QMap names = OldNamesToNewNames_InV0_3_3(); + auto i = names.constBegin(); + while (i != names.constEnd()) + { + const QDomNodeList nodeList = this->elementsByTagName(QStringLiteral("m")); + if (nodeList.isEmpty()) + { + continue; + } + + for (int ii = 0; ii < nodeList.size(); ++ii) + { + const QString attrName = QStringLiteral("name"); + QDomElement element = nodeList.at(ii).toElement(); + const QString name = GetParametrString(element, attrName); + if (name == i.value()) + { + SetAttribute(element, attrName, i.key()); + } + } + + ++i; + } +} + //--------------------------------------------------------------------------------------------------------------------- void VVSTConverter::ToV0_4_0() { @@ -281,3 +318,11 @@ void VVSTConverter::ToV0_4_1() PM_SystemV0_4_1(); Save(); } + +//--------------------------------------------------------------------------------------------------------------------- +void VVSTConverter::ToV0_4_2() +{ + SetVersion(QStringLiteral("0.4.2")); + ConvertMeasurementsToV0_4_2(); + Save(); +} diff --git a/src/libs/ifc/xml/vvstconverter.h b/src/libs/ifc/xml/vvstconverter.h index f124ff3fb..bdaa74d1b 100644 --- a/src/libs/ifc/xml/vvstconverter.h +++ b/src/libs/ifc/xml/vvstconverter.h @@ -60,9 +60,11 @@ private: void ConvertMeasurementsToV0_4_0(); QDomElement AddMV0_4_0(const QString &name, qreal value, qreal sizeIncrease, qreal heightIncrease); void PM_SystemV0_4_1(); + void ConvertMeasurementsToV0_4_2(); void ToV0_4_0(); void ToV0_4_1(); + void ToV0_4_2(); }; #endif // VMEASUREMENTCONVERTER_H diff --git a/src/libs/vmisc/def.cpp b/src/libs/vmisc/def.cpp index 47f06f728..b7886a359 100644 --- a/src/libs/vmisc/def.cpp +++ b/src/libs/vmisc/def.cpp @@ -264,6 +264,7 @@ const QString riseLengthSideSitting_M = QStringLiteral("rise_length_side_sitting const QString riseLengthDiag_M = QStringLiteral("rise_length_diag"); // N05 const QString riseLengthB_M = QStringLiteral("rise_length_b"); // N06 const QString riseLengthF_M = QStringLiteral("rise_length_f"); // N07 +const QString riseLengthSide_M = QStringLiteral("rise_length_side"); // N08 // O const QString neckBackToWaistFront_M = QStringLiteral("neck_back_to_waist_front"); // O01 const QString waistToWaistHalter_M = QStringLiteral("waist_to_waist_halter"); // O02 @@ -881,7 +882,8 @@ QStringList ListGroupN() << riseLengthSideSitting_M // N04 << riseLengthDiag_M // N05 << riseLengthB_M // N06 - << riseLengthF_M; // N07 + << riseLengthF_M // N07 + << riseLengthSide_M; // N08 return list; } @@ -1603,6 +1605,8 @@ QString MapDiagrams(const QString &number) V_FALLTHROUGH case 6: // N07 return QStringLiteral("Np4"); + case 7: // N08 + return QStringLiteral("Np5"); default: break; } diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index c757049d3..05247b423 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -420,6 +420,7 @@ extern const QString riseLengthSideSitting_M; // N04 extern const QString riseLengthDiag_M; // N05 extern const QString riseLengthB_M; // N06 extern const QString riseLengthF_M; // N07 +extern const QString riseLengthSide_M; // N08 // O extern const QString neckBackToWaistFront_M; // O01 extern const QString waistToWaistHalter_M; // O02 diff --git a/src/libs/vpatterndb/vtranslatemeasurements.cpp b/src/libs/vpatterndb/vtranslatemeasurements.cpp index 48f637e08..ecb8e0c1b 100644 --- a/src/libs/vpatterndb/vtranslatemeasurements.cpp +++ b/src/libs/vpatterndb/vtranslatemeasurements.cpp @@ -1852,6 +1852,13 @@ void VTranslateMeasurements::InitGroupN() "Full measurement description."); InitMeasurement(riseLengthF_M, m, g, d, "N07"); //================================================================================================================= + m = translate("VTranslateMeasurements", "rise_length_side", + "Name in a formula. Don't use math symbols and space in name!!!!"); + g = translate("VTranslateMeasurements", "Rise length, side", "Full measurement name."); + d = translate("VTranslateMeasurements", "Vertical distance from Waist side down to Crotch level. Use formula " + "(Height: Waist side - Leg: Crotch to floor).", "Full measurement description."); + InitMeasurement(riseLengthSide_M, m, g, d, "N08"); + //================================================================================================================= } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/test/ValentinaTest/tst_measurementregexp.cpp b/src/test/ValentinaTest/tst_measurementregexp.cpp index c000c23aa..5a5ad7ca9 100644 --- a/src/test/ValentinaTest/tst_measurementregexp.cpp +++ b/src/test/ValentinaTest/tst_measurementregexp.cpp @@ -334,6 +334,7 @@ void TST_MeasurementRegExp::TestCorrectOrderMeasurement_data() QTest::newRow("N05") << riseLengthDiag_M << "rise_length_diag"; QTest::newRow("N06") << riseLengthB_M << "rise_length_b"; QTest::newRow("N07") << riseLengthF_M << "rise_length_f"; + QTest::newRow("N08") << riseLengthSide_M << "rise_length_side"; QTest::newRow("O01") << neckBackToWaistFront_M << "neck_back_to_waist_front"; QTest::newRow("O02") << waistToWaistHalter_M << "waist_to_waist_halter"; QTest::newRow("O03") << waistNaturalCirc_M << "waist_natural_circ";