From 7ca84a872000e0cddd9603f89df1ada8f95d2a0d Mon Sep 17 00:00:00 2001 From: "liu.wenjie" <783789228@qq.com> Date: Thu, 21 Apr 2022 14:10:04 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0=E6=89=8B=E7=9C=BC?= =?UTF-8?q?=E6=A0=87=E5=AE=9A=E5=B7=A5=E5=85=B7=EF=BC=8C=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E6=8B=A94=E7=82=B9=E6=88=96=E8=80=859=E7=82=B9=E6=A0=87?= =?UTF-8?q?=E5=AE=9A=EF=BC=8C=E8=BE=93=E5=87=BA=E6=A0=87=E5=AE=9A=E7=9F=A9?= =?UTF-8?q?=E9=98=B5=202=E3=80=81=E4=BF=AE=E6=AD=A3Halcon=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E8=BF=90=E8=A1=8C=E5=B7=A5=E5=85=B7=203=E3=80=81?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=B8=E6=9C=BASDK=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=EF=BC=8C=E4=BD=86=E9=9C=80=E5=AE=8C=E5=96=84=204=E3=80=81Halco?= =?UTF-8?q?nTool=E5=8F=96=E5=9B=BE=E5=B7=A5=E5=85=B7=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=96=87=E4=BB=B6=E5=A4=B9=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=205=E3=80=81=E5=AE=9E=E7=8E=B0Job=E7=AA=97=E4=BD=93=E5=8F=AF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=9A=E4=B8=AA=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/VisionEdit/v14/.suo | Bin 640512 -> 721408 bytes CaliperTool/Caliper.cs | 2 +- CommonMethods/Interface/CommonStruct.cs | 12 +- DataStruct/DataStruct.cs | 2 +- EyeHandCalibTool/EyeHandCalib.cs | 338 ++++++++ EyeHandCalibTool/EyeHandCalibRun.cs | 19 + EyeHandCalibTool/EyeHandCalibTool.csproj | 106 +++ EyeHandCalibTool/FormEyeHandCalib.Designer.cs | 609 ++++++++++++++ EyeHandCalibTool/FormEyeHandCalib.cs | 174 ++++ EyeHandCalibTool/FormEyeHandCalib.resx | 384 +++++++++ EyeHandCalibTool/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 63 ++ EyeHandCalibTool/Properties/Resources.resx | 120 +++ FindCircle/FindCircle.cs | 2 +- FindLine/FindLine.cs | 10 +- FindLine/FindLineToolRun.cs | 2 +- FormLib/FormInputInfo.Designer.cs | 46 + FormLib/FormInputInfo.cs | 21 + FormLib/FormInputInfo.resx | 120 +++ FormLib/FormLib.csproj | 26 + FormLib/ToolBaseForm.Designer.cs | 116 +++ FormLib/ToolBaseForm.cs | 20 + FormLib/ToolBaseForm.resx | 199 +++++ HDevEngineTool/FormHDevEngineTool.Designer.cs | 259 ++++++ HDevEngineTool/FormHDevEngineTool.cs | 128 +++ HDevEngineTool/FormHDevEngineTool.resx | 265 ++++++ HDevEngineTool/HDevEngineCode.cs | 62 ++ HDevEngineTool/HDevEngineTool.csproj | 118 +++ HDevEngineTool/HDevEngineToolRun.cs | 19 + HDevEngineTool/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 63 ++ HDevEngineTool/Properties/Resources.resx | 120 +++ HalconTool/FormHalconTool.Designer.cs | 501 ++++++----- HalconTool/FormHalconTool.cs | 108 ++- HalconTool/HalconTool.cs | 19 +- PMAlignTool/PMAlign.cs | 2 +- PMAlignTool/PMAlignToolRun.cs | 2 +- SDKCameraTool/BaslerCamera.cs | 274 ++++++ SDKCameraTool/FormSDKCameraTool.Designer.cs | 134 +++ SDKCameraTool/FormSDKCameraTool.cs | 20 + SDKCameraTool/FormSDKCameraTool.resx | 199 +++++ SDKCameraTool/ICamera.cs | 174 ++++ SDKCameraTool/Properties/AssemblyInfo.cs | 36 + SDKCameraTool/SDKCameraTool.csproj | 71 ++ ToolLib.VisionJob/FormJobManage.Designer.cs | 1 + ToolLib.VisionJob/FormJobManage.cs | 20 + ToolLib.VisionJob/FormToolBox.Designer.cs | 97 ++- ToolLib.VisionJob/FormToolBox.resx | 786 ++++++++++-------- ToolLib.VisionJob/OperateProject.cs | 2 + ToolLib.VisionJob/ToolLib.VisionJob.csproj | 8 + ToolLib.VisionJob/VisionJob.cs | 120 ++- .../ToolLib.VisionToolList.csproj | 12 + ToolLib.VisionToolList/VisionToolList.cs | 91 +- VisionEdit.sln | 47 +- 54 files changed, 5628 insertions(+), 593 deletions(-) create mode 100644 EyeHandCalibTool/EyeHandCalib.cs create mode 100644 EyeHandCalibTool/EyeHandCalibRun.cs create mode 100644 EyeHandCalibTool/EyeHandCalibTool.csproj create mode 100644 EyeHandCalibTool/FormEyeHandCalib.Designer.cs create mode 100644 EyeHandCalibTool/FormEyeHandCalib.cs create mode 100644 EyeHandCalibTool/FormEyeHandCalib.resx create mode 100644 EyeHandCalibTool/Properties/AssemblyInfo.cs create mode 100644 EyeHandCalibTool/Properties/Resources.Designer.cs create mode 100644 EyeHandCalibTool/Properties/Resources.resx create mode 100644 FormLib/FormInputInfo.Designer.cs create mode 100644 FormLib/FormInputInfo.cs create mode 100644 FormLib/FormInputInfo.resx create mode 100644 FormLib/ToolBaseForm.Designer.cs create mode 100644 FormLib/ToolBaseForm.cs create mode 100644 FormLib/ToolBaseForm.resx create mode 100644 HDevEngineTool/FormHDevEngineTool.Designer.cs create mode 100644 HDevEngineTool/FormHDevEngineTool.cs create mode 100644 HDevEngineTool/FormHDevEngineTool.resx create mode 100644 HDevEngineTool/HDevEngineCode.cs create mode 100644 HDevEngineTool/HDevEngineTool.csproj create mode 100644 HDevEngineTool/HDevEngineToolRun.cs create mode 100644 HDevEngineTool/Properties/AssemblyInfo.cs create mode 100644 HDevEngineTool/Properties/Resources.Designer.cs create mode 100644 HDevEngineTool/Properties/Resources.resx create mode 100644 SDKCameraTool/BaslerCamera.cs create mode 100644 SDKCameraTool/FormSDKCameraTool.Designer.cs create mode 100644 SDKCameraTool/FormSDKCameraTool.cs create mode 100644 SDKCameraTool/FormSDKCameraTool.resx create mode 100644 SDKCameraTool/ICamera.cs create mode 100644 SDKCameraTool/Properties/AssemblyInfo.cs create mode 100644 SDKCameraTool/SDKCameraTool.csproj diff --git a/.vs/VisionEdit/v14/.suo b/.vs/VisionEdit/v14/.suo index d98717b2a944323354770925d02814435fc66ae6..37388b01aef8af49e31b82fefe98238b40ba04a8 100644 GIT binary patch delta 35899 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 delta 18510 zcmeHu30zgx+WuL4I%jVI4+w||csv{x5%qw8I5KMHh-0RxfZ%}OfJbu%&D2|($X1qf zI34FCHMXfKnt97|$jq$Ft6itc%E~ND<$KoI2h_6fe%*V&-*@l-e~-V%XT9%Qd+oK? z@UC|a6wZz)oZqM@;>j8YgMkBFKeNH`Au$*{A>6O5tYkVK@Bl_b{|fLua0_@7XaYn5 z%Ya?9eqZ6Qi;6ZCb6rVmwLVu*zS+5~%h?|1$dBp-u7LQcKX3)&5oGm_I+>qZuw5`1 z(g#7rZzFIIFRc1Ch1?flGSh#F7x+Qm4je+5>9>Q+ARh!80+)dgpt}zC2fTsWz!bbE z1ssaFk-&J!rws;mys3Wun$U+p*BsmgxB|oiU4RPc9qOw>6Ea4 zRl!1V1J-ct`M*`k^*rrt)>XRie&0poyZKn5lQ zA}}AQZjNpbHwQr@aR3hp0P6!1*b^`TvRhXJ?BNc3x!DZ%Ru|N09vqBNh+As`*LR0o zfNkob8ch}z`OV}+x=ai*Qm`U{=Zo>z5bz^ zK}}9W4NV7T00lsypxz%9!re5eA-Vp(Y~+28&bAWR2CPR4wNq|HL?aBPQYaPyn}Gp9 z5rFiS?<1}r!fSvNfLfaCTL%vsh9E*kUKZck?kXR@002~2)iK^r^ zY}{beLp~mAXz^!D^N06gxnn* z3H}~@3-|%J1N;d51pETr2ZE61E;tNq0(jsh^Y8dQhqSL+pU2eof_mq}Hv~IEYQ;H+Uv~t00I5JvpcnA8 z`s7D-$pAI`qvmvRPr)Kgf>Pb{k)2-eDfn`Q{I2`8Clc`}v{rR;t+~ayK~-(VO7h>f z6-)4NTg9M|k8LXn5sz!DQIE70%kI&(ir$Ng+JlFC0IZGP2cH3Y0uQ$zd-ON$w+@MZ z+kUKrB?JFx`+cQO4{o%}7Gx2G9mtMamT?x<&UvT~OCKQ#<#soq<&^1V#P4TmSd;F$ zRX>7LOJfDq7HcuF>78|HJ+UM9Bx_sgCR$^mLH)UQn7TH&zDU^QT>S#ECi0D=el{NO!S1Z44r}vQ`XN*RQY%C#xdFUWlN(?r27@l5M<2Ewu@|Y_|2}K?`?4 zp;qj=^XE6r|H$Cpb@wB|!&SA^HiuYDtUX?-Dg<@RAwAS&zesuu0om{>B3^qCIhUlG z*q~yAPp{GmDAUYccdi+uJ?0^!*#I-<)Z;qo-8Ru8-m5P-wLK42@rT4)Dd zaGlgE*n(u&pjrtW0m^{d0DEJ7H@^ce2b#I%^KSka+3azLS^BEqx6nOWEO2Jk|{v*4@XbKoz*AAvsxJ^?-jb^_G#If)Zo z{jMyV_ic3v>DbHJiy7GO8|X#?3JP`?&oCXqn&ckB_W`y(X{_A~CcIR#RQ`%?e@zY| zCaNrxW9w!%n>cd($T6dH#$=|A8JnG-;mCI6XJ=0wnf(m){$6fEUZ)Eql*!J9B(Nlf zsOFrKyGpU*Sl)W)l*@;O=wkKTI6t~4g*;`>)&3G-ZhWrZ$vv4LesE&&DoRAIHjV8- zX3}>TaW?u%2hzZqM7WY5k}Q*VP%LI^^`>VfU!>lN!5Hc58lv=85bHCCkm5*HD(VO( zg&sjjN}*yuN{%SOT5w15S5khNBoo=S5Mq|Wl`VB#K_-M5N4D_Lb+8o8G;3#afiDiQ zQfnIDP&if6~sfgX+tMHxYBRDpqw2a!s2aMig)X zwCq=Ww3FZqcDBVb8&&;z8)|fYpzGAcAW=C>Kq!S^Ve=Z&_b7=kJkBVI0G!h23T-1{?5$@ zTI%wWIGrD;Wf&Of^ti@~?r=!&InbspYM=eYJd%kesY=;qZ4x}1}!b5xSfcisGE zvMw)8(K#Eg1}j)}N1gd6bUwov?>9KHUSkQSJgIZn&N_#5(fKPkzXq?9rF*WM&Z*tq z>3ZmV#mzfXb@`c|Iw$wi*`v44=iI!e4;DQv!*PA}h<0#0ne6$L&Y!w@OMhLS__RCS z0G)+_I=|!QrD-l%s~kdzIoB|j`l4s7at$cDKAN+b-o{%l0s64-kJuG#YNWOp z_CVJtwg6l}C&zG@Mo%N%xvI1tgAub668kw521GAEcYgW=TG0>UwNQ06)vcJ}57P-c&)Z{aGjs3{gZbzEh(4Fk8b3@O~U?J7wXSS3|Y z^il%y)*U^%_PFl7DaWB>3tePsxq!88seGlta3EjJ5tpnoSokKqZ!ltpv#F&Gt*~*0^jL(FKnojiz0LQA)%C0Oe9bl+)+cruviiVe zHp3XRvFp>ykU=ZEkrbLdnrlZ3yAy}B3g56nq(65jQ^-m>p$B=vxrg|`u&dTEtLe{( zeG70^j_L?YRa5-z>a8$$y(P16b*+IMjr*vbT1JRlQ8CNZ$-zxD+q-Zh%XgD>j%Jk; zUtu-NW>Ps>EHGP1%^E2ZK4-f18cB10Ot|tCQj`48=D-U?a7Oc-B^Rs7k=Q(O7@8S| zf;Y5j9C3OYx9f6ngLm(4bFW9=_iwVAcK`@n?r_ zx?)ok6aD2wC<${0meWJ+<#F`D3re^-bZ1QPia~qY<-H#6y|KUF5mciu`B^1x;>kRE zXfN5?F4GW$ZJHMNKNIh_W8*FpbsTMI30(_>;!x)-CflXWbfso7HPM~w49#Qw0ED@cKn;#A|tzHD|?H`rrD91Lz_lMX4#v@ z4Qm-Ug(jxR-Dyz=xgo81Ly>~7?lg@VHS#;L@!mS0t>bUadiaAU(sOBC7|ExJE4h9& zz9k=I{;|!K)6NTj`6YbkvjL_7>t@hH)8yJT^P1vMZ!YD`WHg=GhKqN4a2`%4Cpkla zZJbnG7fTv{i|H@O{VbrHn+eRgxQ&s2J=yRfV*XkcD}9I1;0|=keS!r=?Rv}-y0%Hz zxu2+QF@1(4UsXLIzlhNDweg>JuL;Kss9Um84@ivpY4;yIud^y0I82nQW z-3*D?ogHZyj<(!b5zdhWIPAz`K4!!X;BlA{ncNjKA@l#^F%cdBw|^409c;x!$XLb% zxE_3?OY!Xk+R@!y5>LksSL~WSmOE8ro#{U3OyNworkEta26oV_^CnTu(_d#~iTq`MNRHSfp0M@la94swV_Ugnb*6?LV; z75=Vs04LCICn>e5eT(8_HeL?h{effQ(tYy!&7E3rYQQ>1^aw{%Mt@!5Hqxs%hn zjvW4oqS?^#%+gKEYMpjP+i-2u3u)IDtxSNmw|53nuIG#wq#^(U(*8`N%L`cW3L)(4B8=w6YNhgEn@F5{_O*Qb@cr zofFiAHem%ZE=w>JcAy1pLyREpjL#Hr!pC^xh z9<<{|R^H@V+lkEk=zcp0t`m!0nE@Zar%LXXh^|eAi39wyXwn&%? zW_z1A5H18)6@gjR(U>!i@se{2y81-)W4JS#DTMz?EDtBcJZaHW#yIaNywMKC;QyAW z*_Jf&9v@H3nuviVuaks=h<3J(S!YLl)~ywD6d&Zz!XE(4jKB^Xa$p*h76O;*5MKb_n9Gls`)gdJlM@4NY>0A0?jqjUQ} zook?}Sh{m=UK^y#V}jl3LUi`3r}G6jziiRvsr7a4h$d$F_=bX$5xBqt;H@^DpJ||T zhlV=WYNYe0Zr&WG%M%;xOcQpJ-gMy*-b6bY6*F@Q%zn&wI2#*k^Pf7giHF(ae#)r3 z+1=IpOKXL6h=eVPZh?6!#ojcrLnN$4C+=o>p| z?amwAw68{fIIi}<8_dYjoSDR*IB4R2(uY97ZtuQ7)%#<`pGD99M3m$=bjoxgYU!6CZ5AYJEv89Ik%>io5vUmL2+v$AyV zlC85JdMK;GOK#piT$ddqbWVbaM0|n4D@RwHar25%x}2S>bF(~yVIDHN4rUqd9-%Il&O?2xv~&cMn&?0WTa z`BQ`6ge7hJ3vY5B=7d_TtIY|X`$em;PFF{H*RzhFYp31=;eUBO!3B`{l)O&jb;l-) z-rO#FnMW<25PVkoEMUUDEkUchecptQTO4BSIHA8;)o06_0E)CG3}UIkbSTY%fpuLXAlS^zM0 z1_h34!FuA?rZE&_fHgok5DiEGTLUx)+kq#5O~6_ds3VxgjUWbkawQj8vVr(2Y}$Gm zxeA1aY#>S84g<~HK%ycINIV>1)4(VeMw(~9tPke_V*!>~OX%|vUP0g7K-xGj!e=UN zp!nD7q3>|Pyil>q7<+^l81I4H2uVU$;21*mU+N#v`?~MHPpS_|N0zp8E zYxnVa8M~8t8KX0XXS)`ToZ01s_G7-WFO8qe`#G<2mVck7S&drz@0!M=s%cQmmDI9< zB>bVqVNd<4aZG%KI1?RV4)uP9uSEk!@DbkZCG58ZdRIVQv!PzWx2W|lC|@bGx4}&T z4qz!hLLB39Zh14(tb%SUcpGpDcp2CMlmWYeoxpLVVLj$mgv$YTQdD(Bvlrogz<%I$ z!9c$sMp}6shro)*JPjH*l21`Cx;4uQ{r0MCT~yS+JdRHwq>#@1iWHRGP{RF~YdH*# zXtvAg%z`Tkx0F_1B3Tj1miF&kljf5jqc1vIjTj7r`M~P+9|*JS^+2ZUXUL7T^3O;P z(JZa`i==V3%d2H8VdmLJ;r~eZw9M0G{%#cXtz4dK79F=isYOeNijuj>+%BJNo!gmi zng8OQAeOzA)k_8X1Nuy8IlxJr43g zPuyTa`a`I6W~i)YXJ_6Y6J~1&3*g!%fbYWIh48RqaNSG>HO8Vu=>*Tb>0fp5dH`V9GcMqr~Id;=R5 zhAD_xZpT>(_-3SjWvjRamZy-p82!4|;8@)P{)7?6EaHk*`oa6L)>=gomw-uvkVJit z;TcpNI~z)GZ!jzcTNCuFGH1Yr2CS-)E&}@7N&2ezG$!p0(7%#0Mc==uXk+xJ2Rm{$ z^Umj1)g8R#)QPS;er)jPx^D*3`mf1;^i(J@($9~}b*j(H*y#NI^D-8D7%$uhYz02S z%l^iB85_3$&gW$zm++13yV-{@u-`Y(!A-<@nf6&WAHw=@1tCthH|EUYIdsMKh<&fC z&bzzmbKz4xFyTVqG*#bKY~52oSnrL=>In2{z4gU-VjsO3{rc+X#cliP_wMRGWq^gk z(hrQzWH<>%XEHSEugf#QCbY`#q^EJe4T0{kOzfz0Lz=#7-!w?SQ*a%wG@do24bfeQ z(sVr|V}^blWz3wVlBD7Pg!Ox-%ZNt7#>Kc+>}-Y3R_@U*3&{2ehr-xqvb83l?;W;; z+zM#P8Di<7IoL!g98U_19TyAiX}Lo)a);-R%uLJ77@zH!JT@E7!L(^p6JwKGMn@-N z1&Xh2m!B0RJ%`uHDtiIBr{_^3W zf8@r2P>4yvS;ljoY#`T$!AUT}65IOp>`=R60z$a6F`K{jcoRAD6< z$Xt|BC{Hes2aE>B0GLW##mYx`Jm3H@Zy6?np8?nfDJ$fYz*K~N!PCJrfEx(oM3`3g z7P_@&FW3PEyN^-{UJ70YEC<+8H8Uft!R)J;BUXy=8sLgR=kyU8cG`yUcHm`T2T%sQ z0_+5K0lR@$fpS0ts!o>oBD@dS54;X&xB3Vkq+}9rrM6G`Agz57f0&dk=5LWi`om(r zfF#ffOZWnhc$5JXs_VBlg%er1X0UtBp`sB(JIA%ls+rUIc|>G4_h!+1SNM)H*@GuO z09+f`kG&!!7o!+cS;pGEReY$TSxVrVIk(_O!%99)Ka@#d$!7^sEStAh^7a5$c~wY) zmW5MTta%lG)47E+J?Ovt`9SA&v@iNq`3?RpB6R51u@9X&O!l={EhDqCM>|G3CO1nR zGk&B4S0&n6BO_bct(Ipp979LotVy$;=PwwYqp>ab9nY2QS9x5S_}jHqqq>%mRsHQ!ZF+Ao ziPO4&&F>`T1BAEuKk#Ar7J+RuIx_{SxUcP1n{b|NoMpvmm<=Td{+Z{r+1G?EMB9=l z^y8c!f>84`Q zNl)*Sj?mQA;#IoEDDbyq7B1GHcB7E0r5+K=h*r2z zjNs_l?P363X%x-e&!O~Xqu9%HJg%hYV?!jzkaD*%?a@?vpI%hNVcO^#;(kI?GsW4| zVirs3jSE5vZAQh_nwO7c=C!YviLE*9ZWl2OmIB|RmGux)P0nT_SDq$fMUnoR5X+ax zi5^C6K(Mgb%UL0C)cS!mTl4Z`UvzP~IGWB%ks8vQ7U?banLfC7S6lp;CbW`L>DMid zXI(X^9UdiIC;C@WeANZbvPNtsZS1v46ttbk#GtAQHn$Q!CR(p;Vl1H^@%X~44QWWc zI9nXoZlQLC_G~IOr&E++BnpCd zy`OZ3(5M&0Sk1CeIEE{6^@TX?R)6U&nSORa$e|~?3xV3`*M(_BOWG&S;V8Z+Rcrr@ zINw#>%h6{Nq%(qcvxBsS*K%5ja|lfuE^c9+ZAMjx{$J}$MchVfA-c@Y6)03um^jv0 zk|ri>w9dk(B}9qg4|-TBztK7eDShjUH)zFmp%*m=35T`JUeb%4HgCI_Z=^oGB?m2A zB>qHMU(~)EF7zQ<_i}M}9j)}7lqG1xJfy`@l=GDKQ`Bkzt$0%m(k_GuR`2qaf=&FL z4)vaf4m6L@!o}jezpLxC_0YS*#;D;EY(@i#(|itzr6%pb9^o7tJ-(85ajJyj)Mu+y z7Kyt9Ml+WiLeEDSm-3N(b5}pmIyW;;tDzf|yO)maIAf})O;5cjrO=Z7!Z|Hyobj@xncozD;@Id+ z5wx~76Gq#;&8WA5H8px5Pf`!5le; z?#_|TbmJ;wrU|`dfnDh`WYI<6@u4-bD0kgWWRKwOwC6P?k`|7V+tDX;Wefdklx#5{ zeQV5o$Gk32&Pq4dYaF<)9retWFVnnHvf2DvuZw3AuMF?9=1wE~_-}%{Q13Bvb7!8+ z(S$MblfRQ@^BDQaYL=PD|!|SDyUY-9D7$%XagUnH7iL zYW8`Oy6=M)A-Tim(u{mL_wkw0ukz*os*N+#HMw$KucO$nz?KC2%6f(%+Or+;rKy!@ z#_%b!f5|CXrt)-IE14u0(u(PFLUBR{-L?$9rPXBl&uT?m4>h5aiTch!WfxA7XL5Ar z47oG*S1-+wLkMvZCGX(8w{9R&cw+FS-hsq7)Z7QN3OmwF!amY?Y*rD&uT^yQyYf2v z;a^E(n)9687rVtFRS&TXBRGlF;@^=INk~Uzl#d-`UF-FzXrLFLlP!MOzRgA=V({pS z)Wda=);}SSMIqUVJ&B-^r{o}-{*%dv9zH2Y;C*Ix>N*-1FxV8BYZyNOL7gcO~JGL_0WNCZze}5WQ5#%5{X`7-Yl*rq;zvDjduXoh- zTfS4ZLx<&fQrt?Sl8tNq_g&vQx8g6Ovu8#ZEU)R8Cwlq}Wv4S1_w_BqLzj(*jmgh@ zbX%X+Y%hy+g#}v%G(ws2=obs3A;tC4b80^BnzFCYuMQR-J$Cp%Ih643h)?W1CbOIC z8i#iEubZiUbP0HqbrTT$~iuh+U#mMxL#z-{s@^ zJ9?#BKbj_Xz^ai9Ch-p)0WH81NdH+X)+6iQIRdNSn}m=wN@DrclBXmO8hnNuYG#i-ax`ylVwd`# z#J0FW?bxI>E$k?V1uSz-w)*v+P1sRn=Y>CGN0C3 z#rNgA92I_&qqS3Qm9{2aa>+O@#k=;4wHr?;WeWA(q%5VkUQ=>t`a1NbcQ-51YRHQ= z8rWA^ui5%3vw3aSE+xlAXFHV<+MY2AP9|=N$_QFit|V#c2NifN!Xf20-C3%1*31)? z#gca9nBw5ITQikRLF*MOwa1dDrSTk2G}=l|dVjxo>^J^0g}*E~Uo>(XS5}Cev)IUy z@!GeIg-}krm@DO&nKL@Y`jE#Nt0wiDMbFJqY-BLa=%hSF3(qQRX`hKoG(1oxgjW1X z@zQ+W5KExAF>w4#~Y!HTxOq#s3Yj@IMaWe;mSU|L{K!q1z!m z@h3%~nW=JumQX5J@Y;z5N-1@zKyH!%(KH<&eBQ=qp+KlB2wp{mbl0SId7)aL+R+^cUrX01p9Fcu0)^6#`57scHe9uTW6T*rbV2uv%RdSy$+^oTQ(?VByi-ze=P7@ z=kPxsD*MyCs!KHw`AnUed*S;1@oO{xS{|zZ!yf9th(~&++9M6CxaJQ3$0Pk+k2HdF zX32s^()mh4DwiBkPW_*FsAu7c+of7GArd>*jhD+G60N8}SxuPVY7!ssRci1mOO214 z1_F&*;g`y7UgP%2_X(}2q1Y*ohyAtEHOd#FmU&yTW1_gNl+wZ<*&ale98IH5+(Pw@ n=Iv<3aM>30?OhxWVw0^NZc;JshSRVGSWG;P8-%ptOOo(k3sa(H diff --git a/CaliperTool/Caliper.cs b/CaliperTool/Caliper.cs index 0e5634c..524fe8c 100644 --- a/CaliperTool/Caliper.cs +++ b/CaliperTool/Caliper.cs @@ -2,7 +2,7 @@ using System; using CommonMethods; using HalconDotNet; using ToolBase; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using ChoiceTech.Halcon.Control; using ViewROI; diff --git a/CommonMethods/Interface/CommonStruct.cs b/CommonMethods/Interface/CommonStruct.cs index a474126..8ac708d 100644 --- a/CommonMethods/Interface/CommonStruct.cs +++ b/CommonMethods/Interface/CommonStruct.cs @@ -10,15 +10,15 @@ namespace CommonMethods { Job, HalconTool, - SDK_Basler, - SDK_PointGray, - SDK_HIKVision, + SDKBasler, + SDKPointGray, + SDKHIKVision, BlobAnalyse, FindLine, FindCircle, Caliper, ShapeMatch, - EyeHandCalibration, + EyeHandCalib, CircleCalibration, SubImage, CreateROI, @@ -41,6 +41,7 @@ namespace CommonMethods Output, CreateLine, PMAlignTool, + HDevEngineTool, None } @@ -56,6 +57,9 @@ namespace CommonMethods Line, Circle, Pose, + Object, + HXLD, + HObject } public enum SoftwareRunState diff --git a/DataStruct/DataStruct.cs b/DataStruct/DataStruct.cs index 77ba23c..ef8a0d5 100644 --- a/DataStruct/DataStruct.cs +++ b/DataStruct/DataStruct.cs @@ -7,7 +7,7 @@ using HalconDotNet; namespace DataStruct { - public class DataStruct + public class DataStructClass { ///

/// XYU结果 diff --git a/EyeHandCalibTool/EyeHandCalib.cs b/EyeHandCalibTool/EyeHandCalib.cs new file mode 100644 index 0000000..4fcea13 --- /dev/null +++ b/EyeHandCalibTool/EyeHandCalib.cs @@ -0,0 +1,338 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using ToolBase; +using ViewROI; +using HalconDotNet; +using System.Data; +using System.Windows.Forms; +using System.IO; +using System.Text.RegularExpressions; +using Logger; +using static DataStruct.DataStructClass; + +namespace EyeHandCalibTool +{ + [Serializable] + public class EyeHandCalib : IToolBase + { + /// + /// 仿射变换矩阵 + /// + public HTuple homMat2D = new HTuple(); + /// + /// 标定类型 四点标定|九点标定 + /// + public CalibType calibType = CalibType.Four_Point; + /// + /// 标定表源数据 + /// + public DataTable CalibSourceDataTable { get; set; } = null; + /// + /// 输入点信息 + /// + public Point inputPoint = new Point(); + /// + /// 输出点信息 + /// + public Point outputPoint = new Point(); + /// + /// 矩阵名称 + /// + public string homMat2DName { get; set; } = Guid.NewGuid().ToString(); + /// + /// X平移 + /// + private HTuple _translateX = 0; + internal HTuple TranslateX + { + get + { + _translateX = Math.Round((double)_translateX, 2); + return _translateX; + } + set + { + value = Math.Round((double)value, 2); + _translateX = value; + } + } + /// + /// Y平移 + /// + private HTuple _translateY = 0; + internal HTuple TranslateY + { + get + { + _translateY = Math.Round((double)_translateY, 2); + return _translateY; + } + set + { + value = Math.Round((double)value, 2); + _translateY = value; + } + } + /// + /// X缩放 + /// + private HTuple _scanX = 1; + internal HTuple ScanX + { + get + { + _scanX = Math.Round((double)_scanX, 2); + return _scanX; + } + set + { + value = Math.Round((double)value, 2); + _scanX = value; + } + } + /// + /// Y缩放 + /// + private HTuple _scanY = 1; + internal HTuple ScanY + { + get + { + _scanY = Math.Round((double)_scanY, 2); + return _scanY; + } + set + { + value = Math.Round((double)value, 2); + _scanY = value; + } + } + /// + /// 角度旋转 + /// + private HTuple _rotation = 0; + internal HTuple Rotation + { + get + { + _rotation = Math.Round((double)_rotation, 2); + return _rotation; + } + set + { + value = Math.Round((double)value, 2); + _rotation = value; + } + } + /// + /// 轴斜切 + /// + private HTuple _theta = 0; + internal HTuple Theta + { + get + { + _theta = Math.Round((double)_theta, 2); + return _theta; + } + set + { + value = Math.Round((double)value, 2); + _theta = value; + } + } + + public override void DispImage() + { + // throw new NotImplementedException(); + } + + public override void DispMainWindow(HWindowTool_Smart window) + { + // throw new NotImplementedException(); + } + + public override void Run(SoftwareRunState softwareRunState) + { + try + { + // 若首次加载且本地存在矩阵,优先读取本地 + if (File.Exists(homMat2DName) && homMat2D.Length == 0) + { + HOperatorSet.ReadTuple(homMat2DName, out homMat2D); + } + // 再次判断 + if (homMat2D.Length == 0) + { + runMessage = $"{FormEyeHandCalib.Instance.myToolInfo.FormToolName}未生成仿射矩阵工具,需要先标定标准!"; + toolRunStatu = ToolRunStatu.Tool_Run_Error; + FormEyeHandCalib.Instance.SetToolStatus(runMessage, toolRunStatu); + } + else + { + HTuple tupOutX, tupOutY; + HOperatorSet.AffineTransPoint2d(homMat2D, inputPoint.Row, inputPoint.Col, out tupOutX, out tupOutY); + outputPoint.Row = tupOutX; + outputPoint.Col = tupOutY; + runMessage = $"{FormEyeHandCalib.Instance.myToolInfo.FormToolName}运行成功"; + toolRunStatu = ToolRunStatu.Succeed; + FormEyeHandCalib.Instance.SetToolStatus(runMessage, toolRunStatu); + } + } + catch (Exception ex) + { + runMessage = $"{FormEyeHandCalib.Instance.myToolInfo.FormToolName}运行出现异常"; + toolRunStatu = ToolRunStatu.Tool_Run_Error; + } + + } + + /// + /// 初始化标定数据源 + /// + public void InitDataTable() + { + CalibSourceDataTable = new DataTable(); + //初始化DataTable,并将datatable绑定到DataGridView的数据源 + DataColumn c1 = new DataColumn("像素X", typeof(double)); + DataColumn c2 = new DataColumn("像素Y", typeof(double)); + DataColumn c3 = new DataColumn("机械X", typeof(double)); + DataColumn c4 = new DataColumn("机械Y", typeof(double)); + CalibSourceDataTable.Columns.Add(c1); + CalibSourceDataTable.Columns.Add(c2); + CalibSourceDataTable.Columns.Add(c3); + CalibSourceDataTable.Columns.Add(c4); + CalibSourceDataTable.Rows.Clear(); + for (int i = 0; i < (int)calibType; i++) + { + DataRow dr = CalibSourceDataTable.NewRow(); + dr[0] = 0; + dr[1] = 50; + dr[2] = 0; + dr[3] = 50; + CalibSourceDataTable.Rows.Add(dr); + } + } + + /// + /// 导入标定数据 + /// + public void ReadCalibData() + { + OpenFileDialog digOpenFile = new OpenFileDialog(); + digOpenFile.FileName = string.Empty; + digOpenFile.Title = "请选择表格文件"; + digOpenFile.Filter = "CSV文件(*.csv)|*.csv"; + if (digOpenFile.ShowDialog() == DialogResult.OK) + { + string[] lines = File.ReadAllLines(digOpenFile.FileName, Encoding.Default); + for (int i = 0; i < lines.Length; i++) + { + string[] data = Regex.Split(lines[i], ","); + for (int j = 0; j < data.Length; j++) + { + CalibSourceDataTable.Rows[i][j] = data[j]; + if (j == 3) //只导入前四列 + break; + } + if (i == (int)calibType) //若标定类型为四点标定,则导入前四行,若为九点标定,则导入前九行 + break; + } + } + } + /// + /// 导出标定数据 + /// + public void ExportCalibData() + { + try + { + SaveFileDialog dig_saveImage = new SaveFileDialog(); + dig_saveImage.FileName = "CalibData " + DateTime.Now.ToString("yyyy_MM_dd"); + dig_saveImage.Title = "请选择导出路径"; + dig_saveImage.Filter = "CSV文件(*.csv)|*.csv"; + if (dig_saveImage.ShowDialog() == DialogResult.OK) + { + File.Create(dig_saveImage.FileName).Close(); + string data = string.Empty; + for (int i = 0; i pixelRowList = new List(); + List pixelColList = new List(); + List MechanicalXList = new List(); + List MechanicalYList = new List(); + try + { + for (int i = 0; i < CalibSourceDataTable.Rows.Count; i++) + { + pixelRowList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][0])); + pixelColList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][1])); + MechanicalXList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][2])); + MechanicalYList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][3])); + } + } + catch(Exception ex) + { + LoggerClass.WriteLog("标定失败,标定数据异常(错误代码:12901)", ex); + return false; + } + + try + { + HTuple pixelRow = new HTuple(pixelRowList.ToArray()); + HTuple pixelCol = new HTuple(pixelColList.ToArray()); + HTuple mechanicalX = new HTuple(MechanicalXList.ToArray()); + HTuple mechanicalY = new HTuple(MechanicalYList.ToArray()); + HOperatorSet.VectorToHomMat2d(pixelRow, pixelCol, mechanicalX, mechanicalY, out homMat2D); + } + catch(HalconException ex) + { + LoggerClass.WriteLog("标定失败,标定数据异常,无法确定仿射变换关系(错误代码:12902)", ex); + return false; + } + HOperatorSet.HomMat2dToAffinePar(homMat2D, out _scanX, out _scanY, out _rotation, out _theta, out _translateX, out _translateY); + return true; + } + catch (Exception ex) + { + LoggerClass.WriteLog("手动标定出现异常", ex); + return false; + } + } + } + + /// + /// 标定类型 四点|九点 + /// + [Serializable] + public enum CalibType + { + Four_Point = 4, + Nine_Point = 9, + } +} diff --git a/EyeHandCalibTool/EyeHandCalibRun.cs b/EyeHandCalibTool/EyeHandCalibRun.cs new file mode 100644 index 0000000..31d5ff5 --- /dev/null +++ b/EyeHandCalibTool/EyeHandCalibRun.cs @@ -0,0 +1,19 @@ +using CommonMethods.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using System.Windows.Forms; + +namespace EyeHandCalibTool +{ + public class EyeHandCalibRun : IToolRun + { + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + { + // throw new NotImplementedException(); + } + } +} diff --git a/EyeHandCalibTool/EyeHandCalibTool.csproj b/EyeHandCalibTool/EyeHandCalibTool.csproj new file mode 100644 index 0000000..f81f17e --- /dev/null +++ b/EyeHandCalibTool/EyeHandCalibTool.csproj @@ -0,0 +1,106 @@ + + + + + Debug + AnyCPU + {46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7} + Library + Properties + EyeHandCalibTool + EyeHandCalibTool + v4.6.1 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll + + + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + + + + + + + + + + + + + + + Form + + + FormEyeHandCalib.cs + + + + True + True + Resources.resx + + + + + FormEyeHandCalib.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + {1c8d0ddc-2086-48a9-9586-f2b643e2fc54} + CommonHelper + + + {df3d4d4c-02df-4f92-9fd4-0a861f64b0ef} + DataStruct + + + {9baa53fd-89b5-43e2-ac59-a27b006debb6} + HWindow_Tool + + + {7cd50b44-bf56-4e8e-8fa1-05f6968c1835} + ToolBase + + + {d4e052b9-e541-4b67-a1f9-273073ef1d4b} + Logger + + + + + \ No newline at end of file diff --git a/EyeHandCalibTool/FormEyeHandCalib.Designer.cs b/EyeHandCalibTool/FormEyeHandCalib.Designer.cs new file mode 100644 index 0000000..930c1e7 --- /dev/null +++ b/EyeHandCalibTool/FormEyeHandCalib.Designer.cs @@ -0,0 +1,609 @@ +namespace EyeHandCalibTool +{ + partial class FormEyeHandCalib + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormEyeHandCalib)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.uiGroupBox1 = new Sunny.UI.UIGroupBox(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.chbSelectCalibType = new Sunny.UI.UIComboBox(); + this.uiPanel1 = new Sunny.UI.UIPanel(); + this.CalibDataGrid = new Sunny.UI.UIDataGridView(); + this.btnImportData = new Sunny.UI.UISymbolButton(); + this.btnExportData = new Sunny.UI.UISymbolButton(); + this.uiTabControl1 = new Sunny.UI.UITabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.btnCalibAuto = new Sunny.UI.UISymbolButton(); + this.btnCalibManual = new Sunny.UI.UISymbolButton(); + this.txbTheta = new Sunny.UI.UITextBox(); + this.txbRatation = new Sunny.UI.UITextBox(); + this.txbScaleY = new Sunny.UI.UITextBox(); + this.txbScaleX = new Sunny.UI.UITextBox(); + this.txbMoveY = new Sunny.UI.UITextBox(); + this.txbMoveX = new Sunny.UI.UITextBox(); + this.uiLabel7 = new Sunny.UI.UILabel(); + this.uiLabel6 = new Sunny.UI.UILabel(); + this.uiLabel5 = new Sunny.UI.UILabel(); + this.uiLabel4 = new Sunny.UI.UILabel(); + this.uiLabel3 = new Sunny.UI.UILabel(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.uiGroupBox1.SuspendLayout(); + this.uiPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CalibDataGrid)).BeginInit(); + this.uiTabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(823, 32); + this.toolStrip1.TabIndex = 5; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + this.tsbtRunTool.Click += new System.EventHandler(this.tsbtRunTool_Click); + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 500); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(823, 22); + this.statusStrip.TabIndex = 4; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 32); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.CalibDataGrid); + this.splitContainer1.Panel1.Controls.Add(this.uiPanel1); + this.splitContainer1.Panel1.Controls.Add(this.uiGroupBox1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.uiTabControl1); + this.splitContainer1.Size = new System.Drawing.Size(823, 468); + this.splitContainer1.SplitterDistance = 542; + this.splitContainer1.TabIndex = 6; + // + // uiGroupBox1 + // + this.uiGroupBox1.BackColor = System.Drawing.Color.White; + this.uiGroupBox1.Controls.Add(this.uiLabel1); + this.uiGroupBox1.Controls.Add(this.chbSelectCalibType); + this.uiGroupBox1.Dock = System.Windows.Forms.DockStyle.Top; + this.uiGroupBox1.FillColor = System.Drawing.Color.White; + this.uiGroupBox1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox1.IsScaled = false; + this.uiGroupBox1.Location = new System.Drawing.Point(0, 0); + this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox1.Name = "uiGroupBox1"; + this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox1.Size = new System.Drawing.Size(542, 82); + this.uiGroupBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox1.TabIndex = 26; + this.uiGroupBox1.Text = "选择标定模式"; + this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // uiLabel1 + // + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel1.Location = new System.Drawing.Point(12, 38); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(96, 23); + this.uiLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel1.TabIndex = 26; + this.uiLabel1.Text = "标定类型:"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // chbSelectCalibType + // + this.chbSelectCalibType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.chbSelectCalibType.DataSource = null; + this.chbSelectCalibType.FillColor = System.Drawing.Color.White; + this.chbSelectCalibType.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chbSelectCalibType.IsScaled = false; + this.chbSelectCalibType.Items.AddRange(new object[] { + "四点标定", + "九点标定"}); + this.chbSelectCalibType.Location = new System.Drawing.Point(146, 38); + this.chbSelectCalibType.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.chbSelectCalibType.MinimumSize = new System.Drawing.Size(63, 0); + this.chbSelectCalibType.Name = "chbSelectCalibType"; + this.chbSelectCalibType.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); + this.chbSelectCalibType.Size = new System.Drawing.Size(285, 29); + this.chbSelectCalibType.Style = Sunny.UI.UIStyle.Custom; + this.chbSelectCalibType.TabIndex = 25; + this.chbSelectCalibType.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.chbSelectCalibType.SelectedIndexChanged += new System.EventHandler(this.chbSelectCalibType_SelectedIndexChanged); + // + // uiPanel1 + // + this.uiPanel1.Controls.Add(this.btnExportData); + this.uiPanel1.Controls.Add(this.btnImportData); + this.uiPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.uiPanel1.FillColor = System.Drawing.Color.White; + this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiPanel1.IsScaled = false; + this.uiPanel1.Location = new System.Drawing.Point(0, 418); + this.uiPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiPanel1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiPanel1.Name = "uiPanel1"; + this.uiPanel1.Size = new System.Drawing.Size(542, 50); + this.uiPanel1.Style = Sunny.UI.UIStyle.Custom; + this.uiPanel1.TabIndex = 27; + this.uiPanel1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // CalibDataGrid + // + this.CalibDataGrid.AllowUserToAddRows = false; + dataGridViewCellStyle9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.CalibDataGrid.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle9; + this.CalibDataGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.CalibDataGrid.BackgroundColor = System.Drawing.Color.White; + this.CalibDataGrid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle10.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle10.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CalibDataGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; + this.CalibDataGrid.ColumnHeadersHeight = 32; + this.CalibDataGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.CalibDataGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CalibDataGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; + this.CalibDataGrid.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.CalibDataGrid.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.CalibDataGrid.Location = new System.Drawing.Point(0, 82); + this.CalibDataGrid.Name = "CalibDataGrid"; + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle11.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + dataGridViewCellStyle11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle11.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.Color.White; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CalibDataGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle11; + dataGridViewCellStyle12.BackColor = System.Drawing.Color.White; + this.CalibDataGrid.RowsDefaultCellStyle = dataGridViewCellStyle12; + this.CalibDataGrid.RowTemplate.Height = 23; + this.CalibDataGrid.SelectedIndex = -1; + this.CalibDataGrid.ShowGridLine = true; + this.CalibDataGrid.Size = new System.Drawing.Size(542, 336); + this.CalibDataGrid.TabIndex = 28; + this.CalibDataGrid.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.CalibDataGrid_RowPostPaint); + // + // btnImportData + // + this.btnImportData.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnImportData.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnImportData.IsScaled = false; + this.btnImportData.Location = new System.Drawing.Point(86, 6); + this.btnImportData.MinimumSize = new System.Drawing.Size(1, 1); + this.btnImportData.Name = "btnImportData"; + this.btnImportData.Size = new System.Drawing.Size(114, 35); + this.btnImportData.Style = Sunny.UI.UIStyle.Custom; + this.btnImportData.Symbol = 61568; + this.btnImportData.TabIndex = 0; + this.btnImportData.Text = "数据导入"; + this.btnImportData.Click += new System.EventHandler(this.btnImportData_Click); + // + // btnExportData + // + this.btnExportData.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExportData.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExportData.IsScaled = false; + this.btnExportData.Location = new System.Drawing.Point(273, 6); + this.btnExportData.MinimumSize = new System.Drawing.Size(1, 1); + this.btnExportData.Name = "btnExportData"; + this.btnExportData.Size = new System.Drawing.Size(114, 35); + this.btnExportData.Style = Sunny.UI.UIStyle.Custom; + this.btnExportData.Symbol = 61584; + this.btnExportData.TabIndex = 0; + this.btnExportData.Text = "数据导出"; + this.btnExportData.Click += new System.EventHandler(this.btnExportData_Click); + // + // uiTabControl1 + // + this.uiTabControl1.Controls.Add(this.tabPage1); + this.uiTabControl1.Controls.Add(this.tabPage2); + this.uiTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTabControl1.ItemSize = new System.Drawing.Size(100, 40); + this.uiTabControl1.Location = new System.Drawing.Point(0, 0); + this.uiTabControl1.MainPage = ""; + this.uiTabControl1.Name = "uiTabControl1"; + this.uiTabControl1.SelectedIndex = 0; + this.uiTabControl1.Size = new System.Drawing.Size(277, 468); + this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.Color.White; + this.tabPage1.Controls.Add(this.btnCalibAuto); + this.tabPage1.Controls.Add(this.btnCalibManual); + this.tabPage1.Controls.Add(this.txbTheta); + this.tabPage1.Controls.Add(this.txbRatation); + this.tabPage1.Controls.Add(this.txbScaleY); + this.tabPage1.Controls.Add(this.txbScaleX); + this.tabPage1.Controls.Add(this.txbMoveY); + this.tabPage1.Controls.Add(this.txbMoveX); + this.tabPage1.Controls.Add(this.uiLabel7); + this.tabPage1.Controls.Add(this.uiLabel6); + this.tabPage1.Controls.Add(this.uiLabel5); + this.tabPage1.Controls.Add(this.uiLabel4); + this.tabPage1.Controls.Add(this.uiLabel3); + this.tabPage1.Controls.Add(this.uiLabel2); + this.tabPage1.Location = new System.Drawing.Point(0, 40); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(277, 428); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "标定结果"; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(0, 40); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(277, 428); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "转换结果"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // btnCalibAuto + // + this.btnCalibAuto.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCalibAuto.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCalibAuto.IsScaled = false; + this.btnCalibAuto.Location = new System.Drawing.Point(151, 352); + this.btnCalibAuto.MinimumSize = new System.Drawing.Size(1, 1); + this.btnCalibAuto.Name = "btnCalibAuto"; + this.btnCalibAuto.Size = new System.Drawing.Size(103, 35); + this.btnCalibAuto.Style = Sunny.UI.UIStyle.Custom; + this.btnCalibAuto.Symbol = 261778; + this.btnCalibAuto.TabIndex = 15; + this.btnCalibAuto.Text = "自动标定"; + // + // btnCalibManual + // + this.btnCalibManual.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCalibManual.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCalibManual.IsScaled = false; + this.btnCalibManual.Location = new System.Drawing.Point(23, 352); + this.btnCalibManual.MinimumSize = new System.Drawing.Size(1, 1); + this.btnCalibManual.Name = "btnCalibManual"; + this.btnCalibManual.Size = new System.Drawing.Size(103, 35); + this.btnCalibManual.Style = Sunny.UI.UIStyle.Custom; + this.btnCalibManual.Symbol = 363128; + this.btnCalibManual.TabIndex = 16; + this.btnCalibManual.Text = "手动标定"; + this.btnCalibManual.Click += new System.EventHandler(this.btnCalibManual_Click); + // + // txbTheta + // + this.txbTheta.ButtonSymbol = 61761; + this.txbTheta.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbTheta.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbTheta.IsScaled = false; + this.txbTheta.Location = new System.Drawing.Point(104, 292); + this.txbTheta.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbTheta.Maximum = 2147483647D; + this.txbTheta.Minimum = -2147483648D; + this.txbTheta.MinimumSize = new System.Drawing.Size(1, 16); + this.txbTheta.Name = "txbTheta"; + this.txbTheta.Size = new System.Drawing.Size(150, 29); + this.txbTheta.Style = Sunny.UI.UIStyle.Custom; + this.txbTheta.TabIndex = 9; + this.txbTheta.Text = "0"; + this.txbTheta.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbRatation + // + this.txbRatation.ButtonSymbol = 61761; + this.txbRatation.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbRatation.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbRatation.IsScaled = false; + this.txbRatation.Location = new System.Drawing.Point(104, 242); + this.txbRatation.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbRatation.Maximum = 2147483647D; + this.txbRatation.Minimum = -2147483648D; + this.txbRatation.MinimumSize = new System.Drawing.Size(1, 16); + this.txbRatation.Name = "txbRatation"; + this.txbRatation.Size = new System.Drawing.Size(150, 29); + this.txbRatation.Style = Sunny.UI.UIStyle.Custom; + this.txbRatation.TabIndex = 10; + this.txbRatation.Text = "0"; + this.txbRatation.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbScaleY + // + this.txbScaleY.ButtonSymbol = 61761; + this.txbScaleY.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbScaleY.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbScaleY.IsScaled = false; + this.txbScaleY.Location = new System.Drawing.Point(104, 192); + this.txbScaleY.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbScaleY.Maximum = 2147483647D; + this.txbScaleY.Minimum = -2147483648D; + this.txbScaleY.MinimumSize = new System.Drawing.Size(1, 16); + this.txbScaleY.Name = "txbScaleY"; + this.txbScaleY.Size = new System.Drawing.Size(150, 29); + this.txbScaleY.Style = Sunny.UI.UIStyle.Custom; + this.txbScaleY.TabIndex = 11; + this.txbScaleY.Text = "0"; + this.txbScaleY.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbScaleX + // + this.txbScaleX.ButtonSymbol = 61761; + this.txbScaleX.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbScaleX.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbScaleX.IsScaled = false; + this.txbScaleX.Location = new System.Drawing.Point(104, 142); + this.txbScaleX.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbScaleX.Maximum = 2147483647D; + this.txbScaleX.Minimum = -2147483648D; + this.txbScaleX.MinimumSize = new System.Drawing.Size(1, 16); + this.txbScaleX.Name = "txbScaleX"; + this.txbScaleX.Size = new System.Drawing.Size(150, 29); + this.txbScaleX.Style = Sunny.UI.UIStyle.Custom; + this.txbScaleX.TabIndex = 12; + this.txbScaleX.Text = "0"; + this.txbScaleX.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbMoveY + // + this.txbMoveY.ButtonSymbol = 61761; + this.txbMoveY.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbMoveY.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbMoveY.IsScaled = false; + this.txbMoveY.Location = new System.Drawing.Point(104, 92); + this.txbMoveY.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbMoveY.Maximum = 2147483647D; + this.txbMoveY.Minimum = -2147483648D; + this.txbMoveY.MinimumSize = new System.Drawing.Size(1, 16); + this.txbMoveY.Name = "txbMoveY"; + this.txbMoveY.Size = new System.Drawing.Size(150, 29); + this.txbMoveY.Style = Sunny.UI.UIStyle.Custom; + this.txbMoveY.TabIndex = 13; + this.txbMoveY.Text = "0"; + this.txbMoveY.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbMoveX + // + this.txbMoveX.ButtonSymbol = 61761; + this.txbMoveX.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbMoveX.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbMoveX.IsScaled = false; + this.txbMoveX.Location = new System.Drawing.Point(104, 42); + this.txbMoveX.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbMoveX.Maximum = 2147483647D; + this.txbMoveX.Minimum = -2147483648D; + this.txbMoveX.MinimumSize = new System.Drawing.Size(1, 16); + this.txbMoveX.Name = "txbMoveX"; + this.txbMoveX.Size = new System.Drawing.Size(150, 29); + this.txbMoveX.Style = Sunny.UI.UIStyle.Custom; + this.txbMoveX.TabIndex = 14; + this.txbMoveX.Text = "0"; + this.txbMoveX.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel7 + // + this.uiLabel7.BackColor = System.Drawing.Color.White; + this.uiLabel7.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel7.Location = new System.Drawing.Point(24, 292); + this.uiLabel7.Name = "uiLabel7"; + this.uiLabel7.Size = new System.Drawing.Size(73, 23); + this.uiLabel7.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel7.TabIndex = 3; + this.uiLabel7.Text = "斜切:"; + this.uiLabel7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel6 + // + this.uiLabel6.BackColor = System.Drawing.Color.White; + this.uiLabel6.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel6.Location = new System.Drawing.Point(24, 242); + this.uiLabel6.Name = "uiLabel6"; + this.uiLabel6.Size = new System.Drawing.Size(73, 23); + this.uiLabel6.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel6.TabIndex = 4; + this.uiLabel6.Text = "旋转:"; + this.uiLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel5 + // + this.uiLabel5.BackColor = System.Drawing.Color.White; + this.uiLabel5.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel5.Location = new System.Drawing.Point(24, 192); + this.uiLabel5.Name = "uiLabel5"; + this.uiLabel5.Size = new System.Drawing.Size(73, 23); + this.uiLabel5.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel5.TabIndex = 5; + this.uiLabel5.Text = "缩放Y:"; + this.uiLabel5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel4 + // + this.uiLabel4.BackColor = System.Drawing.Color.White; + this.uiLabel4.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel4.Location = new System.Drawing.Point(24, 142); + this.uiLabel4.Name = "uiLabel4"; + this.uiLabel4.Size = new System.Drawing.Size(73, 23); + this.uiLabel4.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel4.TabIndex = 6; + this.uiLabel4.Text = "缩放X:"; + this.uiLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel3 + // + this.uiLabel3.BackColor = System.Drawing.Color.White; + this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel3.Location = new System.Drawing.Point(24, 92); + this.uiLabel3.Name = "uiLabel3"; + this.uiLabel3.Size = new System.Drawing.Size(73, 23); + this.uiLabel3.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel3.TabIndex = 7; + this.uiLabel3.Text = "平移Y:"; + this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel2 + // + this.uiLabel2.BackColor = System.Drawing.Color.White; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel2.Location = new System.Drawing.Point(24, 42); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(73, 23); + this.uiLabel2.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel2.TabIndex = 8; + this.uiLabel2.Text = "平移X:"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FormEyeHandCalib + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(823, 522); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FormEyeHandCalib"; + this.Text = "手眼标定工具"; + this.Load += new System.EventHandler(this.FormEyeHandCalib_Load); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.uiGroupBox1.ResumeLayout(false); + this.uiPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CalibDataGrid)).EndInit(); + this.uiTabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + private System.Windows.Forms.SplitContainer splitContainer1; + private Sunny.UI.UIComboBox chbSelectCalibType; + private Sunny.UI.UIGroupBox uiGroupBox1; + private Sunny.UI.UILabel uiLabel1; + private Sunny.UI.UIDataGridView CalibDataGrid; + private Sunny.UI.UIPanel uiPanel1; + private Sunny.UI.UISymbolButton btnExportData; + private Sunny.UI.UISymbolButton btnImportData; + private Sunny.UI.UITabControl uiTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private Sunny.UI.UISymbolButton btnCalibAuto; + private Sunny.UI.UISymbolButton btnCalibManual; + private Sunny.UI.UITextBox txbTheta; + private Sunny.UI.UITextBox txbRatation; + private Sunny.UI.UITextBox txbScaleY; + public Sunny.UI.UITextBox txbScaleX; + public Sunny.UI.UITextBox txbMoveY; + public Sunny.UI.UITextBox txbMoveX; + private Sunny.UI.UILabel uiLabel7; + private Sunny.UI.UILabel uiLabel6; + private Sunny.UI.UILabel uiLabel5; + private Sunny.UI.UILabel uiLabel4; + private Sunny.UI.UILabel uiLabel3; + private Sunny.UI.UILabel uiLabel2; + } +} \ No newline at end of file diff --git a/EyeHandCalibTool/FormEyeHandCalib.cs b/EyeHandCalibTool/FormEyeHandCalib.cs new file mode 100644 index 0000000..a59cb2e --- /dev/null +++ b/EyeHandCalibTool/FormEyeHandCalib.cs @@ -0,0 +1,174 @@ +using CommonMethods; +using HalconDotNet; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ViewROI; + +namespace EyeHandCalibTool +{ + public partial class FormEyeHandCalib : Form + { + public EyeHandCalib myEyeHandCalib = null; + public IToolInfo myToolInfo = new IToolInfo(); + public HWindowTool_Smart myHwindow = new HWindowTool_Smart(); + public HDrawingObject selected_drawing_object = new HDrawingObject(); + + public FormEyeHandCalib(ref object eyeHandCalib) + { + InitializeComponent(); + _instance = this; + if (eyeHandCalib.GetType().FullName != "System.Object") + { + myToolInfo = (IToolInfo)eyeHandCalib; + myEyeHandCalib = (EyeHandCalib)myToolInfo.tool; + myEyeHandCalib.DispImage(); + } + } + /// + /// 窗体对象实例 + /// + private static FormEyeHandCalib _instance; + public static FormEyeHandCalib Instance + { + get + { + if (_instance != null) + { + lock (_instance) + { + if (_instance == null) + { + object eyeHandCalib = new object(); + _instance = new FormEyeHandCalib(ref eyeHandCalib); + } + return _instance; + } + } + else + { + object eyeHandCalib = new object(); + _instance = new FormEyeHandCalib(ref eyeHandCalib); + return _instance; + } + + } + } + + public FormEyeHandCalib() + { + InitializeComponent(); + } + + private void chbSelectCalibType_SelectedIndexChanged(object sender, EventArgs e) + { + CalibType oldType = myEyeHandCalib.calibType; + myEyeHandCalib.calibType = chbSelectCalibType.SelectedItem.ToString() == "四点标定" ? CalibType.Four_Point : CalibType.Nine_Point; + if(oldType == CalibType.Four_Point && myEyeHandCalib.calibType == CalibType.Nine_Point) + { + for (int i = 0; i < 5; i++) + { + DataRow dr = myEyeHandCalib.CalibSourceDataTable.NewRow(); + dr[0] = 0; + dr[1] = 50; + dr[2] = 0; + dr[3] = 50; + myEyeHandCalib.CalibSourceDataTable.Rows.Add(dr); + } + } + else if(oldType == CalibType.Nine_Point && myEyeHandCalib.calibType == CalibType.Four_Point) + { + for (int i = 0; i < 5; i++) + { + myEyeHandCalib.CalibSourceDataTable.Rows.RemoveAt(myEyeHandCalib.CalibSourceDataTable.Rows.Count - 1); + } + } + } + + private void FormEyeHandCalib_Load(object sender, EventArgs e) + { + // 若为空,表示该工具未经标定校正 + if(myEyeHandCalib.CalibSourceDataTable == null) + { + myEyeHandCalib.InitDataTable(); + } + CalibDataGrid.DataSource = myEyeHandCalib.CalibSourceDataTable; + chbSelectCalibType.SelectedItem = myEyeHandCalib.calibType == CalibType.Four_Point ? "四点标定" : "九点标定"; + txbScaleX.Text = (Convert.ToDouble(myEyeHandCalib.ScanX.ToString())).ToString("0.00"); + txbScaleY.Text = (Convert.ToDouble(myEyeHandCalib.ScanY.ToString())).ToString("0.00"); + txbRatation.Text = (Convert.ToDouble(myEyeHandCalib.Rotation.ToString())).ToString("0.00"); + txbTheta.Text = (Convert.ToDouble(myEyeHandCalib.Theta.ToString())).ToString("0.00"); + txbMoveX.Text = (Convert.ToDouble(myEyeHandCalib.TranslateX.ToString())).ToString("0.00"); + txbMoveY.Text = (Convert.ToDouble(myEyeHandCalib.TranslateY.ToString())).ToString("0.00"); + + } + + private void CalibDataGrid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) + { + using (SolidBrush b = new SolidBrush( + CalibDataGrid.RowHeadersDefaultCellStyle.ForeColor)) + { + e.Graphics.DrawString((e.RowIndex + 1).ToString( + System.Globalization.CultureInfo.CurrentCulture), + CalibDataGrid.DefaultCellStyle.Font + , b, e.RowBounds.Location.X + 10, e.RowBounds.Location.Y); + } + } + + private void btnImportData_Click(object sender, EventArgs e) + { + myEyeHandCalib.ReadCalibData(); + CalibDataGrid.Refresh(); + } + + private void btnExportData_Click(object sender, EventArgs e) + { + myEyeHandCalib.ExportCalibData(); + } + + private void btnCalibManual_Click(object sender, EventArgs e) + { + if(myEyeHandCalib.ManulCalib()) + { + // 仿射矩阵信息 + txbScaleX.Text = (Convert.ToDouble(myEyeHandCalib.ScanX.ToString())).ToString("0.00"); + txbScaleY.Text = (Convert.ToDouble(myEyeHandCalib.ScanY.ToString())).ToString("0.00"); + txbRatation.Text = (Convert.ToDouble(myEyeHandCalib.Rotation.ToString())).ToString("0.00"); + txbTheta.Text = (Convert.ToDouble(myEyeHandCalib.Theta.ToString())).ToString("0.00"); + txbMoveX.Text = (Convert.ToDouble(myEyeHandCalib.TranslateX.ToString())).ToString("0.00"); + txbMoveY.Text = (Convert.ToDouble(myEyeHandCalib.TranslateY.ToString())).ToString("0.00"); + // 映射成功,则保存矩阵 + HOperatorSet.WriteTuple(myEyeHandCalib.homMat2D, myEyeHandCalib.homMat2DName + ".tup"); + MessageBox.Show("仿射矩阵已经保存成功!"); + } + + } + /// + /// 设定工具运行状态 + /// ` + /// 运行中的信息 + /// 运行状态 + public void SetToolStatus(string msg, ToolRunStatu status) + { + if (myEyeHandCalib != null) + { + myEyeHandCalib.runMessage = msg; + myEyeHandCalib.toolRunStatu = status; + lb_RunStatus.Text = myEyeHandCalib.toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{myEyeHandCalib.runMessage}"; + lb_RunTime.Text = myEyeHandCalib.runTime; + statusStrip.BackColor = myEyeHandCalib.toolRunStatu == ToolRunStatu.Succeed ? Color.LimeGreen : Color.Red; + } + } + + private void tsbtRunTool_Click(object sender, EventArgs e) + { + myEyeHandCalib.Run(SoftwareRunState.Debug); + } + } +} diff --git a/EyeHandCalibTool/FormEyeHandCalib.resx b/EyeHandCalibTool/FormEyeHandCalib.resx new file mode 100644 index 0000000..12023eb --- /dev/null +++ b/EyeHandCalibTool/FormEyeHandCalib.resx @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 40, 19 + + + + + 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 + + + + 150, 19 + + + + AAABAAIAEBAAAAEAIABoBAAAJgAAADAwAAABACAAqCUAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAADAE + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAED/LAA+/3QAPf+fAD3/nwA+ + /3MAO/8rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8NAD7/oQA9//4aUf//RHH//0Rx + //8ZUP//AD3//gA9/58AQP8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8NAD7/zxtS//+vwv///f3///// + /////////f3//63B//8aUf//AD3/zgBA/wwAAAAAAAAAAAAAAAAAAAAAAD3/ohpR///i6f//2eL//1B6 + //8NR///DUf//1F7///b5P//4ej//xhP//8APf+eAAAAAAAAAAAAAAAAAED/KAA9//2xxP//1+H//xBJ + //8sXv//kqz//5Gr//8qXf//EEn//9ni//+twf//AD3//QA8/yYAAAAAAAAAAAA8/3sbUv///v7//095 + //8uYP//+Pr//9Db///R3P//+Pr//yxe//9Re////f3//xlQ//8APv94AAAAAAAAAAAAPf+fSXX///// + //8MRv//k63//8/a//8HPvD/CD7t/9Db//+Rq///Dkj///////9IdP//AD3/ngAAAAAAAAAAAD3/n0l1 + ////////DUf//5Gr///P2v//CT/r/zlFb//DzOn/j6r//w9I////////R3P//wA9/54AAAAAAAAAAAA+ + /3wbUv///v7//095//8uYP//+Pr//9Db///AyOT/f3tw/y9c7v9Re////f3//xlQ//8APf95AAAAAAAA + AAAAPv8tAD3//rHE///X4f//EEn//yxe//+SrP//kav//y9a5P89SHD/zdTu/63B//8APf/+ADv/KwAA + AAAAAAAAAAAAAAA9/6waUf//4un//9ni//9Qev//FEz//xRM//9Re///yM3h/8WIPf+nclH/TFGtwAAA + AAAAAAAAAAAAAAAAAAAAQP8QAD3/0RtS//+vwv///f3//////////////f3//63B//+jbU3/0o88/813 + IfjRdBchAAAAAAAAAAAAAAAAAAAAAABA/xAAPP+tAD3//xpR//9Ecf//RHH//xlQ//8APf/+UlWlxMh1 + H/pkUje9TkM3FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8/y8APf+CAD3/pAA9/6QAPf+BAD3/LgAA + AADPeBggUkczGVVJPRUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD+fwAA8A8AAOAHAADAAwAAwAMAAMADAACAAQAAgAEAAMAD + AADAAwAAwAMAAOADAADwAwAA/D8AAP//AAAoAAAAMAAAAGAAAAABACAAAAAAAFAlAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP8CAD3/NgA+/3QAPf+oAD3/0gA9/+4APf//AD3//wA9/+4APf/RAD3/qAA+/3MAP/81AAD/AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAED/HAA9/4kAPv/kAD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3/4wA+/4gAOf8bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA5/xIAPf+TAD3/+AA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf/4AD7/kQA8/xEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAD7/VgA9/+oAPf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9/+kAPf9UAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr/wYAPv+ZAD3//wA9//8APf//AD3//wA9//8APf//EUr//16F + //+ht///ytf//+jt///8/f///P3//+jt///J1v//oLf//1yD//8QSf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3/lgAz/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAED/DAA8/7oAPf//AD3//wA9//8APf//AD3//xpR + //+dtP//+Pr////////////////////////////////////////////////////////3+f//m7P//xlQ + //8APf//AD3//wA9//8APf//AD3//wA9/7cARv8LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVf8DAD7/rgA9//8APf//AD3//wA9 + //8GQv//fp3///T3//////////////////////////////////////////////////////////////// + //////////////P2//98m///BkL//wA9//8APf//AD3//wA9//8APP+tAAD/AgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPf+XAD3//wA9 + //8APf//AD3//xJL//+8zP////////////////////////////////////////////////////////// + ////////////////////////////////////////usv//xJL//8APf//AD3//wA9//8APf//AD3/kgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9 + /1gAPf//AD3//wA9//8APf//LmD//+Lp/////////////////////////////+Xr//+Urv//RnL//yFW + //8HQv//B0L//yJX//9Gcv//la7//+bs/////////////////////////////+Dn//8sXv//AD3//wA9 + //8APf//AD3//wA9/1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAADf/DgA9/+YAPf//AD3//wA9//8UTP//3eX////////////////////////r8P//d5j//whD + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//whD//93mP//6/D///////////////////// + ///c5P//E0v//wA9//8APf//AD3//wA9/+UAO/8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAD7/lQA9//8APf//AD3//wlE///L1////////////////////////6q+ + //8KRf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//C0X//6zA + ////////////////////////yNX//whD//8APf//AD3//wA9//8APP+QAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQP8YAD3/9gA9//8APf//AD3//4+q//////////////// + ////////i6f//wE+//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wE+//+NqP///////////////////////4Sh//8APf//AD3//wA9//8APf/1ADr/FgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv+IAD3//wA9//8APf//J1v///v8 + //////////////////+uwf//AT7//wA9//8APf//AD3//wA9//8tX///kKv//9Xf///3+f//9/n//9Xf + //+Pqv//LF7//wA9//8APf//AD3//wA9//8CP///sMP///////////////////T3//8ZUP//AD3//wA9 + //8APf//AD3/hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wIAPf/iAD3//wA9 + //8APf//nrX//////////////////+Pq//8MRv//AD3//wA9//8APf//CUT//5ix///9/f////////// + /////////////////////////P3//5ew//8IQ///AD3//wA9//8APf//DUf//+Xr//////////////// + //+XsP//AD3//wA9//8APf//AD3/3QAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ + /zoAPf//AD3//wA9//8PSP//9vj//////////////////2CG//8APf//AD3//wA9//8JRP//x9T///// + ///////////////////////////////////////////////////F0///CEP//wA9//8APf//AD3//2KI + ///////////////////09///DEb//wA9//8APf//AD3//wA9/zYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA8/3sAPf//AD3//wA9//9bgv//////////////////3+f//wI///8APf//AD3//wA9 + //+dtP//////////////////////////////////////////////////////////////////mbH//wA9 + //8APf//AD3//wM////h6P//////////////////Vn7//wA9//8APf//AD3//wA8/3cAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/6wAPf//AD3//wA9//+ctP//////////////////kKv//wA9 + //8APf//AD3//y1f///9/f//////////////////1+H//054//8NR///DUf//095///Y4f////////// + /////////f3//yxe//8APf//AD3//wA9//+Trf//////////////////mLH//wA9//8APf//AD3//wA+ + /6oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/9QAPf//AD3//wA9///K1/////////// + ////////R3P//wA9//8APf//AD3//5Ks///////////////////V3///Dkj//wA9//8APf//AD3//wA9 + //8PSP//1+H//////////////////4+q//8APf//AD3//wA9//9Jdf//////////////////x9T//wA9 + //8APf//AD3//wA9/9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/+0APf//AD3//wA9 + ///r8P//////////////////JVn//wA9//8APf//AD3//9fh//////////////////9NeP//AD3//wA9 + //8APf//AD3//wA9//8APf//T3n//////////////////9Xf//8APf//AD3//wA9//8nW/////////// + ////////6e7//wA9//8APf//AD3//wA9/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9 + //oAPf//AD3//wA9///6+///////////////////C0X//wA9//8APf//AD3///T3//////////////// + //8LRf//AD3//wA9//88RWj/PkRj/wY+7/8APf//DUf///////////////////L1//8APf//AD3//wA9 + //8NR///////////////////+Pr//wA9//8APf//AD3//wA9//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA9//kAPf//AD3//wA9///5+v//////////////////DUf//wA9//8APf//AD3///P2 + //////////////////8MRv//AD3//wA9//8/RWH/T0c3/0FFW/8GPu//Dkj///////////////////H0 + //8APf//AD3//wA9//8OSP//////////////////9/n//wA9//8APf//AD3//wA9//gAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/+0APf//AD3//wA9///r8P//////////////////JVn//wA9 + //8APf//AD3//9fh//////////////////9NeP//AD3//wA9//8IPuv/Q0VW/09HN/8+RWH/T3bz//// + /////////////9Te//8APf//AD3//wA9//8oW///////////////////6e7//wA9//8APf//AD3//wA9 + /+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/9QAPf//AD3//wA9///K1/////////// + ////////R3P//wA9//8APf//AD3//5Ks///////////////////V3///DUf//wA9//8APf//CD7r/0NF + Vv9PRzf/bGhh//X08////////////4+q//8APf//AD3//wA9//9Jdf//////////////////x9T//wA9 + //8APf//AD3//wA9/9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/68APf//AD3//wA9 + //+ctP//////////////////kKv//wA9//8APf//AD3//y1f///9/f//////////////////z9r//0t2 + //8UTP//FEz//0xy6/9jXVb/T0c3/3RuYf/19PP//f3//yxe//8APf//AD3//wA9//+Trf////////// + ////////mLH//wA9//8APf//AD3//wA9/6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8 + /3sAPf//AD3//wA9//9bgv//////////////////3+f//wI///8APf//AD3//wA9//+dtP////////// + ///////////////////////////////////t7Ov/amNW/09HN/90bmH/lavz/wA9//8APf//AD3//wM/ + ///h6P//////////////////Vn7//wA9//8APf//AD3//wA8/3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA+/zoAPf//AD3//wA9//8PSP//9vj//////////////////2CG//8APf//AD3//wA9 + //8JRP//x9T/////////////////////////////////////////////7ezr/2pjVv9PRzf/QEZh/wU9 + 8/8APf//AD3//2KI///////////////////09///DEb//wA9//8APf//AD3//wA9/zYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz/wUAPP/oAD3//wA9//8APf//nrX//////////////////+Pq + //8MRv//AD3//wA9//8APf//CUT//5ix///9/f///////////////////////////////////P3//5Cl + 6/9ERlb/T0c3/z5FYf8FPfP/DUf//+Xr//////////////////+XsP//AD3//wA9//8APf//AD3/5QBV + /wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv+IAD3//wA9//8APf//J1v///v8 + //////////////////+uwf//AT7//wA9//8APf//AD3//wA9//8tX///kKv//9Te///r8P//6/D//9Te + //+Pqv//LF7//wA9//8IPuv/Q0VW/09HN/8+RWH/q7zz//////////////////T3//8ZUP//AD3//wA9 + //8APf//AD3/hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOv8jAD3//AA9 + //8APf//AD3//4+q////////////////////////i6f//wE+//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//CD7r/0NFVv9PRzf/dG1f//X08////////////4Sh + //8APf//AD3//wA9//8APf/6ADr/HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAD7/nQA9//8APf//AD3//wlE///L1////////////////////////6q+//8KRf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//C0X//6Kz6/9pYVP/XlA4/86O + P//cnFr/zaeQ/zJOz/8CPv3/AD3//wA9//8APv+ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAADn/GwA9//EAPf//AD3//wA9//8eVP//6O3///////////////////// + ///a4///VX7//wI///8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wI///9Vfv//2+T///// + ///t7Ov/woc9//WlQv/nnUH/0Xoh/9J2Gf/Ccir/eF57/xZD5/AAN/8XAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/1oAPf//AD3//wA9//8APf//LmD//+Tq + /////////////////////////////+Xr//+Urv//RnL//yhb//8UTP//FEz//ylc//9Gcv//la7//+bs + ////////////////////////0ZRT/9mUP//1pUL/45pA/9B5IP/Sdhn/0nYZ/8x1IPLSeBciAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv+hAD3//wA9 + //8APf//AD3//yBV///T3v////////////////////////////////////////////////////////// + ////////////////////////////////////////0qeG/8h1H//ZlD//9aVC/+OaQP/QeSD/0nYZ/9J2 + Gf/RdhnPv4AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAARv8LAD7/xwA9//8APf//AD3//wA9//8LRf//lK7///z9//////////////////////////////// + //////////////////////////////////////////////z9//+Rq///PFHG/9J2Gf/IdR//2ZQ///Wl + Qv/jmkD/0Hkg/9J2Gf/Sdhn/0ncZZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAED/DAA8/7oAPf//AD3//wA9//8APf//AD3//yxe//+kuv//+Pr///// + ///////////////////////////////////////////////////3+f//orj//ypd//8APf//BD76/8dz + Jf/Sdhn/x3Qe/9SRP//1pUL/551B/9F5If/Sdhn/0nYa0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr/wYAPv+ZAD3//wA9//8APf//AD3//wA9 + //8APf//EUr//16F//+ht///ytf//+jt///u8v//7vL//+jt///J1v//oLf//1yD//8QSf//AD3//wA9 + //8APf//AD3//4Bgcv/Sdhn/0nYZ/8h1H//ZlD//zo8//1hNN8tVRDMPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7/VgA9 + /+oAPf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//xlE5OvMdSDy0nYZ/9J2Gf/Hcx7/V0s32U9HN/9PRzfJVUQzDwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA5/xIAPf+TAD3/+AA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf/4AD7/kQA8/xHPdRwl0nYZ1NJ2Gf/Sdhn/VUk9FU9H + N9FPRzf/T0c3yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAED/HAA9/4kAPv/kAD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3/4wA+/4gAOf8bAAAAAAAAAAAAAAAAzGYABdJ3 + GWfSdRnKAAAAAFVJPRVPRzfJTkY2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8CAD3/NgA+ + /3QAPf+oAD3/0gA9/+4APf/uAD3/7gA9/+4APf/RAD3/qAA+/3MAP/81AAD/AgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP// + /////wAA////////AAD///AP//8AAP//AAD//wAA//wAAD//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/ + AAD/gAAAAf8AAP8AAAAA/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgA + AAAAHwAA+AAAAAAfAAD4AAAAAB8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP + AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPwA + AAAAPwAA/AAAAAA/AAD+AAAAAH8AAP8AAAAAfwAA/wAAAAA/AAD/gAAAAD8AAP/AAAAAHwAA/+AAAAB/ + AAD/+AAAAD8AAP/8AAAxHwAA//8AAP2fAAD///AP//8AAP///////wAA////////AAD///////8AAP// + /////wAA + + + \ No newline at end of file diff --git a/EyeHandCalibTool/Properties/AssemblyInfo.cs b/EyeHandCalibTool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4b0cb08 --- /dev/null +++ b/EyeHandCalibTool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("EyeHandCalibTool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("EyeHandCalibTool")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("46ee89bb-5ec9-4ead-9e32-3e57288a0bf7")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/EyeHandCalibTool/Properties/Resources.Designer.cs b/EyeHandCalibTool/Properties/Resources.Designer.cs new file mode 100644 index 0000000..6c5309e --- /dev/null +++ b/EyeHandCalibTool/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace EyeHandCalibTool.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EyeHandCalibTool.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/EyeHandCalibTool/Properties/Resources.resx b/EyeHandCalibTool/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/EyeHandCalibTool/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FindCircle/FindCircle.cs b/FindCircle/FindCircle.cs index 0fe8c0b..c3ed240 100644 --- a/FindCircle/FindCircle.cs +++ b/FindCircle/FindCircle.cs @@ -1,6 +1,6 @@ using System; using HalconDotNet; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using ToolBase; using CommonMethods; using ViewROI; diff --git a/FindLine/FindLine.cs b/FindLine/FindLine.cs index 2ca7fba..1682b4a 100644 --- a/FindLine/FindLine.cs +++ b/FindLine/FindLine.cs @@ -1,6 +1,6 @@ using System; using HalconDotNet; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using ToolBase; using CommonMethods; using System.Diagnostics; @@ -15,20 +15,12 @@ namespace FindLineTool /// /// 输入姿态 /// - public PosXYU inputPose = new PosXYU(); - /// - /// 输入姿态 - /// public HTuple inputPoseHomMat2D = new HTuple(); /// /// 位置修正姿态 /// public HTuple changePoseHomMat2D = new HTuple(); /// - /// 制作模板时的位姿 - /// - public PosXYU templatePose = new PosXYU(); - /// /// 修改的位姿 /// public HTuple changedPose = new HTuple(); diff --git a/FindLine/FindLineToolRun.cs b/FindLine/FindLineToolRun.cs index 4fa0c56..1511e39 100644 --- a/FindLine/FindLineToolRun.cs +++ b/FindLine/FindLineToolRun.cs @@ -25,7 +25,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; using ToolLib.VisionJob; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; namespace FindLineTool { diff --git a/FormLib/FormInputInfo.Designer.cs b/FormLib/FormInputInfo.Designer.cs new file mode 100644 index 0000000..6bd3866 --- /dev/null +++ b/FormLib/FormInputInfo.Designer.cs @@ -0,0 +1,46 @@ +namespace FormLib +{ + partial class FormInputInfo + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // FormInputInfo + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(553, 189); + this.Name = "FormInputInfo"; + this.Text = "InputForm"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/FormLib/FormInputInfo.cs b/FormLib/FormInputInfo.cs new file mode 100644 index 0000000..4bd2b4b --- /dev/null +++ b/FormLib/FormInputInfo.cs @@ -0,0 +1,21 @@ +using Sunny.UI; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FormLib +{ + public partial class FormInputInfo :UIForm + { + public FormInputInfo() + { + InitializeComponent(); + } + } +} diff --git a/FormLib/FormInputInfo.resx b/FormLib/FormInputInfo.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FormLib/FormInputInfo.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormLib/FormLib.csproj b/FormLib/FormLib.csproj index 8f028e9..9dcda7f 100644 --- a/FormLib/FormLib.csproj +++ b/FormLib/FormLib.csproj @@ -37,6 +37,14 @@ C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.Common.dll + @@ -64,15 +72,33 @@ FormLog.cs + + Form + + + FormInputInfo.cs + + + Form + + + ToolBaseForm.cs + FormImageWindow.cs.cs + + FormInputInfo.cs + FormLog.cs + + ToolBaseForm.cs + diff --git a/FormLib/ToolBaseForm.Designer.cs b/FormLib/ToolBaseForm.Designer.cs new file mode 100644 index 0000000..9f083b8 --- /dev/null +++ b/FormLib/ToolBaseForm.Designer.cs @@ -0,0 +1,116 @@ +namespace FormLib +{ + partial class ToolBaseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ToolBaseForm)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(920, 32); + this.toolStrip1.TabIndex = 3; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 563); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(920, 22); + this.statusStrip.TabIndex = 2; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // ToolBaseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(920, 585); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Name = "ToolBaseForm"; + this.Text = "工具"; + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + } +} \ No newline at end of file diff --git a/FormLib/ToolBaseForm.cs b/FormLib/ToolBaseForm.cs new file mode 100644 index 0000000..e84ca26 --- /dev/null +++ b/FormLib/ToolBaseForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FormLib +{ + public partial class ToolBaseForm : Form + { + public ToolBaseForm() + { + InitializeComponent(); + } + } +} diff --git a/FormLib/ToolBaseForm.resx b/FormLib/ToolBaseForm.resx new file mode 100644 index 0000000..c078ed3 --- /dev/null +++ b/FormLib/ToolBaseForm.resx @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1, 19 + + + + + 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 + + + + 111, 19 + + \ No newline at end of file diff --git a/HDevEngineTool/FormHDevEngineTool.Designer.cs b/HDevEngineTool/FormHDevEngineTool.Designer.cs new file mode 100644 index 0000000..3f05046 --- /dev/null +++ b/HDevEngineTool/FormHDevEngineTool.Designer.cs @@ -0,0 +1,259 @@ +namespace HDevEngineTool +{ + partial class FormHDevEngineTool + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormHDevEngineTool)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.tsbReadHdev = new System.Windows.Forms.ToolStripButton(); + this.tsbSaveHdev = new System.Windows.Forms.ToolStripButton(); + this.tsbReLoad = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.uiSplitContainer1 = new Sunny.UI.UISplitContainer(); + this.panelHImageWindow = new System.Windows.Forms.Panel(); + this.uiTabControl1 = new Sunny.UI.UITabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.txbCodeText = new Sunny.UI.UIRichTextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).BeginInit(); + this.uiSplitContainer1.Panel1.SuspendLayout(); + this.uiSplitContainer1.Panel2.SuspendLayout(); + this.uiSplitContainer1.SuspendLayout(); + this.uiTabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool, + this.tsbReadHdev, + this.tsbSaveHdev, + this.tsbReLoad}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1277, 32); + this.toolStrip1.TabIndex = 5; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + this.tsbtRunTool.Click += new System.EventHandler(this.tsbtRunTool_Click); + // + // tsbReadHdev + // + this.tsbReadHdev.Image = ((System.Drawing.Image)(resources.GetObject("tsbReadHdev.Image"))); + this.tsbReadHdev.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbReadHdev.Name = "tsbReadHdev"; + this.tsbReadHdev.Size = new System.Drawing.Size(85, 29); + this.tsbReadHdev.Text = "代码读取"; + this.tsbReadHdev.Click += new System.EventHandler(this.tsbReadHdev_Click); + // + // tsbSaveHdev + // + this.tsbSaveHdev.Image = ((System.Drawing.Image)(resources.GetObject("tsbSaveHdev.Image"))); + this.tsbSaveHdev.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbSaveHdev.Name = "tsbSaveHdev"; + this.tsbSaveHdev.Size = new System.Drawing.Size(85, 29); + this.tsbSaveHdev.Text = "程序保存"; + this.tsbSaveHdev.Click += new System.EventHandler(this.tsbSaveHdev_Click); + // + // tsbReLoad + // + this.tsbReLoad.Image = ((System.Drawing.Image)(resources.GetObject("tsbReLoad.Image"))); + this.tsbReLoad.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbReLoad.Name = "tsbReLoad"; + this.tsbReLoad.Size = new System.Drawing.Size(85, 29); + this.tsbReLoad.Text = "重新载入"; + this.tsbReLoad.Click += new System.EventHandler(this.tsbReLoad_Click); + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 601); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1277, 22); + this.statusStrip.TabIndex = 4; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // uiSplitContainer1 + // + this.uiSplitContainer1.Cursor = System.Windows.Forms.Cursors.Default; + this.uiSplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSplitContainer1.Location = new System.Drawing.Point(0, 32); + this.uiSplitContainer1.Name = "uiSplitContainer1"; + // + // uiSplitContainer1.Panel1 + // + this.uiSplitContainer1.Panel1.Controls.Add(this.panelHImageWindow); + // + // uiSplitContainer1.Panel2 + // + this.uiSplitContainer1.Panel2.Controls.Add(this.uiTabControl1); + this.uiSplitContainer1.Size = new System.Drawing.Size(1277, 569); + this.uiSplitContainer1.SplitterDistance = 630; + this.uiSplitContainer1.SplitterWidth = 11; + this.uiSplitContainer1.TabIndex = 6; + // + // panelHImageWindow + // + this.panelHImageWindow.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelHImageWindow.Location = new System.Drawing.Point(0, 0); + this.panelHImageWindow.Name = "panelHImageWindow"; + this.panelHImageWindow.Size = new System.Drawing.Size(630, 569); + this.panelHImageWindow.TabIndex = 0; + // + // uiTabControl1 + // + this.uiTabControl1.Controls.Add(this.tabPage1); + this.uiTabControl1.Controls.Add(this.tabPage2); + this.uiTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTabControl1.ItemSize = new System.Drawing.Size(150, 40); + this.uiTabControl1.Location = new System.Drawing.Point(0, 0); + this.uiTabControl1.MainPage = ""; + this.uiTabControl1.Name = "uiTabControl1"; + this.uiTabControl1.SelectedIndex = 0; + this.uiTabControl1.Size = new System.Drawing.Size(636, 569); + this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.txbCodeText); + this.tabPage1.Location = new System.Drawing.Point(0, 40); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(636, 529); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "工具代码"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // txbCodeText + // + this.txbCodeText.AutoWordSelection = true; + this.txbCodeText.Dock = System.Windows.Forms.DockStyle.Fill; + this.txbCodeText.FillColor = System.Drawing.Color.White; + this.txbCodeText.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbCodeText.IsScaled = false; + this.txbCodeText.Location = new System.Drawing.Point(0, 0); + this.txbCodeText.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbCodeText.MinimumSize = new System.Drawing.Size(1, 1); + this.txbCodeText.Name = "txbCodeText"; + this.txbCodeText.Padding = new System.Windows.Forms.Padding(2); + this.txbCodeText.Size = new System.Drawing.Size(636, 529); + this.txbCodeText.Style = Sunny.UI.UIStyle.Custom; + this.txbCodeText.TabIndex = 0; + this.txbCodeText.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.txbCodeText.WordWrap = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(0, 40); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(636, 529); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "其他"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // FormHDevEngineTool + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1277, 623); + this.Controls.Add(this.uiSplitContainer1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Name = "FormHDevEngineTool"; + this.Text = "FormHDevEngineTool"; + this.Load += new System.EventHandler(this.FormHDevEngineTool_Load); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.uiSplitContainer1.Panel1.ResumeLayout(false); + this.uiSplitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).EndInit(); + this.uiSplitContainer1.ResumeLayout(false); + this.uiTabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + private Sunny.UI.UISplitContainer uiSplitContainer1; + private System.Windows.Forms.Panel panelHImageWindow; + private Sunny.UI.UITabControl uiTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private Sunny.UI.UIRichTextBox txbCodeText; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.ToolStripButton tsbReadHdev; + private System.Windows.Forms.ToolStripButton tsbSaveHdev; + private System.Windows.Forms.ToolStripButton tsbReLoad; + } +} \ No newline at end of file diff --git a/HDevEngineTool/FormHDevEngineTool.cs b/HDevEngineTool/FormHDevEngineTool.cs new file mode 100644 index 0000000..7c174e7 --- /dev/null +++ b/HDevEngineTool/FormHDevEngineTool.cs @@ -0,0 +1,128 @@ +using CommonMethods; +using FormLib; +using HalconDotNet; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ViewROI; + +namespace HDevEngineTool +{ + public partial class FormHDevEngineTool : Form + { + private HDevEngineCode myHDevEngine = new HDevEngineCode(); + public IToolInfo myToolInfo = new IToolInfo(); + public HWindowTool_Smart myHwindow = new HWindowTool_Smart(); + + public FormHDevEngineTool(ref object hdevEngine) + { + InitializeComponent(); + _instance = this; + if (hdevEngine.GetType().FullName != "System.Object") + { + myToolInfo = (IToolInfo)hdevEngine; + myHDevEngine = (HDevEngineCode)myToolInfo.tool; + myHDevEngine.toolName = myToolInfo.FormToolName; + myHDevEngine.DispImage(); + } + } + + /// + /// 窗体对象实例 + /// + private static FormHDevEngineTool _instance; + public static FormHDevEngineTool Instance + { + get + { + if (_instance != null) + { + lock (_instance) + { + if (_instance == null) + { + object hdevEngine = new object(); + _instance = new FormHDevEngineTool(ref hdevEngine); + } + return _instance; + } + } + else + { + object hdevEngine = new object(); + _instance = new FormHDevEngineTool(ref hdevEngine); + return _instance; + } + + } + } + + private void FormHDevEngineTool_Load(object sender, EventArgs e) + { + this.panelHImageWindow.Controls.Add(myHwindow); + myHwindow.Dock = DockStyle.Fill; + } + + public void InitTool() + { + txbCodeText.Text = myHDevEngine.CodeText; + } + + private void tsbReadHdev_Click(object sender, EventArgs e) + { + OpenFileDialog myDia = new OpenFileDialog(); + myDia.Filter = "Halcon程序(*.hdev)|*.hdev"; + myDia.Title = "打开Halcon程序"; + if (myDia.ShowDialog() == DialogResult.OK) + { + string filePath = myDia.FileName; + myHDevEngine.CodeFilePath = filePath; + string hdevText = FileOperate.ReadFile(filePath); + txbCodeText.Text = hdevText; + } + } + + private void tsbSaveHdev_Click(object sender, EventArgs e) + { + SaveFileDialog myDia = new SaveFileDialog(); + myDia.Filter = "Halcon程序(*.hdev)|*.hdev"; + if (myDia.ShowDialog() == DialogResult.OK) + { + string path = myDia.FileName; + myHDevEngine.CodeFilePath = path; + FileOperate.WriteFile(path, txbCodeText.Text); + } + + } + + private void tsbReLoad_Click(object sender, EventArgs e) + { + if (File.Exists(myHDevEngine.CodeFilePath)) + { + FileInfo myFileInfo = new FileInfo(myHDevEngine.CodeFilePath); + myHDevEngine.MyEngine.SetProcedurePath(myFileInfo.DirectoryName); + + myHDevEngine.MyProgram.LoadProgram(myHDevEngine.CodeFilePath); + myHDevEngine.ProgramCall = new HDevProgramCall(myHDevEngine.MyProgram); + myHDevEngine.MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(myHwindow.SmartWindow.HalconWindow)); + } + + } + + private void tsbtRunTool_Click(object sender, EventArgs e) + { + if(myHDevEngine.ProgramCall != null) + { + myHDevEngine.ProgramCall.Execute(); + } + + } + } +} diff --git a/HDevEngineTool/FormHDevEngineTool.resx b/HDevEngineTool/FormHDevEngineTool.resx new file mode 100644 index 0000000..4a55989 --- /dev/null +++ b/HDevEngineTool/FormHDevEngineTool.resx @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 225, 19 + + + + + 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 + v3y1RkE/lQAAAABJRU5ErkJggg== + + + + + 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 + lSRJkn8rqdRPZ0b7i/SIonMAAAAASUVORK5CYII= + + + + 335, 19 + + \ No newline at end of file diff --git a/HDevEngineTool/HDevEngineCode.cs b/HDevEngineTool/HDevEngineCode.cs new file mode 100644 index 0000000..0f8dcda --- /dev/null +++ b/HDevEngineTool/HDevEngineCode.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using ToolBase; +using ViewROI; +using HalconDotNet; +using System.IO; +using Logger; + +namespace HDevEngineTool +{ + [Serializable] + public class HDevEngineCode : IToolBase + { + public string uniqueName { get; set; } = Guid.NewGuid().ToString(); + public string toolName { get; set; } = string.Empty; + [NonSerialized] + public HDevProgramCall ProgramCall; + [NonSerialized] + public HDevEngine MyEngine = new HDevEngine(); + [NonSerialized] + public HDevProgram MyProgram = new HDevProgram(); + public string CodeText { get; set; } = string.Empty; + public string CodeFilePath { get; set; } = string.Empty; + public override void DispImage() + { + // throw new NotImplementedException(); + } + + public override void DispMainWindow(HWindowTool_Smart window) + { + // throw new NotImplementedException(); + } + + public override void Run(SoftwareRunState softwareRunState) + { + if (File.Exists(CodeFilePath)) + { + if(MyProgram != null) + { + if(MyProgram.IsLoaded()) + { + LoggerClass.WriteLog("程序已加载,准备运行!"); + } + } + else + { + FileInfo myFileInfo = new FileInfo(CodeFilePath); + MyEngine.SetProcedurePath(myFileInfo.DirectoryName); + + MyProgram.LoadProgram(CodeFilePath); + ProgramCall = new HDevProgramCall(MyProgram); + MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(FormHDevEngineTool.Instance.myHwindow.SmartWindow.HalconWindow)); + } + ProgramCall.Execute(); + } + } + } +} diff --git a/HDevEngineTool/HDevEngineTool.csproj b/HDevEngineTool/HDevEngineTool.csproj new file mode 100644 index 0000000..f9effcc --- /dev/null +++ b/HDevEngineTool/HDevEngineTool.csproj @@ -0,0 +1,118 @@ + + + + + Debug + AnyCPU + {6112406A-A986-4A68-9D22-F0D7F0F81E02} + Library + Properties + HDevEngineTool + HDevEngineTool + v4.6.1 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll + + + C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\hdevenginedotnet.dll + + + False + bin\Debug\SunnyUI.dll + + + + + + + + + + + + + + + + + + Form + + + FormHDevEngineTool.cs + + + + + + True + True + Resources.resx + + + + + {1c8d0ddc-2086-48a9-9586-f2b643e2fc54} + CommonHelper + + + {8c6fc8c6-8874-494b-8260-071f291aa33d} + FormLib + + + {9baa53fd-89b5-43e2-ac59-a27b006debb6} + HWindow_Tool + + + {7cd50b44-bf56-4e8e-8fa1-05f6968c1835} + ToolBase + + + {d4e052b9-e541-4b67-a1f9-273073ef1d4b} + Logger + + + {16e8ff17-98a8-4452-ab9e-c433dc9c21f7} + ToolLib.VisionJob + + + + + FormHDevEngineTool.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + \ No newline at end of file diff --git a/HDevEngineTool/HDevEngineToolRun.cs b/HDevEngineTool/HDevEngineToolRun.cs new file mode 100644 index 0000000..dd9e327 --- /dev/null +++ b/HDevEngineTool/HDevEngineToolRun.cs @@ -0,0 +1,19 @@ +using CommonMethods.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using System.Windows.Forms; + +namespace HDevEngineTool +{ + public class HDevEngineToolRun : IToolRun + { + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + { + + } + } +} diff --git a/HDevEngineTool/Properties/AssemblyInfo.cs b/HDevEngineTool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..935274a --- /dev/null +++ b/HDevEngineTool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("HDevEngineTool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("HDevEngineTool")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("6112406a-a986-4a68-9d22-f0d7f0f81e02")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/HDevEngineTool/Properties/Resources.Designer.cs b/HDevEngineTool/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c819114 --- /dev/null +++ b/HDevEngineTool/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace HDevEngineTool.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HDevEngineTool.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/HDevEngineTool/Properties/Resources.resx b/HDevEngineTool/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HDevEngineTool/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HalconTool/FormHalconTool.Designer.cs b/HalconTool/FormHalconTool.Designer.cs index b66ce58..ab17fe1 100644 --- a/HalconTool/FormHalconTool.Designer.cs +++ b/HalconTool/FormHalconTool.Designer.cs @@ -30,31 +30,39 @@ namespace HalconTool { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormHalconTool)); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tabGrabImage = new Sunny.UI.UITabControl(); + this.grabFile = new System.Windows.Forms.TabPage(); + this.gbMultImg = new Sunny.UI.UIGroupBox(); + this.gbSignalImg = new Sunny.UI.UIGroupBox(); + this.chbRGB2Gray = new Sunny.UI.UICheckBox(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.btnRun = new Sunny.UI.UISymbolButton(); + this.txbFilePath = new Sunny.UI.UITextBox(); + this.btnSelectFilePath = new Sunny.UI.UISymbolButton(); + this.camera = new System.Windows.Forms.TabPage(); + this.uiMarkLabel2 = new Sunny.UI.UIMarkLabel(); + this.gbImageDisp = new Sunny.UI.UIGroupBox(); this.statusStrip = new System.Windows.Forms.StatusStrip(); this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); this.lb_Split = new System.Windows.Forms.ToolStripStatusLabel(); this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); - this.tabGrabImage = new Sunny.UI.UITabControl(); - this.grabFile = new System.Windows.Forms.TabPage(); - this.camera = new System.Windows.Forms.TabPage(); - this.gbImageDisp = new Sunny.UI.UIGroupBox(); - this.uiMarkLabel2 = new Sunny.UI.UIMarkLabel(); - this.uiLabel1 = new Sunny.UI.UILabel(); - this.txbFilePath = new Sunny.UI.UITextBox(); - this.btnSelectFilePath = new Sunny.UI.UISymbolButton(); - this.btnRun = new Sunny.UI.UISymbolButton(); - this.uiGroupBox2 = new Sunny.UI.UIGroupBox(); - this.uiGroupBox3 = new Sunny.UI.UIGroupBox(); - this.chbRGB2Gray = new Sunny.UI.UICheckBox(); + this.uiCheckBox1 = new Sunny.UI.UICheckBox(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.tbxImageDirectory = new Sunny.UI.UITextBox(); + this.btnSelectDir = new Sunny.UI.UISymbolButton(); + this.btnNext = new Sunny.UI.UISymbolButton(); + this.btnOld = new Sunny.UI.UISymbolButton(); + this.lbImageName = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); - this.statusStrip.SuspendLayout(); this.tabGrabImage.SuspendLayout(); this.grabFile.SuspendLayout(); + this.gbMultImg.SuspendLayout(); + this.gbSignalImg.SuspendLayout(); this.camera.SuspendLayout(); - this.uiGroupBox2.SuspendLayout(); + this.statusStrip.SuspendLayout(); this.SuspendLayout(); // // splitContainer1 @@ -72,10 +80,202 @@ namespace HalconTool // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.gbImageDisp); - this.splitContainer1.Size = new System.Drawing.Size(1111, 517); + this.splitContainer1.Size = new System.Drawing.Size(1111, 457); this.splitContainer1.SplitterDistance = 605; this.splitContainer1.TabIndex = 1; // + // tabGrabImage + // + this.tabGrabImage.Controls.Add(this.grabFile); + this.tabGrabImage.Controls.Add(this.camera); + this.tabGrabImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabGrabImage.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.tabGrabImage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tabGrabImage.ItemSize = new System.Drawing.Size(150, 40); + this.tabGrabImage.Location = new System.Drawing.Point(0, 0); + this.tabGrabImage.MainPage = ""; + this.tabGrabImage.Name = "tabGrabImage"; + this.tabGrabImage.SelectedIndex = 0; + this.tabGrabImage.Size = new System.Drawing.Size(605, 457); + this.tabGrabImage.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.tabGrabImage.TabIndex = 0; + // + // grabFile + // + this.grabFile.Controls.Add(this.gbMultImg); + this.grabFile.Controls.Add(this.gbSignalImg); + this.grabFile.Location = new System.Drawing.Point(0, 40); + this.grabFile.Name = "grabFile"; + this.grabFile.Size = new System.Drawing.Size(605, 417); + this.grabFile.TabIndex = 0; + this.grabFile.Text = "本地读取"; + this.grabFile.UseVisualStyleBackColor = true; + // + // gbMultImg + // + this.gbMultImg.Controls.Add(this.lbImageName); + this.gbMultImg.Controls.Add(this.btnOld); + this.gbMultImg.Controls.Add(this.btnNext); + this.gbMultImg.Controls.Add(this.uiCheckBox1); + this.gbMultImg.Controls.Add(this.uiLabel2); + this.gbMultImg.Controls.Add(this.tbxImageDirectory); + this.gbMultImg.Controls.Add(this.btnSelectDir); + this.gbMultImg.Dock = System.Windows.Forms.DockStyle.Fill; + this.gbMultImg.FillColor = System.Drawing.Color.White; + this.gbMultImg.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.gbMultImg.IsScaled = false; + this.gbMultImg.Location = new System.Drawing.Point(0, 188); + this.gbMultImg.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.gbMultImg.MinimumSize = new System.Drawing.Size(1, 1); + this.gbMultImg.Name = "gbMultImg"; + this.gbMultImg.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.gbMultImg.Size = new System.Drawing.Size(605, 229); + this.gbMultImg.Style = Sunny.UI.UIStyle.Custom; + this.gbMultImg.TabIndex = 4; + this.gbMultImg.Text = "多组图像"; + this.gbMultImg.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.gbMultImg.Click += new System.EventHandler(this.ImageSource_Click); + // + // gbSignalImg + // + this.gbSignalImg.Controls.Add(this.chbRGB2Gray); + this.gbSignalImg.Controls.Add(this.uiLabel1); + this.gbSignalImg.Controls.Add(this.btnRun); + this.gbSignalImg.Controls.Add(this.txbFilePath); + this.gbSignalImg.Controls.Add(this.btnSelectFilePath); + this.gbSignalImg.Dock = System.Windows.Forms.DockStyle.Top; + this.gbSignalImg.FillColor = System.Drawing.Color.White; + this.gbSignalImg.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.gbSignalImg.IsScaled = false; + this.gbSignalImg.Location = new System.Drawing.Point(0, 0); + this.gbSignalImg.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.gbSignalImg.MinimumSize = new System.Drawing.Size(1, 1); + this.gbSignalImg.Name = "gbSignalImg"; + this.gbSignalImg.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.gbSignalImg.Size = new System.Drawing.Size(605, 188); + this.gbSignalImg.Style = Sunny.UI.UIStyle.Custom; + this.gbSignalImg.TabIndex = 3; + this.gbSignalImg.Text = "单张图像"; + this.gbSignalImg.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.gbSignalImg.Click += new System.EventHandler(this.ImageSource_Click); + // + // chbRGB2Gray + // + this.chbRGB2Gray.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chbRGB2Gray.Checked = true; + this.chbRGB2Gray.Cursor = System.Windows.Forms.Cursors.Hand; + this.chbRGB2Gray.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chbRGB2Gray.IsScaled = false; + this.chbRGB2Gray.Location = new System.Drawing.Point(378, 135); + this.chbRGB2Gray.MinimumSize = new System.Drawing.Size(1, 1); + this.chbRGB2Gray.Name = "chbRGB2Gray"; + this.chbRGB2Gray.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.chbRGB2Gray.Size = new System.Drawing.Size(111, 29); + this.chbRGB2Gray.Style = Sunny.UI.UIStyle.Custom; + this.chbRGB2Gray.TabIndex = 3; + this.chbRGB2Gray.Text = "彩色转灰度"; + this.chbRGB2Gray.CheckedChanged += new System.EventHandler(this.chbRGB2Gray_CheckedChanged); + // + // uiLabel1 + // + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel1.Location = new System.Drawing.Point(27, 45); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(100, 23); + this.uiLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel1.TabIndex = 0; + this.uiLabel1.Text = "图像路径:"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // btnRun + // + this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRun.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRun.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRun.IsScaled = false; + this.btnRun.Location = new System.Drawing.Point(210, 129); + this.btnRun.MinimumSize = new System.Drawing.Size(1, 1); + this.btnRun.Name = "btnRun"; + this.btnRun.Size = new System.Drawing.Size(133, 35); + this.btnRun.Style = Sunny.UI.UIStyle.Custom; + this.btnRun.Symbol = 61515; + this.btnRun.TabIndex = 2; + this.btnRun.Text = "运行工具"; + this.btnRun.Click += new System.EventHandler(this.btnRun_Click); + // + // txbFilePath + // + this.txbFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txbFilePath.ButtonSymbol = 61761; + this.txbFilePath.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbFilePath.IsScaled = false; + this.txbFilePath.Location = new System.Drawing.Point(183, 42); + this.txbFilePath.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbFilePath.Maximum = 2147483647D; + this.txbFilePath.Minimum = -2147483648D; + this.txbFilePath.MinimumSize = new System.Drawing.Size(1, 16); + this.txbFilePath.Name = "txbFilePath"; + this.txbFilePath.Size = new System.Drawing.Size(405, 35); + this.txbFilePath.Style = Sunny.UI.UIStyle.Custom; + this.txbFilePath.TabIndex = 1; + this.txbFilePath.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.txbFilePath.TextChanged += new System.EventHandler(this.txbFilePath_TextChanged); + // + // btnSelectFilePath + // + this.btnSelectFilePath.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSelectFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSelectFilePath.IsScaled = false; + this.btnSelectFilePath.Location = new System.Drawing.Point(31, 129); + this.btnSelectFilePath.MinimumSize = new System.Drawing.Size(1, 1); + this.btnSelectFilePath.Name = "btnSelectFilePath"; + this.btnSelectFilePath.Size = new System.Drawing.Size(133, 35); + this.btnSelectFilePath.Style = Sunny.UI.UIStyle.Custom; + this.btnSelectFilePath.Symbol = 61462; + this.btnSelectFilePath.TabIndex = 2; + this.btnSelectFilePath.Text = "选择图像"; + this.btnSelectFilePath.Click += new System.EventHandler(this.btnSelectFilePath_Click); + // + // camera + // + this.camera.Controls.Add(this.uiMarkLabel2); + this.camera.Location = new System.Drawing.Point(0, 40); + this.camera.Name = "camera"; + this.camera.Size = new System.Drawing.Size(605, 477); + this.camera.TabIndex = 2; + this.camera.Text = "相机"; + this.camera.UseVisualStyleBackColor = true; + // + // uiMarkLabel2 + // + this.uiMarkLabel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiMarkLabel2.Location = new System.Drawing.Point(209, 206); + this.uiMarkLabel2.Name = "uiMarkLabel2"; + this.uiMarkLabel2.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); + this.uiMarkLabel2.Size = new System.Drawing.Size(189, 50); + this.uiMarkLabel2.TabIndex = 1; + this.uiMarkLabel2.Text = "该功能暂未实现"; + this.uiMarkLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // gbImageDisp + // + this.gbImageDisp.Dock = System.Windows.Forms.DockStyle.Fill; + this.gbImageDisp.FillColor = System.Drawing.Color.White; + this.gbImageDisp.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.gbImageDisp.IsScaled = false; + this.gbImageDisp.Location = new System.Drawing.Point(0, 0); + this.gbImageDisp.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.gbImageDisp.MinimumSize = new System.Drawing.Size(1, 1); + this.gbImageDisp.Name = "gbImageDisp"; + this.gbImageDisp.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.gbImageDisp.Size = new System.Drawing.Size(502, 457); + this.gbImageDisp.Style = Sunny.UI.UIStyle.Custom; + this.gbImageDisp.TabIndex = 0; + this.gbImageDisp.Text = "显示图像"; + this.gbImageDisp.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // // statusStrip // this.statusStrip.BackColor = System.Drawing.Color.White; @@ -84,7 +284,7 @@ namespace HalconTool this.lb_RunStatus, this.lb_Split, this.lb_RunTime}); - this.statusStrip.Location = new System.Drawing.Point(0, 518); + this.statusStrip.Location = new System.Drawing.Point(0, 458); this.statusStrip.Name = "statusStrip"; this.statusStrip.Size = new System.Drawing.Size(1111, 24); this.statusStrip.TabIndex = 95; @@ -106,190 +306,110 @@ namespace HalconTool this.lb_RunTime.Name = "lb_RunTime"; this.lb_RunTime.Size = new System.Drawing.Size(0, 19); // - // tabGrabImage + // uiCheckBox1 // - this.tabGrabImage.Controls.Add(this.grabFile); - this.tabGrabImage.Controls.Add(this.camera); - this.tabGrabImage.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabGrabImage.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; - this.tabGrabImage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.tabGrabImage.ItemSize = new System.Drawing.Size(150, 40); - this.tabGrabImage.Location = new System.Drawing.Point(0, 0); - this.tabGrabImage.MainPage = ""; - this.tabGrabImage.Name = "tabGrabImage"; - this.tabGrabImage.SelectedIndex = 0; - this.tabGrabImage.Size = new System.Drawing.Size(605, 517); - this.tabGrabImage.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; - this.tabGrabImage.TabIndex = 0; + this.uiCheckBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.uiCheckBox1.Checked = true; + this.uiCheckBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiCheckBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiCheckBox1.IsScaled = false; + this.uiCheckBox1.Location = new System.Drawing.Point(466, 102); + this.uiCheckBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiCheckBox1.Name = "uiCheckBox1"; + this.uiCheckBox1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiCheckBox1.Size = new System.Drawing.Size(111, 29); + this.uiCheckBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiCheckBox1.TabIndex = 8; + this.uiCheckBox1.Text = "彩色转灰度"; // - // grabFile + // uiLabel2 // - this.grabFile.Controls.Add(this.uiGroupBox3); - this.grabFile.Controls.Add(this.uiGroupBox2); - this.grabFile.Location = new System.Drawing.Point(0, 40); - this.grabFile.Name = "grabFile"; - this.grabFile.Size = new System.Drawing.Size(605, 477); - this.grabFile.TabIndex = 0; - this.grabFile.Text = "本地读取"; - this.grabFile.UseVisualStyleBackColor = true; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel2.Location = new System.Drawing.Point(27, 62); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(116, 23); + this.uiLabel2.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel2.TabIndex = 4; + this.uiLabel2.Text = "图像夹路径:"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // camera + // tbxImageDirectory // - this.camera.Controls.Add(this.uiMarkLabel2); - this.camera.Location = new System.Drawing.Point(0, 40); - this.camera.Name = "camera"; - this.camera.Size = new System.Drawing.Size(605, 477); - this.camera.TabIndex = 2; - this.camera.Text = "相机"; - this.camera.UseVisualStyleBackColor = true; - // - // gbImageDisp - // - this.gbImageDisp.Dock = System.Windows.Forms.DockStyle.Fill; - this.gbImageDisp.FillColor = System.Drawing.Color.White; - this.gbImageDisp.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.gbImageDisp.IsScaled = false; - this.gbImageDisp.Location = new System.Drawing.Point(0, 0); - this.gbImageDisp.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.gbImageDisp.MinimumSize = new System.Drawing.Size(1, 1); - this.gbImageDisp.Name = "gbImageDisp"; - this.gbImageDisp.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); - this.gbImageDisp.Size = new System.Drawing.Size(502, 517); - this.gbImageDisp.Style = Sunny.UI.UIStyle.Custom; - this.gbImageDisp.TabIndex = 0; - this.gbImageDisp.Text = "显示图像"; - this.gbImageDisp.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - // - // uiMarkLabel2 - // - this.uiMarkLabel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiMarkLabel2.Location = new System.Drawing.Point(209, 206); - this.uiMarkLabel2.Name = "uiMarkLabel2"; - this.uiMarkLabel2.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); - this.uiMarkLabel2.Size = new System.Drawing.Size(189, 50); - this.uiMarkLabel2.TabIndex = 1; - this.uiMarkLabel2.Text = "该功能暂未实现"; - this.uiMarkLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // uiLabel1 - // - this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiLabel1.Location = new System.Drawing.Point(27, 45); - this.uiLabel1.Name = "uiLabel1"; - this.uiLabel1.Size = new System.Drawing.Size(100, 23); - this.uiLabel1.TabIndex = 0; - this.uiLabel1.Text = "图像路径:"; - this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // txbFilePath - // - this.txbFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.tbxImageDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txbFilePath.ButtonSymbol = 61761; - this.txbFilePath.Cursor = System.Windows.Forms.Cursors.IBeam; - this.txbFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.txbFilePath.IsScaled = false; - this.txbFilePath.Location = new System.Drawing.Point(183, 42); - this.txbFilePath.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.txbFilePath.Maximum = 2147483647D; - this.txbFilePath.Minimum = -2147483648D; - this.txbFilePath.MinimumSize = new System.Drawing.Size(1, 16); - this.txbFilePath.Name = "txbFilePath"; - this.txbFilePath.Size = new System.Drawing.Size(405, 35); - this.txbFilePath.TabIndex = 1; - this.txbFilePath.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - this.txbFilePath.TextChanged += new System.EventHandler(this.txbFilePath_TextChanged); + this.tbxImageDirectory.ButtonSymbol = 61761; + this.tbxImageDirectory.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tbxImageDirectory.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tbxImageDirectory.IsScaled = false; + this.tbxImageDirectory.Location = new System.Drawing.Point(183, 59); + this.tbxImageDirectory.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tbxImageDirectory.Maximum = 2147483647D; + this.tbxImageDirectory.Minimum = -2147483648D; + this.tbxImageDirectory.MinimumSize = new System.Drawing.Size(1, 16); + this.tbxImageDirectory.Name = "tbxImageDirectory"; + this.tbxImageDirectory.Size = new System.Drawing.Size(405, 35); + this.tbxImageDirectory.Style = Sunny.UI.UIStyle.Custom; + this.tbxImageDirectory.TabIndex = 5; + this.tbxImageDirectory.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; // - // btnSelectFilePath + // btnSelectDir // - this.btnSelectFilePath.Cursor = System.Windows.Forms.Cursors.Hand; - this.btnSelectFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnSelectFilePath.IsScaled = false; - this.btnSelectFilePath.Location = new System.Drawing.Point(31, 129); - this.btnSelectFilePath.MinimumSize = new System.Drawing.Size(1, 1); - this.btnSelectFilePath.Name = "btnSelectFilePath"; - this.btnSelectFilePath.Size = new System.Drawing.Size(133, 35); - this.btnSelectFilePath.Symbol = 61462; - this.btnSelectFilePath.TabIndex = 2; - this.btnSelectFilePath.Text = "选择图像"; - this.btnSelectFilePath.Click += new System.EventHandler(this.btnSelectFilePath_Click); + this.btnSelectDir.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSelectDir.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSelectDir.IsScaled = false; + this.btnSelectDir.Location = new System.Drawing.Point(31, 157); + this.btnSelectDir.MinimumSize = new System.Drawing.Size(1, 1); + this.btnSelectDir.Name = "btnSelectDir"; + this.btnSelectDir.Size = new System.Drawing.Size(133, 35); + this.btnSelectDir.Style = Sunny.UI.UIStyle.Custom; + this.btnSelectDir.Symbol = 61462; + this.btnSelectDir.TabIndex = 7; + this.btnSelectDir.Text = "选择文件夹"; + this.btnSelectDir.Click += new System.EventHandler(this.btnSelectDir_Click); // - // btnRun + // btnNext // - this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnRun.Cursor = System.Windows.Forms.Cursors.Hand; - this.btnRun.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnRun.IsScaled = false; - this.btnRun.Location = new System.Drawing.Point(440, 129); - this.btnRun.MinimumSize = new System.Drawing.Size(1, 1); - this.btnRun.Name = "btnRun"; - this.btnRun.Size = new System.Drawing.Size(133, 35); - this.btnRun.Symbol = 61515; - this.btnRun.TabIndex = 2; - this.btnRun.Text = "运行工具"; - this.btnRun.Click += new System.EventHandler(this.btnRun_Click); + this.btnNext.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnNext.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnNext.IsScaled = false; + this.btnNext.Location = new System.Drawing.Point(361, 157); + this.btnNext.MinimumSize = new System.Drawing.Size(1, 1); + this.btnNext.Name = "btnNext"; + this.btnNext.Size = new System.Drawing.Size(121, 35); + this.btnNext.Style = Sunny.UI.UIStyle.Custom; + this.btnNext.Symbol = 61518; + this.btnNext.TabIndex = 9; + this.btnNext.Text = "下一张"; + this.btnNext.Click += new System.EventHandler(this.btnNext_Click); // - // uiGroupBox2 + // btnOld // - this.uiGroupBox2.Controls.Add(this.chbRGB2Gray); - this.uiGroupBox2.Controls.Add(this.uiLabel1); - this.uiGroupBox2.Controls.Add(this.btnRun); - this.uiGroupBox2.Controls.Add(this.txbFilePath); - this.uiGroupBox2.Controls.Add(this.btnSelectFilePath); - this.uiGroupBox2.Dock = System.Windows.Forms.DockStyle.Top; - this.uiGroupBox2.FillColor = System.Drawing.Color.White; - this.uiGroupBox2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiGroupBox2.IsScaled = false; - this.uiGroupBox2.Location = new System.Drawing.Point(0, 0); - this.uiGroupBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiGroupBox2.MinimumSize = new System.Drawing.Size(1, 1); - this.uiGroupBox2.Name = "uiGroupBox2"; - this.uiGroupBox2.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); - this.uiGroupBox2.Size = new System.Drawing.Size(605, 188); - this.uiGroupBox2.Style = Sunny.UI.UIStyle.Custom; - this.uiGroupBox2.TabIndex = 3; - this.uiGroupBox2.Text = "单张图像"; - this.uiGroupBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.btnOld.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOld.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOld.IsScaled = false; + this.btnOld.Location = new System.Drawing.Point(232, 157); + this.btnOld.MinimumSize = new System.Drawing.Size(1, 1); + this.btnOld.Name = "btnOld"; + this.btnOld.Size = new System.Drawing.Size(121, 35); + this.btnOld.Style = Sunny.UI.UIStyle.Custom; + this.btnOld.Symbol = 61514; + this.btnOld.TabIndex = 9; + this.btnOld.Text = "上一张"; + this.btnOld.Click += new System.EventHandler(this.btnOld_Click); // - // uiGroupBox3 + // lbImageName // - this.uiGroupBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.uiGroupBox3.FillColor = System.Drawing.Color.White; - this.uiGroupBox3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiGroupBox3.IsScaled = false; - this.uiGroupBox3.Location = new System.Drawing.Point(0, 188); - this.uiGroupBox3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiGroupBox3.MinimumSize = new System.Drawing.Size(1, 1); - this.uiGroupBox3.Name = "uiGroupBox3"; - this.uiGroupBox3.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); - this.uiGroupBox3.Size = new System.Drawing.Size(605, 289); - this.uiGroupBox3.Style = Sunny.UI.UIStyle.Custom; - this.uiGroupBox3.TabIndex = 4; - this.uiGroupBox3.Text = "多组图像"; - this.uiGroupBox3.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - // - // chbRGB2Gray - // - this.chbRGB2Gray.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.chbRGB2Gray.Checked = true; - this.chbRGB2Gray.Cursor = System.Windows.Forms.Cursors.Hand; - this.chbRGB2Gray.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.chbRGB2Gray.IsScaled = false; - this.chbRGB2Gray.Location = new System.Drawing.Point(300, 133); - this.chbRGB2Gray.MinimumSize = new System.Drawing.Size(1, 1); - this.chbRGB2Gray.Name = "chbRGB2Gray"; - this.chbRGB2Gray.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); - this.chbRGB2Gray.Size = new System.Drawing.Size(111, 29); - this.chbRGB2Gray.Style = Sunny.UI.UIStyle.Custom; - this.chbRGB2Gray.TabIndex = 3; - this.chbRGB2Gray.Text = "彩色转灰度"; - this.chbRGB2Gray.CheckedChanged += new System.EventHandler(this.chbRGB2Gray_CheckedChanged); + this.lbImageName.AutoSize = true; + this.lbImageName.Location = new System.Drawing.Point(183, 103); + this.lbImageName.Name = "lbImageName"; + this.lbImageName.Size = new System.Drawing.Size(0, 21); + this.lbImageName.TabIndex = 10; // // FormHalconTool // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1111, 542); + this.ClientSize = new System.Drawing.Size(1111, 482); this.Controls.Add(this.statusStrip); this.Controls.Add(this.splitContainer1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -300,12 +420,14 @@ namespace HalconTool this.splitContainer1.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); this.splitContainer1.ResumeLayout(false); - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); this.tabGrabImage.ResumeLayout(false); this.grabFile.ResumeLayout(false); + this.gbMultImg.ResumeLayout(false); + this.gbMultImg.PerformLayout(); + this.gbSignalImg.ResumeLayout(false); this.camera.ResumeLayout(false); - this.uiGroupBox2.ResumeLayout(false); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -327,8 +449,15 @@ namespace HalconTool private Sunny.UI.UILabel uiLabel1; private Sunny.UI.UISymbolButton btnSelectFilePath; private Sunny.UI.UISymbolButton btnRun; - private Sunny.UI.UIGroupBox uiGroupBox2; - private Sunny.UI.UIGroupBox uiGroupBox3; + private Sunny.UI.UIGroupBox gbSignalImg; + private Sunny.UI.UIGroupBox gbMultImg; private Sunny.UI.UICheckBox chbRGB2Gray; + private Sunny.UI.UICheckBox uiCheckBox1; + private Sunny.UI.UILabel uiLabel2; + private Sunny.UI.UITextBox tbxImageDirectory; + private Sunny.UI.UISymbolButton btnSelectDir; + private System.Windows.Forms.Label lbImageName; + public Sunny.UI.UISymbolButton btnNext; + public Sunny.UI.UISymbolButton btnOld; } } \ No newline at end of file diff --git a/HalconTool/FormHalconTool.cs b/HalconTool/FormHalconTool.cs index 48efaf5..7e5296b 100644 --- a/HalconTool/FormHalconTool.cs +++ b/HalconTool/FormHalconTool.cs @@ -12,6 +12,7 @@ using CommonMethods; using HalconDotNet; using ChoiceTech.Halcon.Control; using ViewROI; +using Sunny.UI; namespace HalconTool { @@ -195,8 +196,20 @@ namespace HalconTool // 窗体载入时还原参数 public void InitTool() { - txbFilePath.Text = myHalconTool.imagePath; chbRGB2Gray.Checked = myHalconTool.RGBToGray; + if(myHalconTool.workMode == WorkMode.ReadOneImage) + { + gbSignalImg.Enabled = true; + gbMultImg.Enabled = false; + txbFilePath.Text = myHalconTool.imagePath; + } + else + { + gbSignalImg.Enabled = false; + gbMultImg.Enabled = true; + tbxImageDirectory.Text = myHalconTool.imageDirectoryPath; + lbImageName.Text = myHalconTool.currentImageName; + } } /// /// 将数据传递给HalconToolInterface @@ -245,5 +258,98 @@ namespace HalconTool { myHalconTool.RGBToGray = chbRGB2Gray.Checked; } + + private void ImageSource_Click(object sender, EventArgs e) + { + UIGroupBox myGroupBox = (UIGroupBox)sender; + if (myGroupBox.Text == "单张图像") + { + if(myGroupBox.Enabled == true) + { + gbSignalImg.Enabled = false; + gbMultImg.Enabled = true; + myHalconTool.workMode = WorkMode.ReadMultImage; + } + } + else + { + if (myGroupBox.Enabled == true) + { + gbSignalImg.Enabled = true; + gbMultImg.Enabled = false; + myHalconTool.workMode = WorkMode.ReadOneImage; + } + } + } + + private void btnSelectDir_Click(object sender, EventArgs e) + { + FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog(); + if (Directory.Exists(myHalconTool.imageDirectoryPath)) + folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath; + folderBrowseDialog.Description = "请选择图像文件夹路径"; + if (folderBrowseDialog.ShowDialog() == DialogResult.OK) + { + myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath; + this.tbxImageDirectory.Text = myHalconTool.imageDirectoryPath; + myHalconTool.L_imageFile.Clear(); + string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath); + for (int i = 0; i < files.Length; i++) + { + FileInfo fileInfo = new FileInfo(files[i]); + if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif") + myHalconTool.L_imageFile.Add(files[i]); + } + if (myHalconTool.L_imageFile.Count > 0) + { + myHalconTool.currentImageIndex = 0; + myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex]; + myHalconTool.DispImage(); + myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]); + lbImageName.Text = myHalconTool.currentImageName; + + } + // lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张"; + + } + } + + public void btnNext_Click(object sender, EventArgs e) + { + if (myHalconTool.L_imageFile.Count > 0) + { + int oldIndex = myHalconTool.currentImageIndex; + if(++myHalconTool.currentImageIndex < myHalconTool.L_imageFile.Count) + { + myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex]; + myHalconTool.Run(SoftwareRunState.Debug); + myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]); + lbImageName.Text = myHalconTool.currentImageName; + } + else + { + myHalconTool.currentImageIndex = oldIndex; + } + } + } + + private void btnOld_Click(object sender, EventArgs e) + { + if (myHalconTool.L_imageFile.Count > 0) + { + int oldIndex = myHalconTool.currentImageIndex; + if (--myHalconTool.currentImageIndex >= 0) + { + myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex]; + myHalconTool.Run(SoftwareRunState.Debug); + myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]); + lbImageName.Text = myHalconTool.currentImageName; + } + else + { + myHalconTool.currentImageIndex = oldIndex; + } + } + } } } diff --git a/HalconTool/HalconTool.cs b/HalconTool/HalconTool.cs index 9c9aa27..8dbc7e1 100644 --- a/HalconTool/HalconTool.cs +++ b/HalconTool/HalconTool.cs @@ -10,6 +10,7 @@ using HalconDotNet; using ToolBase; using System.Diagnostics; using ViewROI; +using System.IO; namespace HalconTool { @@ -91,7 +92,23 @@ namespace HalconTool Stopwatch sw = new Stopwatch(); sw.Restart(); softwareRunState = softwareState; - DispImage(); + if(workMode == WorkMode.ReadOneImage) + { + DispImage(); + } + else + { + if (currentImageIndex <= L_imageFile.Count) + { + currentImageIndex = currentImageIndex == L_imageFile.Count ? 0 : currentImageIndex; + outputImageFilePath = L_imageFile[currentImageIndex]; + DispImage(); + currentImageName = Path.GetFileName(L_imageFile[currentImageIndex]); + if(softwareState == SoftwareRunState.Release) + currentImageIndex++; + } + } + SetToolStatusDisp(); sw.Stop(); runTime = $"工具运行时间:{sw.ElapsedMilliseconds.ToString()} ms"; diff --git a/PMAlignTool/PMAlign.cs b/PMAlignTool/PMAlign.cs index ff05c4e..68b743b 100644 --- a/PMAlignTool/PMAlign.cs +++ b/PMAlignTool/PMAlign.cs @@ -19,7 +19,7 @@ using System.Threading.Tasks; using CommonMethods; using HalconDotNet; using ToolBase; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using System.Windows.Forms; using Logger; using System.Diagnostics; diff --git a/PMAlignTool/PMAlignToolRun.cs b/PMAlignTool/PMAlignToolRun.cs index fa0f4cb..2e07664 100644 --- a/PMAlignTool/PMAlignToolRun.cs +++ b/PMAlignTool/PMAlignToolRun.cs @@ -25,7 +25,7 @@ using System.Text.RegularExpressions; using HalconDotNet; using FormLib; using Logger; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; namespace PMAlignTool { diff --git a/SDKCameraTool/BaslerCamera.cs b/SDKCameraTool/BaslerCamera.cs new file mode 100644 index 0000000..691acd0 --- /dev/null +++ b/SDKCameraTool/BaslerCamera.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SDKCameraTool +{ + public class BaslerCamera : ICamera + { + public bool bGammaEnable + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public Bitmap bmpImage + { + get + { + throw new NotImplementedException(); + } + } + + public int cameraID + { + get + { + throw new NotImplementedException(); + } + } + + public string cameraName + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public CamereaCompanyType CompanyType + { + get + { + throw new NotImplementedException(); + } + } + + public string CxpFilePath + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public float fExpTime + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public float fGain + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int Height + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public float iGamma + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public bool isFlowAcq + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public bool IsNeedCalibration + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int OffsetX + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int OffsetY + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public string sSerialNumber + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int TriggerCount + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int TriggerDelay + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public TriggerMode triggerMode + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public TriggerSouce triggerSource + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int Width + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public event EventHandler ImageTrigger; + + public int CloseCam() + { + throw new NotImplementedException(); + } + + public int OpenCam(CaptureMode captureMode) + { + throw new NotImplementedException(); + } + + public int Snap() + { + throw new NotImplementedException(); + } + } +} diff --git a/SDKCameraTool/FormSDKCameraTool.Designer.cs b/SDKCameraTool/FormSDKCameraTool.Designer.cs new file mode 100644 index 0000000..c9d5b64 --- /dev/null +++ b/SDKCameraTool/FormSDKCameraTool.Designer.cs @@ -0,0 +1,134 @@ +namespace SDKCameraTool +{ + partial class FormSDKCameraTool + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSDKCameraTool)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.uiSplitContainer1 = new Sunny.UI.UISplitContainer(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).BeginInit(); + this.uiSplitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1092, 32); + this.toolStrip1.TabIndex = 5; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 618); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1092, 22); + this.statusStrip.TabIndex = 4; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // uiSplitContainer1 + // + this.uiSplitContainer1.Cursor = System.Windows.Forms.Cursors.Default; + this.uiSplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSplitContainer1.Location = new System.Drawing.Point(0, 32); + this.uiSplitContainer1.Name = "uiSplitContainer1"; + this.uiSplitContainer1.Size = new System.Drawing.Size(1092, 586); + this.uiSplitContainer1.SplitterDistance = 632; + this.uiSplitContainer1.SplitterWidth = 11; + this.uiSplitContainer1.TabIndex = 6; + // + // FormSDKCameraTool + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1092, 640); + this.Controls.Add(this.uiSplitContainer1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Name = "FormSDKCameraTool"; + this.Text = "FormSDKCameraTool"; + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).EndInit(); + this.uiSplitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + private Sunny.UI.UISplitContainer uiSplitContainer1; + } +} \ No newline at end of file diff --git a/SDKCameraTool/FormSDKCameraTool.cs b/SDKCameraTool/FormSDKCameraTool.cs new file mode 100644 index 0000000..74be157 --- /dev/null +++ b/SDKCameraTool/FormSDKCameraTool.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SDKCameraTool +{ + public partial class FormSDKCameraTool : Form + { + public FormSDKCameraTool() + { + InitializeComponent(); + } + } +} diff --git a/SDKCameraTool/FormSDKCameraTool.resx b/SDKCameraTool/FormSDKCameraTool.resx new file mode 100644 index 0000000..f0a98ea --- /dev/null +++ b/SDKCameraTool/FormSDKCameraTool.resx @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 225, 19 + + + + + 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 + + + + 335, 19 + + \ No newline at end of file diff --git a/SDKCameraTool/ICamera.cs b/SDKCameraTool/ICamera.cs new file mode 100644 index 0000000..fbc5adc --- /dev/null +++ b/SDKCameraTool/ICamera.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SDKCameraTool +{ + public interface ICamera + { + /// + /// CaemraID + /// + [CategoryAttribute("CaemraID")] + int cameraID { get; } + /// + /// + /// + CamereaCompanyType CompanyType { get; } + /// + /// 相机名称 + /// + [CategoryAttribute("相机名称")] + string cameraName { get; set; } + /// + /// bmp图像 + /// + [CategoryAttribute("获取的图像")] + Bitmap bmpImage { get; } + /// + /// 曝光值 + /// + [CategoryAttribute("相机曝光")] + float fExpTime { get; set; } + /// + /// 触发方式 + /// + [CategoryAttribute("相机触发模式")] + TriggerMode triggerMode { get; set; } + /// + /// 触发源 + /// + [CategoryAttribute("相机触发源")] + TriggerSouce triggerSource { get; set; } + /// + /// 相机序列号,相机调用唯一标识 + /// + [CategoryAttribute("相机序列号")] + string sSerialNumber { get; set; } + /// + /// 增益 + /// + [CategoryAttribute("相机增益")] + float fGain { get; set; } + /// + /// 伽马 + /// + [CategoryAttribute("相机伽马值")] + float iGamma { get; set; } + /// + /// 伽马使能 + /// + [CategoryAttribute("相机伽马使能")] + bool bGammaEnable { get; set; } + /// + /// 感兴趣区域宽度 + /// + [CategoryAttribute("ROI宽")] + int Width { get; set; } + /// + /// 感兴趣区域高度 + /// + [CategoryAttribute("ROI高")] + int Height { get; set; } + /// + /// X偏移 + /// + [CategoryAttribute("X偏移")] + int OffsetX { get; set; } + /// + /// Y偏移 + /// + [CategoryAttribute("Y偏移")] + int OffsetY { get; set; } + /// + /// 触发拍照延时 + /// + int TriggerDelay { get; set; } + /// + /// 是否作为飞拍使用 + /// + bool isFlowAcq { get; set; } + /// + /// 该相机触发次数 + /// + int TriggerCount { get; set; } + /// + /// 该相机出来的图像是否需要经过标定 + /// + bool IsNeedCalibration { get; set; } + string CxpFilePath { get; set; } + /// + /// 打开相机 + /// + /// + int OpenCam(CaptureMode captureMode); + /// + /// 关闭相机 + /// + /// + int CloseCam(); + /// + /// 取图 + /// + /// + int Snap(); + /// + /// 被动触发事件 + /// + event EventHandler ImageTrigger; + } + + public enum CamereaCompanyType + { + HIKVision, + HIKVision_CXP, + Ajhua, + Basler, + FLIR, + File, + } + + [Serializable] + public class EventImageTrigger : EventArgs + { + public string cameraName { get; set; } + public Bitmap image { get; set; } + public int TriggerCount { get; set; } + } + public class EventIntPtrImageTrigger : EventArgs + { + public string cameraName { get; set; } + public IntPtr pImage { get; set; } + public int imageWidth { get; set; } + public int imageHeight { get; set; } + } + public enum TriggerMode + { + Off = 0, + On + } + + public enum TriggerSouce + { + HIKLine0 = 0, + HIKSoftWare = 1, + FLIRLine0 = 2, + FLIRSoftWare = 3, + SoftWareHIK = 7 + } + public enum CaptureMode + { + Positive, + CallBack + } + /// + /// 每次需从相机读取的参数 + /// + public class CameraInfo + { + } +} diff --git a/SDKCameraTool/Properties/AssemblyInfo.cs b/SDKCameraTool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d674b16 --- /dev/null +++ b/SDKCameraTool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("SDKCameraTool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SDKCameraTool")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("1c61f57d-1a36-4a98-b7dd-a65f2dbbe468")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SDKCameraTool/SDKCameraTool.csproj b/SDKCameraTool/SDKCameraTool.csproj new file mode 100644 index 0000000..b3fd4fb --- /dev/null +++ b/SDKCameraTool/SDKCameraTool.csproj @@ -0,0 +1,71 @@ + + + + + Debug + AnyCPU + {1C61F57D-1A36-4A98-B7DD-A65F2DBBE468} + Library + Properties + SDKCameraTool + SDKCameraTool + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + + + + + + + + + + + + + + Form + + + FormSDKCameraTool.cs + + + + + + + FormSDKCameraTool.cs + + + + + \ No newline at end of file diff --git a/ToolLib.VisionJob/FormJobManage.Designer.cs b/ToolLib.VisionJob/FormJobManage.Designer.cs index 8fc33ae..b1706cb 100644 --- a/ToolLib.VisionJob/FormJobManage.Designer.cs +++ b/ToolLib.VisionJob/FormJobManage.Designer.cs @@ -91,6 +91,7 @@ namespace ToolLib.VisionJob this.picNewJob.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.picNewJob.TabIndex = 2; this.picNewJob.TabStop = false; + this.picNewJob.Click += new System.EventHandler(this.picNewJob_Click); // // FormJobManage // diff --git a/ToolLib.VisionJob/FormJobManage.cs b/ToolLib.VisionJob/FormJobManage.cs index e9ecda6..d7870d9 100644 --- a/ToolLib.VisionJob/FormJobManage.cs +++ b/ToolLib.VisionJob/FormJobManage.cs @@ -8,6 +8,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; +using Sunny.UI; namespace ToolLib.VisionJob { @@ -42,5 +43,24 @@ namespace ToolLib.VisionJob string jobName = tabJobUnion.SelectedTab.Text; VisionJobParams.pVisionProject.Project[jobName].Run(); } + + private void picNewJob_Click(object sender, EventArgs e) + { + UIInputForm myUIInputForm = new UIInputForm(); + myUIInputForm.Label.Text = "输入新建Job名称"; + if (myUIInputForm.ShowDialog() == DialogResult.OK) + { + string newJobName = myUIInputForm.Editor.Text; + if(VisionJobParams.pVisionProject.Project.ContainsKey(newJobName)) + { + MessageBox.Show("新建流程名称重复,请重新建立!"); + return; + } + else + { + OperateProject.Instance.CreateNewJob(newJobName, true); + } + } + } } } diff --git a/ToolLib.VisionJob/FormToolBox.Designer.cs b/ToolLib.VisionJob/FormToolBox.Designer.cs index 5d481a9..235c066 100644 --- a/ToolLib.VisionJob/FormToolBox.Designer.cs +++ b/ToolLib.VisionJob/FormToolBox.Designer.cs @@ -30,9 +30,9 @@ namespace ToolLib.VisionJob { this.components = new System.ComponentModel.Container(); System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("流程", 1, 1); - System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Halcon窗口", 3, 3); - System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Basler"); - System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("HIKVision"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Halcon本地", 3, 3); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Basler相机"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("HIKVision相机"); System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("获取图像", new System.Windows.Forms.TreeNode[] { treeNode2, treeNode3, @@ -51,13 +51,19 @@ namespace ToolLib.VisionJob treeNode10, treeNode11, treeNode12}); - System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("找线"); - System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("找圆"); - System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("卡尺"); - System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("几何", new System.Windows.Forms.TreeNode[] { - treeNode14, - treeNode15, - treeNode16}); + System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("手眼标定"); + System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("标定与校准", new System.Windows.Forms.TreeNode[] { + treeNode14}); + System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("找线"); + System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("找圆"); + System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("卡尺"); + System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("几何", new System.Windows.Forms.TreeNode[] { + treeNode16, + treeNode17, + treeNode18}); + System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("Halcon引擎"); + System.Windows.Forms.TreeNode treeNode21 = new System.Windows.Forms.TreeNode("脚本", new System.Windows.Forms.TreeNode[] { + treeNode20}); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormToolBox)); this.tvw_ToolBox = new System.Windows.Forms.TreeView(); this.imageList1 = new System.Windows.Forms.ImageList(this.components); @@ -87,15 +93,15 @@ namespace ToolLib.VisionJob treeNode2.Name = "节点1"; treeNode2.SelectedImageIndex = 3; treeNode2.Tag = "HalconTool"; - treeNode2.Text = "Halcon窗口"; + treeNode2.Text = "Halcon本地"; treeNode3.ImageKey = "图像.png"; treeNode3.Name = "节点2"; treeNode3.SelectedImageIndex = 3; - treeNode3.Text = "Basler"; + treeNode3.Text = "Basler相机"; treeNode4.ImageKey = "图像.png"; treeNode4.Name = "节点3"; treeNode4.SelectedImageIndex = 3; - treeNode4.Text = "HIKVision"; + treeNode4.Text = "HIKVision相机"; treeNode5.ImageKey = "相机.png"; treeNode5.Name = "节点0"; treeNode5.SelectedImageKey = "相机.png"; @@ -122,30 +128,50 @@ namespace ToolLib.VisionJob treeNode13.ImageKey = "文件夹.png"; treeNode13.Name = "节点8"; treeNode13.Text = "匹配"; - treeNode14.ImageKey = "Line.png"; - treeNode14.Name = "FindLine"; - treeNode14.SelectedImageKey = "Line.png"; - treeNode14.Tag = "FindLine"; - treeNode14.Text = "找线"; - treeNode15.ImageKey = "Circle.png"; - treeNode15.Name = "FindCircle"; - treeNode15.SelectedImageKey = "Circle.png"; - treeNode15.Text = "找圆"; - treeNode16.ImageKey = "卡尺.png"; - treeNode16.Name = "Caliper"; - treeNode16.SelectedImageKey = "卡尺.png"; - treeNode16.Tag = "Caliper"; - treeNode16.Text = "卡尺"; - treeNode17.ImageKey = "几何_32.png"; - treeNode17.Name = "节点0"; - treeNode17.SelectedImageKey = "几何_32.png"; - treeNode17.Text = "几何"; + treeNode14.ImageKey = "校准_48.png"; + treeNode14.Name = "节点2"; + treeNode14.SelectedImageKey = "校准_48.png"; + treeNode14.Tag = "EyeHandCalib"; + treeNode14.Text = "手眼标定"; + treeNode15.ImageKey = "icons8_workflow_48.png"; + treeNode15.Name = "节点1"; + treeNode15.SelectedImageKey = "icons8_workflow_48.png"; + treeNode15.Text = "标定与校准"; + treeNode16.ImageKey = "Line.png"; + treeNode16.Name = "FindLine"; + treeNode16.SelectedImageKey = "Line.png"; + treeNode16.Tag = "FindLine"; + treeNode16.Text = "找线"; + treeNode17.ImageKey = "Circle.png"; + treeNode17.Name = "FindCircle"; + treeNode17.SelectedImageKey = "Circle.png"; + treeNode17.Text = "找圆"; + treeNode18.ImageKey = "卡尺.png"; + treeNode18.Name = "Caliper"; + treeNode18.SelectedImageKey = "卡尺.png"; + treeNode18.Tag = "Caliper"; + treeNode18.Text = "卡尺"; + treeNode19.ImageKey = "几何_32.png"; + treeNode19.Name = "节点0"; + treeNode19.SelectedImageKey = "几何_32.png"; + treeNode19.Text = "几何"; + treeNode20.ImageKey = "halcon_Icon.png"; + treeNode20.Name = "HDevEngine"; + treeNode20.SelectedImageKey = "halcon_Icon.png"; + treeNode20.Tag = "HDevEngineTool"; + treeNode20.Text = "Halcon引擎"; + treeNode21.ImageKey = "脚本1"; + treeNode21.Name = "脚本"; + treeNode21.SelectedImageKey = "脚本1"; + treeNode21.Text = "脚本"; this.tvw_ToolBox.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { treeNode1, treeNode5, treeNode9, treeNode13, - treeNode17}); + treeNode15, + treeNode19, + treeNode21}); this.tvw_ToolBox.SelectedImageIndex = 4; this.tvw_ToolBox.Size = new System.Drawing.Size(417, 543); this.tvw_ToolBox.TabIndex = 1; @@ -175,6 +201,11 @@ namespace ToolLib.VisionJob this.imageList1.Images.SetKeyName(15, "几何_32.png"); this.imageList1.Images.SetKeyName(16, "图像预处理_32.png"); this.imageList1.Images.SetKeyName(17, "相机.png"); + this.imageList1.Images.SetKeyName(18, "脚本1"); + this.imageList1.Images.SetKeyName(19, "脚本2"); + this.imageList1.Images.SetKeyName(20, "halcon_Icon.png"); + this.imageList1.Images.SetKeyName(21, "icons8_workflow_48.png"); + this.imageList1.Images.SetKeyName(22, "校准_48.png"); // // richTextBoxEx1 // @@ -208,6 +239,8 @@ namespace ToolLib.VisionJob this.imageListTool.Images.SetKeyName(9, "匹配.ico"); this.imageListTool.Images.SetKeyName(10, "模板.ico"); this.imageListTool.Images.SetKeyName(11, "相机.png"); + this.imageListTool.Images.SetKeyName(12, "脚本"); + this.imageListTool.Images.SetKeyName(13, "脚本2"); // // splitContainer1 // diff --git a/ToolLib.VisionJob/FormToolBox.resx b/ToolLib.VisionJob/FormToolBox.resx index a23f5a4..9ee98e1 100644 --- a/ToolLib.VisionJob/FormToolBox.resx +++ b/ToolLib.VisionJob/FormToolBox.resx @@ -118,15 +118,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 17, 17 + 157, 17 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADS - LgAAAk1TRnQBSQFMAgEBEgEAAXABAAFwAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABgAMAAaADAAEBAQABCAYAAVAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACY + PQAAAk1TRnQBSQFMAgEBFwEAAYgBAAGIAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABgAMAAcADAAEBAQABCAYAAWAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm @@ -153,368 +153,454 @@ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAH2dgAAH0AWcdmAFn - YAAB7QFnHZgBZ2AAAe0BZwyYAW0DZwHrDJgBZ0QAAf8BFgFqCI8BZwFKCDgBWQGaAf8EAAHtAWcKmAHs - B2cBkgqYAWdEAAEWCo8BZwFKCjgBmgQAAe0BZwmYA2cF/wJnAesJmAFnRAABagqPAWcBSgo4AVkEAAHt - AWcJmAFnAfcH/wJnCZgBZ0QAC48BZwFKCzgEAAHtAWcImAJnCf8CZwiYAWdEAAuPAWcBSgs4BAAB7QFn - B5gB6wFnBP8B8wHtAfQE/wFnCJgBZ0QAC48BZwFKCzgEAAHtAWcHmAJnA/8FZwP/AmcHmAFnRAALjwFn - AUoLOAQAAe0BZweYAWcD/wFtAWcCmAHtAWcBBwP/AWcHmAFnRAALjwFnAUoLOAQAAe0BZweYAWcD/wFn - AewDmAJnA/8BZweYAWdEAAuPAWcBSgtSBAAB7QFnB5gBZwP/AWcFmAFnA/8BZweYAWdEAAuPAWcMQwQA - Ae0BZweYAWcD/wFnBZgBZwP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweYAWcD/wFnAZIDmAHqAWcD/wFn - B5gBZ0QAC48BZwFJC3EEAAHtAWcHmAFnA/8CZwOYAWcBjQP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweY - AWcB6wP/BWcD/wJnB5gBZ0QAC48BZwFJC3EEAAHtAWcHmAHrAWcE/wH3AWcBvAT/AWcImAFnRAAMQwFJ - C3EEAAHtAWcImAFnAW0J/wJnCJgBZ0QAC6MBZgFJC3EEAAHtAWcImAHsAWcB8wf/AZIBZwOYBWcBmAFn - RAALxgFnAUkLcQQAAe0BZwmYA2cF/wNnA5gFZwGYAWdEAAvGAWcBSQtxBAAB7QFnCpgBbQdnAewEmAFn - A+MBZwGYAWdEAAvGAWcBSQtxBAAB7QFnDJgFZwaYBWcBmAFnRAALxgFnAUkLcQQAAe0BZxeYAW0DZwHs - AZgBZ0QAC8YBZwFJC3EEAAHwAWcdmAFnRAALxgFnAUkKcQFWBQAfZ0QAAbAKxgFnAUkKcQF4BgAFBwJn - D24BZwHsBQdFAAH/AbABgAjGAWcBSQhxAVYBeAH0CwAB8AFnD5oBZwH/bgABZw+aAWdvAAFnD5oBZ28A - EWdvAAH0D2cB/1MAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGYAXcGVQF3EgAL9BEACSUBTAgl - AW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGXA1UB/wwAAusB8gsAAQcC6wwA - BCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0BCUSAAL/EwADVRIAAf8DVQsA - AesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0AfEB/wkAAv8JAAH/AfEB9AYA - A1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/AyUUAAH0AyUFAAH/AbwBcwHx - Af8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0AQAC6wIAAfIB6wMAAesB7AEA - AZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEHAf8HAANVCAACVQ0AAlUBdwkA - AesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgAAf8BBwEcAfMB/wMAAvQDAAH/ - AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUB8wUA - AW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/AfMBHAEHAf8CAAG8AfIBHAH0 - BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMl - AwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkABlUKAAJVAXcIAAHrAfQBAALr - AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/BgAB/wG8AnMBvAH/BgAB9AEc - Ae8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAH/AyUGAAFvCyUHAAMl - AwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHrAfQBAALrAgAB8gHrAwAB6wHs - AQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHxAv8LAAJVAfQJAAlVBwABnQJV - CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwslBwABbwIlCQAB9AH/AfMDAALx - AwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAGTAiUBGgYA - AW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEA - AZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVVAf8KAANVCAAB6wH0AQAC6wIA - AfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkABFUMAAJVAfQIAAHrAfQBAALr - AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/CAACVQEIDAABlwJVCQAB6wH0 - DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcAAv8B6wHwDf8B7AHrAv8GAAH0 - AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHzFQABbwMlEAAC8RIAA1UVAANV - CAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALxAgAB/xAAAfIDVREAA1UPAALr - BwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALrAfQFAAG8AesB7w8ABCUB8w0A - AZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkAAfMFJRQAAvEBAAEIAfABHBMA - BlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEAAfIB/wHzAf8TAAH0DVUB/zAA - ARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEIIQABwghaAfNPAAHCBlUB9B0A - AfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZaAQgEAAGeBVoNAAH0AXMB8gLz - AfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEHFgAB8wEHBgABvAEUBLgBkA0U - BLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIAAv8CAAH/AwAB/wMAAfMBBwYA - AbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUAAf8B8wHwAgAB8wFyAbwCBwEA - Af8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4ABFodAAH/AfQCAAHzAgcBvAH0 - AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgUAZAC2QGzApACuAGQAxQBuAGQ - ARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/AXMBBwH/CQABvAEUAbgHFAGQ - AtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHyAe8B9AHyARwB/wHwAf8BBwHy - AfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/JAAB/wG8AXMB/wH0AXIB/wHv - AfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUAGFUBmAYAA1oUAANaCQAIBwHv - DwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZAZoBAAGaAVkBGgoAG1UBmAIA - Af8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0AfMB9AHzAfQB8xAAAZoBWQH0 - AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHzAQcB8wEHAfMBCAIAAfIBvAHy - AbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHzAVkBmgH/AZoKABxVAZgBAANa - AcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/AfQB8gHwAfIBvA0AAvQBAAGa - AXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcAAfQBcwH2AXID/wG8AXMB7wEc - AQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEaARsBWQEaCgAcVQIAAf8DWg8A - BFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEHAQABBwH/AQcB/w0AAZoBegH/ - ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANaAQAB/wNaBgABBwHyAfMBvAH/ - ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZAXoB/wEbAXoBWQF6Af8BmgFZ - ARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHzAv8B8wL0AQcBvAH0AXMB9AEH - AfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEbAgAB8wNaAwAB/wgAAbwB8AEA - AvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6BVkBmgH/DAAVVgGYCQABfANa - EgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/EAAB9gJ6ARoC/wHzAxoB9A4A - FFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcAAfQB8ggAAfcEAAH/AXoBWQF6 - AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/AfQC8wH0Af8B8wEIAf8FAAHz - AQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARaCgAB8wEHBgAB/wEHAXIBcwEc - Ae8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYADlYBlxIABVoMAARaAZ4KAAHz - AQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/FAAFWgoABVoLAAH/AVAB7wIH - AfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/A/MB9A4AAf8D8wH0JgAJVgEI - GgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKeAf//ADMAAfMDWigAAfMDWjAA - AfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMAAf8CWgH0AQAB8wNaAgABCAJa - EQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4AAWwC9AH/AwAB/wGuEgAdWQcA - AfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHkAVoRAAFaAf8KAAFsAvQBZgQA - AfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFmEgAdWQoAAfQBWhoAAVoUAAHC - AVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFsBPQBvAH3AgABZgL0EwAdWQwA - Af8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/AVoWAAFaFwABWgUAAa4B8wX0 - AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8Aa4B/wGuAQkBkQG8EAAdWQ8A - AfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/Aa4BCQFsAW0BuwHtDAAdWRAA - Af8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0Aa4B9AFmAv8CCQJmDAAdWREA - Af8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGuAQcBZgH/Ae8BbAG7AfcLAB1Z - EgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGuAvQBtQFsAfcB/wGuAfALAB1Z - EwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1ZFAAB/wFaDwABWhYAAfQBWg0A - AZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGeAVoVAAFaDwABZgH/AgAB9wG8 - Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFaFQABbAH/AWwBrgb0AWwB/wUA - AzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFsBAAdMRgAAf8BWg0AAloRAAFa - AZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIAEjElAAH0AVoNAAJaDQABWgHk - IQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQAAWwB9AFsAwARMScAAfMBWgEA - AVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAAAf8Bu20AAbIRAAGybAABsgEJ - AbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgAAQlqAAH/AgABswIAAQkCAAHz - AgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/AgABswIAAQkCAAHzAgAB/wgA - ARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKzCQAB/wIJAf8CCQH0AgABGQEJ - ARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7GhkBigUAAf8UAAEZCQAB/wIJ - AQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGyAfQIAAG6AbIEAAGzAYoCZQK7 - GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJDLIEAAGzAYoBuwJlAbsBCRgZ - AYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQAAbMBigG7ARkCZQG7AQkJGQEJ - DBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkAAboB9BkAAbMBigG7AhkCZQG7 - CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkAAbMBigG7AxkCZQG7BhkBuwJl - AbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGzBAABswGKAbsEGQJlAbsFGQFm - AmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyyBAABswGKAbsFGQJlAbsDGQG7 - AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQABPQBswGyAfQIAAG6AbIEAAGz - AYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWyFAAB8wIJEwABugH0AgAIsgH0 - CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZAYoFAAH/AgABswIAAQkCAAHz - AgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1A2UFGQJlAbsDGQEJAmUDGQGK - BQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIAAbIGAAyyBAABswGKAbsQGQEJ - AWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHzEgkLAAG6AfQCAAGyFgABswGK - AbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDAAB8wEJDv8DCQsA - AboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/AbIVtAGyCwAB8wEJDgADCQoA - B7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGyFwABsgoAAfMBCQMAAgkJAAMJ - CQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGyF7MBsgoAAfMBCQMAAgkJAAMJ - CQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7FhkBigQAAboXAAGyCgAB8wEJ - DgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6FwABsgoAAfMBCQ4AAwkJAAEJ - CLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUAH4oEAAG6BAABsgH0CwABCQGy - BAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMAAbJnAAG6AgABsgMAAbIJAAGy - AwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUAAboBs3kAAboDsgEJbQABQgFN - AT4HAAE+AwABKAMAAYADAAGgAwABAQEAAQEGAAEKFgAD/wEABP8BgAsABP8MAAT/DAAE/wwAAfACAAEP - DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHw - AgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEP - DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPAYALAAHwAgABDwHA - AgABAQgAAfACAAEPAf4CAAE/CAAF/wIAAX8IAAX/AgABfwgABf8CAAF/CAAF/wIAAX8IAAH/AfABBwb/ - AeABAwb/AcABAQb/AYABAAb/AgABfwH/AeABAwH/Af4CAAE/BP8B/gEPAfgBPwH/AYABAAH/AfwBDwH4 - AR8E/wH4AT8B/gEPAf8BHwH8AX8B+AE/Af4BDwH/Af4BfwH/AfAC/wEPAf8BPwH+AX8B8AL/AQcB/wH+ - AX8B/wHxAv8BhwH/ASYBcgF/AeEC/wGDAeMB/gF/AccB4wL/AcMB/wEmAXIBfwHDAv8BwwHgAf4BfwEH - AcMB+wH/AeMB/wEmAXIBfwHDAv8B4QH4AT4BfAEfAccB+QH/AfEB/wEmAXIBfwGHAcABAwHxAf4BDgFw - AX8BxwH4Af8B8QH/ASYBcgF/AYcBwAEDAfAB4QGCAUEBhwGPAfgBPwH4Af8BJgFyAX8BjwHAAQMB+AHj - AeABBwKPAfgBHwH4Af8BJgFyAX8BjwHAAQMB+AHhAfgBHwKPAfgBDwH4Af8BJgFyAX8BDwHAAQMB+AHh - AfwBPwGHAY8B+AEDAfgB/wEmAXIBfwEPAcABAwH4Af8BwgFDAf8BjwH4AQMB+AH/ASYBcgF/AQ8BwAED - AfgB/wGOAXEB/wGPAfgBBwH4Af8BJgFyAX8BDwHAAQMB+AH+AT4BfAF/AY8B+AEPAfgB/wEmAXIBfwEP - AcABAwH4Af4CfgF/AY8B+AEfAfgB/wEmAXIBfwGPAcABAwH4Af8B/gF/Af8BjwH4AX8B+AH/ASYBcgF/ - AY8BwAEDAfgB/wH+AX8B/wHHAfgB/wHxAf8BPwH+AX8BhwHAAQMB8AH/Af4BfwH/AccB+wH/AfEB/AIA - AR8BhwHAAQMB8AH/Af4BfwH/AcMC/wHjAfwCAAEfAcMC/wHhAf8B/gF/Af8B4wL/AeMB/AIAAR8BwwL/ - AeMB/wH+AX8B/wHxAv8BxwH8AgABHwHhAv8BwwH/Af4BbwH/AfAC/wGPAf8B5wHzAf8B8AL/AYcB/wH+ - AW8B/wH4AT8B/gEPAf8C4wH/AfgBPwH+AQ8B/wH+AUcB/wH8AQ8B+AE/Af8B8AEHAf8B/AEPAfgBHwH/ - Af4BRwL/AgABfwH/AfgBDwH/Af4CAAE/Af8B/gFDAv8BgAEABv8CAAF/Bf8B8AEHBv8BwAEBDv8B/AEf - Df8B4AT/AYABHwn/AcABPwL/Af4BAAEHCf8BwAEPAv8B/AEAAQMB/wHwAX8B/gEPBP8BwAEHAv8B+AEP - AQMB/wHgAX8B/gEHAeACAAEHAcABAQL/AfABPwHDAf8B5wL/AecB4AIAAQcBwAEAAX8B/wHgAf8B8wH/ - AeYBBgFuAecB4AIAAQcBwAEAAT8B/wHhA/8B5wHGAQgB5wHgAgABBwHAAQABDwH/AcMD/wHmAQwBAAEn - AeACAAEHAcABAAEDAf8BwwT/AYABsAE/AeACAAEHAcACAAH/AYcD/wH8AgAB/wHgAgABBwHAAgABfwGH - BP8BgAEyAf8B4AIAAQcBwAIAAR8BjwL/AR8B8AIAAQ8B4AIAAQcBwAIAAQcBjwH/Af4BDwX/AeABCAH/ - AcACAAEDAQ8B/wH8AQcB+AIAAR8B/wHgAQAB/wHAAgABAQEPAf8B/AEDAfgBGAEAAR8B/wHgAQAB/wHA - AgABAQEPAf8B+AEBAfgCAAEfAf8CIAH/AcACAAEBAQ8B/wHwAQAB/gEAASIBHwH/ASABAAH/AcACAAED - AQ8B/wHgAQAB/AEAAQIBHwH/AgAB/wHAAgABBwGPAf8B4QEQAfwCAAE/Af8BAAEBAf8BwAIAAQ8BjwH/ - AeMBGAH8ASABAAE/Af8BAAEBAf8BwAIAAT8BjwH/AfYBHQH+AUABAAE/Af8BiAEDAf8BwAIAAf8BhwH/ - Af4BHwH+AQABAgF/Af8BgAEPAf8BwAEAAQEB/wHHAf8B/AE/AecBgAEPAecB+wHAAf8BzwHAAQABBwH/ - AcMB/wH8AT8B5wGAAQMB5wH7AeABHwHPAcABAAEfAf8B4QH/AfgBfwHnAeABBwHnAfsB+AEfAc8BwAEA - AX8B/wHgAf8B8AF/AecB+AEfAecB+AE/Af4BDwHAAQAC/wHwAX8B4AH/AeABfwH+AQcB+AE/Af4BDwHA - AQMC/wH4AR8BgQH/AfABfwH+AQ8E/wHAAQ8C/wH8AQABAwn/AcABPwL/Af4BAAEHCf8B4AF/A/8BgAEf - Cf8B8QT/AfAm/wHDBP8B/AE/Bf8BwAIAAQMBywT/AfABhwL/AY8C/wHAAgABAQHDBP8BhAExAv8BHwL/ - AcACAAEBAeEE/wEeATwBfwH+ARwC/wHAAgABAQH8A/8B/gF/Af8BPwH8ATwC/wHAAgABAQH+AX8C/wH8 - Av8BnwH4AXgC/wHAAgABAQH/AT8C/wH5Av8B3wHwAfgC/wHAAgABAQH/AZ8C/wH7Av8BzwLwAv8BwAIA - AQEB/wHPAv8B8wL/Ae8B4AExAv8BwAIAAQEB/wHnAv8B9wL/AecB4AEBAv8BwAIAAQEB/wHzAv8B9wL/ - AfcBwAEAAv8BwAIAAQEB/wH5Av8B9wL/AfcB4AEAAT8B/wHAAgABAQH/AfwC/wHDAv8BwwHGAQABAwH/ - AcACAAEBAf8B/gF/Af8BywL/AcsBzAEAAQMB/wHAAgABAQL/AT8B/wHDAv8BwwGMAYABAQH/AcACAAEB - Av8BnwH/AeMC/wHjAfgBwAEBAf8BwAIAAQEC/wHPAf8B9wL/AfcB+QHwAQEB/wHAAgABAQL/AecB/wH3 - Av8B5wH/AcABAAF/AcACAAEBAv8B8wH/AfMC/wHvAf8B5gEAAR8BwAIAAQEC/wH5Af8B+wL/Ac8C/wGA - AQcBwAIAAQEC/wH8Af8B+QL/Ac8C/wHIAQMBwAIAAQEC/wH+AX8B/AL/AZ8C/wH+AQABwAIAAQMD/wE/ - Af4BfwH/AT8D/wGAAcABAAEPBP8BnwH/AT8B/gF/A/8BwQHAAQABDwT/AcMB/wGMATgE/wHxAcABAAEf - BP8BywH/AeABgwz/AcMB/wH8AT8M/wHjAf8B/gE/Jf8B/gL/AT8M/wH+Av8Bvwz/AfwCAAEfDP8B+QFt - Ab8B3wz/AfsBbQG/Ad8B8AEYAQwBDwL/AQABDwHAAgABAQH7AW0BvwHfAfABGAEMAQ8B/wH+AQABDwGA - AwAB+AIAAR8B8AEYAQwBDwH8AQABPwHPBAAB+wL/Ad8B8QEYAYwBTwH5Af4BPwHPBAAB+wL/Ad8B8AEY - AQwBDwH5Af4BAAEPBAAB+wL/Ad8B8AEYAQwBDwH5Af8BAAEPBAAB+wL/Ad8B+AE4ARwBDwH5A/8EAAH7 - Av8B3wH8Af4BPwEfAfkD/wQAAfsC/wHfAfwCAAEfAfkB/wEAAQ8EAAH7Av8B3wH8AgABHwH5Af4BAAEP - BAAB+wL/Ad8B/AIAAR8B+QHgAT8BzwQAAfgCAAEfAf8B/gE/Af8B+QGAAT8BzwQAAfsBbQG/Ad8B/wH+ - AT8B/wH5Ab4BAAEPBAAB+wFtAb8B3wH/AgABfwH5Ab8BAAEPBAAB+wFtAb8B3wH+AgABPwH5Ab8C/wQA - AfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAHwAgABDwH+AX8B/gE/AfABDwEAAQ8EAAH3Av8B9wH+AXMB/gE/ - AeABDgEAAQ8EAAHwAgABBwH+AXMB/gE/AeMBwAE/Ac8EAAH3Av8B9wH+AX8B/gE/AeMBwAE/Ac8EAAH3 - Av8B9wH+AX8B/gE/AeABDgEAAQ8EAAH3Av8B9wH+AgABPwHwAQ8BAAEPAYADAAH3AZ8B/AH3Af4CAAE/ - BP8BgAIAAQEB9wFfAf0Bdwz/AfYB7wH7AbcM/wHxAe8B8wGHDf8B8wHnDv8B/AEfDf8L + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEADPQCdQJTAXUBUwJ1 + AfML9GAACfQB8wpTAXUBUwF1CfQXAAH/AfMB/0YACPQQUwHzB/QCAAH/CvQB/wgAAf8BBwGRAfcB9BAA + Av8B8wEaAb0CGgEbAfUB/ysAB/QQUwF6AVMBdQb0AQAB/wuNAfMHAAH/AfcB7QGdAZEBjQH0DgAB/wF1 + CCYBTQEbKgAG9BJTAXUCUwX0AQAB/wHvAbQE2wPcAbsBjQH0BgAB/wEHAe0DnQGRAfcB9AsAAfUBlAwm + AXUBGygABfQWUwF1BPQCAAH/AY0E2wPcAbUB8AYAAf8B9wHtBZ0BkQGNAfQJAAEbBSYBlAG9AfUB/wEb + AZoBTQQmAZoB/yYABPQBdRdTBPQDAAG8AbUD2wLcAbsB7wG8Av8B8wEAAfIBAAEHAZIHnQGRAfcB/wYA + Af8BGgFNAiYBTQGaCP8BGgF1AyYBlAH/JQAD9AEaGFMBdQP0AwAB9AGNAboC2wLcAY0B8gGNAvQB7gEA + Ae8BAAH3CZ0B7AHzBgABGwMmAXUM/wG9AyYBmiUAA/QaUwGaAvQEAAHxAbUC2wHcAbUB7wH/AfMC/wH0 + AQAB9AEAAfAB7QedAZEB7wH/BQAB/wFNAiYBlAP/Ab0BdQFNAiYCTQGaAfYC/wG9AyYBGyQAAvQB8wJT + A/8EUwP/AnoC/wVTARoD/wJTAvQFAAHvAboB2wHcAY0B/wgAAf8B7gHtBZ0BkQGSAf8GAAGaAiYBdQP/ + AXUJJgEbAv8BvQImAXUkAAL0A1MD/wRTA/8B9gFTAv8FUwT/AlMC9AUAAfMBjQHbAbUBvAoAAf8BvAHt + A50BkQHvAf8GAAH1AyYB9AH/AfYBTQMmAU0DdQMmAU0BGwL/AXUCJgEbIwAC9ANTA/8FUwP/AVMK/wGa + A1MB9AUAAf8CtQGNAfULAAH/Ae4B7QGdAZEBjQH/BwABGgImAZoC/wF1AyYBvQX/AeMDJgH1Af8BGgIm + AU0B/yIAAvQDUwP/BVMD/wFTA/8BUwb/BFMB9AYAAf8B9wHzDQAB/wHwAY0BBwH/CAABlAEmAU0C/wH2 + AU0BJgFNAfQG/wH1AeMCJgGUAv8BTQImAfUiAAH0ARoDUwP/BVMD/wFTCv8EUwH0BwAB7w8AAfQBjQHw + CQABTQEmAU0C/wGUAiYBlAL/ARsBTQEmAZQD/wImAU0C/wGaAiYBGyIAAfQBmgNTC/8BUwT/AlMBegP/ + BFMB9AUAAv8B7wEAAf8MAAHzAe8BjQH3AfAB/wcAAU0BJgF1Av8BTQImARsB/wG9BCYBlAL/AXUBJgFN + Av8BGwImARoiAAH0AXoDUwGaCv8CUwT/AVME/wRTAfQFAAEHAbwB7wH0AfcMAAHvAfQBjQHzAfcB9AcA + AiYBdQL/AyYC/wGUASYBRgFEAiYC/wF1AiYD/wImAb0iAAH0AZoEUwr/AZoBUwT/AVMD/wVTAfQFAAH1 + Ae8BjQGSAfMOAAGNAfQJAAImAXUC/wFNAiYB9QH/AZoBJgElARQBRAFNAv8BdQImAv8B9QImARoiAAH0 + ARoBdQNTA/8EUwGaA/8CUwf/BVMB9AcAAQcB9A0AAf8B8AGNAQcB9AH/BwABTQEmAXUC/wFNAiYBvQH/ + AfQDJgEUAW0C/wFNASYBTQL/Ab0CJgEaIgAC9AF1A1MD/wVTA/8CUwT/AVMC/wVTAfQCAAHwBfcEkgHv + Af8GAAH/AQcBjQOOAY0B7wHzAf8FAAHjASYBTQL/Ab0CJgF1Av8B9AGaAZQBkwESAewBvQImAXUC/wF1 + AiYB8yIAAvQEUwP/BVMD/wJTAfYG/wVTAfQCAAGNAbwDGwHDBJoBjQH0BQAB/wGNAY4FlAGOAY0B8wUA + AZQCJgH2Av8BTQImAb0F/wHzARIBRAImAb0C/wMmAf8iAAL0BFMD/wVTA/8DUwT/AVMB9gRTAvQCAAGN + AbwDGwHDBJoBjQH0AQAB/wH1AgABvAGOAZQFsQGUAY4B7wH/BAABGgImAXUC/wGaAyYBdQG9AfUB9gEb + AZQBTAEUAUQBdQL/AZoCJgF1Af8iAAL0AfMBdQJTA/8BwwRTA/8DUwX/BVMC9AIAAY0BvAMbAcMEmgGN + AfQBAAHzAY0B9AEAAfcClAaxAZQBjgHzBAAB/wMmAb0C/wGUCiYBFAFtAv8BTQImAfUjAAP0GlMBmgL0 + AgABjQG8AxsBwwSaAY0B8gL0AQcB7wH0AY0BlAexAZQBjgHuBQABGgImAU0B9QL/AZoBTQcmAXUBBwGL + AbMBtAFuAUYBlCQAA/QBmgF1GFMD9AIAAY0BvAMbAcMEmgaNAQcBjgGUB7EBlAGOAQcGAAGUAiYBTQH1 + A/8BvQJNASYBTQGUAfUC/wG0ArMCrQEJJAAE9BhTBPQCAAGNAbwDGwHDBJoBjQH0AQAB/wIHAf8BjQGU + B7EBlAGOAfAGAAH1AU0CJgFNAb0K/wH0AewBrQKzAa0BswH0IwAF9BZTAXUE9AIAAY0BvAMbAcMEmgGN + AfQBAAH0AQcB/wEAAe8ClAaxAZQBjQH/BwAB/wFNAyYBdQj/AZoCJgKtArMBrQG0IwAG9AF1E1MBdQX0 + AgABjQG8AxsBwwSaAY0B9AUAAfEBjQKUBLEBlAGOAQcJAAH1AZQEJgFNBHUB4wFNAyYBrgKtAZEB9wH/ + IwAH9BJTAXUG9AIAAY0BvAMbAcMDmgEaAY0B9AUAAf8BBwGNBZQBjgGNAf8LAAEbDCYBmgH/AbQBrQH/ + AeoB7CMACPQBUwF1DlMBGgf0AgAB8wEHCO8B8AH/BgAB/wHxAe8BjQGOAY0B9wG8Af8NAAH/ARoBlAF1 + AU0CJgJNAZQBGgH1AgAB/wHzAQAB8wHxIwAJ9AHzDVMJ9BcAAf8B9AH/RgAM9AF1AVMBdQNTAXUBUwEa + C/RgACD0gQAfZ2AAAfQBZx2YAWdgAAHtAWcdmAFnYAAB7QFnDJgBbQNnAesMmAFnJwAB/wGUGwAB/wEW + AWoIjwFnAUoIOAFZAZoB/wQAAe0BZwqYAewHZwGSCpgBZwUAAW0V6gHyCwAB/wG9AwAB8waaARoB/w8A + ARYKjwFnAUoKOAGaBAAB7QFnCZgDZwX/AmcB6wmYAWcEAAEHF+oOAAEaC5oB/w0AAWoKjwFnAUoKOAFZ + BAAB7QFnCZgBZwH3B/8CZwmYAWcEAAPqEvEBBwLqDAAB/w6aARsMAAuPAWcBSgs4BAAB7QFnCJgCZwn/ + AmcImAFnBAAD6hIAAfIC6gsAAf8DmgtuApoBGgEbAXoJAAuPAWcBSgs4BAAB7QFnB5gB6wFnBP8B8wHt + AfQE/wFnCJgBZwQAA+oSAAHyAuoKAAH/A5oB6wv0AfcCmgEbCgALjwFnAUoLOAQAAe0BZweYAmcD/wVn + A/8CZweYAWcEAAPqEgAB8gLqCgAEmgHyAe8J9AHxAfQDmgH/CQALjwFnAUoLOAQAAe0BZweYAWcD/wFt + AWcCmAHtAWcBBwP/AWcHmAFnBAAD6gYAAewEAAHxAf8FAAHyAuoIAAIaBJoB8gEHC/QEmgkAC48BZwFK + CzgEAAHtAWcHmAFnA/8BZwHsA5gCZwP/AWcHmAFnBAAD6gUAAesB6gFtAgAB/wLqAfQEAAHyAuoHAAH/ + AnoEmgHyAQcD9AEHAfcG9ASaAf8IAAuPAWcBSgtSBAAB7QFnB5gBZwP/AWcFmAFnA/8BZweYAWcEAAPq + BAAB6wLqBAAB8gLqAfQDAAHyAuoIAAJ6BJoB8gEHAvQBBwG8Ae0B9AG8BPQEmgEbCAALjwFnDEMEAAHt + AWcHmAFnA/8BZwWYAWcD/wFnB5gBZwQAA+oDAAHrAuoGAAHyAuoB9AIAAfIC6ggAAfQFmgHyAQcB9ALt + AfQBtQH0ApID9AWaCAALjwFnAUkLcQQAAe0BZweYAWcD/wFnAZIDmAHqAWcD/wFnB5gBZwQAA+oCAAEH + AuoB/wcAAZIC6gIAAfIC6ggAARsFmgHyAQcC9wL0AbUC9ALtAvQFmggAC48BZwFJC3EEAAHtAWcHmAFn + A/8CZwOYAWcBjQP/AWcHmAFnBAAD6gMAAfcC6gH/BQABBwLqAf8CAAHyAuoIAAEaBZoB8gEHAu0C9AHt + AQcB9ALtAvQFmggAC48BZwFJC3EEAAHtAWcHmAFnAesD/wVnA/8CZweYAWcEAAPqBAABkgLqAf8DAAEH + AuoB/wMAAfIC6ggAARoFmgHyAQcB9ALtAfQBkgL3AbUD9AWaCAALjwFnAUkLcQQAAe0BZweYAesBZwT/ + AfcBZwG8BP8BZwiYAWcEAAPqBQAB9wHqAesCAAH/AuoB/wQAAfIC6ggAARsFmgHyAQcC9AGSAfQBBwHt + Ae8E9AWaCAAMQwFJC3EEAAHtAWcImAFnAW0J/wJnCJgBZwQAA+oGAAHvBAAB9AH/BQAB8gLqCAAB/wGa + AfYDmgHyAQcF9AG1BfQFmggAC6MBZgFJC3EEAAHtAWcImAHsAWcB8wf/AZIBZwOYBWcBmAFnBAAD6hIA + AfIC6gkAAZoB/wHDApoB8gEHB/QB7QNtBJoB9AgAC8YBZwFJC3EEAAHtAWcJmANnBf8DZwOYBWcBmAFn + BAAD6hIAAfIC6gkAARoEmgHyAQcG9AEHA7sBbgSaCQALxgFnAUkLcQQAAe0BZwqYAW0HZwHsBJgBZwPj + AWcBmAFnBAAD6hIAAfIC6gkAAf8EmgHyAQcG9AHsArsBcwOaARoBGwkAC8YBZwFJC3EEAAHtAWcMmAVn + BpgFZwGYAWcEAAPqEuwBbQLqBwAB/wFqAQABGwOaAbwCBwHyBAcB7AG7AXMFmgoAC8YBZwFJC3EEAAHt + AWcXmAFtA2cB7AGYAWcEABjqCwABGgKaAW4B7wa8AewBHAWaAf8BAAH/AfQHAAvGAWcBSQtxBAAB8AFn + HZgBZwQAGOoMABCaAf8CAAHzAb0HAAvGAWcBSQpxAVYFAB9nBAAB6xfqDQABGw2aAwAB/wkAAbAKxgFn + AUkKcQF4BgAFBwJnD24BZwHsBQcFAAH0FuoBbQ8AARoJmgH2AwAB9AJZCAAB/wGwAYAIxgFnAUkIcQFW + AXgB9AsAAfABZw+aAWcB/wsAAfQB6xLqAW0B7xIAAf8B8wEbARoBGwH0BQAC9AJZLAABZw+aAWdvAAFn + D5oBZ28AEWdvAAH0D2cB/1MAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGYAXcGVQF3EgAL9BEA + CSUBTAglAW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGXA1UB/wwAAusB8gsA + AQcC6wwABCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0BCUSAAL/EwADVRIA + Af8DVQsAAesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0AfEB/wkAAv8JAAH/ + AfEB9AYAA1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/AyUUAAH0AyUFAAH/ + AbwBcwHxAf8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0AQAC6wIAAfIB6wMA + AesB7AEAAZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEHAf8HAANVCAACVQ0A + AlUBdwkAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgAAf8BBwEcAfMB/wMA + AvQDAAH/AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgA + AyUB8wUAAW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/AfMBHAEHAf8CAAG8 + AfIBHAH0BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFv + CyUHAAMlAwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkABlUKAAJVAXcIAAHr + AfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/BgAB/wG8AnMBvAH/ + BgAB9AEcAe8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAH/AyUGAAFv + CyUHAAMlAwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHrAfQBAALrAgAB8gHr + AwAB6wHsAQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHxAv8LAAJVAfQJAAlV + BwABnQJVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwslBwABbwIlCQAB9AH/ + AfMDAALxAwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAGT + AiUBGgYAAW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0AQAC6wIAAfIB6wMA + AesB7AEAAZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVVAf8KAANVCAAB6wH0 + AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkABFUMAAJVAfQIAAHr + AfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/CAACVQEIDAABlwJV + CQAB6wH0DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcAAv8B6wHwDf8B7AHr + Av8GAAH0AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHzFQABbwMlEAAC8RIA + A1UVAANVCAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALxAgAB/xAAAfIDVREA + A1UPAALrBwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALrAfQFAAG8AesB7w8A + BCUB8w0AAZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkAAfMFJRQAAvEBAAEI + AfABHBMABlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEAAfIB/wHzAf8TAAH0 + DVUB/zAAARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEIIQABwghaAfNPAAHC + BlUB9B0AAfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZaAQgEAAGeBVoNAAH0 + AXMB8gLzAfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEHFgAB8wEHBgABvAEU + BLgBkA0UBLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIAAv8CAAH/AwAB/wMA + AfMBBwYAAbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUAAf8B8wHwAgAB8wFy + AbwCBwEAAf8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4ABFodAAH/AfQCAAHz + AgcBvAH0AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgUAZAC2QGzApACuAGQ + AxQBuAGQARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/AXMBBwH/CQABvAEU + AbgHFAGQAtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHyAe8B9AHyARwB/wHw + Af8BBwHyAfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/JAAB/wG8AXMB/wH0 + AXIB/wHvAfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUAGFUBmAYAA1oUAANa + CQAIBwHvDwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZAZoBAAGaAVkBGgoA + G1UBmAIAAf8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0AfMB9AHzAfQB8xAA + AZoBWQH0AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHzAQcB8wEHAfMBCAIA + AfIBvAHyAbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHzAVkBmgH/AZoKABxV + AZgBAANaAcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/AfQB8gHwAfIBvA0A + AvQBAAGaAXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcAAfQBcwH2AXID/wG8 + AXMB7wEcAQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEaARsBWQEaCgAcVQIA + Af8DWg8ABFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEHAQABBwH/AQcB/w0A + AZoBegH/ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANaAQAB/wNaBgABBwHy + AfMBvAH/ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZAXoB/wEbAXoBWQF6 + Af8BmgFZARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHzAv8B8wL0AQcBvAH0 + AXMB9AEHAfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEbAgAB8wNaAwAB/wgA + AbwB8AEAAvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6BVkBmgH/DAAVVgGY + CQABfANaEgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/EAAB9gJ6ARoC/wHz + AxoB9A4AFFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcAAfQB8ggAAfcEAAH/ + AXoBWQF6AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/AfQC8wH0Af8B8wEI + Af8FAAHzAQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARaCgAB8wEHBgAB/wEH + AXIBcwEcAe8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYADlYBlxIABVoMAARa + AZ4KAAHzAQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/FAAFWgoABVoLAAH/ + AVAB7wIHAfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/A/MB9A4AAf8D8wH0 + JgAJVgEIGgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKeAf//ADMAAfMDWigA + AfMDWjAAAfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMAAf8CWgH0AQAB8wNa + AgABCAJaEQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4AAWwC9AH/AwAB/wGu + EgAdWQcAAfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHkAVoRAAFaAf8KAAFs + AvQBZgQAAfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFmEgAdWQoAAfQBWhoA + AVoUAAHCAVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFsBPQBvAH3AgABZgL0 + EwAdWQwAAf8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/AVoWAAFaFwABWgUA + Aa4B8wX0AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8Aa4B/wGuAQkBkQG8 + EAAdWQ8AAfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/Aa4BCQFsAW0BuwHt + DAAdWRAAAf8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0Aa4B9AFmAv8CCQJm + DAAdWREAAf8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGuAQcBZgH/Ae8BbAG7 + AfcLAB1ZEgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGuAvQBtQFsAfcB/wGu + AfALAB1ZEwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1ZFAAB/wFaDwABWhYA + AfQBWg0AAZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGeAVoVAAFaDwABZgH/ + AgAB9wG8Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFaFQABbAH/AWwBrgb0 + AWwB/wUAAzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFsBAAdMRgAAf8BWg0A + AloRAAFaAZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIAEjElAAH0AVoNAAJa + DQABWgHkIQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQAAWwB9AFsAwARMScA + AfMBWgEAAVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAAAf8Bu20AAbIRAAGy + bAABsgEJAbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgAAQlqAAH/AgABswIA + AQkCAAHzAgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/AgABswIAAQkCAAHz + AgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKzCQAB/wIJAf8CCQH0 + AgABGQEJARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7GhkBigUAAf8UAAEZ + CQAB/wIJAQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGyAfQIAAG6AbIEAAGz + AYoCZQK7GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJDLIEAAGzAYoBuwJl + AbsBCRgZAYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQAAbMBigG7ARkCZQG7 + AQkJGQEJDBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkAAboB9BkAAbMBigG7 + AhkCZQG7CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkAAbMBigG7AxkCZQG7 + BhkBuwJlAbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGzBAABswGKAbsEGQJl + AbsFGQFmAmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyyBAABswGKAbsFGQJl + AbsDGQG7AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQABPQBswGyAfQIAAG6 + AbIEAAGzAYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWyFAAB8wIJEwABugH0 + AgAIsgH0CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZAYoFAAH/AgABswIA + AQkCAAHzAgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1A2UFGQJlAbsDGQEJ + AmUDGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIAAbIGAAyyBAABswGK + AbsQGQEJAWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHzEgkLAAG6AfQCAAGy + FgABswGKAbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDAAB8wEJ + Dv8DCQsAAboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/AbIVtAGyCwAB8wEJ + DgADCQoAB7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGyFwABsgoAAfMBCQMA + AgkJAAMJCQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGyF7MBsgoAAfMBCQMA + AgkJAAMJCQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7FhkBigQAAboXAAGy + CgAB8wEJDgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6FwABsgoAAfMBCQ4A + AwkJAAEJCLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUAH4oEAAG6BAABsgH0 + CwABCQGyBAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMAAbJnAAG6AgABsgMA + AbIJAAGyAwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUAAboBs3kAAboDsgEJ + bQABQgFNAT4HAAE+AwABKAMAAYADAAHAAwABAQEAAQEGAAEMFgAD/wUACP8IAAL/Af4BPwT/CAABwAED + AfwBHwH/AeABBwH/CAABgAEDAfgBDwH/AcABAwH/CAABgAEDAfABBwH/AgAB/wgAAcABBwHgAQMB/gIA + AT8IAAHgAQABoAEBAfgCAAEfCAAB4AEAAaABAQH4AgABHwgAAfABAAGgAQEB8AIAAQ8IAAH4AR8B4AED + AfACAAEPCAAB+AE/AfABBwHgAgABBwgAAfgBPwH4AQ8B4AIAAQMIAAH8AX8B/AEfAeACAAEDCAAB/gH/ + Af4BPwHgAgABAwgAAfgBvwH8AQ8B4AIAAQMIAAH4AT8B/AEPAeACAAEDCAAB+AE/Af8BPwHgAgABAwgA + Af4BfwH8AQ8B4AIAAQMIAAHAAQMB8AEDAeACAAEDCAABwAEDAeABAwHgAgABAwgAAcABAgFgAQEB4AIA + AQMIAAHAAQIBIAEBAeACAAEHCAABwAIAAQEB8AIAAQ8IAAHAAgABAQH4AgABDwgAAcABAgEAAQEB+AIA + AQcIAAHAAQIBIAEBAfwCAAEHCAABwAEDAeABAwH+AgABBwgAAcABAwHgAQMB/wGAAQABBwgAAcABAwHw + AQcB/wHAAQMBJwgAAv8B/gE/BP8IAAj/CAAI/wQABP8BgAMADP8EAAz/BAAM/wQABP8B/gF/Av8B8AIA + AQ8EAAH4AgABDwH+AXABBwH/AfACAAEPBAAB8AIAAQ8B/wHAAQEB/wHwAgABDwQAAfACAAEPAf8CAAH/ + AfACAAEPBAAB8QL/AY8B/gIAAR8B8AIAAQ8EAAHxAv8BjwH8AgABPwHwAgABDwQAAfEC/wGPAfwCAAEf + AfACAAEPBAAB8QH7Ac8BjwHwAgABHwHwAgABDwQAAvEBhwGPAeACAAEPAfACAAEPBAAB8QHjAcMBjwHw + AgABDwHwAgABDwQAAfEBxwHhAY8B8AIAAQ8B8AIAAQ8EAAHxAYcB8QGPAfACAAEPAfACAAEPBAAB8QHD + AeEBjwHwAgABDwHwAgABDwQAAfEB4QHDAY8B8AIAAQ8B8AIAAQ8EAALxAYcBjwHwAgABDwHwAgABDwQA + AfEB+wHPAY8B8AIAAQ8B8AIAAQ8EAAHxAv8BjwH4AgABDwHwAgABDwQAAfEC/wGPAfgCAAEfAfACAAEP + BAAB8QL/AY8B+AIAAR8B8AIAAQ8EAAHwAgABDwHkAgABPwHwAgABDwQAAfACAAEPAf4CAAEnAfACAAEP + BAAB8AIAAQ8B/wIAAWcB8AIAAQ8BgAMAAfACAAEPAf8BgAEBAd8B8AIAAQ8BwAIAAQEB8AIAAQ8B/wHg + AQMBjwHwAgABDwH+AgABPwH4AgABHwH/AfgBHwEPBf8CAAF/Df8CAAF/Df8CAAF/Df8CAAF/Cf8B8AEH + Bv8B4AEDBv8BwAEBBv8BgAEABv8CAAF/Af8B4AEDAf8B/gIAAT8E/wH+AQ8B+AE/Af8BgAEAAf8B/AEP + AfgBHwT/AfgBPwH+AQ8B/wEfAfwBfwH4AT8B/gEPAf8B/gF/Af8B8AL/AQ8B/wE/Af4BfwHwAv8BBwH/ + Af4BfwH/AfEC/wGHAf8BJgFyAX8B4QL/AYMB4wH+AX8BxwHjAv8BwwH/ASYBcgF/AcMC/wHDAeAB/gF/ + AQcBwwH7Af8B4wH/ASYBcgF/AcMC/wHhAfgBPgF8AR8BxwH5Af8B8QH/ASYBcgF/AYcBwAEDAfEB/gEO + AXABfwHHAfgB/wHxAf8BJgFyAX8BhwHAAQMB8AHhAYIBQQGHAY8B+AE/AfgB/wEmAXIBfwGPAcABAwH4 + AeMB4AEHAo8B+AEfAfgB/wEmAXIBfwGPAcABAwH4AeEB+AEfAo8B+AEPAfgB/wEmAXIBfwEPAcABAwH4 + AeEB/AE/AYcBjwH4AQMB+AH/ASYBcgF/AQ8BwAEDAfgB/wHCAUMB/wGPAfgBAwH4Af8BJgFyAX8BDwHA + AQMB+AH/AY4BcQH/AY8B+AEHAfgB/wEmAXIBfwEPAcABAwH4Af4BPgF8AX8BjwH4AQ8B+AH/ASYBcgF/ + AQ8BwAEDAfgB/gJ+AX8BjwH4AR8B+AH/ASYBcgF/AY8BwAEDAfgB/wH+AX8B/wGPAfgBfwH4Af8BJgFy + AX8BjwHAAQMB+AH/Af4BfwH/AccB+AH/AfEB/wE/Af4BfwGHAcABAwHwAf8B/gF/Af8BxwH7Af8B8QH8 + AgABHwGHAcABAwHwAf8B/gF/Af8BwwL/AeMB/AIAAR8BwwL/AeEB/wH+AX8B/wHjAv8B4wH8AgABHwHD + Av8B4wH/Af4BfwH/AfEC/wHHAfwCAAEfAeEC/wHDAf8B/gFvAf8B8AL/AY8B/wHnAfMB/wHwAv8BhwH/ + Af4BbwH/AfgBPwH+AQ8B/wLjAf8B+AE/Af4BDwH/Af4BRwH/AfwBDwH4AT8B/wHwAQcB/wH8AQ8B+AEf + Af8B/gFHAv8CAAF/Af8B+AEPAf8B/gIAAT8B/wH+AUMC/wGAAQAG/wIAAX8F/wHwAQcG/wHAAQEO/wH8 + AR8N/wHgBP8BgAEfCf8BwAE/Av8B/gEAAQcJ/wHAAQ8C/wH8AQABAwH/AfABfwH+AQ8E/wHAAQcC/wH4 + AQ8BAwH/AeABfwH+AQcB4AIAAQcBwAEBAv8B8AE/AcMB/wHnAv8B5wHgAgABBwHAAQABfwH/AeAB/wHz + Af8B5gEGAW4B5wHgAgABBwHAAQABPwH/AeED/wHnAcYBCAHnAeACAAEHAcABAAEPAf8BwwP/AeYBDAEA + AScB4AIAAQcBwAEAAQMB/wHDBP8BgAGwAT8B4AIAAQcBwAIAAf8BhwP/AfwCAAH/AeACAAEHAcACAAF/ + AYcE/wGAATIB/wHgAgABBwHAAgABHwGPAv8BHwHwAgABDwHgAgABBwHAAgABBwGPAf8B/gEPBf8B4AEI + Af8BwAIAAQMBDwH/AfwBBwH4AgABHwH/AeABAAH/AcACAAEBAQ8B/wH8AQMB+AEYAQABHwH/AeABAAH/ + AcACAAEBAQ8B/wH4AQEB+AIAAR8B/wIgAf8BwAIAAQEBDwH/AfABAAH+AQABIgEfAf8BIAEAAf8BwAIA + AQMBDwH/AeABAAH8AQABAgEfAf8CAAH/AcACAAEHAY8B/wHhARAB/AIAAT8B/wEAAQEB/wHAAgABDwGP + Af8B4wEYAfwBIAEAAT8B/wEAAQEB/wHAAgABPwGPAf8B9gEdAf4BQAEAAT8B/wGIAQMB/wHAAgAB/wGH + Af8B/gEfAf4BAAECAX8B/wGAAQ8B/wHAAQABAQH/AccB/wH8AT8B5wGAAQ8B5wH7AcAB/wHPAcABAAEH + Af8BwwH/AfwBPwHnAYABAwHnAfsB4AEfAc8BwAEAAR8B/wHhAf8B+AF/AecB4AEHAecB+wH4AR8BzwHA + AQABfwH/AeAB/wHwAX8B5wH4AR8B5wH4AT8B/gEPAcABAAL/AfABfwHgAf8B4AF/Af4BBwH4AT8B/gEP + AcABAwL/AfgBHwGBAf8B8AF/Af4BDwT/AcABDwL/AfwBAAEDCf8BwAE/Av8B/gEAAQcJ/wHgAX8D/wGA + AR8J/wHxBP8B8Cb/AcME/wH8AT8F/wHAAgABAwHLBP8B8AGHAv8BjwL/AcACAAEBAcME/wGEATEC/wEf + Av8BwAIAAQEB4QT/AR4BPAF/Af4BHAL/AcACAAEBAfwD/wH+AX8B/wE/AfwBPAL/AcACAAEBAf4BfwL/ + AfwC/wGfAfgBeAL/AcACAAEBAf8BPwL/AfkC/wHfAfAB+AL/AcACAAEBAf8BnwL/AfsC/wHPAvAC/wHA + AgABAQH/Ac8C/wHzAv8B7wHgATEC/wHAAgABAQH/AecC/wH3Av8B5wHgAQEC/wHAAgABAQH/AfMC/wH3 + Av8B9wHAAQAC/wHAAgABAQH/AfkC/wH3Av8B9wHgAQABPwH/AcACAAEBAf8B/AL/AcMC/wHDAcYBAAED + Af8BwAIAAQEB/wH+AX8B/wHLAv8BywHMAQABAwH/AcACAAEBAv8BPwH/AcMC/wHDAYwBgAEBAf8BwAIA + AQEC/wGfAf8B4wL/AeMB+AHAAQEB/wHAAgABAQL/Ac8B/wH3Av8B9wH5AfABAQH/AcACAAEBAv8B5wH/ + AfcC/wHnAf8BwAEAAX8BwAIAAQEC/wHzAf8B8wL/Ae8B/wHmAQABHwHAAgABAQL/AfkB/wH7Av8BzwL/ + AYABBwHAAgABAQL/AfwB/wH5Av8BzwL/AcgBAwHAAgABAQL/Af4BfwH8Av8BnwL/Af4BAAHAAgABAwP/ + AT8B/gF/Af8BPwP/AYABwAEAAQ8E/wGfAf8BPwH+AX8D/wHBAcABAAEPBP8BwwH/AYwBOAT/AfEBwAEA + AR8E/wHLAf8B4AGDDP8BwwH/AfwBPwz/AeMB/wH+AT8l/wH+Av8BPwz/Af4C/wG/DP8B/AIAAR8M/wH5 + AW0BvwHfDP8B+wFtAb8B3wHwARgBDAEPAv8BAAEPAcACAAEBAfsBbQG/Ad8B8AEYAQwBDwH/Af4BAAEP + AYADAAH4AgABHwHwARgBDAEPAfwBAAE/Ac8EAAH7Av8B3wHxARgBjAFPAfkB/gE/Ac8EAAH7Av8B3wHw + ARgBDAEPAfkB/gEAAQ8EAAH7Av8B3wHwARgBDAEPAfkB/wEAAQ8EAAH7Av8B3wH4ATgBHAEPAfkD/wQA + AfsC/wHfAfwB/gE/AR8B+QP/BAAB+wL/Ad8B/AIAAR8B+QH/AQABDwQAAfsC/wHfAfwCAAEfAfkB/gEA + AQ8EAAH7Av8B3wH8AgABHwH5AeABPwHPBAAB+AIAAR8B/wH+AT8B/wH5AYABPwHPBAAB+wFtAb8B3wH/ + Af4BPwH/AfkBvgEAAQ8EAAH7AW0BvwHfAf8CAAF/AfkBvwEAAQ8EAAH7AW0BvwHfAf4CAAE/AfkBvwL/ + BAAB+wFtAb8B3wH+AgABPwH5Ab8C/wQAAfACAAEPAf4BfwH+AT8B8AEPAQABDwQAAfcC/wH3Af4BcwH+ + AT8B4AEOAQABDwQAAfACAAEHAf4BcwH+AT8B4wHAAT8BzwQAAfcC/wH3Af4BfwH+AT8B4wHAAT8BzwQA + AfcC/wH3Af4BfwH+AT8B4AEOAQABDwQAAfcC/wH3Af4CAAE/AfABDwEAAQ8BgAMAAfcBnwH8AfcB/gIA + AT8E/wGAAgABAQH3AV8B/QF3DP8B9gHvAfsBtwz/AfEB7wHzAYcN/wHzAecO/wH8AR8N/ws= - 132, 17 + 272, 17 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 - KQAAAk1TRnQBSQFMAgEBDAEAARgBAAEIAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABQAMAAQEBAAEgBgABQP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A4gABIwEhASMBMAGt + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABc + LwAAAk1TRnQBSQFMAgEBDgEAASABAAEgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABQAMAAQEBAAEgBgABQP8AYwABVgFUAXABu7QAA1ABmgNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/wNY + Af8DWAH/A1gB/wNYAf8DWAH/HAABXQFjAWcBsAGiAeAB/AH/AaIB4AH8Af8BogHgAfwB/wGiAeAB/AH/ + AaIB4AH8Af8DDgETmAADWAH/A1gB/yQAA1gB/xgAAaIB4AH8Af8BogHgAfwB/wFbAXIBjwH/AVsBcgGP + Af8BWwFyAY8B/wFbAXIBjwH/AVsBcgGPAf8BnwHbAfcB/wFtAXsBgQHIAVwBvAHiAfiQAANYAf8DWAH/ + JAADWAH/FAABnAHRAecB+gGiAeAB/AH/AeEB4wHdAf8B9QH3Ae0B/wH1AfcB7QH/AfUB9wHtAf8B9QH3 + Ae0B/wH1AfcB7QH/AfUB9wHtAf8BogHgAfwB/wMKAQ2QAANYAf8DWAH/CAADXgHoA1gB9wQAA1gB/wMd + ASkIAANYAf8QAAFWAc0B+wH/AaAB4AH8Af8BogHgAfwB/wHhAeMB3QH/AfUB9wHtAf8B9QH3Ae0B/wGi + AZoBoAH/AfUB9wHtAf8B9QH3Ae0B/wH1AfcB7QH/AaIB4AH8Af8BogHgAfwB/5AAA1gB/wNYAf8EAANa + AeQDVQH6DAADWAH/AxoBJQQAA1gB/xAAAzMBUwGiAeAB/AH/AaIB4AH8Af8B4QHjAd0B/wH1AfcB7QH/ + AZwBiQGRAf8BygKhAf8BmwGSAZgB/wH1AfcB7QH/AfUB9wHtAf8BogHgAfwB/wGiAeAB/AH/kAADWAH/ + A1gB/wQAA1cBtwNYAf8MAANYAf8DBgEIBAADWAH/EAABYwFuAXIBvAGiAeAB/AH/AaIB4AH8Af8B4QHj + Ad0B/wGXAYsBkwH/AfUB9wHtAf8BoAGHAY8B/wH1AfcB7QH/AaMBjAGSAf8B9QH3Ae0B/wGiAeAB/AH/ + AaIB4AH8Af+QAANYAf8DWAH/CAADVQGyA1wB5wQAA1gB/wMEAQYIAANYAf8QAAFHAkgBfgGiAeAB/AH/ + AaIB4AH8Af8B4QHjAd0B/wH1AfcB7QH/AZ0BlQGcAf8BugK5Af8BrQGoAawB/wH1AfcB7QH/AfUB9wHt + Af8BogHgAfwB/wGiAeAB/AH/kAADWAH/A1gB/yQAA1gB/xQABP8BogHgAfwB/wHhAeMB3QH/AfUB9wHt + Af8B9QH3Ae0B/wH1AfcB7QH/AfUB9wHtAf8BYQFkAWYB/wFhAWQBZwH/AaIB4AH8Af8BogHgAfwB/5AA + A1gB/wNYAf8kAANYAf8UAAGiAeAB/AH/AaIB4AH8Af8B4QHjAd0B/wH1AfcB7QH/AfUB9wHtAf8B9QH3 + Ae0B/wGHAYkBjgH/Ac0B0AGHAf8BogHgAfwB/wGiAeAB/AH/AVQBVwFZAZuQAANYAf8DWAH/A1gB/wNY + Af8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/xgAAaIB4AH8Af8BVQFqAYcB/wHMAc8BzAH/ + AcwBzwHMAf8BzAHPAcwB/wF3AXoBhAH/AaIB4AH8Af8BogHgAfwB/wGiAeAB/AH/BAADJgE4jAADXAHq + A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8cAAGiAeAB/AH/AaIB4AH8 + Af8BogHgAfwB/wGiAeAB/AH/AaIB4AH8Af8BogHgAfwB/wGUAcMB2QH1BAADBAEFlAADWwHpA1gB/wNY + Af8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1IBoyQAAT8CQAFsAVoBYAFiAaoDKgFBCAADMAFL + ARYBvAHxAf//AP8A/wBLAAMhATABrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8UAAH/AfYB6wH/cAADIwEzA04BmQM4AVwcAANOAZkDTgGZCAABVgFU + AVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wFnAVsBawH/ + AU0BKQFYAf8BdAFzAXUB/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/xAAAf8B9gHrAf8DBgEIBAADDAEQKAABSAFAATAB/wHUAbgBAAH/AdQBuAEAAf8BSAFAATAB/wFI + AUABMAH/AUgBQAEwAf8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8BSAFAATAB/wHUAbgBAAH/AdQBuAEA + Af8BSAFAATAB/wwAA04BmSwAA04BmQQAAVYBVAFZAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/AU0BKQFYDf8BTQEpAVgB/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8MAAH/AfYB6wH/AWABRAErAf8IAAH/AfYB6wH/KAABSAFAATAB/wFIAUABMAH/AUgBQAEw + Af8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8B9AHbAQAB/wH+AeQBAAH/AUgBQAEwAf8BSAFAATAB/wFI + AUABMAH/AdQBuAEAAf8BSAFAATAB/wwAA04BmQgAAwsBDwNCAXQEAAFOAWwBYQHwAVACUQGfBAABTgJP + AZcIAANOAZkEAAFWAVQBWQG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BTQEpAVgV/wFN + ASkBWAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAG0AaEBkAL/AfYB6wH/CAABXAJZ + Ac8B/wH2AesB/ygAAUgBQAEwAf8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8BSAFAATAC/wHlAQAB/wFY + AU8BKwL/AeUBAAL/AeUBAAH/AasBmQETAf8BSAFAATAB/wHUAbgBAAH/AUgBQAEwAf8YAAMoAT0BVQJW + AbEDJAE1CAABVgFqAWQB5wMIAQsBTwJQAZsMAAFWAVQBWQG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BWwE6AWUF/wFNASkBWAH/AU0BKQFYAf8BUQEtAVsF/wFPASsBWgH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wL/AfYB6wH/AXMBWQFCAf8BagFPATcB/wHiAcoBsAH/ + AYUBZAFOAf8oAAFIAUABMAH/AUgBQAEwAf8BSAFAATAB/wFIAUABMAH/AdIBvQEHAf8BXwFVASkC/wHl + AQAB/wFIAUABMAL/AeUBAAH/AcIBrgEMAf8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8YAAFIAkkBiAMV + AR0BTgF0AWcB8gFTAlUBrQQAAwgBCxQAAVYBVAFZAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8J/wGEAY0BgQH/Aa0B2wGfAf8BUQExAVsJ/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + CAAB/wH2AesB/wFqAU8BNwL/AfYB6wL/AfYB6wH/AZMBdwFlAf8BjgFwAV0B/wGoAY8BbQH/NAABRgG3 + Av8DTAGQAywBRAFGAbcC/wQAAUYBtwL/UAABVgFUAVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGo + AdIBnAn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf + Af8EAAFqAU8BNwH/BAACTAFLAY8BywGyAZkB/wH7AfEB5QL/AfYB6wH/AfsB8QHlBf8B2wHCAagB/wFg + AUQBKwH/LAABRgG3Av8BRgG3Av8DQAFvAyEBMAFGAbcC/wMiATIcAANOAZkDTgGZA0oBiwQAA0gBhgNI + AYUBSAJJAYcDSwGOAUwCTQGRA0gBhQNLAY4IAAFWAVQBWQG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfCf8BTQEpAVgB/wGtAdsBnwH/AU0BKQFYCf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wwAAeIBygGwAf8EAAFkAVwBVAHnAXIBWQFCAf8BgAFfAUgC/wH2AesB/wF0AVsBRAX/AzsBZCAA + AVQBkQG4AfUEAAFGAbcC/wFGAbAB6gH9AwQBBgMsAUQDRwGCAUYBtwL/IAABWwFmAWEB4AFRAX8BawH3 + Aw0BEQNIAYUBUwJVAa0EAAMSARkEAAMjATMDMQFNCAABVgFUAVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/AU0BKQFYCf8BVQEzAWAJ/wFNASkBWAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8UAAFXAlYBuAFgAUQBKwH/AW4BVQE+Af8B4gHKAbAC/wH2AesC/wH2AesB/wHjAdYByQH/ + AWABRAErAf8cAAM3AVsDPgFrAUYBtwL/AwMBBAFNAaIB1AH6AVcBiwGtAfIBVwFaAVsBvQM9AWgcAAFL + AkwBkAMxAU4DBQEHAwABAQM6AWIBUQJSAaEBTQJOAZYDUgGpAyMBNAMAAQEMAAFWAVQBWQG+Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BggGJAYAB/wHpAeQB6g3/AZ0BiQGjAf8BqQHTAZwB/wGt + AdsBnwH/AU0BKQFYAf8BTQEpAVgB/wGtAdsBnwH/JAAB+wH6AfkB/wGTAXQBXwL/AfYB6wL/AfYB6wL/ + AfYB6wH/AwYBCBgAAUYBtwL/BAABUgGOAbYB9AFGAbcC/wFGAbcC/wFQAlIBoyQAA0ABcAMmATkDBAEG + AUgBdAFiAfYBUAJRAZ8BWQFqAWUB5QMCAQMDIgEyAVoBYgFhAdwMAAFWAVQBWQG+Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wFkAVUBaQH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/ + A3YB/wGtAdsBnwH/Aa0B2wGfAf8BbQFMAfAB/wFtAUwB8AH/Aa0B2wGfAf8wAAH/AfYB6wL/AfYB6wL/ + AfYB6wH/AewB4QHUAf8UAAMKAQ4BRgG3Av8DNQFWFAABrgGkAZAB/xAAAzgBXAgAA0IBdAMxAU8BVgFq + AWQB5wFTAlUBsAFHAXoBXQH4EAADOAFcBAABVgFUAVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGt AdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf - Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQA - Af8B9gHrAf9wAAMjATMBTgFQAU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkIAAFUAUEBWwG+Aa0B2wGf - Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/AWoBXgFuAf8BUAEsAVsB/wF3 - AXYBeAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/EAAB/wH2 - AesB/wMGAQgEAAMMARAoAAFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD - ATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/ - DAABTgFQAU4BmSwAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf - Af8BrQHbAZ8B/wFQASwBWw3/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGt - AdsBnwH/DAAB/wH2AesB/wFjAUcBLgH/CAAB/wH2AesB/ygAAUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/ - AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AfQB2wEAAf8B/gHkAQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD - ATMB/wHUAbgBAAH/AUsBQwEzAf8MAAFOAVABTgGZCAADCwEPA0IBdAQAAU4BdgFmAfABUAJRAZ8EAAFO - Ak8BlwgAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs - AVsV/wFQASwBWwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAG0AaEBkAL/AfYB6wH/ - CAABXQFZAVcBzwH/AfYB6wH/KAABSwFDATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwL/ - AeUBAAH/AVsBUgEuAv8B5QEAAv8B5QEAAf8BqwGZARYB/wFLAUMBMwH/AdQBuAEAAf8BSwFDATMB/xgA - AygBPQFVAVcBVgGxAyQBNQgAAVMBcgFkAecDCAELAU8BUQFQAZsMAAFUAUEBWwG+Aa0B2wGfAf8BrQHb - AZ8B/wGtAdsBnwH/Aa0B2wGfAf8BXgE9AWgF/wFQASwBWwH/AVABLAFbAf8BVAEwAV4F/wFSAS4BXQH/ - Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wL/AfYB6wH/AXYBXAFFAf8BbQFS - AToB/wHiAcoBsAH/AYUBZwFRAf8oAAFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdIBvQEK - Af8BYgFYASwC/wHlAQAB/wFLAUMBMwL/AeUBAAH/AcIBrgEPAf8BSwFDATMB/wFLAUMBMwH/AUsBQwEz - Af8YAAFIAkkBiAMVAR0BSwF6AWcB8gFTAVcBVQGtBAADCAELFAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGf - Af8BrQHbAZ8B/wGtAdsBnwn/AYQBjQGBAf8BrQHbAZ8B/wFUATQBXgn/Aa0B2wGfAf8BrQHbAZ8B/wGt - AdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wH/AW0BUgE6Av8B9gHrAv8B9gHrAf8BkwF6AWgB/wGOAXMBYAH/ - AagBjwFwAf80AAFJAbcC/wFMAU0BTgGQAywBRAFJAbcC/wQAAUkBtwL/UAABVAFBAVsBvgGtAdsBnwH/ - Aa0B2wGfAf8BrQHbAZ8B/wGoAdIBnAn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/Aa0B2wGfAf8BrQHb - AZ8B/wGtAdsBnwH/Aa0B2wGfAf8EAAFtAVIBOgH/BAACTAFLAY8BywGyAZkB/wH7AfEB5QL/AfYB6wH/ - AfsB8QHlBf8B2wHCAagB/wFjAUcBLgH/LAABSQG3Av8BSQG3Av8DQAFvAyEBMAFJAbcC/wMiATIcAAFO - AVABTgGZAU4BUAFOAZkDSgGLBAADSAGGA0gBhQFIAkkBhwFLAUwBSwGOAUwCTQGRA0gBhQFLAUwBSwGO - CAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/AVABLAFbAf8BrQHbAZ8B/wFQ - ASwBWwn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8MAAHiAcoBsAH/BAABZAFWAU0B5wF1 - AVwBRQH/AYABYgFLAv8B9gHrAf8BdwFeAUcF/wM7AWQgAAFRAZ4B0gH1BAABSQG3Av8BSQGzAfMB/QME - AQYDLAFEAkcBSAGCAUkBtwL/IAABVwFuAWQB4AFPAYIBawH3Aw0BEQNIAYUBUwFXAVUBrQQAAxIBGQQA - AyMBMwMxAU0IAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEsAVsJ/wFY - ATYBYwn/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQAAVcCVgG4AWMBRwEu - Af8BcQFYAUEB/wHiAcoBsAL/AfYB6wL/AfYB6wH/AeMB1gHJAf8BYwFHAS4B/xwAAzcBWwM+AWsBSQG3 - Av8DAwEEAU0BqQHjAfoBUwGbAckB8gFXAWIBaAG9Az0BaBwAAUsCTAGQAzEBTgMFAQcDAAEBAzoBYgFR - AlIBoQFNAk4BlgFSAVUBUwGpAyMBNAMAAQEMAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ - Aa0B2wGfAf8BggGJAYAB/wHpAeQB6g3/AZ0BiQGjAf8BqQHTAZwB/wGtAdsBnwH/AVABLAFbAf8BUAEs - AVsB/wGtAdsBnwH/JAAB+wH6AfkB/wGTAXcBYgL/AfYB6wL/AfYB6wL/AfYB6wH/AwYBCBgAAUkBtwL/ - BAABUgGcAc8B9AFJAbcC/wFJAbcC/wFQAVUBVgGjJAADQAFwAyYBOQMEAQYBSAF6AWIB9gFQAlEBnwFW - AXMBZQHlAwIBAwMiATIBVgFsAWEB3AwAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb - AZ8B/wGtAdsBnwH/AWcBWAFsAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8DeQH/Aa0B2wGfAf8BrQHb - AZ8B/wFwAU8B8AH/AXABTwHwAf8BrQHbAZ8B/zAAAf8B9gHrAv8B9gHrAv8B9gHrAf8B7AHhAdQB/xQA - AwoBDgFJAbcC/wM1AVYUAAGuAaQBkAH/EAADOAFcCAADQgF0AzEBTwFTAXIBZAHnAVMBVgFVAbABRwF9 - AWMB+BAAAzgBXAQAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ - Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs - AVsB/wFQASwBWwH/Aa0B2wGfAf80AANAAXAB/wH2AesB/wHxAeYB2gH/HAADPwFtAU0BmgHMAfMCSQFK - AYgMAAGuAaQBkAH/EAABTgFQAU4BmQwAAUsCTAGQAVkBaQFgAdcBUgFWAVQBqgFHAYIBYQH7AxwBKAwA - AU4BUAFOAZkIAAFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQ - ASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFb - Af8BUAEsAVsB/0wAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAAAUcBfQFjAfgBTgFQ - AU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkDIgExFAABUAEsAVsB/wGJAcoB/QH/AYkBygH9Af8BiQHK - Af0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AVABLAFbAf/cAAFQASwBWwH/AYkBygH9 - Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BUAEsAVsB/9wA - ASABHwEhASwBUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEs - AVsB/wMGAQj/AJEAAzIBUFAAASMB+gEUAf8BIwH6ARQB/wQAASMB+gEUAf8BIwH6ARQB/xgAAagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/GAADUAGe - AdsBlgELAf8B2wGWAQsB/wHbAZYBCwH/AwABARwAAzIBUAEiAfoBEwH/QAADUQGgAxIBGAgAAzIBUAgA - AT4BPwE+AWwDIQEwDAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8BrQHbAZ8B/wFNASkBWAH/AU0BKQFYAf8BrQHbAZ8B/zQAA0ABcAH/AfYB6wH/AfEB5gHaAf8cAAM/ + AW0BTQGMAbAB8wNJAYgMAAGuAaQBkAH/EAADTgGZDAABSwJMAZABWQFhAV0B1wNTAaoBRwF/AV8B+wMc + ASgMAANOAZkIAAFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFN + ASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFY + Af8BTQEpAVgB/0wAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAAAUcBegFdAfgDTgGZ + AzgBXBwAA04BmQNOAZkDIgExFAABTQEpAVgB/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/ + AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AU0BKQFYAf/cAAFNASkBWAH/AYkBygH9Af8BiQHKAf0B/wGJ + AcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BTQEpAVgB/9wAAx8BLAFNASkBWAH/ + AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AwYBCP8AkQADMgFQ + UAABIAH6AREB/wEgAfoBEQH/BAABIAH6AREB/wEgAfoBEQH/GAABqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8YAANQAZ4B2wGWAQgB/wHbAZYBCAH/ + AdsBlgEIAf8DAAEBHAADMgFQAR8B+gEQAf9AAANRAaADEgEYCAADMgFQCAABPgE/AT4BbAMhATAMAAFw + AWIBTwHvAUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/xQAAdsBlgELAf8UAAHbAZYBCwH/IAABIgH6ARMB/zgAAVgBbAFW - Ac8kAAMhATAIAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wHhAb0BigH/EAABxgGWARkB/UAAASIB+gETAf9cAAM7AWQIAAF7AWQBTAHvAeEBvQGK - Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHh - Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/EAADNgFZ - HAAB2wGWAQsB/yQAASIB+gETAf8sAAEjAfoBFAH/LAABIwH6ARQB/wQAAXsBZAFMAe8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEK - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8wAAM1AVcoAAEi - AfoBEwH/KAABIwH6ARQB/ywAASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHr - AdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/IAAB2wGWAQsB/zwAASIB+gETAf8gAAMy - AVAsAAMyAVAIAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEK - Af8B+gHrAdIB/wH6AesB0gH/IAAB2wGWAQsB/0AAASIB+gETAf8gAAEjAfoBFAH/LAABIwH6ARQB/wQA - AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8QAAHbAZYBCwH/DAAB2wGWAQsB/xAAAZQBdwE6AfAwAAEiAfoBEwH/HAABIwH6ARQB/ywA - ASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/AUwBIwEKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/FAACTAFLAZAIAAHbAZYBCwH/SAABIgH6ARMB/0QAAxIBGAgAAXsBZAFM + AesB0gH/FAAB2wGWAQgB/xQAAdsBlgEIAf8gAAEfAfoBEAH/OAABWQFhAVkBzyQAAyEBMAgAAXABYgFP + Ae8B4QG9AYoB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGK + Af8QAAG+AZYBHAH9QAABHwH6ARAB/1wAAzsBZAgAAXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AUkBIAEH + Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8QAAM2AVkcAAHbAZYBCAH/JAABHwH6 + ARAB/ywAASAB+gERAf8sAAEgAfoBEQH/BAABcAFiAU8B7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wFJ + ASABBwH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AU8BJgENAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B+gHrAdIB/zAAAzUBVygAAR8B+gEQAf8oAAEgAfoBEQH/ + LAABIAH6AREB/wQAAXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/ + AeEBvQGKAf8BSQEgAQcB/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9 + AYoB/wFtAUoBMQH/AfoB6wHSAf8gAAHbAZYBCAH/PAABHwH6ARAB/yAAAzIBUCwAAzIBUAgAAXABYgFP Ae8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8YAAHbAZYBCwH/BAAB2wGWAQsB/wwAAdsBlgELAf88AAEiAfoBEwH/GAABIwH6ARQB/yQAAVIBVQFS - AagMAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/ygAAdsBlgELAf8DQAFwRAABIgH6ARMB/xgAASMB+gEUAf8cAAFXAWEBVgHHwAADMgFQIAABIwH6 - ARQB/wEjAfoBFAH/BAABIwH6ARQB/wEjAfoBFAH/zAADMgFQJAADMgFQ/wD/AP8APwAB2wGWAQkB/wHb - AZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8MAAFmAWEBVgHfEAAB2wGW - AQkB/xAAAloBWAHACAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHS + Af8gAAHbAZYBCAH/QAABHwH6ARAB/yAAASAB+gERAf8sAAEgAfoBEQH/BAABcAFiAU8B7wHhAb0BigH/ + AUkBIAEHAf8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AdoBtgGEAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/xAAAdsBlgEI + Af8MAAHbAZYBCAH/EAABhAFsAUIB8DAAAR8B+gEQAf8cAAEgAfoBEQH/LAABIAH6AREB/wQAAXABYgFP + Ae8B4QG9AYoB/wFJASABBwH/AekBzAGhAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8UAAJMAUsBkAgAAdsBlgEIAf9IAAEfAfoBEAH/RAADEgEYCAABcAFiAU8B7wHhAb0BigH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/xgAAdsBlgEIAf8EAAHb + AZYBCAH/DAAB2wGWAQgB/zwAAR8B+gEQAf8YAAEgAfoBEQH/JAABUgFTAVIBqAwAAagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/KAAB2wGWAQgB/wNA + AXBEAAEfAfoBEAH/GAABIAH6AREB/xwAAVkBWwFZAcfAAAMyAVAgAAEgAfoBEQH/ASAB+gERAf8EAAEg + AfoBEQH/ASAB+gERAf/MAAMyAVAkAAMyAVD/AP8A/wA/AAHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHb + AZYBBgH/AdsBlgEGAf8B2wGWAQYB/wwAAagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/BAABqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8EAAGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wwAAWEBXgFXAd8QAAHbAZYBBgH/EAACWgFYAcAIAAFw + AWIBTwHvAUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8BTAEjAQoB/wHhAb0BigH/AfoB6wHS + AesB0gH/AXABYgFPAe8BSQEgAQcB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJ - Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BewFkAUwB7wHhAb0BigH/ - AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF7AWQBTAHv - AeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/ - DAADKgFAMAABewFkAUwB7wHhAb0BigH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8BTAEjAQoB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AUwBIwEKAf8B4QG9 - AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGW - AQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS - Af8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHS - Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVIBKQEQAf8BTAEjAQoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK - Af8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BUgEpARAB/wFM - ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/DAADKgFA - BAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8B5wHV - AbwB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AXABTQE0Af8B+gHrAdIB/wF7AWQBTAHv - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHr - AdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/ - AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8BTAEj - AQoB/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFwAU0BNAH/ - AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGW - AQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6 - AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wFM - ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6 - AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/DAADKgFAMAABewFkAUwB7wHhAb0BigH/AUwBIwEK - Af8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AdoBtgGEAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK - Af8BTAEjAQoB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B2gG2AYQB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFM - Ae8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJ - Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8IAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/ - AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHn - Ac4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ - AekBzAGhAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH2AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/ - AUwBIwEKAf8B6QHMAaEB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfYB5wHOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEJ - Af8IAAJaAVgBwAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ + AesB0gH/AfoB6wHSAf8BcAFiAU8B7wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wwAAyoBQBAAAdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/CAABcAFiAU8B7wHhAb0BigH/AUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/ AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHv + AdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFwAWIBTwHvAeEBvQGKAf8BSQEgAQcB/wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AXABYgFPAe8B4QG9AYoB/wFJASABBwH/ AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/ - AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/AagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf//AP8A/wADAAFCAU0BPgcAAT4DAAEo - AwABQAMAAUADAAEBAQABAQYAAQIWAAP/gQAG/wIAAfsD/wHHAfMCAAHyAf8BwAEBAd8B/QIAAeYB/wHA - AQEB2QEtAgABzAH/AcABAQH4AccCAAHAAf8BwAEBAfgBXwIAAcABfwH8AS8C/wIAAaABHwH8AQ8B4gED - AgAB6AEPAfQBDwHwAVMCAAH4AQcB8AEPAeABBwIAAf8BgQH6AR8B8AEHAgAB/wHwAfgB+wHYAT0CAAH/ - AfgB/gE7AdwBHQGAAQAC/wHnAfMBxwHxAfABBwb/AfABBwb/AfABBwz/Ab8B/wH8AZ8BgAEAAfwBHwHP - Af8B8wFnAgAB+wHvAfcB/wHvAfsCAAH3Af8B+wL/AfsCAAL3Af0B/wHfAf0CAAH/AfcB/gH/Ad8B/QIA - Af8BfwH/AX8BvwH7AgAB/wF/Af8BvwHfAf0CAAH3AXsB/wLfAf0CAAH7AX8B/wHvAf8B+wIAAf0BdwH/ - AfcB7wH7AYABAAH/Ac8B/wH7AvcF/wH7AfwBnwX/Af0B/wF/Gf8BAwGAAQABgAEAAYABAAHvAXsGAAHv - AQMGAAHvAf8GAAHvAQMGAAHoAXsGAAHvAQMGAAHvAf8GAAHDAQMGAAHYAXsGAAHDAQMBgAEAAYABAAGA - AQAY/ws= + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8MAAMqAUAwAAFwAWIBTwHv + AeEBvQGKAf8B+gHrAdIB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BSQEg + AQcB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/ + AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AUkBIAEHAf8BcAFiAU8B7wHhAb0BigH/AfoB6wHSAf8BSQEgAQcB/wHhAb0BigH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BSQEgAQcB/wwAAyoBQBAAAdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEGAf8B2wGW + AQYB/wHbAZYBBgH/CAABcAFiAU8B7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AeEBvQGK + Af8B+gHrAdIB/wHdAbkBhwH/AU8BJgENAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AUkBIAEHAf8B+gHrAdIB/wFwAWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEH + Af8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BTwEmAQ0B/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + Af8BSQEgAQcB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFPASYBDQH/AUkBIAEHAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8MAAMqAUAEAAHbAZYBBgH/AdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/EAACWgFYAcAIAAFwAWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BSQEgAQcB/wHhAb0BigH/AUkBIAEHAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHr + AdIB/wH6AesB0gH/AeEBvQGKAf8BbQFKATEB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AeEBvQGKAf8BSQEgAQcB/wH6AesB0gH/AecB1QG8Af8B4QG9 + AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFtAUoBMQH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B4QG9AYoB/wFJASABBwH/AfoB6wHSAf8B5wHV + AbwB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AW0BSgExAf8B+gHrAdIB/wwAAyoBQBAA + AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/CAABcAFiAU8B7wHh + Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wFw + AWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B+gHrAdIB/wH6 + AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6 + AesB0gH/AfoB6wHSAf8MAAMqAUAwAAFwAWIBTwHvAeEBvQGKAf8BSQEgAQcB/wH6AesB0gH/AUkBIAEH + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B2gG2AYQB/wFJ + ASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wFJASABBwH/AfoB6wHS + Af8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHa + AbYBhAH/AUkBIAEHAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/AUkBIAEH + Af8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AdoBtgGEAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEGAf8B2wGW + AQYB/wHbAZYBBgH/AdsBlgEGAf8IAAHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEG + Af8B2wGWAQYB/wgAAXABYgFPAe8B4QG9AYoB/wFJASABBwH/AekBzAGhAf8BSQEgAQcB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/AUkBIAEHAf8B6QHMAaEB/wFJASABBwH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfYB5wHOAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFwAWIBTwHvAeEBvQGKAf8BSQEgAQcB/wHpAcwBoQH/ + AUkBIAEHAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHn + Ac4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/CAAB2wGWAQYB/wgAAloBWAHAAdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/EAACWgFYAcAIAAFwAWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/AdsBlgEGAf8IAAHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/ + AdsBlgEGAf8B2wGWAQYB/wwAAagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/BAABqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8EAAGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB//8A/wD/AAMAAUIBTQE+BwABPgMAASgDAAFAAwABQAMAAQEBAAEB + BgABAhYAA/8BAAT/BAAC/wH3Af8EAAHAAQMB+AEPBAABzwH7AfABAwQAAc8B+wHgAQMEAAHMAZsBwAED + BAAByQHLAcABAwQAAckBywHAAQMEAAHMAZsBwAEDBAABzwH7AeABAwQAAc8B+wHgAQMEAAHAAQMB8AEF + BAABwAEDAfgBCwQAAeABAwH+ATMEAAT/BAAE/wQABv8CAAH7A/8BxwHzAgAB8gH/AcABAQHfAf0CAAHm + Af8BwAEBAdkBLQIAAcwB/wHAAQEB+AHHAgABwAH/AcABAQH4AV8CAAHAAX8B/AEvAv8CAAGgAR8B/AEP + AeIBAwIAAegBDwH0AQ8B8AFTAgAB+AEHAfABDwHgAQcCAAH/AYEB+gEfAfABBwIAAf8B8AH4AfsB2AE9 + AgAB/wH4Af4BOwHcAR0BgAEAAv8B5wHzAccB8QHwAQcG/wHwAQcG/wHwAQcM/wG/Af8B/AGfAYABAAH8 + AR8BzwH/AfMBZwIAAfsB7wH3Af8B7wH7AgAB9wH/AfsC/wH7AgAC9wH9Af8B3wH9AgAB/wH3Af4B/wHf + Af0CAAH/AX8B/wF/Ab8B+wIAAf8BfwH/Ab8B3wH9AgAB9wF7Af8C3wH9AgAB+wF/Af8B7wH/AfsCAAH9 + AXcB/wH3Ae8B+wGAAQAB/wHPAf8B+wL3Bf8B+wH8AZ8F/wH9Af8Bfxn/AQMBgAEAAYABAAGAAQAB7wF7 + BgAB7wEDBgAB7wH/BgAB7wEDBgAB6AF7BgAB7wEDBgAB7wH/BgABwwEDBgAB2AF7BgABwwEDAYABAAGA + AQABgAEAGP8L diff --git a/ToolLib.VisionJob/OperateProject.cs b/ToolLib.VisionJob/OperateProject.cs index fe0ba08..3ca1f71 100644 --- a/ToolLib.VisionJob/OperateProject.cs +++ b/ToolLib.VisionJob/OperateProject.cs @@ -61,6 +61,8 @@ namespace ToolLib.VisionJob if(newAddJob) { VisionJobParams.pVisionProject.Project.Add(jobName, new VisionJob(jobName)); + FormJobManage.Instance.tabJobUnion.SelectedTab = newTab; + // newTab.Select(); } InitJob(VisionJobParams.pVisionProject.Project[jobName]); } diff --git a/ToolLib.VisionJob/ToolLib.VisionJob.csproj b/ToolLib.VisionJob/ToolLib.VisionJob.csproj index 48473b9..9a39c72 100644 --- a/ToolLib.VisionJob/ToolLib.VisionJob.csproj +++ b/ToolLib.VisionJob/ToolLib.VisionJob.csproj @@ -34,6 +34,14 @@ ..\VisionEdit\bin\Debug\ThirdLib\DevComponents.DotNetBar2.dll + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.Common.dll + diff --git a/ToolLib.VisionJob/VisionJob.cs b/ToolLib.VisionJob/VisionJob.cs index a67f854..8e235cc 100644 --- a/ToolLib.VisionJob/VisionJob.cs +++ b/ToolLib.VisionJob/VisionJob.cs @@ -653,7 +653,7 @@ namespace ToolLib.VisionJob /// /// /// - private void DeleteItem(object sender, EventArgs e) + private void DeleteItemOld(object sender, EventArgs e) { try { @@ -755,7 +755,123 @@ namespace ToolLib.VisionJob //LogHelper.SaveErrorInfo(ex); } } - + + /// + /// 删除项 + /// + /// + /// + internal void DeleteItem(object sender, EventArgs e) + { + try + { + if (GetJobTree().SelectedNode == null) + return; + isDrawing = true; + string nodeText = GetJobTree().SelectedNode.Text.ToString(); + int level = GetJobTree().SelectedNode.Level; + string fatherNodeText = string.Empty; + + //如果是子节点 + if (level == 1) + { + fatherNodeText = GetJobTree().SelectedNode.Parent.Text; + } + foreach (TreeNode toolNode in GetJobTree().Nodes) + { + if (level == 1) + { + if (toolNode.Text == fatherNodeText) + { + foreach (var itemNode in ((TreeNode)toolNode).Nodes) + { + if (itemNode != null) + { + if (((TreeNode)itemNode).Text == nodeText) + { + //移除连线集合中的这条连线 + for (int i = 0; i < D_itemAndSource.Count; i++) + { + if (((TreeNode)itemNode) == D_itemAndSource.Keys.ToArray()[i] || ((TreeNode)itemNode) == D_itemAndSource[D_itemAndSource.Keys.ToArray()[i]]) + D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[i]); + } + + ((TreeNode)itemNode).Remove(); + GetJobTree().SelectedNode = null; + } + } + } + } + } + else + { + if (((TreeNode)toolNode).Text == nodeText) + { + ((TreeNode)toolNode).Remove(); + break; + } + } + } + + //如果是父节点 + if (level == 0) + { + for (int i = 0; i < L_toolList.Count; i++) + { + if (L_toolList[i].toolName == nodeText) + { + try + { + //移除连线集合中的这条连线 + for (int j = D_itemAndSource.Count - 1; j >= 0; j--) + { + if (nodeText == D_itemAndSource.Keys.ToArray()[j].Parent.Text || nodeText == D_itemAndSource[D_itemAndSource.Keys.ToArray()[j]].Parent.Text) + D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[j]); + } + } + catch { } + + L_toolList.RemoveAt(i); + } + } + } + else + { + for (int i = 0; i < L_toolList.Count; i++) + { + if (L_toolList[i].toolName == fatherNodeText) + { + for (int j = 0; j < L_toolList[i].toolInput.Count; j++) + { + if (L_toolList[i].toolInput[j].value.ToString() == string.Empty) //未连接源 + { + if (string.Format("<--{0}", L_toolList[i].toolInput[j].IOName) == nodeText) + L_toolList[i].RemoveInputIO(nodeText); + } + else //已连接源 + { + if (string.Format("<--{0}{1}", L_toolList[i].toolInput[j].IOName, L_toolList[i].toolInput[j].value.ToString()) == nodeText) + L_toolList[i].RemoveInputIO(nodeText); + } + } + for (int j = 0; j < L_toolList[i].toolOutput.Count; j++) + { + if (L_toolList[i].toolOutput[j].IOName == nodeText.Substring(3)) + L_toolList[i].RemoveOutputIO(nodeText.Substring(3)); + } + } + } + } + + isDrawing = false; + DrawLine(); + } + catch (Exception ex) + { + // Log.SaveError(ex); + } + } + public void Run() { diff --git a/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj b/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj index c10219c..492e6e3 100644 --- a/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj +++ b/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj @@ -54,6 +54,10 @@ {1C8D0DDC-2086-48A9-9586-F2B643E2FC54} CommonHelper + + {46ee89bb-5ec9-4ead-9e32-3e57288a0bf7} + EyeHandCalibTool + {3d2739db-5618-49bf-bf5c-5cccd6a55c64} FindCircleTool @@ -66,10 +70,18 @@ {F5669FB7-77EC-44B9-898B-6D575B7D26EA} HalconTool + + {6112406a-a986-4a68-9d22-f0d7f0f81e02} + HDevEngineTool + {C1C08195-2EC8-42E9-93BB-D5331E6C6687} PMAlignTool + + {1c61f57d-1a36-4a98-b7dd-a65f2dbbe468} + SDKCameraTool +