/*********************************************************************** * * ***** *** *** * * * * * * * * *** *** * * * * * * * ***** *** *** * * A FREE Finite Elements Analysis Program in ANSI C for the UNIX OS. * * Composed and edited and copyright by * Professor Dr.-Ing. Frank Rieg, University of Bayreuth, Germany * * eMail: * frank.rieg@uni-bayreuth.de * dr.frank.rieg@t-online.de * * V11.0 December 12, 2003 * * Z88 should compile and run under any UNIX OS and Motif 2.0. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ***********************************************************************/ /***************************************************************************** * Callbacks fuer z88o * 4.2.2004 Rieg *****************************************************************************/ /***************************************************************************** * Includes *****************************************************************************/ /*---------------------------------------------------------------------------- * UNIX *---------------------------------------------------------------------------*/ #ifdef FR_UNIX #include #include #include #include #include /* FR_POW,FR_FABS */ #include #include #include #include #endif /***************************************************************************** * Functions *****************************************************************************/ void FR_RENDER(void); void expose88(void); int ri1x88(void); int ro2x88(void); int ro8x88(void); int rcoo88(void); int wlog88o(FR_INT4,int); int ale88o(int); int vu3b88(void); int vv3b88(void); int vsca88(void); int vcur88(void); int stro88(void); int snow88(void); int fvx88(void); int fvy88(void); int fvz88(void); int tet188(void); int tet288(void); int tet388(void); int tet488(void); int tet588(void); int fsca88(void); int malk88(void); /*---------------------------------------------------------------------------- * CB_WER *---------------------------------------------------------------------------*/ void CB_WER(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_INT4 LANG; extern int IBELL; Widget hInfo; Arg args[10]; Cardinal n; XmString cxstring = NULL; char cstring[256]; /*============================================================================ * Los geht's *===========================================================================*/ XBell(XtDisplay(hcallw),IBELL); n = 0; XtSetArg(args[n], XmNautoUnmanage, TRUE); n++; XtSetArg(args[n], XmNdialogStyle, XmDIALOG_MODELESS); n++; XtSetArg(args[n], XmNdialogType, XmDIALOG_INFORMATION); n++; if(LANG==1) strcpy (cstring, "Z88O V11.0 fuer UNIX\n\ von Univ.Prof.Dr.-Ing. Frank Rieg 2004\n\ Universitaet Bayreuth\n\ frank.rieg@uni-bayreuth.de\n\ dr.frank.rieg@t-online.de"); if(LANG==2) strcpy (cstring, "Z88O V11.0 for UNIX\n\ by Prof.Dr. Frank Rieg 2004\n\ University of Bayreuth, Germany\n\ frank.rieg@uni-bayreuth.de\n\ dr.frank.rieg@t-online.de"); cxstring = XmStringCreateLtoR(cstring, XmFONTLIST_DEFAULT_TAG); XtSetArg(args[n], XmNmessageString, cxstring); n++; hInfo = XmCreateInformationDialog(hcallw, "z88o", args, n); XtUnmanageChild(XmMessageBoxGetChild(hInfo,XmDIALOG_HELP_BUTTON)); XtUnmanageChild(XmMessageBoxGetChild(hInfo,XmDIALOG_CANCEL_BUTTON)); XtManageChild(hInfo); if(cxstring) XmStringFree(cxstring); } /*---------------------------------------------------------------------------- * CB_RUN *---------------------------------------------------------------------------*/ void CB_RUN(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FILE *fi1; extern Widget hw[]; extern FR_DOUBLE fux,fuy,fuz,zm; extern FR_DOUBLE rotx,roty,rotz; extern FR_INT4 izoom; extern FR_INT4 jfrom,jto,jkvon,jkbis,jevon,jebis; extern int iflade,iflaver,iflspa,ifscale,iflabe; extern int II1_OK; extern char cstrn[]; int ialert; char *cdummy,*cfux,*cfuy,*cfuz,*cjfrom,*cjto,*czm; /*============================================================================ * Felder auslesen *===========================================================================*/ cdummy= XmTextFieldGetString(hw[21]); strcpy(cstrn,cdummy); cjfrom= XmTextFieldGetString(hw[62]); jfrom= atol(cjfrom); if(iflabe == IDM_KNOTEN ) jkvon= jfrom; if(iflabe == IDM_ELEMENTE) jevon= jfrom; cjto= XmTextFieldGetString(hw[64]); jto= atol(cjto); if(iflabe == IDM_KNOTEN ) jkbis= jto; if(iflabe == IDM_ELEMENTE) jebis= jto; cfux= XmTextFieldGetString(hw[42]); fux= (FR_DOUBLE)atof(cfux); cfuy= XmTextFieldGetString(hw[44]); fuy= (FR_DOUBLE)atof(cfuy); cfuz= XmTextFieldGetString(hw[46]); fuz= (FR_DOUBLE)atof(cfuz); czm= XmTextFieldGetString(hw[48]); zm= (FR_DOUBLE)atof(czm); XtFree(cdummy); XtFree(cjfrom); XtFree(cjto); XtFree(cfux); XtFree(cfuy); XtFree(cfuz); XtFree(czm); /*============================================================================ * Urzustand herstellen *===========================================================================*/ iflaver= ID_NOTLOADVERF; iflspa = ID_NOTLOADSPANN; ifscale= IDM_YESSCALE; rotx= 0.; roty= 0.; rotz= 0.; izoom= 1; /*============================================================================ * Z88I1.TXT einlesen *===========================================================================*/ if(iflade== ID_NOTLOADSTRUC) /* Z88I1 */ { fi1= fopen(cstrn,"r"); if(fi1== NULL) { ale88o(AL_NOSTRFI); wlog88o(0,LOG_NOSTRFI); II1_OK= 0 ; /* Z88I1.TXT fehlt */ } else { II1_OK= 1; /* Z88I1.TXT vorhanden */ rewind(fi1); ialert= ri1x88(); /* Lesen Z88I1.TXT */ if(ialert != 0) { ale88o(ialert); exit(1); } } iflade= ID_LOADSTRUC; if(fi1) fclose(fi1); } /*============================================================================ * ... und malen *===========================================================================*/ FR_RENDER(); } /*---------------------------------------------------------------------------- * EH_MATA1 Event-Handler fuer Mausbewegung mit Button1: Zoom *---------------------------------------------------------------------------*/ void EH_MATA1 (Widget hcallw, XtPointer data, XEvent *xevent) { extern FR_DOUBLE xx,yy; extern int ifmaus; int ix,iy; ix= (*xevent).xmotion.x; iy= (*xevent).xmotion.y; xx= (FR_DOUBLE)ix; yy= (FR_DOUBLE)iy; ifmaus= IDM_ZOOM; FR_RENDER(); } /*---------------------------------------------------------------------------- * EH_MATA2 Event-Handler fuer Mausbewegung mit Button2: Panning *---------------------------------------------------------------------------*/ void EH_MATA2 (Widget hcallw, XtPointer data, XEvent *xevent) { extern FR_DOUBLE xx,yy; extern int ifmaus; int ix,iy; ix= (*xevent).xmotion.x; iy= (*xevent).xmotion.y; xx= (FR_DOUBLE)ix; yy= (FR_DOUBLE)iy; ifmaus= IDM_PAN; FR_RENDER(); } /*---------------------------------------------------------------------------- * EH_MATA3 Event-Handler fuer Mausbewegung mit Button3: Rotate *---------------------------------------------------------------------------*/ void EH_MATA3 (Widget hcallw, XtPointer data, XEvent *xevent) { extern FR_DOUBLE xx,yy; extern int ifmaus; int ix,iy; ix= (*xevent).xmotion.x; iy= (*xevent).xmotion.y; xx= (FR_DOUBLE)ix; yy= (FR_DOUBLE)iy; ifmaus= IDM_ROTATE; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_INITG *---------------------------------------------------------------------------*/ void CB_INITG(Widget hcallw,Cardinal data, GLwDrawingAreaCallbackStruct *cbs) { extern XVisualInfo *xvi; extern GLXContext GLC; extern Widget hw[]; extern FR_DOUBLE xm,xp,ym,yp,zm,zp; extern int IB,IH,IALERT,IDEATH; extern int IW_DRAWAR,IH_DRAWAR; extern char CF_GRAFICS[80]; Font font; Arg args[1]; int icount= 0; /*============================================================================ * die Groesse des Viewport vorbereiten *===========================================================================*/ IB= IW_DRAWAR; IH= IH_DRAWAR; /*============================================================================ * den GLX Context kommen lassen *===========================================================================*/ XtSetArg (args[0],GLwNvisualInfo, &xvi); XtGetValues (hcallw,args,1); GLC= glXCreateContext(XtDisplay(hcallw),xvi,NULL,GL_FALSE); if(GLC == NULL) { wlog88o(0,LOG_NO_GLX); IALERT= 1; IDEATH= 1; ale88o(AL_NO_GLX); /* du bist terminiert */ goto Lexit; } GLwDrawingAreaMakeCurrent(hcallw,GLC); /*============================================================================ * Viewport und Zeichen-Volume festlegen *===========================================================================*/ glViewport(0,0,IB,IH); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(xm,xp,ym,yp,zm,zp); /*============================================================================ * den Font fuer OpenGL kommen lassen *===========================================================================*/ if((XListFonts(XtDisplay(hw[50]),CF_GRAFICS,1,&icount)) != NULL) font= XLoadFont(XtDisplay(hw[50]),CF_GRAFICS); else { wlog88o(0,LOG_NO_CF_GRAFICS); IALERT= 1; IDEATH= 1; ale88o(AL_NO_CF_GRAFICS); /* du bist terminiert */ goto Lexit; } glXUseXFont(font,32,96,2032); glListBase(2000); /*============================================================================ * zum Malen springen - was noch nichts bewirkt *===========================================================================*/ FR_RENDER(); Lexit:; } /*---------------------------------------------------------------------------- * CB_RESIZE *---------------------------------------------------------------------------*/ void CB_RESIZE(Widget hcallw,Cardinal data, GLwDrawingAreaCallbackStruct *cbs) { extern FR_DOUBLE xm,xp,ym,yp,zm,zp; extern int IB,IH; IB= (*cbs).width; IH= (*cbs).height; glViewport(0,0,IB,IH); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(xm,xp,ym,yp,zm,zp); glMatrixMode(GL_MODELVIEW); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_PAINT *---------------------------------------------------------------------------*/ void CB_PAINT(Widget hcallw,Cardinal data, GLwDrawingAreaCallbackStruct *cbs) { FR_RENDER(); } /*---------------------------------------------------------------------------- * FR_RENDER *---------------------------------------------------------------------------*/ void FR_RENDER(void) { extern Widget hw[]; extern FILE *fo2,*fo8; extern GLfloat back_col[]; extern GLfloat specula0[]; extern GLfloat specula1[]; extern GLfloat specula2[]; extern GLfloat ambient0[]; extern GLfloat ambient1[]; extern GLfloat diffuse0[]; extern GLfloat diffuse1[]; extern GLfloat positio0[]; extern GLfloat positio1[]; extern GLfloat positio2[]; extern GLfloat spec_mat[]; extern GLfloat diff_mat[]; extern GLfloat shine[]; extern GLfloat hide_col[]; extern GLfloat hide_off[]; extern GLfloat node_col[]; extern GLfloat elem_col[]; extern FR_DOUBLE xx, yy, xw, yp; extern FR_DOUBLE rx, ry, rz, s, tx, ty; extern FR_DOUBLE rotx,roty,rotz; extern FR_INT4 ndim; extern int IB; extern int IO2_OK, IO8_OK; extern int iflade,iflabe,if3d,ifscale,iflaver,iflspa; extern int ifmaus,ifkom,ifverf; extern char co2[],co8[]; int ialert; /*============================================================================ * Polygon-Modus FILL und Hidden- Surface Removal an *===========================================================================*/ glEnable(GL_DEPTH_TEST); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); /*============================================================================ * Hintergrundfarbe *===========================================================================*/ glClearColor(back_col[0],back_col[1],back_col[2],back_col[3]); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /*============================================================================ * Lichtquelle immer am selben Ort lassen *===========================================================================*/ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); /*============================================================================ * Z88O1.TXT schon geladen? *===========================================================================*/ if(iflade == ID_NOTLOADSTRUC) goto Lflush; /*============================================================================ * Maximalwerte ermitteln und Skalieren *===========================================================================*/ if( ifscale == IDM_YESSCALE) vsca88(); /*============================================================================ * Laden von Z88O2.TXT *===========================================================================*/ if(iflaver == ID_NOTLOADVERF && (ifverf == IDM_VERFORMT || if3d == IDM_SHOWVX || if3d == IDM_SHOWVY || if3d == IDM_SHOWVZ)) { fo2= fopen(co2,"r"); if(fo2== NULL) { ale88o(AL_NOO2); wlog88o(0,LOG_NOO2); IO2_OK= 0 ; /* Z88O2.TXT fehlt */ } else { IO2_OK= 1; /* Z88O2.TXT vorhanden */ rewind(fo2); ro2x88(); } iflaver= ID_LOADVERF; if(fo2) fclose(fo2); } /*============================================================================ * Laden von Z88O8.TXT *===========================================================================*/ if(iflspa == ID_NOTLOADSPANN && (if3d == IDM_SHOWSPANN || if3d == IDM_SHOWGAUSS)) { fo8= fopen(co8,"r"); if(fo8== NULL) { ale88o(AL_NOO8); wlog88o(0,LOG_NOO8); IO8_OK= 0 ; /* Z88O8.TXT fehlt */ } else { IO8_OK= 1; /* Z88O8.TXT vorhanden */ rewind(fo8); ialert= ro8x88(); if(ialert != 0) { ale88o(ialert); } } iflspa= ID_LOADSPANN; if(fo8) fclose(fo8); } /*============================================================================ * Berechnen der Spannungs- und Verschiebungsfarbwerte *===========================================================================*/ if(if3d == IDM_SHOWSPANN && IO8_OK == 1) stro88(); if(if3d == IDM_SHOWGAUSS && IO8_OK == 1) snow88(); if(if3d == IDM_SHOWVX && IO2_OK == 1) fvx88(); if(if3d == IDM_SHOWVY && IO2_OK == 1) fvy88(); if(if3d == IDM_SHOWVZ && IO2_OK == 1) fvz88(); /*============================================================================ * Spannungsskala bzw. Verschiebungsskala zeichnen *===========================================================================*/ if(((if3d == IDM_SHOWSPANN || if3d == IDM_SHOWGAUSS) && IO8_OK == 1) || ((if3d == IDM_SHOWVX || if3d == IDM_SHOWVY || if3d == IDM_SHOWVZ) && IO2_OK == 1)) { glDisable(GL_NORMALIZE); glDisable(GL_LIGHTING); glShadeModel(GL_FLAT); fsca88(); } /*============================================================================ * Licht ? *===========================================================================*/ if(if3d == IDM_LIGHT) { glEnable(GL_NORMALIZE); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0,GL_SPECULAR,specula0); glLightfv(GL_LIGHT0,GL_DIFFUSE ,diffuse0 ); glLightfv(GL_LIGHT0,GL_POSITION,positio0); glLightfv(GL_LIGHT0,GL_AMBIENT ,ambient0 ); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT1,GL_SPECULAR,specula1); glLightfv(GL_LIGHT1,GL_DIFFUSE ,diffuse1); glLightfv(GL_LIGHT1,GL_POSITION,positio1); glLightfv(GL_LIGHT1,GL_AMBIENT ,ambient1); glEnable(GL_LIGHT1); glLightfv(GL_LIGHT2,GL_SPECULAR,specula2); glLightfv(GL_LIGHT2,GL_POSITION,positio2); glEnable(GL_LIGHT2); glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,diff_mat); glMaterialfv(GL_FRONT,GL_SPECULAR,spec_mat); glMaterialfv(GL_FRONT,GL_SHININESS,shine); } /*============================================================================ * Die Transformationen ausfuehren *===========================================================================*/ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(ifmaus == IDM_ZOOM) /* Zoom */ { s=8./3.*xx*xx/IB/IB+1./3.; if(s < 0.) s= 0.; } if(ifmaus == IDM_PAN) /* Panning */ { xw= (FR_DOUBLE)IB; ty= -yp*2/(xw/2) *(yy-xw/2); tx= -yp*2/(xw/2) *(xw/2-xx); } if(ifmaus == IDM_ROTATE) /* Rotieren */ { rx= yy; ry= xx; } if(ifkom == ID_MOUSE) { glScaled(s,s,s); glTranslated(tx,ty,0); glRotated(rx,0.,1.,0.); glRotated(ry,1.,0.,0.); } if(ifkom == ID_FUNKEY); { glRotated(rotx,1.,0.,0.); glRotated(roty,0.,1.,0.); glRotated(rotz,0.,0.,1.); } /*============================================================================ * Koordinaten umrechnen *===========================================================================*/ if(ifverf == IDM_UNVERFORMT) vu3b88(); else vv3b88(); /*============================================================================ * Schleife ueber alle Elemente, mit Licht *===========================================================================*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 1) mit Licht *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if(if3d == IDM_LIGHT) tet188(); /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 2) Spannungen an Eckknoten, Verschiebungen an Eckknoten *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if((if3d == IDM_SHOWSPANN && IO8_OK==1) || ((if3d == IDM_SHOWVX || if3d == IDM_SHOWVY || if3d == IDM_SHOWVZ) && IO2_OK==1)) { glDisable(GL_NORMALIZE); glDisable(GL_LIGHTING); glShadeModel(GL_SMOOTH); tet288(); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 3) Hidden Line bzw. nur Netz *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if(if3d == IDM_HIDDEN && ndim == 3 && iflabe == IDM_NOLABELS) { glDisable(GL_NORMALIZE); glDisable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glColor3f(hide_col[0],hide_col[1],hide_col[2]); tet388(); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(hide_off[0],hide_off[1]); glColor3f(back_col[0],back_col[1],back_col[2]); tet388(); glDisable(GL_POLYGON_OFFSET_FILL); } if(if3d == IDM_HIDDEN && ndim == 3 && iflabe != IDM_NOLABELS ) { glDisable(GL_NORMALIZE); glDisable(GL_LIGHTING); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glColor3f(hide_col[0],hide_col[1],hide_col[2]); tet588(); } if(if3d == IDM_HIDDEN && ndim == 2 ) { glDisable(GL_NORMALIZE); glDisable(GL_LIGHTING); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glColor3f(hide_col[0],hide_col[1],hide_col[2]); tet588(); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 4) Spannungen pro Element gemittelt *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if(if3d == IDM_SHOWGAUSS && IO8_OK == 1) { glDisable(GL_NORMALIZE); glDisable(GL_LIGHTING); glShadeModel(GL_FLAT); tet488(); } /*======================================================== * Knotennummern plotten ? *=======================================================*/ if(iflabe == IDM_KNOTEN) malk88(); /*======================================================== * fertig OpenGL *=======================================================*/ Lflush: glFlush(); GLwDrawingAreaSwapBuffers(hw[50]); } /*---------------------------------------------------------------------------- * CB_EXIT *---------------------------------------------------------------------------*/ void CB_EXIT(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { exit(0); } /*---------------------------------------------------------------------------- * CB_YESSCALE *---------------------------------------------------------------------------*/ void CB_YESSCALE(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_INT4 izoom; extern int ifscale; ifscale= IDM_YESSCALE; izoom= 1; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_PRIOR *---------------------------------------------------------------------------*/ void CB_PRIOR(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE facx,facy,facz,fzoom; extern FR_INT4 izoom; facx *= fzoom; facy *= fzoom; facz *= fzoom; izoom++; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_NEXT *---------------------------------------------------------------------------*/ void CB_NEXT(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE facx,facy,facz,fzoom; extern FR_INT4 izoom; facx /= fzoom; facy /= fzoom; facz /= fzoom; izoom--; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_RIGHT *---------------------------------------------------------------------------*/ void CB_RIGHT(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE cx,xmax,xmin,fzoom; extern FR_INT4 izoom; extern int ifvcur; if(ifvcur == 0) vcur88(); cx= cx - 0.05*(FR_FABS(xmax) + FR_FABS(xmin))/FR_POW(fzoom,(FR_DOUBLE)izoom); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_LEFT *---------------------------------------------------------------------------*/ void CB_LEFT(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE cx,xmax,xmin,fzoom; extern FR_INT4 izoom; extern int ifvcur; if(ifvcur == 0) vcur88(); cx= cx + 0.05*(FR_FABS(xmax) + FR_FABS(xmin))/FR_POW(fzoom,(FR_DOUBLE)izoom); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_UP *---------------------------------------------------------------------------*/ void CB_UP(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE cy,ymax,ymin,fzoom; extern FR_INT4 izoom; extern int ifvcur; if(ifvcur == 0) vcur88(); cy= cy - 0.05*(FR_FABS(ymax) + FR_FABS(ymin))/FR_POW(fzoom,(FR_DOUBLE)izoom); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_DOWN *---------------------------------------------------------------------------*/ void CB_DOWN(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE cy,ymax,ymin,fzoom; extern FR_INT4 izoom; extern int ifvcur; if(ifvcur == 0) vcur88(); cy= cy + 0.05*(FR_FABS(ymax) + FR_FABS(ymin))/FR_POW(fzoom,(FR_DOUBLE)izoom); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_HOME *---------------------------------------------------------------------------*/ void CB_HOME(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE cz,zmax,zmin,fzoom; extern FR_INT4 izoom; extern int ifvcur; if(ifvcur == 0) vcur88(); cz= cz - 0.05*(FR_FABS(zmax) + FR_FABS(zmin))/FR_POW(fzoom,(FR_DOUBLE)izoom); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_END *---------------------------------------------------------------------------*/ void CB_END(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE cz,zmax,zmin,fzoom; extern FR_INT4 izoom; extern int ifvcur; if(ifvcur == 0) vcur88(); cz= cz + 0.05*(FR_FABS(zmax) + FR_FABS(zmin))/FR_POW(fzoom,(FR_DOUBLE)izoom); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_F3 *---------------------------------------------------------------------------*/ void CB_F3(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE rotx; rotx += 10.; if ((int)rotx == 360) rotx= 0.; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_F2 *---------------------------------------------------------------------------*/ void CB_F2(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE rotx; rotx -= 10.; if ((int)rotx == -10) rotx= 350.; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_F5 *---------------------------------------------------------------------------*/ void CB_F5(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE roty; roty += 10.; if ((int)roty == 360) roty= 0.; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_F4 *---------------------------------------------------------------------------*/ void CB_F4(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE roty; roty -= 10.; if ((int)roty == -10) roty= 350.; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_F7 *---------------------------------------------------------------------------*/ void CB_F7(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE rotz; rotz += 10.; if ((int)rotz == 360) rotz= 0.; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_F6 *---------------------------------------------------------------------------*/ void CB_F6(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE rotz; rotz -= 10.; if ((int)rotz == -10) rotz= 350.; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_F8 *---------------------------------------------------------------------------*/ void CB_F8(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern FR_DOUBLE rotx,roty,rotz; rotx= 0.; roty= 0.; rotz= 0.; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_STRUKTUR *---------------------------------------------------------------------------*/ void CB_STRUKTUR(Widget hcallw,XtPointer data, XmToggleButtonCallbackStruct *cbs) { extern int ifverf; extern int iflaver; extern int IO2_OK; if(cbs->set) ifverf= (int)data; if(ifverf== IDM_VERFORMT && iflaver== ID_LOADVERF && IO2_OK== 0 ) { ale88o(AL_NOO2); wlog88o(0,LOG_NOO2); } FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_3D *---------------------------------------------------------------------------*/ void CB_3D(Widget hcallw,XtPointer data, XmToggleButtonCallbackStruct *cbs) { extern int if3d; if(cbs->set) if3d= (int)data; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_LABELS *---------------------------------------------------------------------------*/ void CB_LABELS(Widget hcallw,XtPointer data, XmToggleButtonCallbackStruct *cbs) { extern Widget hw[]; extern FR_INT4 jfrom,jkvon,jevon,jto,jkbis,jebis; extern int iflabe; char cstring[256]; if(cbs->set) iflabe= (int)data; if(iflabe == IDM_NOLABELS) jfrom= 0; if(iflabe == IDM_KNOTEN ) jfrom= jkvon; if(iflabe == IDM_ELEMENTE) jfrom= jevon; sprintf(cstring,"%ld",jfrom); XmTextSetString(hw[62],cstring); if(iflabe == IDM_NOLABELS) jto= 0; if(iflabe == IDM_KNOTEN ) jto= jkbis; if(iflabe == IDM_ELEMENTE) jto= jebis; sprintf(cstring,"%ld",jto); XmTextSetString(hw[64],cstring); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_STRUKTURFILE *---------------------------------------------------------------------------*/ void CB_STRUKTURFILE(Widget hcallw,XtPointer data, XmTextVerifyCallbackStruct *cbs) { extern Widget hw[]; extern int iflade,iflaver,iflspa,ifscale; extern char cstrn[]; char *cdummy; cdummy= XmTextFieldGetString(hw[21]); strcpy(cstrn,cdummy); XtFree(cdummy); iflade = ID_NOTLOADSTRUC; iflaver= ID_NOTLOADVERF; iflspa = ID_NOTLOADSPANN; ifscale= IDM_YESSCALE; FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_FROM *---------------------------------------------------------------------------*/ void CB_FROM(Widget hcallw,XtPointer data, XmTextVerifyCallbackStruct *cbs) { extern FR_INT4 jfrom,jkvon,jevon; extern int iflabe; char *cjfrom; cjfrom= XmTextFieldGetString(hcallw); jfrom= atol(cjfrom); if(iflabe == IDM_KNOTEN ) jkvon= jfrom; if(iflabe == IDM_ELEMENTE) jevon= jfrom; XtFree(cjfrom); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_TO *---------------------------------------------------------------------------*/ void CB_TO(Widget hcallw,XtPointer data, XmTextVerifyCallbackStruct *cbs) { extern FR_INT4 jto,jkbis,jebis; extern int iflabe; char *cjto; cjto= XmTextFieldGetString(hcallw); jto= (FR_DOUBLE)atol(cjto); if(iflabe == IDM_KNOTEN ) jkbis= jto; if(iflabe == IDM_ELEMENTE) jebis= jto; XtFree(cjto); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_FUX *---------------------------------------------------------------------------*/ void CB_FUX(Widget hcallw,XtPointer data, XmTextVerifyCallbackStruct *cbs) { extern FR_DOUBLE fux; char *cfux; cfux= XmTextFieldGetString(hcallw); fux= (FR_DOUBLE)atof(cfux); XtFree(cfux); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_FUY *---------------------------------------------------------------------------*/ void CB_FUY(Widget hcallw,XtPointer data, XmTextVerifyCallbackStruct *cbs) { extern FR_DOUBLE fuy; char *cfuy; cfuy= XmTextFieldGetString(hcallw); fuy= (FR_DOUBLE)atof(cfuy); XtFree(cfuy); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_FUZ *---------------------------------------------------------------------------*/ void CB_FUZ(Widget hcallw,XtPointer data, XmTextVerifyCallbackStruct *cbs) { extern FR_DOUBLE fuz; char *cfuz; cfuz= XmTextFieldGetString(hcallw); fuz= (FR_DOUBLE)atof(cfuz); XtFree(cfuz); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_ZLIMIT *---------------------------------------------------------------------------*/ void CB_ZLIMIT(Widget hcallw,XtPointer data, XmTextVerifyCallbackStruct *cbs) { extern FR_DOUBLE zm; char *czm; czm= XmTextFieldGetString(hcallw); zm= (FR_DOUBLE)atof(czm); XtFree(czm); FR_RENDER(); } /*---------------------------------------------------------------------------- * CB_MAPB *---------------------------------------------------------------------------*/ void CB_MAPB(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern Widget hw[]; extern Pixel bg,fg; extern int ifkom; extern FR_INT4 LANG; Arg args[10]; Cardinal n; char cstring[80]; XmString cxstring; if(ifkom == ID_FUNKEY ) ifkom= ID_MOUSE; else ifkom= ID_FUNKEY; if(ifkom == ID_MOUSE) { n = 0; XtSetArg(args[n], XmNbackground, fg); n++; XtSetArg(args[n], XmNforeground, bg); n++; if(LANG == 1) strcpy(cstring," Maus"); if(LANG == 2) strcpy(cstring,"Mouse"); cxstring = XmStringCreateLtoR(cstring, "cf_buttons"); XtSetArg(args[n], XmNlabelString, cxstring); n++; XtSetValues(hw[66], args, n); } else { n = 0; XtSetArg(args[n], XmNbackground, bg); n++; XtSetArg(args[n], XmNforeground, fg); n++; if(LANG == 1) strcpy(cstring,"Pushbu"); if(LANG == 2) strcpy(cstring,"Pushbu"); cxstring = XmStringCreateLtoR(cstring, "cf_buttons"); XtSetArg(args[n], XmNlabelString, cxstring); n++; XtSetValues(hw[66], args, n); } if(cxstring) XmStringFree(cxstring); } /*---------------------------------------------------------------------------- * CB_OK *---------------------------------------------------------------------------*/ void CB_OK(Widget hcallw,XtPointer data, XmPushButtonCallbackStruct *cbs) { extern int IALERT, IDEATH; if(IDEATH == 1) exit(1); /* Das war Ihr Leben */ IALERT= 0; }