/**************************** ProcWinEvent.c ********************************* Description: A simple program to show how to implement data picking function in IVE by calling simple WML calls File Group: ProcWinEvent.c Author: Hans Chen 1995 Rev 1.1: reformat to IVE source file format 04/03/96 *******************************************************************************/ /*>>>>>>>>>>>>>>>>>>>>>>>>> list of include file <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ #include "IWInclude.h" #include "WMInclude.h" /*>>>>>>>>>>>>>>>>>>>>>>>>> Define & Structure Definition <<<<<<<<<<<<<<<<<<<<<<<<*/ /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ion Declaration <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ /* public function */ /* local function */ int Quit( ); void EventHandler(int itype, XEvent *event); /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Global Variables <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ /* public global variables */ /* private global variable */ static char gcEventType[20]; static char giWid[3]; static int giOne = 1; static int giWave=0; static IW_POINT gPtList[100]; static int giNumPt=0; static int giGID,giCirGID; static int giPolygon=0; /*>>>>>>>>>>>>>>>>>>>>>>>> Function Definition <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ /******************************************* FOR: call routine to quit the program *******************************************/ int quit() { long mask; mask = EnterWindowMask|LeaveWindowMask|ButtonPressMask|ButtonReleaseMask| PointerMotionMask; WMCancelEventHandler(IW_ALL_WINDOWS, mask); WMCancelDisplayChange(IW_ALL_WINDOWS); exit( 0 ); return 0; } /*************************************************** FOR: function to process any event from IWL INPUT: itype : event type event : pointer to X Event struct ***************************************************/ void EventHandler(int itype, XEvent *event) { int iwid; int ixyz[5]; float xyz[3]; int itime; unsigned char pixel; float val; int icolor; static float x1,y1,x2; iwid = IWXEvtToWid(event); sprintf(giWid,"%d",iwid); if(itype == EnterWindowMask) { IMAlPrt(0); IMOpen(giOne, giWid, "ro"); strcpy(gcEventType, "EnterWindowMask"); giCirGID = 0; giGID = 0; } else if( itype == KeyPressMask ) { printf( "keysym= %d\n", IWXEvtToKeySym(event)); } else if(itype == LeaveWindowMask) { giNumPt = 0; if( giGID > 0 ) { IWGrRmGrID(giOne, giGID); } if( giCirGID > 0 ) { IWGrRmGrID(giOne, giCirGID); } IWDisplay(giOne); IMClose(giOne); strcpy(gcEventType,"LeaveWindowMask"); } else if(itype == ButtonPressMask) { int boxSize[] = {1, 1}; float scale[4]; IWXEvtToData(giOne, giWave, event, xyz, &itime); ixyz[0] = xyz[0]; ixyz[1] = xyz[1]; ixyz[2] = xyz[2]; IMPosnZWT(giOne, ixyz[2], giWave, itime); IMRdPas(giOne, &val, 1, 1, ixyz[0], ixyz[0], ixyz[1], ixyz[1]); IWRtScl(giOne, giWave, scale); IWScaleImage(&val, boxSize, IW_FLOAT, scale, &pixel); sprintf(gcEventType,"Img:%g Pix:%d",val,(int)pixel); gPtList[giNumPt].x = ixyz[0]; gPtList[giNumPt].y = ixyz[1]; gPtList[giNumPt].z = ixyz[2]; giNumPt++; if( giGID > 0 ) { IWGrRmGrID(giOne, giGID); } if( giCirGID > 0 ) { IWGrRmGrID(giOne, giCirGID); } icolor = IW_RED; x1= ixyz[0]; y1=ixyz[1];x2=2; giCirGID=IWGrAddCir2D(giOne, x1, y1, x2, giOne, icolor); if(giNumPt >= 2) { if( !giPolygon ) giGID = IWGrAddLns3D(giOne, gPtList, giNumPt, giOne, giOne, icolor); else giGID = IWGrAddPoly3D(giOne, gPtList, giNumPt, giOne, icolor); } IWDisplay(giOne); } else if(itype == ButtonReleaseMask) { strcpy(gcEventType,"ButtonReleaseMask"); } else if(itype == PointerMotionMask) { IWXEvtToData(giOne, giWave, event, xyz, &itime); ixyz[0] = xyz[0]; ixyz[1] = xyz[1]; ixyz[2] = xyz[2]; sprintf(gcEventType,"X:%3d Y:%3d",ixyz[0],ixyz[1]); } else if(itype == -1) { sprintf(gcEventType,"Section #: %d\n", IWRtDisSec(giOne)); } WMUpdateGroup( 1 ); return; } /***************************** * main program * *****************************/ main() { strcpy(gcEventType," "); strcpy(giWid," "); WMInit(NULL); WMSetLoc(500, 500); WMAddInfoButton("Window Event Demo",NULL); WMAttachRightSide(); WMNewRow(); WMAddInfoButton(" Window ID:",NULL); WMAddText(giWid, 3, 1); WMAttachRightSide(); WMNewRow(); WMAddInfoButton("Event info:",NULL); WMAddText(gcEventType, 20, 1); WMAttachRightSide(); WMNewRow(); WMAddInfoButton("Draw Plygon",NULL); WMAddToggleButton("",&giPolygon,NULL,NULL,0,0); WMNewRow(); WMAddFuncButton("Exit",quit,NULL,0,0); WMAttachRightSide(); WMAddEventHandler(IW_ALL_WINDOWS, EnterWindowMask,EventHandler,EnterWindowMask); WMAddEventHandler(IW_ALL_WINDOWS, LeaveWindowMask,EventHandler,LeaveWindowMask); WMAddEventHandler(IW_ALL_WINDOWS, ButtonPressMask,EventHandler,ButtonPressMask); WMAddEventHandler(IW_ALL_WINDOWS, ButtonReleaseMask,EventHandler,ButtonReleaseMask); WMAddEventHandler(IW_ALL_WINDOWS, PointerMotionMask,EventHandler,PointerMotionMask); WMAddEventHandler(IW_ALL_WINDOWS, KeyPressMask,EventHandler,KeyPressMask); WMProcDisplayChange(IW_ALL_WINDOWS, EventHandler, -1 ); WMEnableIWLEvent(); WMDisplay(); WMAppMainLoop(); return 0; }