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

📄 ui_canvas.c

📁 seismic software,very useful
💻 C
字号:
/*User_interface: canvas controls*/#include <Xm/MainW.h>#include <stdio.h>#include "main.h"#include "ui.h"#include "axis.h"#include "data.h"#include "map.h"#include "render.h"#include "view.h"#include "region.h"#include "pick.h"#include "movie.h"#include "color.h"#include "colorbar.h"extern UI ui;extern Message message;/* canvas mouse callbacks */char canvas_trans[] =	"#replace\n\	<Key>h,<Btn1Motion>:	UIZoomDrag()\n\	<Key>h,<Btn1Down>:	UIHZoomStart()\n\	<Key>v,<Btn1Motion>:	UIZoomDrag()\n\	<Key>v,<Btn1Down>:	UIVZoomStart()\n\	<Btn1Down>:	UIZoomStart()\n\	<Btn1Motion>:	UIZoomDrag()\n\	<Btn1Up>:	UIZoomEnd()\n\	<Btn2Down>:	UIFrameStart()\n\	<Btn2Motion>:	UIFrameDrag()\n\	<Btn2Up>:	UIFrameEnd()\n\	<Key>a,<Btn3Down>:	UIPikAdd()\n\	<Key>m,<Btn3Down>:	UIPikMove()\n\	<Key>d,<Btn3Down>:	UIPikDelete()\n\	<Key>q,<Btn3Down>:	UIPikQuery()\n\	<Key>?,<Btn3Down>:	UIPikQuery()\n\	<Key>u,<Btn3Down>:	PikUndo()\n\	<Key>s,<Btn3Motion>:	UISubvolumeDrag()\n\	<Key>s,<Btn3Down>:	UISubvolumeStart()\n\	<Key>s,<Btn3Up>:	UISubvolumeEnd()\n\	<Btn3Down>:	UIPick()";char colorbar_trans[] = 	"#replace\n\	<BtnDown>:	UIColorbarStart()\n\	<BtnMotion>:	UIColorbarDrag()\n\	<BtnUp>:	UIColorbarEnd()";extern UIZoomStart();extern UIHZoomStart();extern UIVZoomStart();extern UIDraw();extern UIZoomDrag();extern UIZoomEnd();extern UIFrameStart();extern UIFrameDrag();extern UIFrameEnd();extern UISubvolumeStart();extern UISubvolumeDrag();extern UISubvolumeEnd();extern UIPick();extern UIPikAdd();extern UIPikMove();extern UIPikDelete();extern UIPikQuery();extern PikUndo();extern UIColorbarStart();extern UIColorbarDrag();extern UIColorbarEnd();XtActionsRec ui_actions[] = {	{"UIZoomStart", (XtActionProc)UIZoomStart},	{"UIHZoomStart", (XtActionProc)UIHZoomStart},	{"UIVZoomStart", (XtActionProc)UIVZoomStart},	{"UIZoomDrag", (XtActionProc)UIZoomDrag},	{"UIZoomEnd", (XtActionProc)UIZoomEnd},	{"UIFrameStart", (XtActionProc)UIFrameStart},	{"UIFrameDrag", (XtActionProc)UIFrameDrag},	{"UIFrameEnd", (XtActionProc)UIFrameEnd},	{"UISubvolumeStart", (XtActionProc)UISubvolumeStart},	{"UISubvolumeDrag", (XtActionProc)UISubvolumeDrag},	{"UISubvolumeEnd", (XtActionProc)UISubvolumeEnd},	{"UIPick", (XtActionProc)UIPick},	{"UIPikAdd", (XtActionProc)UIPikAdd},	{"UIPikMove", (XtActionProc)UIPikMove},	{"UIPikDelete", (XtActionProc)UIPikDelete},	{"UIPikQuery", (XtActionProc)UIPikQuery},	{"PikUndo", (XtActionProc)PikUndo},	{"UIColorbarStart", (XtActionProc)UIColorbarStart},	{"UIColorbarDrag", (XtActionProc)UIColorbarDrag},	{"UIColorbarEnd", (XtActionProc)UIColorbarEnd},};int ui_nactions = sizeof (ui_actions) / sizeof (ui_actions[0]);/* return canvas size */UICanvasSize (wide,hite)int *wide, *hite;	{	if (!ui) return;	*wide = 0;	*hite = 0;	XtVaGetValues (ui->canvas,XmNwidth,wide,XmNheight,hite,NULL);	*wide /= 65536;	*hite /= 65536;	}/* return color bar size */UIColorbarSize (wide,hite)int *wide, *hite;	{	if (!ui) return;	*wide = 0;	*hite = 0;	XtVaGetValues (ui->colorbar,XmNwidth,wide,XmNheight,hite,NULL);	*wide /= 65536;	*hite /= 65536;	}/* callbacks:	call one or routines of other objects with arguments	fetch state from widget	set state of user interface to be conistentif a callback does not fetch or set state and is only one routine,	the it is called directly from other objects*//* draw color bar after exposure or resize callback */UIDrawColorbar (widget)Widget widget;	{	int wide, hite;	if (!ui) return;	if (ui->first) {		if (ui->first == 1) {			MainFirst();			ui->first = 2;			}		else if (ui->first == 2) {			ui->first = 0;			}		}	ColorbarDraw ();	}/* draw canvas after exposure or resize callback */UIDrawCanvas (widget)Widget widget;	{	int wide, hite;	if (!ui) return;	if (ui->first) {		if (ui->first == 1) {			MainFirst();			ui->first = 2;			}		else if (ui->first == 2) {			ui->first = 0;			}		}	ViewSize0();	ViewDrawAll();	}/* start zoom window callback */UIZoomStart (widget,event)Widget widget;XButtonEvent *event;	{	if (!ui) return;	ui->hzoom = 1;	ui->vzoom = 1;	ui->x1 = event->x;	ui->y1 = event->y;	}UIHZoomStart (widget,event)Widget widget;XButtonEvent *event;	{	if (!ui) return;	ui->hzoom = 1;	ui->x1 = event->x;	ui->y1 = event->y;	}UIVZoomStart (widget,event)Widget widget;XButtonEvent *event;	{	if (!ui) return;	ui->vzoom = 1;	ui->x1 = event->x;	ui->y1 = event->y;	}/* colorbar pick start callback */UIColorbarStart (widget,event)Widget widget;XButtonEvent *event;	{	if (!ui) return;	DrawWindow (UIColorbarWindow());	ui->x1 = event->x;	ui->y1 = event->y;	UIColorbarDrag (widget,event);	}/* zoom window drag callback */UIZoomDrag (widget,event)Widget widget;XButtonEvent *event;	{	if (!ui) return;	DrawBox (ui->x1,ui->y1,ui->x2,ui->y2,ERASE);	DrawBox (ui->x1,ui->y1,ui->x2=event->x,ui->y2=event->y,DRAW);	}/* colorbar pick drag callback */UIColorbarDrag (widget,event)Widget widget;XButtonEvent *event;	{	extern View view;	if (!ui) return;	ColorbarSetMark (MapMap(ViewMap(view,AXIS_COLOR),event->x),		MapMap(ViewMap(view,AXIS_COLOR),event->x),TOP_MARK);	}/* smooth drag callback */UISubvolumeDrag (widget,event)Widget widget;XButtonEvent *event;	{	PickPoint_ pick;	if (!ui) return;	if ((ui->x1-event->x)*(ui->x1-event->x)+(ui->y1-event->y)*(ui->y1-event->y)<25) return;	DrawArrow (ui->x1,ui->y1,ui->x2,ui->y2,10,ERASE);	DrawArrow (ui->x1,ui->y1,ui->x2=event->x,ui->y2=event->y,10,DRAW);	PickDecode (event->x,event->y,&pick,1);	ui->v2 = pick.index[DATA_VALUE];	ColorbarSetMark (ui->v1,ui->v2,BOTTOM_MARK);	}/* frame drag callback */UIFrameDrag (widget,event)Widget widget;XButtonEvent *event;	{	PickPoint_ pick;	DrawLine (ui->x1,ui->y1,ui->x2,ui->y2,ERASE);	DrawLine (ui->x1,ui->y1,ui->x2=event->x,ui->y2=event->y,DRAW);	PickDecode (event->x,event->y,&pick,1);	}/* zoom window end callback */UIZoomEnd (widget,event)Widget widget;XButtonEvent *event;	{	DrawBox (ui->x1,ui->y1,ui->x2,ui->y2,ERASE);	ViewWindow (ui->x1,ui->y1,ui->x2=event->x,ui->y2=event->y,ui->hzoom,ui->vzoom);	ui->hzoom = 0;	ui->vzoom = 0;	ui->x1 = NO_INDEX;	ui->y1 = NO_INDEX;	ui->x2 = NO_INDEX;	ui->y2 = NO_INDEX;	UISizeReset ();	}/* colorbar pick end callback */UIColorbarEnd (widget,event)Widget widget;XButtonEvent *event;	{	extern View view;	extern Data data;	ColorbarSetMark (MapMap(ViewMap(view,AXIS_COLOR),event->x),		MapMap(ViewMap(view,AXIS_COLOR),event->x),TOP_MARK);	DrawWatch (1);	RegionSetValue (MapMap(ViewMap(view,AXIS_COLOR),event->x),RegionBound(1));	DrawWatch (0);	ViewDrawAll ();	ColorbarSetMark (NO_INDEX,NO_INDEX,TOP_MARK);	ColorbarSetMark (NO_INDEX,NO_INDEX,BOTTOM_MARK);	ui->x1 = NO_INDEX;	ui->y1 = NO_INDEX;	ui->x2 = NO_INDEX;	ui->y2 = NO_INDEX;	DrawWindow (UICanvasWindow());	}/* smooth end callback */UISubvolumeEnd (widget,event)Widget widget;XButtonEvent *event;	{	PickPoint_ pick1, pick2;	if (!ui) return;	DrawArrow (ui->x1,ui->y1,ui->x2,ui->y2,10,ERASE);	PickDecode (ui->x1,ui->y1,&pick1,1);	PickDecode (ui->x2,ui->y2,&pick2,1);	if (!PickSameFrame (&pick1,&pick2)) return;	RegionSetBound (ui->v1,0);	RegionSetBound (ui->v2,1);	DrawWatch (1);	RegionMark0 ();	DrawWatch (0);	ui->x1 = NO_INDEX;	ui->y1 = NO_INDEX;	ui->x2 = NO_INDEX;	ui->y2 = NO_INDEX;	}/* report pick point values */UIPick (widget,event)Widget widget;XButtonEvent *event;	{	PickPoint_ pick;	PickDecode (event->x,event->y,&pick,1);	}/* movie callback */UIFrameStart (widget,event)Widget widget;XButtonEvent *event;	{	if (!ui) return;	ui->x1 = event->x;	ui->y1 = event->y;	}UIFrameEnd (widget,event)Widget widget;XButtonEvent *event;	{	extern View view;	PickPoint_ pick1, pick2;	int iaxis, iaxis1, sep[VIEW_NAXIS];	if (!ui) return;	PickDecode (ui->x1,ui->y1,&pick1,1);	DrawLine (ui->x1,ui->y1,ui->x2,ui->y2,ERASE);	ui->x2 = event->x;	ui->y2 = event->y;	PickDecode (ui->x2,ui->y2,&pick2,1);	for (iaxis=AXIS_DOWN; iaxis<=AXIS_DEEP; iaxis++) {		iaxis1 = AxisDir(MapAxis(ViewMap(view,iaxis)));		sep[iaxis1] = pick1.index[iaxis1] - MapFrame(ViewMap(view,iaxis));		sep[iaxis1] *= sep[iaxis1];		}	if ((ui->x1-ui->x2)*(ui->x1-ui->x2)+(ui->y1-ui->y2)*(ui->y1-ui->y2) < 10) {		ViewSetFrames (event->x,event->y);		}	else switch (pick1.iaxis[AXIS_DEEP]) {	case AXIS_DEEP:		if ((ui->x1-ui->x2)*(ui->x1-ui->x2)>(ui->y1-ui->y2)*(ui->y1-ui->y2)) {			MapSetFrameBounds (ViewMap(view,AXIS_ACROSS),pick1.index[AXIS_ACROSS],pick2.index[AXIS_ACROSS]);			ViewSetMovie (AXIS_ACROSS);			MovieOn ();			}		else	{			MapSetFrameBounds (ViewMap(view,AXIS_DOWN),pick1.index[AXIS_DOWN],pick2.index[AXIS_DOWN]);			ViewSetMovie (AXIS_DOWN);			MovieOn ();			}		break;	case AXIS_ACROSS:		if ((ui->x1-ui->x2)*(ui->x1-ui->x2)>(ui->y1-ui->y2)*(ui->y1-ui->y2)) {			MapSetFrameBounds (ViewMap(view,AXIS_DEEP),pick1.index[AXIS_DEEP],pick2.index[AXIS_DEEP]);			ViewSetMovie (AXIS_DEEP);			MovieOn ();			}		else	{			MapSetFrameBounds (ViewMap(view,AXIS_DOWN),pick1.index[AXIS_DOWN],pick2.index[AXIS_DOWN]);			ViewSetMovie (AXIS_DOWN);			MovieOn ();			}		break;	case AXIS_DOWN:		if ((ui->x1-ui->x2)*(ui->x1-ui->x2)>(ui->y1-ui->y2)*(ui->y1-ui->y2)) {			MapSetFrameBounds (ViewMap(view,AXIS_ACROSS),pick1.index[AXIS_ACROSS],pick2.index[AXIS_ACROSS]);			ViewSetMovie (AXIS_ACROSS);			MovieOn ();			}		else	{			MapSetFrameBounds (ViewMap(view,AXIS_DEEP),pick1.index[AXIS_DEEP],pick2.index[AXIS_DEEP]);			ViewSetMovie (AXIS_DEEP);			MovieOn ();			}		break;		}	ui->x1 = NO_INDEX;	ui->y1 = NO_INDEX;	ui->x2 = NO_INDEX;	ui->y2 = NO_INDEX;	}/* add point point callback */UIPikAdd (widget,event)Widget widget;XButtonEvent *event;	{	PikAdd (event->x,event->y);	}/* insert a pick into the pick line */UIPickInsert (widget,event)Widget widget;XButtonEvent *event;	{	PickInsert (event->x,event->y);	}/* start region picking */UISubvolumeStart (widget,event)Widget widget;XButtonEvent *event;	{	PickPoint_ pick;	if (!ui) return;	ui->x1 = event->x;	ui->y1 = event->y;	PickDecode (event->x,event->y,&pick,1);	RegionSetSeed (pick.index);	ui->v1 = pick.index[DATA_VALUE];	}/* replace pick point callback */UIPikMove (widget,event)Widget widget;XButtonEvent *event;	{	PikMove (event->x,event->y);	}/* delete pick point callback */UIPikDelete (widget,event)Widget widget;XButtonEvent *event;	{	PikDelete (event->x,event->y);	}/* query pik point callback */UIPikQuery (widget,event)Widget widget;XButtonEvent *event;	{	PikQuery (event->x,event->y);	}

⌨️ 快捷键说明

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