int computeFS () { uint refresh = 2,key; int index = 0,i,hcs; char ch; double ht,hz,v,bh,hd; double value[4] = {0.0,0.0,0.0,0.0}; const char * context[] = {"","","",""}; while(1){ if (refresh == REFRESH_ALL){ refresh = REFRESH_PART; Bdisp_AllClr_VRAM(); SetMyFont(&stHz12x12,&stAsc6x12); //¶¨Òå×ÖÌå´óС DispStr(2,1, "Ïß "); DispStr(2,12,"· "); DispStr(2,25,"·´ "); DispStr(2,38,"Ëã "); ShowTitle(TITLE); DispStr(17,0, "×ø±êX: "); DispStr(17,13,"×ø±êY: "); DispStr(17,26,"×ø±êZ: "); //DispStr(17,39,"×ø±êZ: "); for (i=0;i<4;++i){ PrintXY(50,2+i*12,(uchar*)context[i],0); } PrintIcon (0,"Rou",0); PrintIcon (1,"Set",0); PrintIcon (2,"Disp",0); PrintIcon (3,"=0=",1); PrintIcon (4,"Save",1); PrintIcon (5,"?",0); } if (refresh == REFRESH_PART){ for (i=0;i<4;++i){ PrintFloat(value[i],48,0+i*12,index==i,4); //ÊäÈë¿òλÖà } refresh = 0; } GetKey(&key); switch(key){ case KEY_CTRL_F1 : SET(); refresh=REFRESH_ALL; break; case KEY_CTRL_F2 : ZSSET(); refresh=REFRESH_ALL; break; case KEY_CTRL_F3 : RestoreDisp(SAVEDISP_PAGE1);refresh=REFRESH_ALL;WaitKey();break; case KEY_CTRL_F4 : case KEY_CTRL_F5 : Nodata(); refresh=REFRESH_ALL; break; case KEY_CTRL_F6 : About(); refresh=REFRESH_ALL; break; case KEY_CTRL_UP : refresh=REFRESH_PART; --index; break; case KEY_CTRL_DOWN : refresh=REFRESH_PART; ++index; break; case KEY_CTRL_EXE: if (index<3){ refresh = REFRESH_PART; index++; }else{ yscs.x1 = value[0]; yscs.y1 = value[1]; hz = value[2]; ht = value[3]; refresh=REFRESH_ALL; //yscs.k=0.0; yscs.k=xy_to_sdSrd( yscs.x1, yscs.y1, 0); yscs.d=xy_to_sdSrd( yscs.x1, yscs.y1, 1); //yscs.k=xy_to_sd( yscs.x1, yscs.y1, 0); //yscs.d=xy_to_sd( yscs.x1, yscs.y1, 1); //FS(); GC(); HP(); if (yscs.d<0) hcs=-1; //Æ«¾à×ó²à if (yscs.d>=0) hcs=1; //Æ«¾àÓÒ²à if (yscs.d*hcs<=zfset.zsp) hd=0; // if (zfset.zsh==0) hd=0; if (yscs.d*hcs>zfset.zsp && yscs.d*hcs-zfset.zsp<zfset.zsh) hd=(yscs.d*hcs-zfset.zsp)*hcs; if (yscs.d*hcs-zfset.zsp>=zfset.zsh) hd=zfset.zsh*hcs; bh=yscs.gch+(yscs.hpd*hd)-ht; Bdisp_AllClr_VRAM(); DispStr(2,0, "¼Æ "); DispStr(2,12,"Ëã "); DispStr(2,26,"½á "); DispStr(2,39,"¹û "); ShowTitle(TITLE); DispStr(17,0,"×®ºÅ "); DispStr(17,13,"Æ«¾à "); DispStr(17,26,"ÌîÍÚ: "); DispStr(17,39,"»ù¸ß: "); PrintfXY (48,2.5,0,"%.4f",yscs.k); PrintfXY (48,15,0,"%.4f",yscs.d); PrintfXY (48,28,0,"%.4f",yscs.gch); PrintfXY (48,42,0,"%.4f",yscs.hpd); //PrintfXY (22,40,0," H= %.3f",bh); //PrintfXY (22,48,0," H-Z= %.3f",hz-bh); SaveDisp(SAVEDISP_PAGE1); WaitKey(); ++index; }break; case KEY_CTRL_EXIT: return 0; default: if ((ch=GetPressNumChar(key))!=0){ char buf[14]; int r; refresh = REFRESH_PART; buf[0] = ch; buf[1] = '\0'; r = InputString (48,0+index*12,buf,0,12); //ÊäÈë¿òλÖà if (r != KEY_CTRL_EXIT){ value[index] = atof(buf); if (r==KEY_CTRL_DOWN) ++index; if (r==KEY_CTRL_UP) --index; if (r==KEY_CTRL_EXE && index<3) ++index; } break; } } if (index >=4) index = 2; if (index < 0) index = 3; } }
int Suidao_DM(void) { int display = 0; double sd_pj = 0.0 ; /* 测点与中线的距离 */ double sd_gc = 0.0 ; /* 测点与设计线的高差 */ unsigned int key = 0 ; unsigned int back_key ; BYTE exit_flag = FALSE; BYTE xyrow = 0 ; int shuaxin = TRUE; /* 刷新 */ while (exit_flag != TRUE) { switch(key) { case KEY_CTRL_F1: default: if (key == KEY_CTRL_F1) shuaxin == TRUE; if (shuaxin){ Bdisp_AllClr_DDVRAM() ; Print_zh("隧道断面 ", 0, 1, VERT_REV) ; PrintIcon (0,"Home",0); PrintIcon (1,"Set",0); PrintIcon (2,"SQX",0); PrintIcon (3,"DM",0); (R_L > 0) ? PrintIcon (4,"YOU",0) : PrintIcon (4,"ZUO",1); PrintIcon (5,"Help",0); shuaxin = FALSE; } back_key = key ; Bdisp_AreaClr_DDVRAM(&clear_area) ; Print_zh("X坐标 ", 20, 6, 0) ; Print_zh("Y坐标 ", 20, 22, 0) ; Print_zh("Z坐标 ", 20, 38, 0) ; if (xyrow > 2) { if (!sd_flag) { Warning("未载入断面 ",2); //exit_flag = TRUE ; //强制退出以解决卡在载入数据界面的问题 fix by 龙之冰点 xyrow = 0; /* 把焦点设置在TOP */ key = KEY_CTRL_F4; break ; } xyrow = 0 ; x = sd_x ; y = sd_y ; SaveDisp(SAVEDISP_PAGE2) ; if (InputStake(FS_NOPOPUP) == FSOK){ number = fs_zh ; if (!GC_JS(number)) break ; RestoreDisp(SAVEDISP_PAGE2) ; Bdisp_AreaClr_DDVRAM(&clear_area) ; sd_gc = sd_z - DesignGC; if (!yanxin(fs_pj, sd_gc)){ Warning("断面计算失败 ",2); key == KEY_CTRL_F1; break ; } Print_zh("桩号K ", 20, 0, 0) ; Print_zh("偏距D ", 20, 13, 0) ; Print_zh("高差H ", 20, 26, 0) ; if (sd_cqw < 0) Print_zh("欠挖W ", 20, 39, 0) ; else Print_zh("超挖T ", 20, 39, 0) ; Print_C(120, 4, CA = fs_zh, 3) ; Print_C(120, 17, CA = fs_pj, 3) ; Print_C(120, 30, CA = sd_gc, 3) ; Print_C(120, 43, CA = sd_cqw, 3) ; key = 0 ; while(key != KEY_CTRL_EXE && key != KEY_CTRL_EXIT) GetKey(&key) ; key = KEY_CTRL_F1 ; break ; } RestoreDisp(SAVEDISP_PAGE2) ; } Print_C(112, 10, CA = sd_x, 3) ; Print_C(112, 26, CA = sd_y, 3) ; Print_C(112, 42, CA = sd_z, 3) ; key = InputVal(59, 8+xyrow*16) ; switch (xyrow) { case 0: sd_x = number ? number : sd_x ; break ; case 1: sd_y = number ? number : sd_y; break ; case 2: sd_z = number ? number : sd_z; break ; default: break ; } if (key >= KEY_CTRL_F1 && key <= KEY_CTRL_F6) xyrow = 0 ; break ; case KEY_CTRL_F2: back_key = key ; Bdisp_AreaClr_DDVRAM(&clear_area) ; Print_zh("修正H ", 20, 6, 0) ; Print_zh("修正D ", 20, 22, 0) ; Print_zh("修正R ", 20, 38, 0) ; if (xyrow > 2) { /* 返回上一个菜单 */ key = KEY_CTRL_F1 ; xyrow = 0 ; break ; } Print_C(112, 10, CA = sd_h, 3) ; Print_C(112, 26, CA = sd_d, 3) ; Print_C(112, 42, CA = sd_r, 3) ; key = InputValP(59, 8+xyrow*16) ; switch (xyrow) { case 0: sd_h = number ? number : sd_h ; break ; case 1: sd_d = number ? number : sd_d ;break ; case 2: sd_r = number ? number : sd_r ; break ; default: break ; } if (key >= KEY_CTRL_F1 && key <= KEY_CTRL_F6) xyrow = 0 ; break ; case KEY_CTRL_F3: SaveDisp(SAVEDISP_PAGE2) ; if (sqx_flag == TRUE) { if ( InputSQstake() == TRUE) { if (InputSQpj() == TRUE) { /* 输入偏距 */ DesignGC = Cut_3(DesignGC) ; PopUpWin(3); locatestr(12,22) ; printf("高程:%.3f",DesignGC ) ; GetKey(&key); } } } else DebugS("未载入竖曲线 ") ; key = back_key ; RestoreDisp(SAVEDISP_PAGE2) ; break ; case KEY_CTRL_F4: sd_flag = load_SD_data(sd_flag) ; key = KEY_CTRL_F1 ; shuaxin = TRUE; break ; case KEY_CTRL_F5: if (R_L == -1){ R_L = 1; Warning("应用在右幅 ",2); } else{ R_L = -1; Warning("应用在左幅 ",2); } key = KEY_CTRL_F1 ; shuaxin = TRUE; break ; case KEY_CTRL_F6: Bdisp_AllClr_DDVRAM() ; Print_zh("Home=刷新页面 ", 1, 2, 0) ; Print_zh("Set =断面数据修正 ", 1, 16, 0) ; Print_zh("SQX =竖曲线高程 ", 1, 30, 0) ; Print_zh("DM =选择断面文件 ", 1, 44, 0) ; GetKey(&key); Bdisp_AllClr_DDVRAM() ; Print_zh("ZUO =应用在左幅 ", 1, 2, 0) ; Print_zh("YOU =应用在右幅 ", 1, 16, 0) ; Print_zh("修正H=改变圆心高差 ", 1, 30, 0) ; Print_zh(" (+上移 -下移)", 1, 44, 0) ; GetKey(&key); Bdisp_AllClr_DDVRAM() ; Print_zh("修正D=改变圆心偏距 ", 1, 2, 0) ; Print_zh(" (+右移 -左移) ", 1, 16, 0) ; Print_zh("修正R=改变设计半径 ", 1, 30, 0) ; Print_zh(" (+变长 -变短)", 1, 44, 0) ; GetKey(&key); key = KEY_CTRL_F1 ; shuaxin = TRUE; break ; case KEY_CTRL_UP: if (xyrow > 0) --xyrow ; key = back_key ; break ; case KEY_CTRL_DOWN: case KEY_CTRL_EXE: ++xyrow ; key = back_key ; break ; case KEY_CTRL_DEL: key = back_key ; break ; case KEY_CTRL_EXIT : exit_flag = TRUE ; break ; } } return ; }
int PM_parameter() { char * table_label[]= {"DH","QDZH","ZDZH","X","Y","FWJ","ZX","QDBJ","ZDBJ"}; char * icons[] = {"","","","",""}; char * ch_text[] = {"\xb5\xe3\xc3\xfb", "起点桩号", "终点桩号", "X坐标 ", "Y坐标 ", "方位角 ", "转向 ", "起点半径", "终点半径"}; int x = 0,y = 0,i,j,t; int left = 0,top = 0; int refresh = REDRAW_ALL; int enter,suc; char str[13]=""; char c; PMproduce(); //打开交点参数转换平面参数 InsertLine(l_pqx.length,&y,&refresh); GetListq(); //取链表链表线元参数 while(1){ if (refresh==REDRAW_ALL){ Bdisp_AllClr_VRAM(); for (i=0;i<4;++i) PrintTablesPM(i,0,table_label[left+i],1,1); t = pmroute.size<= 1 ? 2 : 5; //如果交点个数小于等于1 那么T=2 否则等于5 if (t>=2){ SetMyFont(&stHz8x8,&stAsc6x12); DispStr(2,56,"\xCE\xC4\xBC\xFE"); DispStr(23,56,"添加"); } if (t>2){ SetMyFont(&stHz8x8,&stAsc6x12); DispStr(45,56,"插入 "); DispStr(65,56,"删行 "); DispStr(86,56,"清空 "); } for (i=0;i< t;++i) // i<2 或 i<5 PrintIcon(i,icons[i],0); //打印下标 PrintIcon(5,"?",0); //固定打印下标 refresh = REDRAW_PART; // 重画部分 } if (refresh==REDRAW_PART){ //如果画部分 double * sd; for (i=top;i<top+4 && i<pmroute.size;++i){ sd = & (pmroute.set[i].pm_qk); for (j=(left==0 ? 1:0);j<4;++j){ //if (i==0 && j+left>3) ////////////////////////////////////////// //PrintTablesPM(j,i+1-top,"",y==i && x-left==j,0);/////////////// //else///////// PrintTableFormatPM(j,i+1-top,y==i && x-left==j,0,"%lf",sd[j+left-1]); } if (left==0) PrintTableFormatPM(0,i+1-top,y==i && x-left==0,0,"%s",pmroute.set[i].name); PrintTableIndexPM(i-top+1,i); } SetMyFont(&stHz12x12,&stAsc6x12); if(x>0){ //if (!(y==0 && x>2)){ sd = & (pmroute.set[y].pm_qk); //取地址的值*************** DispStr(0,42,ch_text[x]); PrintFloat(sd[x-1],49,42,0,setup_data.point); //打印 //} }else{ DispStr(0,42,ch_text[x]); PrintXY(51,44,pmroute.set[y].name,0); } refresh = 0; } GetKey(&key); switch (key){ case KEY_CTRL_UP: y--;refresh = REDRAW_ALL;break; case KEY_CTRL_DOWN: y++;refresh = REDRAW_ALL;break; case KEY_CTRL_LEFT: x--;refresh = REDRAW_ALL;break; case KEY_CTRL_RIGHT: x++;refresh = REDRAW_ALL;break; case KEY_CTRL_EXIT: pmroute_initial(&pmroute); InitList(&l_pqx); return 0 ; case KEY_CTRL_F1: /* Set */ refresh = REDRAW_ALL; SelectfilePM(); break; case KEY_CTRL_F2: /* Add */ pmroute_push_back (&pmroute); y = pmroute.size - 1; refresh = REDRAW_ALL; break; case KEY_CTRL_F3: /* ins */ //if (y==0) break; pmroute_insert (&pmroute,y); y++; refresh = REDRAW_ALL; break; case KEY_CTRL_F4: /* Del a point */ //if (y==0) break; refresh = REDRAW_ALL; PopUpWin(4);DispStr(25,10,"删 除 一 行?"); locate(3,5);Print("[F1]Yes [F6]No"); GetKey(&key); if (key==KEY_CTRL_F1){ pmroute_del(&pmroute,y);y--; } break; case KEY_CTRL_F5: /* Del All */ refresh = REDRAW_ALL; PopUpWin(4);DispStr(25,10,"清 空 所 有 ?"); locate(3,5);Print("[F1]Yes [F6]No"); GetKey(&key); if (key==KEY_CTRL_F1){ pmroute_initial(&pmroute); pmroute_push_back(&pmroute); } break; case KEY_CTRL_F6: refresh = REDRAW_ALL; //PrintfXY (70,30,0,"%.3f",route.set[0].xy_zr); //DispStr(15,10,"线路名称"); //if(setup_data.pmroute_name[0]==0) //{ //DispStr(25,27,"请保存线路文件 "); //} //else //{ //DispStr(25,27,setup_data.zdmroute_name); //} break; default: /*other things*/ if (x>0 && (c=GetPressNumChar(key))!=0){ char buffer[14]; int r; //if (y==0 && x > 3)break; buffer[0] = c; buffer[1] = '\0'; r = InputString(49,42,buffer,0,12); if (r!=KEY_CTRL_EXIT){ double * sd; sd = (double*)&(pmroute.set[y].pm_qk); sd[x-1] = atof(buffer); switch(r){ case KEY_CTRL_UP: y--;break; case KEY_CTRL_DOWN: y++;break; case KEY_CTRL_EXE: x++;break; } } refresh = REDRAW_ALL; } else if (x==0 && (c=GetPressChar(key))!=0){ char buffer[14]; int r; buffer[0] = c; buffer[1] = '\0'; r = InputString(49,42,buffer,1,12); if (r!=KEY_CTRL_EXIT){ strncpy(pmroute.set[y].name,buffer,12); switch(r){ case KEY_CTRL_UP: y--;break; case KEY_CTRL_DOWN: y++;break; case KEY_CTRL_EXE: x++;break; } } refresh = REDRAW_ALL; } break; } if (x<0) x = 8,y--; if (x>8) x = 0,y++; if (y<0) y = 0; if (y>=pmroute.size) y = pmroute.size - 1; if (y>top + 3) top = y - 3; if (y<top) top = y; if (x>left +3) left = x - 3; if (x<left) left = x; } }