📄 xpicker.c
字号:
temp[iz] = fabs(z[iz]); iz = (nz*perc/100.0); if (iz<0) iz = 0; if (iz>nz-1) iz = nz-1; qkfind(iz,nz,temp); clip = temp[iz]; free1float(temp); } verbose = 1; getparint("verbose",&verbose); if (verbose) warn("clip=%g",clip); /* get wiggle-trace-variable-area parameters */ wt = 1; getparint("wt",&wt); va = 1; getparint("va",&va); /* set wt=va for va with solid/grey coloring */ if (va>=2) { wt=va; va=1; } xcur = 1.0; getparfloat("xcur",&xcur); /* get axes parameters */ xbox = 50; getparint("xbox",&xbox); ybox = 50; getparint("ybox",&ybox); wbox = 550; getparint("wbox",&wbox); hbox = 700; getparint("hbox",&hbox); x1beg = x1min; getparfloat("x1beg",&x1beg); x1end = x1max; getparfloat("x1end",&x1end); d1num = 0.0; getparfloat("d1num",&d1num); f1num = x1min; getparfloat("f1num",&f1num); n1tic = 1; getparint("n1tic",&n1tic); getparstring("grid1",&grid1s); if (STREQ("dot",grid1s)) grid1 = DOT; else if (STREQ("dash",grid1s)) grid1 = DASH; else if (STREQ("solid",grid1s)) grid1 = SOLID; else grid1 = NONE; getparstring("label1",&label1); x2beg = x2min; getparfloat("x2beg",&x2beg); x2end = x2max; getparfloat("x2end",&x2end); d2num = 0.0; getparfloat("d2num",&d2num); f2num = 0.0; getparfloat("f2num",&f2num); n2tic = 1; getparint("n2tic",&n2tic); getparstring("grid2",&grid2s); if (STREQ("dot",grid2s)) grid2 = DOT; else if (STREQ("dash",grid2s)) grid2 = DASH; else if (STREQ("solid",grid2s)) grid2 = SOLID; else grid2 = NONE; getparstring("label2",&label2); getparstring("labelfont",&labelfont); labelsize = 18.0; getparfloat("labelsize",&labelsize); getparstring("title",&title); getparstring("titlefont",&titlefont); titlesize = 24.0; getparfloat("titlesize",&titlesize); getparstring("style",&styles); if (STREQ("seismic",styles)) style = SEISMIC; else err("Sorry, only style=seismic is currently available!"); getparstring("titlecolor",&titlecolor); getparstring("labelcolor",&labelcolor); getparstring("gridcolor",&gridcolor); /* initialize zoom box parameters */ x1begb = x1beg; x1endb = x1end; x2begb = x2beg; x2endb = x2end; /* connect to X server */ if ((dpy=XOpenDisplay(NULL))==NULL) err("Cannot connect to display %s!\n",XDisplayName(NULL)); scr = DefaultScreen(dpy); black = BlackPixel(dpy,scr); white = WhitePixel(dpy,scr); /* set endian for display */ if (!getparint("endian",&endian)){ if (BitmapBitOrder(dpy)==LSBFirst) endian=0; else if (BitmapBitOrder(dpy)==MSBFirst) endian=1; else endian=CWPENDIAN; } /* set interpolation flag for display */ if (!getparint("interp",&interp)) interp = 0; /* create window */ win = xNewWindow(dpy,xbox,ybox, wbox+COMMAND_WIDTH,hbox,(int) black,(int) white,"xpicker"); /* make GC for image */ gci = XCreateGC(dpy,win,0,NULL); /* copy this stuff for garnish's stupid global variables */ display=dpy; window=win; gc=XCreateGC(dpy,win,0,NULL); /* GC for cross hairs */ rgc = XCreateGC(dpy,win,0,NULL); XSetFunction(dpy,rgc,GXxor); XSetForeground(dpy,rgc,0xffffff); XSetBackground(dpy,rgc,0); mask = BlackPixel(dpy,scr) ^ WhitePixel(dpy,scr); XSetPlaneMask(dpy,rgc,mask); /* make sure foreground/background are black/white */ XSetForeground(dpy,gci,black); XSetBackground(dpy,gci,white); /* set normal event mask */ XSelectInput(dpy,win, StructureNotifyMask | ExposureMask | KeyPressMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask | Button2MotionMask | Button3MotionMask); /* map window */ XMapWindow(dpy,win); /* clear the window */ XClearWindow(dpy,win); /* determine good size for axes box */ xSizeAxesBox(dpy,win, labelfont,titlefont,style, &x,&y,&width,&height); width-=COMMAND_WIDTH; /*had to make room for command buttons on left*/ /* note that image is out of date */ imageOutOfDate = 1; sprintf(pick_fname,mpicks); num_wiggles=n2; init_stuff(wbox,num_wiggles,&filename_input,pick_fname, &control_mode,&edit_mode,&cross_mode); /* main event loop */ while(num_wiggles|(~num_wiggles)/*True*/) { XNextEvent(dpy,&event); /* if window was resized */ if (event.type==ConfigureNotify && (event.xconfigure.width!=winwidth || event.xconfigure.height!=winheight)) { winwidth = event.xconfigure.width; winheight = event.xconfigure.height; /* determine good size for axes box */ xSizeAxesBox(dpy,win, labelfont,titlefont,style, &x,&y,&width,&height); /*had to make room for command buttons on left*/ width-=COMMAND_WIDTH; /* clear the window */ XClearWindow(dpy,win); init_stuff(winwidth,num_wiggles, &filename_input,pick_fname, &control_mode,&edit_mode,&cross_mode); /* note that image is out of date */ imageOutOfDate = 1; /* else if window exposed */ } else if (event.type==Expose) { /* clear all expose events from queue */ while (XCheckTypedEvent(dpy,Expose,&event)); draw_command_bar(winwidth,filename_input,pick_fname, control_mode,edit_mode, cross_mode); /* if necessary, make new image */ if (imageOutOfDate) { if (image!=NULL) { /* free1(image->data); */ XDestroyImage(image); } image = newBitmap(dpy,width,height, n1,d1,f1,n2,x2,z, x1begb,x1endb,x2begb,x2endb, xcur,clip,wt,va, &p2beg,&p2end,endian,interp); imageOutOfDate = 0; } /* draw image (before axes so grid lines visible) */ XPutImage(dpy,win,gci,image,0,0,x,y, image->width,image->height); /* draw axes on top of image */ xDrawAxesBox(dpy,win, x,y,width,height, x1begb,x1endb,0.0,0.0, d1num,f1num,n1tic,grid1,label1, x2begb,x2endb,p2beg,p2end, d2num,f2num,n2tic,grid2,label2, labelfont,title,titlefont, labelcolor,titlecolor,gridcolor, style); if (control_mode==PICK_MODE) { /*display pick points if in pick mode*/ for(i=0;i<pickdimax;i++) if((*apick)[i].picked) draw_pick(dpy,win,gc, *apick,i, x,y, width,height, x1begb,x1endb, x2begb,x2endb, p2beg,p2end); } /* else if key down */ } else if (event.type==KeyPress) { XLookupString( (XKeyEvent*) &event, (char*) keybuf, (int) 1, (KeySym*) &keysym, (XComposeStatus*) &keystat); if(control_mode==REGULAR_MODE) { if (keysym==XK_s) { xMousePrint(event,style, mpicksfp, x,y,width,height, x1begb,x1endb,x2begb,x2endb); } else if (keysym==XK_l ) { /* set lock */ lock = 1 ; if (verbose) warn("zoom lock set %d\n",lock); } else if (keysym==XK_u ) { /* unset lock */ lock = 0 ; if (verbose) warn("zoom lock released %d\n",lock); } else if (keysym==XK_Left ) { /* move zoom box to left by half window width */ mve = (x2endb - x2begb)/2. ; x2begb = x2begb - mve ; x2endb = x2endb - mve ; msg="move "; /* check for bounds of full window */ if (x2begb < x2beg) { if ( lock ) { x2begb = x2begb + mve ; x2endb = x2endb + mve ; msg="limit "; mve=0; } else { x2begb = x2beg ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Right ) { /* move zoom box to right by half window width*/ mve = (x2endb - x2begb)/2. ; x2begb = x2begb + mve ; x2endb = x2endb + mve ; msg="move "; /* check for bounds of full window */ if (x2endb > x2end) { if ( lock ) { x2begb = x2begb - mve ; x2endb = x2endb - mve ; msg="limit "; mve=0; } else { x2endb = x2end ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Down ) { /* move zoom box down by half window height */ mve = (x1endb - x1begb)/2. ; x1begb = x1begb + mve ; x1endb = x1endb + mve ; msg="move "; /* check for bounds of full window */ if (x1endb > x1end) { if ( lock ) { x1begb = x1begb - mve ; x1endb = x1endb - mve ; msg="limit "; mve=0; } else { x1endb = x1end ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Up ) { /* move zoom box down by half window height */ mve = (x1endb - x1begb)/2. ; x1begb = x1begb - mve ; x1endb = x1endb - mve ; msg="move "; /* check for bounds of full window */ if (x1begb < x1beg) { if ( lock ) { x1begb = x1begb + mve ; x1endb = x1endb + mve ; msg="limit "; mve=0; } else { x1begb = x1beg ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_o || keysym==XK_KP_Subtract ) { /* zoom out .... vertical*/ mve = (x1endb - x1begb)/2. ; x1begb = x1begb - mve ; x1endb = x1endb + mve ; /* check for bounds of full window */ if (x1begb < x1beg) x1begb = x1beg ; if (x1endb > x1end) x1endb = x1end ; /* .... and horizontal */ mve = (x2endb - x2begb)/2. ; x2begb = x2begb - mve ; x2endb = x2endb + mve ; /* check bounds of original image */ if (x2begb < x2beg) x2begb = x2beg ; if (x2endb > x2end) x2endb = x2end ; /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_i || keysym==XK_KP_Add ) { /* zoom in .... vertical*/ mve = (x1endb - x1begb)/4. ; x1begb = x1begb + mve ; x1endb = x1endb - mve ; /* .... and horizontal */ mve = (x2endb - x2begb)/4. ; x2begb = x2begb + mve ; x2endb = x2endb - mve ; /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_c || keysym==XK_Page_Down) { /* Change clip for image */ clip += clip/10. ; if (verbose) warn("clip=%g\n",clip); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_a || keysym==XK_Page_Up) { /* Change clip for image */ clip -= clip/10. ; if (verbose) warn("clip=%g\n",clip); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_q || keysym==XK_Q) { /* This is the exit from the event loop */ break; } else { continue; } } else { /* ==== must be pick mode ===== */ if(keysym==XK_Delete || keysym==XK_BackSpace) DeleteTextSetChar(0); else if (keysym==XK_Left ) { /* move zoom box to left by half window width */ mve = (x2endb - x2begb)/2. ; x2begb = x2begb - mve ; x2endb = x2endb - mve ; msg="move "; /* check for bounds of full window */ if (x2begb < x2beg) { if ( lock ) { x2begb = x2begb + mve ; x2endb = x2endb + mve ; msg="limit "; mve=0; } else { x2begb = x2beg ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Right ) { /* move zoom box to right by half window width*/ mve = (x2endb - x2begb)/2. ; x2begb = x2begb + mve ; x2endb = x2endb + mve ; msg="move "; /* check for bounds of full window */ if (x2endb > x2end) { if ( lock ) { x2begb = x2begb - mve ; x2endb = x2endb - mve ; msg="limit "; mve=0; } else { x2endb = x2end ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Down ) { /* move zoom box down by half window height */ mve = (x1endb - x1begb)/2. ; x1begb = x1begb + mve ; x1endb = x1endb + mve ; msg="move "; /* check for bounds of full window */ if (x1endb > x1end) { if ( lock ) { x1begb = x1begb - mve ; x1endb = x1endb - mve ; msg="limit "; mve=0; } else { x1endb = x1end ;} } if (verbose) fprintf(stderr,"%s %g\n",msg,mve); /* clear area and force an expose event */ XClearArea(dpy,win,0,0,0,0,True); /* note that image is out of date */ imageOutOfDate = 1; } else if (keysym==XK_Up ) { /* move zoom box down by half window height */ mve = (x1endb - x1begb)/2. ; x1begb = x1begb - mve ; x1endb = x1endb - mve ; msg="move "; /* check for bounds of full window */ if (x1begb < x1beg) { if ( lock ) { x1begb = x1begb + mve ; x1endb = x1endb + mve ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -