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

📄 xpicker.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 4 页
字号:
		/**  added by Bill Lutter 10/96   */		/* Read in header values (allowable pick.x2 values and also */		/* allowable values (for these traces) in pick file  */		off = read_keyval(x2file,&ioff,verbose);		if (verbose) warn("x-axis value 0:   %f\n",off[0]);		if (verbose) warn("x-axis value ioff:  %d %f\n",ioff,off[ioff]);	} else { /* use n2 and x2 for the "ioff" and "off" values */		ioff = n2;		off = ealloc1float(ioff);		memcpy( (void *) off, (const void *) x2, n2*FSIZE);	}			/* dynamically allocate memory for picks  - Bill Lutter    */	cpick = (pick_t *) malloc(pickdimax*sizeof(struct pick_tag ));	apick = &cpick;	init_picks(apick,&pickdimax,&pickdimend);	/* set up file to save mouse picks */	if (!getparstring("mpicks", &mpicks)) mpicks = "pick_file";		mpicksfp = efopen(mpicks, "w");	/* read binary data to be plotted */	nz = n1*n2;	z = ealloc1float(nz);	if (fread(z,sizeof(float),nz,infp)!=nz)		err("error reading input file");	/* if necessary, subtract bias */	if (getparfloat("bias",&bias) && bias!=0.0)		for (iz=0; iz<nz; iz++)			z[iz] -= bias;		/* if necessary, determine clip from percentile */	if (!getparfloat("clip",&clip)) {		perc = 100.0;  getparfloat("perc",&perc);		temp = ealloc1float(nz);		for (iz=0; iz<nz; iz++)			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);	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,black,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(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,blue_r_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_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) 			    TextLineBack(0);			  else if (keysym == XK_Right)			    TextLineForward(0);			  else if (keysym == XK_Up)			    TextLineUp(0);			  else if (keysym == XK_Down)			    TextLineDown(0);			  else if (keysym == XK_Shift_L || 				   keysym == XK_Shift_R || 				   keysym == XK_Control_L ||				   keysym == XK_Control_R ||				   keysym == XK_Return)			    continue;			  else {			    AddTextSetChar(0,keybuf[0]);			  }			}		/* else if button down (1 == zoom, 2 == mouse tracking */		} else if (event.type==ButtonPress) {		  if(event.xbutton.x>x+width) {		    check_buttons(dpy,win,rgc,event,				  apick,num_wiggles,				  x,y,				  winwidth,height,				  x1begb,x1endb,x2begb,x2endb,				  p2beg,p2end,				  filename_input,				  pick_fname,				  &control_mode,				  &edit_mode,				  &cross_mode,				  &pickdimax,				  &pickdimend,			          verbose);		  }			/* if 1st button: zoom */		  else if (event.xbutton.button==Button1) {		      /* track pointer and get new box */		    draw_cross(dpy,win,blue_r_gc,x,y,width,height,			       event.xbutton.x,event.xbutton.y,cross_mode,			       ERASE_FLAG);		    				xRubberBox(dpy,win,event,&xb,&yb,&wb,&hb);							/* if new box has tiny width or height */				if (wb<4 || hb<4) {									/* reset box to initial values */					x1begb = x1beg;					x1endb = x1end;					x2begb = x2beg;					x2endb = x2end;							/* else, if new box has non-zero width */				/* if new box has zero width or height */				} else {								/* calculate new box parameters */					zoomBox(x,y,width,height,						xb,yb,wb,hb,						x2begb,x2endb,						x1begb,x1endb,						&x2begb,&x2endb,						&x1begb,&x1endb);				}				/* 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 2nd button down: display mouse coords */			} else if (event.xbutton.button==Button2) {				showloc = 1;				xMouseLoc(dpy,win,event,style,showloc,					  x,y,width,height,x1begb,x1endb,					  x2begb,x2endb,p2beg,p2end);			} else {       /*3rd button*/				edit_pick(dpy,win,red_r_gc,event,				    style,x,y,				    width,height,				    apick,num_wiggles,				    x1begb,x1endb,				    x2begb,x2endb,				    p2beg,p2end,				    control_mode,				    edit_mode,				    cross_mode,				    &pickdimax,				    &pickdimend,				    ioff,				    off,verbose);			}		/* else if pointer has moved */		} else if (event.type==MotionNotify) {		  draw_cross(dpy,win,blue_r_gc,x,y,width,height,			     event.xbutton.x,event.xbutton.y,cross_mode,			     DRAW_FLAG);		  /* if button2 down, show mouse location */			if (showloc)				xMouseLoc(dpy,win,event,style,True,					x,y,width,height,x1begb,x1endb,					x2begb,x2endb,p2beg,p2end);		/* else if button2 released, stop tracking */		} else if (event.type==ButtonRelease &&			   event.xbutton.button==Button2) {			showloc = 0;		}	} /* end of event loop */	/* close connection to X server */	XCloseDisplay(dpy);	return EXIT_SUCCESS;}/*draw a crosshair at coordinates*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -