From c6d0e5bb48033e1c457ec6c802e5abe7969df7fb Mon Sep 17 00:00:00 2001 From: KenanZhu111 <3471685733@qq.com> Date: Tue, 8 Oct 2024 21:03:30 +0800 Subject: [PATCH] Rename the Project: 1.Update KNZ_Plot 2.Update mpre GUI parts --- SPP_calculate.c | 106 ++++++++++++------------------------------- headers/cal_mod.h | 6 +-- headers/public.h | 51 +++++++++++++++++++++ headers/read.h | 54 ++++------------------ headers/select_epo.h | 21 +++++---- resouce/Delete.ico | Bin 0 -> 6782 bytes resouce/Main.ico | Bin 0 -> 4286 bytes resouce/Options.ico | Bin 0 -> 4286 bytes resouce/Plot.ico | Bin 0 -> 4286 bytes resouce/Reload.ico | Bin 0 -> 6782 bytes resource.h | 6 +-- 11 files changed, 108 insertions(+), 136 deletions(-) create mode 100644 resouce/Delete.ico create mode 100644 resouce/Main.ico create mode 100644 resouce/Options.ico create mode 100644 resouce/Plot.ico create mode 100644 resouce/Reload.ico diff --git a/SPP_calculate.c b/SPP_calculate.c index 8506c5a..ebfceb7 100644 --- a/SPP_calculate.c +++ b/SPP_calculate.c @@ -16,60 +16,25 @@ name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") -//FILE SELECT DIALOGS -#define FILEEXOP TEXT("RINEX OBS(*.o*.*.*obs.*.*d)\0*.*o;*.*obs;*.*d\0"\ - "All Files(*.*)\0*.*\0\0"); - -#define FILEEXNP TEXT("RINEX NAV(*.*nav.*.hnav.*.gnav.*.qnav.*.*n.*.*g.*.*h.*.*q.*.*p)\0*.*nav;*.hnav;*.gnav;*.qnav;*.*n;*.*g;*.*h;*.*q;*.*p\0"\ - "All Files(*.*)\0*.*\0\0") - -#define FILEEXSV TEXT("Spos Files(*.sp*)\0*.sp\0"\ - "All Files(*.*)\0*.*\0\0"); - -//DEF MAIN WINDOW BUTTONS -#define OBSBUTTON 3301 -#define NAVBUTTON 3302 -#define CALBUTTON 3303 -#define OPTBUTTON 3304 -#define PLOBUTTON 3305 -#define OBSCLEAR 3306 -#define OBSRELOD 3307 -#define NAVCLEAR 3308 -#define NAVRELOD 3309 -#define PROGRESS 3310 -//DEF MAIN WINDOW GNSS NUTTONS -#define GPSCHECK 5500 -#define GLOCHECK 5501 -#define BEICHECK 5502 -#define GALCHECK 5503 -#define SBACHECK 5504 -#define SYSGROUP 1001 -//DEF OPTIONS WINDOW CHECK+BOXS -#define OPTDFION 7001 -#define OPTDFTRO 7002 -#define OPTCONFI 7003 - HWND hwndb[15];//BUTTON HANDLE HWND hwndopt;//OPTIONS HANDLE HWND hwndopt_def_ion;//DEFAULT ION COR HWND hwndopt_def_tro;//DEFAULT TRO COR HWND hwndopt_confirm;//OPTION CONFIRM +FILE* fp_nav = NULL; +FILE* fp_obs = NULL; +FILE* result_file = NULL; -FILE * fp_nav = NULL; -FILE * fp_obs = NULL; -FILE * result_file = NULL; - -pnav_head nav_h = NULL; -pnav_body nav_b = NULL; -pobs_head obs_h = NULL; -pobs_epoch obs_e = NULL; -pobs_body obs_b = NULL; +pnav_head nav_h = NULL; +pnav_body nav_b = NULL; +pobs_head obs_h = NULL; +pobs_epoch obs_e = NULL; +pobs_body obs_b = NULL; /*INITIAL CONST*/ int o_epochnum = 0; -int gps_satnum = 0; -int bds_satnum = 0; +int satnum = 0; /*INITIAL SETTINGS*/ static int ionoption = 0; @@ -81,20 +46,20 @@ char nav_f[MAX_PATH] = { 0 }; char path[MAX_PATH]; const wchar_t wpath[MAX_PATH];//PROGRAM'S FOLDER -static void ProgressBar(HWND hwnd, int msec) +static void ProgressBar(HWND hwnd, int BEG, int DES) { PBRANGE range; SendMessage(hwnd, PBM_SETRANGE, (WPARAM)FALSE, (LPARAM)(MAKELPARAM(0, 100))); SendMessage(hwnd, PBM_GETRANGE, (WPARAM)TRUE, (LPARAM)&range); - SendMessage(hwnd, PBM_SETPOS, (WPARAM)range.iLow, (LPARAM)0); - while (TRUE) { - SendMessage(hwnd, PBM_DELTAPOS, (WPARAM)((range.iHigh - range.iLow) / 100), (LPARAM)0); Sleep(msec); - if (SendMessage(hwnd, PBM_GETPOS, (WPARAM)0, (LPARAM)0) == range.iHigh) + SendMessage(hwnd, PBM_SETPOS, (WPARAM)BEG, (LPARAM)0); + for (int i = BEG; i < DES; i++) { + SendMessage(hwnd, PBM_SETPOS, (WPARAM)(int)( i / 10), (LPARAM)0); + if (SendMessage(hwnd, PBM_GETPOS, (WPARAM)0, (LPARAM)0) == range.iHigh * DES/PBSTATEFULL) { break; } } - SendMessage(hwnd, PBM_SETPOS, (WPARAM)range.iHigh, (LPARAM)0); + SendMessage(hwnd, PBM_SETPOS, (WPARAM)DES, (LPARAM)0); } static int FileSelobsDialog(const wchar_t* path)//FILEDIALOG FOR OBS @@ -149,16 +114,16 @@ int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; - wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2)); + wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); wndclass.lpszMenuName = NULL; - wndclass.lpszClassName = TEXT("SPP"); + wndclass.lpszClassName = TEXT("CAL"); RegisterClass(&wndclass); wndclass.lpfnWndProc = OptWndProc; - wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON3)); + wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2)); wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = TEXT("OPT"); @@ -167,8 +132,8 @@ int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ HWND hwnd; hwnd = CreateWindow( - TEXT("SPP"), - TEXT("SPP Calculate"), + TEXT("CAL"), + TEXT("KNZ_Calculate"), WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 0, 0, @@ -203,7 +168,7 @@ int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ { SendMessage(hwndb[i], WM_SETFONT, (WPARAM)hbFont, 1); } - Delico = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); + Delico = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON3)); Relico = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON4)); SendMessage(hwndb[11], BM_SETIMAGE, IMAGE_ICON, (LPARAM)Delico); SendMessage(hwndb[12], BM_SETIMAGE, IMAGE_ICON, (LPARAM)Relico); @@ -240,7 +205,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ case WM_CREATE: { getcwd(path, sizeof(path));//GET THE PROGRAM'S FOLDER - const char plot[] = "SPP_plot.exe"; + const char plot[] = "KNZ_Plot.exe"; sprintf(path, "%s\\%s", path, plot); cxchar = LOWORD(GetDialogBaseUnits()); @@ -338,16 +303,12 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ if (obs_h && obs_e && obs_b) { read_o_h(fp_obs, obs_h); + ProgressBar(hwndPB, PBSTATENONE, PBSTATEHALF); read_o_b(fp_obs, obs_e, obs_b, obs_h->obstypenum_gps, obs_h->obstypenum_bds); } fclose(fp_obs); - ProgressBar(hwndPB, 5); - - if (o_epochnum > 0) - { - MessageBox(hwnd, TEXT("File of Obs load complete!"), TEXT("NOTICE"), MB_ICONASTERISK | MB_OK); - } + ProgressBar(hwndPB, PBSTATEHALF, PBSTATEFULL); } } else @@ -366,25 +327,18 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ if (fp_nav != NULL) { strcpy(nav_f, nav_file); - gps_satnum = getgpssatnum(fp_nav); - rewind(fp_nav); - bds_satnum = getbdssatnum(fp_nav); + satnum = getsatnum(fp_nav); rewind(fp_nav); nav_h = (pnav_head)malloc(sizeof(nav_head)); - nav_b = (pnav_body)malloc(sizeof(nav_body) * (gps_satnum + bds_satnum)); + nav_b = (pnav_body)malloc(sizeof(nav_body) * (satnum)); if (nav_h && nav_b) { read_n_h(fp_nav, nav_h); + ProgressBar(hwndPB, PBSTATENONE, PBSTATEHALF); read_n_b(fp_nav, nav_b); } fclose(fp_nav); - - ProgressBar(hwndPB, 1); - - if (gps_satnum > 0) - { - MessageBox(hwnd, TEXT("File of Nav load complete !"), TEXT("NOTICE"), MB_ICONASTERISK | MB_OK); - } + ProgressBar(hwndPB, PBSTATEHALF, PBSTATEFULL); } } else @@ -435,7 +389,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ case NAVRELOD: if (fp_nav != NULL) { - if (gps_satnum > 0) + if (satnum > 100) { MessageBox(hwnd, TEXT("File of Nav Reload complete !"), TEXT("NOTICE"), MB_ICONASTERISK | MB_OK); break; @@ -487,7 +441,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ sat_gps_pos_clac(result_file, hwndPB, nav_b, obs_e, obs_b, obs_h, - o_epochnum, gps_satnum, + o_epochnum, satnum, res_file, obs_f, nav_f, ionoption, trooption); diff --git a/headers/cal_mod.h b/headers/cal_mod.h index 4e2b5e7..3f5053b 100644 --- a/headers/cal_mod.h +++ b/headers/cal_mod.h @@ -69,7 +69,7 @@ pos_ts gps_pos(int sPRN, int best_epoch, double GPSsec, /* ------------------------------- GPS卫星位置计算&输出 ------------------------------ */ void sat_gps_pos_clac(FILE* result_file,HWND hwndPB, pnav_body nav_b, pobs_epoch obs_e, pobs_body obs_b,pobs_head obs_h, - int o_epochnum, int gps_satnum, + int o_epochnum, int satnum, char res_file[MAX_PATH], char obs_file[MAX_PATH], char nav_file[MAX_PATH], int ionoption, int trooption) { @@ -88,7 +88,7 @@ void sat_gps_pos_clac(FILE* result_file,HWND hwndPB, result_file = fopen(res_file, "w"); fclose(result_file); result_file = fopen(res_file, "a+"); - fprintf(result_file, "@ GENERATE PROGRAM : SPP Calculate v0.4.7\n"); + fprintf(result_file, "@ GENERATE PROGRAM : KNZ_Calculate v0.9.7\n"); fprintf(result_file, "@ GENERATE TYPE : Satellite Position\n"); fprintf(result_file, "@ GENERATE TIME : %s", ctime(&gen_time)); fprintf(result_file, "@ OBS FILE PATH : %s\n", obs_file); @@ -129,7 +129,7 @@ void sat_gps_pos_clac(FILE* result_file,HWND hwndPB, { double GPSsec = Time2GPSsec(y, m, d, h, min, sec);//转换为GPS周内秒 int sPRN = obs_e[i].sPRN_GPS[j]; - int best_epoch = select_epoch(GPSsec, sPRN, nav_b, gps_satnum); //遍历N文件GPS卫星数据块,寻找最佳历元 + int best_epoch = select_epoch(GPSsec, sPRN, nav_b, satnum, GPS); //遍历N文件GPS卫星数据块,寻找最佳历元 double detat_toc = GPSsec - nav_b[best_epoch].TOE;//观测时刻 - 参考时刻 //计算近似的信号传播时间,接收机钟差已初始化为0(伪距/光速-接收机钟差+卫星钟差) pos_t.delta_t[sPRN] = (obs_b[i].obs_gps[j][Code2Type(C1C, obs_h->obstypenum_gps, obs_h->obscode_gps)] / C_V) - station.delta_TR + nav_b[best_epoch].sa0 + nav_b[best_epoch].sa1 * detat_toc + nav_b[best_epoch].sa2 * pow(detat_toc, 2); diff --git a/headers/public.h b/headers/public.h index f18085d..1c721a6 100644 --- a/headers/public.h +++ b/headers/public.h @@ -1,5 +1,44 @@ #ifndef _PUBLIC_H_ #define _PUBLIC_H_ +/*---------------------------------- FOR UI ----------------------------------*/ +//FILE SELECT DIALOGS +#define FILEEXOP TEXT("RINEX OBS(*.o*.*.*obs.*.*d)\0*.*o;*.*obs;*.*d\0"\ + "All Files(*.*)\0*.*\0\0"); + +#define FILEEXNP TEXT("RINEX NAV(*.*nav.*.hnav.*.gnav.*.qnav.*.*n.*.*g.*.*h.*.*q.*.*p)\0*.*nav;*.hnav;*.gnav;*.qnav;*.*n;*.*g;*.*h;*.*q;*.*p\0"\ + "All Files(*.*)\0*.*\0\0") + +#define FILEEXSV TEXT("Spos Files(*.sp*)\0*.sp\0"\ + "All Files(*.*)\0*.*\0\0"); + +//DEF MAIN WINDOW BUTTONS +#define OBSBUTTON 3301 +#define NAVBUTTON 3302 +#define CALBUTTON 3303 +#define OPTBUTTON 3304 +#define PLOBUTTON 3305 +#define OBSCLEAR 3306 +#define OBSRELOD 3307 +#define NAVCLEAR 3308 +#define NAVRELOD 3309 +#define PROGRESS 3310 +//DEF MAIN WINDOW GNSS NUTTONS +#define GPSCHECK 5500 +#define GLOCHECK 5501 +#define BEICHECK 5502 +#define GALCHECK 5503 +#define SBACHECK 5504 +#define SYSGROUP 1001 +//DEF OPTIONS WINDOW CHECK+BOXS +#define OPTDFION 7001 +#define OPTDFTRO 7002 +#define OPTCONFI 7003 + +//DEFINE PROGRESSBAR STATE +#define PBSTATENONE 0 +#define PBSTATEHALF 500 +#define PBSTATEFULL 1000 + /* ------------------------------ WGS-84 CONST ------------------------------ */ #define a 6378137.0 @@ -9,6 +48,8 @@ #define math_e 2.718281828459 #define PI 3.141592653589793 #define Earth_e 7.2921151467e-5 + + /* ----------------------------- GPS OBSERV TYPE ---------------------------- */ #define C1C 1 #define C1S 2 @@ -31,6 +72,16 @@ #define C5I 17 #define C5Q 18 #define C5X 19 + + +/* ------------------------------- GNSS CODE -------------------------------- */ +#define GPS 0 +#define BDS 1 +#define CAL 2 +#define GLO 3 +#define SBAS 4 + + /* ------------------------------ FOR CALMOD.H ------------------------------ */ #define MAXRINEX 1000 //卫星位置结构体 diff --git a/headers/read.h b/headers/read.h index dd69eb6..4b28f30 100644 --- a/headers/read.h +++ b/headers/read.h @@ -243,9 +243,9 @@ extern void read_o_b(FILE* fp_obs, pobs_epoch obs_e, pobs_body obs_b, int type_g /* -------------------------------------------------------------------------- */ /* ---------------------- 获取文件数据块行数,从END OF HEADER后开始起算 --------------------- */ -int getgpssatnum(FILE* fp_nav) +int getsatnum(FILE* fp_nav) { - int gps_satnum = 0; + int satnum = 0; int flag = 0; char buff[MAXRINEX];//用来存放读取到的字符串 char satvar; @@ -263,54 +263,18 @@ int getgpssatnum(FILE* fp_nav) while (fgets(buff, MAXRINEX, fp_nav)) { strncpy(&satvar, buff + 0, 1); - if (satvar != 'G') + if (satvar == 'G' || satvar == 'E' || satvar == 'R' || satvar == 'S' || satvar == 'C' || satvar == 'I' || satvar == 'J') + { + satnum++; + } + else { continue; } - else if (satvar == 'G') - { - gps_satnum++; - break; - } - } - } - } - return gps_satnum; -} - -int getbdssatnum(FILE* fp_nav) -{ - int bds_satnum = 0; - int flag = 0; - char buff[MAXRINEX];//用来存放读取到的字符串 - char satvar; - char* lable = buff + 60; - //fgets函数,读取一行,当读取结束后返回NULL指针,格式如下: - //wchar_t * fgets ( wchar_t * str, int num, FILE * stream ); - while (fgets(buff, MAXRINEX, fp_nav)) - { - if (strstr(lable, "END OF HEADER")) - { - flag = 1; - } - if (flag == 1) - { - while (fgets(buff, MAXRINEX, fp_nav)) - { - strncpy(&satvar, buff + 0, 1); - if (satvar != 'C') - { - continue; - } - else if (satvar == 'C') - { - bds_satnum++; - break; - } } } } - return bds_satnum; + return satnum; } /* -------------------------------- 读取N文件数据头 -------------------------------- */ @@ -390,7 +354,7 @@ void read_n_h(FILE* fp_nav, pnav_head nav_h) void read_n_b(FILE* fp_nav, pnav_body nav_b) { int i_g = 0;//第i_g个卫星数据 - char buff[84] = { 0 }; + char buff[MAXRINEX] = { 0 }; char flag = { 0 };//判断符号 while (fgets(buff, MAXRINEX, fp_nav)) { diff --git a/headers/select_epo.h b/headers/select_epo.h index e974cc4..10d1a4e 100644 --- a/headers/select_epo.h +++ b/headers/select_epo.h @@ -10,24 +10,27 @@ /// @param SecofWeek 计算得到的观测历元的周内秒 /// @param sPRN 需要匹配的该历元卫星号 /// @param nav_b 导航文件数据块结构体,与卫星号匹配 -/// @param gps_satnum 该历元的GPS卫星数量 +/// @param satnum 广播星历卫星数量 +/// @param syscode 卫星系统代码,详情见PPUBLIC.H /// @return 返回最佳历元的绝对历元序号 /* -------------------------------------------------------------------------- */ -extern int select_epoch(double SecofWeek, int sPRN, pnav_body nav_b, int gps_satnum) +extern int select_epoch(double SecofWeek, int sPRN, pnav_body nav_b, int satnum, int syscode) { int best_epoch = 0; double min = 10000;//初始化最小值 double Min; - int i; - for (i = 0; i < gps_satnum; i++) + if (syscode == GPS) { - if (sPRN == nav_b[i].sPRN_GPS) + for (int i = 0; i < satnum; i++) { - Min = fabs(SecofWeek - nav_b[i].TOE); - if (Min <= min) + if (sPRN == nav_b[i].sPRN_GPS) { - best_epoch = i; - min = Min; + Min = fabs(SecofWeek - nav_b[i].TOE); + if (Min <= min) + { + best_epoch = i; + min = Min; + } } } } diff --git a/resouce/Delete.ico b/resouce/Delete.ico new file mode 100644 index 0000000000000000000000000000000000000000..f1c99ab14e6fd3b9664a5d79df1def421a40545a GIT binary patch literal 6782 zcmeH|K@Ng25Jih?)`qyzB}>ZwL-L9mvpB4Jj$4vm$e~ff;Db^_UU@`%w@raB7`0vsc$TzM6}fP zQxt{fPDw}iJ-T2(0`}ujF-*y~n$9^v)@LT+gs literal 0 HcmV?d00001 diff --git a/resouce/Main.ico b/resouce/Main.ico new file mode 100644 index 0000000000000000000000000000000000000000..5cd789f3837e395a7d539389060f8f8071d8a974 GIT binary patch literal 4286 zcmc(iOK4qH6o%J1xvfczHa;Q7Bscfg5UW_6L{y};Iw;gfMVtr@6bFt(RK$T0v{l53 z4-ip79BGS+FL0p6DxzF<;0y6FlU^{@iG%uR)EvM6bpPS>a+BO#3ZC#~t-beJ=U@AA zPEH~+e(Lq$s>i<3h_mr#%T~m8ETjD9Vr+8LF^+Zo|G(??dJfcIe*_M|8}Rljyvf+R z@DzmUcP8Xp{{#F2{z+DTH~vli-(X{EYAR&=y~rIga~X755$lWXZ~3 zcNvxZQ}H*$G<*-z@LZQt`!IGZDDE@}Q2n)J)n2BTVyf}@UW?c8rSHA4{W!&E)6>(@ zY&J_$UtqPDiQ{zH=qdxhrL(g(RdB1hk zP}WS|FdPDDx(?5EHT!4E(fJ8jul{llx!PlC`RuKxtFgrtFKzE*wvM?6dBS_}4t}rt z)_#Q?X=@$5mOYg~e1Nqt#P__trz_3h+WUDXm2Y&vl3of(v3idv=RT00pTCu~UE|BV zhc(~6v{fIu!u$3r{#tAA+V&CKRlCw3_`-2+OS-%&;~M(}R@3*If0ous*xL{EoVqb|l8J zzkzc1q`n_g`#@^v9r~XC6)Dd5t!k@A?RCIO;5q8dsGUK;a{pF=?PtX!M=mgjGMeOEB%8g#bxF6gGMxGW*xYoasI2G9LE{D5y$-yy8m zDwD1+`lEvG?e=lc_So2%`(=k<3NC{uK;MU6w`cJK?g7{HSn4b1Xl>gx7RgHYIPKK$ z+D2)A3VKeg>Ax4xr&!hHy;#6MC-s;2ux{0+@#tn1N59v47Qd=1?XTc^2$1%#;F@m1 z5Agn0WqbD1J<9s=cfo^jE6hO5&CLb&F3_{%`X0s)7?_-#lr6tqdlsz(>VJ+Zx>q{4 z=i=W9-+}hq+7ICeEYDl*elKz}<%6D!=io>933Lvm>-9d2e zeu;8BuYzlPwhay@dvfvU;7i5M7@BWItyqYBUbG`G+L6gGTCo9!8?Crzs1>K**2)JP zt$d`h5Vb}-J2P)@+_~eI;oUoqJRN(FY{_biH|N8}(UG%?rFyeij9u_daWvmrEZuSN EKVdb6l>h($ literal 0 HcmV?d00001 diff --git a/resouce/Options.ico b/resouce/Options.ico new file mode 100644 index 0000000000000000000000000000000000000000..41c80d447b350a8f72e0e13968df1b1e9e2920b6 GIT binary patch literal 4286 zcmc(i&2EiR6o$WY8crKgq!@k^i6JusgGO9H8}7mw7hzI&U|`UMa1EX6NQ8OQ5Tp!@ z#NY8gXMaz-9fxY2woBf<*IqyG+JE16+B8%7*S1ZhZC2)*=4`Z!!%@>Lq>ndkB)%(~ z1;wzZb}Cs%$7Eu|x8HK4E6`7Wx&u0*uZ$+!y0&AXT@Ky{A3LDm5AY$zmeFKd_ng{; z;9J+%IzGhMGTMF1{Cgb_y6c&Zz7bgSM|9v^@XZ8>dCUbaIq>~WIKw&?eY#6Hlm0_M zed^NJIzD0$az=S}x*x`$O74wdDL5G@*Q3<+tY6!RQOJb@E;tcul+kwU+%CoRI*@xk z`kfB%I(xl#6-qaKg5>8FPSF7&m48c4kl z+HS>8obl-2gRdQ|1t)g=#yD4EjIU$lqy}P5=fU`8AfMc$ea-nP@xYkcr_Ej;HR{^d z=icUZ9&))(bM57Lnz*aMdEO5>$d`r@GK|&{aJfA?+<%9srSeF?BT0!y{^@@*M04q#QU3) zTi^3x{QpD!dJonzX1&~j`VGV88}5EE9%s`}4~O>&Zr>?u#x#_1-vIgR!CroUkVCF> z;qB#pN32yw+pTlrx6;jEDVW6XFSy`DtWie4x6G}MK|iS9pU#Gwye9zN`OHS&2s~HM z-+O{@^!Ino6Zf9Qd&A!t*7t0!j}I}nj3(2%2Z#0dm#gsZ)_;Gx=lYD@kDh%Px4+oj zqkpbDcz$m%cz9tjSndz;w(XsJ(e~C>+TMH)v)|?pf`xpupzXE22gm287iSh{R{G2H W0392?t+*}^4!Gci+d9LVsr?grug%E- literal 0 HcmV?d00001 diff --git a/resouce/Plot.ico b/resouce/Plot.ico new file mode 100644 index 0000000000000000000000000000000000000000..126e7315e245e476cb3a7b0b68f070728d4b7187 GIT binary patch literal 4286 zcmcInJ!=$E6n!&0o5Vy#q7ku>)kYyj5WymTWE(MmAlMlM6$`EGg0Rs>3yT$_Y5WRA z5kXT06pJ*12CO0~qNO0Q&?caXn>^2X`_B3t5N3DBk>kBH@7;6H+Bg|!73LRS(MZUM8veP9eY40Hhoh=78(ymwG+9u}OB0Sl~p zy9WCSxD4z7n3Eb}@8_xkoSndHfErc+<|lan1GofqBypo2dFLnJ2*7+bZ&{09!Tk&P zTLA85Px2_epm&$Q?4Lh}b?;7_*99*1^_kD38Zf`0XZx6&F*)W>Jm+8rx0KGkF*DHIvQ8aC7Xcd)2eAIG2jtMZAA!$&`Zg=K ztTa5pbdcw-UNoa2+zTFZsTOD9Ghg~_rZwD1#gQYV&E$Iy7Ykn+uEA$My{~f1N?XOp zC!7H9XUZFHQXDLMp;@>KpZWf!LFe`)_As}4*lr!1hR%9_ZwDImZBz|-Pw=~O6i8`k z?)wx+QKNp~q6YQiDtzW-&C?q6&H9G5et;Z`3rn2IkL%|_I>K{t9=z1Re9Eahs1NV3 z)(bFRJ#v-PkpZBd?o(Er7@j1I4&tC%45YB|^a@@yCx8rC_L;al!34RWNo4-l!cn!>{ znUEI#d$t$g-j?T4dOeT&!QP7V9DKcV+P=Zs1|Q2g5?xEy^GHKDmxr(x&ID_q*|_K9 zoZgla2SKT`K`rWUAN;3)W`g}tJx;)PdjqPrT+gRk@ZC@kH|t~YH4FM~f5)?3jLGvN zUjWX8YB31^Bfwhx^p^kc%QL;>B4>bbCf4KmO@JD7CPs1>;0Xf_)Wd%0d>n*74^YSZ z|COJ-;13bjf?7s_nRvijGYRxqJHEM&GW>FP#g@C~Y`J&TmUa$UQ<}8H<2`oD6zvDo zYir}{Dz$P_SuMqLYt?Af4x1S}ZI0OmQ?QGs-!6^!*=5sh*Q$xN!@zWG?R;eI(nV`m L%GTDZ77M=tYJp3; literal 0 HcmV?d00001 diff --git a/resouce/Reload.ico b/resouce/Reload.ico new file mode 100644 index 0000000000000000000000000000000000000000..7105b554b17502de8d993d70a5d7afd33655eda5 GIT binary patch literal 6782 zcmeHKJugI26ui%OqM$%Qu?oc|8kIyP`~h1lNK_J`Awk4f6r$5fG`8YrsQe0vR-!<$ zVy)e`X5O7E{(!U1Ih)xz_uQMz?7ZEVw;^PBmCFG&8P>-`7(>S;Q2{c{y*vR=z!UHU zJONL@6EIGIk0e{bwZOgvu(~6ezh_e11AhW-AQ#wk#ywV7B(wMA?E;GQ(g5y&Re}8% zz&)O^tmJJ0qSU94B^h8&DJ#yBN1nB+q<;%R`a6_xAGinT1^P8R0`m;dS{A)L0n{#@ z+`-8=+TWggJj1h=H3YFYpazUeI9>Mv&6wo~@B#3wWl{SPU^dedW~Qudfb$Ii|Ava5 zXOn-lCRK$BeVj{;xv>ra&NqP_^;NKS%|Vbpc+Xq;BhKFo=MTWE`dM%%DrH4KH!^Sn z=DIHC{g1z$LBO)o_h}8H^m8TgGp)bH&*FXUTT;5GOhB|G;axEOz5u+w?^<`lAEdoJ z0Z+ga@B};oPrwtfO`y$!