⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpicker.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 4 页
字号:
			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 + -