!! Copyright (C) Stichting Deltares, 2005-2020. !! !! This file is part of iMOD. !! !! 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 3 of the License, 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. If not, see . !! !! Contact: imod.support@deltares.nl !! Stichting Deltares !! P.O. Box 177 !! 2600 MH Delft, The Netherlands. !! MODULE MOD_3D_SETTINGS USE WINTERACTER USE RESOURCE USE MODPLOT, ONLY : MP,MPW USE MOD_UTL, ONLY : UTL_MESSAGEHANDLE,UTL_WSELECTFILE USE MOD_GRAPH USE MOD_GRAPH_PAR USE MOD_3D_PAR USE MOD_3D_DISPLAY, ONLY : IMOD3D_DISPLAY,IMOD3D_RESET_TO_INIT,IMOD3D_LIGHT USE MOD_3D_SELECT, ONLY : IMOD3D_SELECTOBJECT USE MOD_3D_ENGINE USE MOD_3D_UTL, ONLY : IMOD3D_BMP,IMOD3D_CLOSE USE MOD_3D_PROCESS USE MOD_IPF_PAR, ONLY : NIPF,NLITHO,BH,ASSF USE MOD_IPFGETVALUE_COLOURS, ONLY : IPFGETVALUE_PLOTCOLOURS,IPFGETVALUE_OPENSAVECOLOURS,IPFGETVALUE_GETCOLOURS USE MOD_IPF_LABEL, ONLY : IMOD3D_LABELS USE MOD_SOLID_PAR, ONLY : SPF,NSPF USE MOD_SOLID_UTL, ONLY : SOLID_INITSPF USE MOD_PLINES_TRACE, ONLY : TRACEIREV,TRACE_3D_STARTPOINTS,TRACE_3D_STARTPOINTS_SHOW,TRACE_3D_COMPUTE_STOP, & TRACE_3D_RESET,TRACE_AL_SPR,TRACE_DEAL_SPR,TRACE_3D_STARTPOINTS_MAIN,TRACE_3D_STARTPOINTS_RESET USE MOD_PLINES_PAR, ONLY : PL,SP,ISNK,FRAC,NLAY USE MOD_LEGEND, ONLY : LEG_MAIN,LEG_COPYTHEM TYPE(WIN_MESSAGE),PRIVATE :: MESSAGE INTEGER,PRIVATE :: ITYPE CONTAINS !###====================================================================== SUBROUTINE IMOD3D_SETTINGSINIT() !###====================================================================== IMPLICIT NONE CHARACTER(LEN=52),ALLOCATABLE,DIMENSION(:) :: TMPNAME INTEGER,ALLOCATABLE,DIMENSION(:) :: TMPINT CALL WINDOWSELECT(IWIN3D) !## set tab initial- settings (always possible, other depend on existence and availability of point within window) CALL WDIALOGSELECT(ID_D3DSETTINGS); CALL WDIALOGSETTAB(IDF_TAB1,ID_D3DSETTINGS_TAB5) !## idf active IF(NIDFLIST.GT.0)THEN CALL WDIALOGSETTAB(IDF_TAB1,ID_D3DSETTINGS_TAB1) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) CALL WDIALOGPUTIMAGE(ID_PROPERTIES,ID_ICONPROPERTIES,1) ALLOCATE(TMPNAME(DISP_NIDFLIST),TMPINT(DISP_NIDFLIST)) TMPNAME=IDFPLOT%DISP_ALIAS; TMPINT=IDFPLOT%DISP_ISEL CALL WDIALOGPUTMENU(IDF_MENU1,TMPNAME,DISP_NIDFLIST,TMPINT) DEALLOCATE(TMPNAME,TMPINT) CALL WDIALOGPUTIMAGE(IDF_COLOUR1,ID_ICONLEGEND) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR2,0) CALL WDIALOGPUTIMAGE(ID_LEGEND,ID_ICONLEGEND,1) CALL WDIALOGPUTIMAGE(ID_FASTLEFT,ID_ICONFASTLEFT,1) CALL WDIALOGPUTIMAGE(ID_LEFT,ID_ICONLEFT,1) CALL WDIALOGPUTIMAGE(ID_STOP,ID_ICONSTOP,1) CALL WDIALOGPUTIMAGE(ID_RIGHT,ID_ICONRIGHT,1) CALL WDIALOGPUTIMAGE(ID_FASTRIGHT,ID_ICONFASTRIGHT,1) CALL WDIALOGFIELDSTATE(ID_STOP,0) CALL IMOD3D_SETTINGS_4DVAR_FIELDS() ELSE CALL WDIALOGSELECT(ID_D3DSETTINGS) CALL WDIALOGTABSTATE(IDF_TAB1,ID_D3DSETTINGS_TAB1,0) ENDIF !## ipf active CALL IMOD3D_SETTINGSINIT_IPF() !## iff active IF(NIFFLIST.GT.0)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB3) ALLOCATE(TMPNAME(NIFFLIST),TMPINT(NIFFLIST)) TMPNAME=IFFPLOT%FNAME; TMPINT=IFFPLOT%ISEL CALL WDIALOGPUTMENU(IDF_MENU1,TMPNAME,NIFFLIST,TMPINT) !IFFPLOT%ISEL) DEALLOCATE(TMPNAME,TMPINT) CALL WDIALOGPUTIMAGE(IDF_COLOUR1,ID_ICONLEGEND) CALL WDIALOGSELECT(ID_D3DSETTINGS) IF(NIDFLIST+NIPF.EQ.0)CALL WDIALOGSETTAB(IDF_TAB1,ID_D3DSETTINGS_TAB3) ELSE CALL WDIALOGSELECT(ID_D3DSETTINGS) CALL WDIALOGTABSTATE(IDF_TAB1,ID_D3DSETTINGS_TAB3,0) ENDIF !## fence diagram settings CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB6) CALL WDIALOGPUTIMAGE(ID_NEW,ID_ICONDRAW) CALL WDIALOGPUTIMAGE(ID_LOAD,ID_ICONOPEN) CALL WDIALOGPUTIMAGE(ID_NEWAUTO,ID_ICONPROPERTIES_AUTO) CALL WDIALOGPUTIMAGE(ID_SAVEAS,ID_ICONSAVEAS) CALL WDIALOGPUTIMAGE(ID_DELETE,ID_ICONDELETE) CALL WDIALOGFIELDSTATE(ID_DELETE,0) CALL WDIALOGFIELDSTATE(ID_SAVEAS,0) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB6) IF(ISOLID.EQ.0)THEN !## possible to add fench-diagrams IF(NIDFLIST.GE.1)THEN CALL WDIALOGCLEARFIELD(IDF_MENU1) !## initialise the cross-sections CALL SOLID_INITSPF(0); NSOLLIST=0 ELSE CALL WDIALOGSELECT(ID_D3DSETTINGS) CALL WDIALOGTABSTATE(IDF_TAB1,ID_D3DSETTINGS_TAB6,0) ENDIF ELSE ALLOCATE(TMPNAME(NSPF),TMPINT(NSPF)) TMPNAME=SPF%FNAME; TMPINT=SOLPLOT%ISEL CALL WDIALOGPUTMENU(IDF_MENU1,TMPNAME,NSPF,TMPINT) DEALLOCATE(TMPNAME,TMPINT) ! CALL WDIALOGFIELDSTATE(ID_NEW,2) ! CALL WDIALOGFIELDSTATE(ID_LOAD,2) ! CALL WDIALOGFIELDSTATE(ID_DELETE,2) ! CALL WDIALOGFIELDSTATE(ID_NEWAUTO,2) ENDIF !## interactive pathlines active IF(IPATHLINE_3D.GT.0)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS) CALL WDIALOGSETTAB(IDF_TAB1,ID_D3DSETTINGS_TAB8) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB8) CALL WDIALOGPUTIMAGE(ID_LOCATE,ID_ICONPIPET,1) CALL WDIALOGPUTIMAGE(ID_ADD,ID_ICONPLUS,1) CALL WDIALOGPUTIMAGE(ID_SHOW,ID_ICONGLASSES,1) CALL WDIALOGPUTIMAGE(ID_NEW,ID_ICONNEW,1) CALL WDIALOGPUTIMAGE(ID_COLOUR,ID_ICONLEGEND,1) CALL WDIALOGPUTIMAGE(ID_OPENXYZ,ID_ICONOPEN,1) CALL WDIALOGPUTIMAGE(ID_PROP1,ID_ICONPROPERTIES,1) CALL WDIALOGPUTIMAGE(ID_PROP2,ID_ICONPROPERTIES,1) CALL WDIALOGPUTIMAGE(ID_PROP3,ID_ICONPROPERTIES,1) CALL WDIALOGPUTIMAGE(ID_PROP5,ID_ICONPROPERTIES,1) CALL WDIALOGPUTIMAGE(ID_PROP6,ID_ICONPROPERTIES,1) IF(ALLOCATED(IDFPLOT))THEN ALLOCATE(TMPNAME(NSPF)) TMPNAME=IDFPLOT%DISP_ALIAS CALL WDIALOGPUTMENU(IDF_MENU1,TMPNAME,DISP_NIDFLIST,1) DEALLOCATE(TMPNAME) CALL IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(0,1,0,0,0) !##initial field state radio buttons ELSE CALL WDIALOGFIELDSTATE(IDF_RADIO6,2) CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO11) !## layers CALL IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(0,0,0,1,0) !##initial field state radio buttons ENDIF CALL WDIALOGFIELDSTATE(ID_START,1) CALL WDIALOGFIELDSTATE(ID_STOP,0) CALL WDIALOGPUTINTEGER(IDF_INTEGER11,0) !## number of groups CALL WDIALOGFIELDSTATE(IDF_INTEGER11,2) !## change fieldstate to "only read" CALL WDIALOGPUTINTEGER(IDF_INTEGER5,0) !## number of particles CALL WDIALOGFIELDSTATE(IDF_INTEGER5,2) !## change fieldstate to "only read" CALL WDIALOGPUTOPTION(IDF_MENU3,ISNK+1) !## set spinner steps CALL WDIALOGSPINNERSTEP(IDF_REAL8,0.05D0,0.1D0) !## fraction CALL WDIALOGSPINNERSTEP(IDF_REAL4,10.0D0,100.0D0) !## total year CALL WDIALOGSPINNERSTEP(IDF_REAL5,0.1D0,1.0D0) !## travelsteps (year) CALL WDIALOGSPINNERSTEP(IDF_INTEGER4,1,2) !## tail length CALL WDIALOGSPINNERSTEP(IDF_REAL6,0.1D0,1.0D0) !## repeat frequency CALL WDIALOGPUTDOUBLE(IDF_REAL8,FRAC) IF(ISNK.EQ.2)CALL WDIALOGFIELDSTATE(IDF_REAL6,1) CALL WDIALOGSELECT(ID_D3DSETTINGS_IDF) CALL WDIALOGRANGEINTEGER(IDF_INTEGER2,1,NLAY) !## deactivate horizontal synchronisation CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5) CALL WDIALOGPUTCHECKBOX(IDF_CHECK6,0) CALL WDIALOGFIELDSTATE(IDF_CHECK6,0) ELSE CALL WDIALOGSELECT(ID_D3DSETTINGS) CALL WDIALOGTABSTATE(IDF_TAB1,ID_D3DSETTINGS_TAB8,0) ENDIF IF(NGENLIST.GT.0)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB4) ALLOCATE(TMPINT(NGENLIST)); TMPINT=GENPLOT%ISEL ALLOCATE(TMPNAME(NGENLIST)); TMPNAME=GENPLOT%FNAME CALL WDIALOGPUTMENU(IDF_MENU1,TMPNAME,NGENLIST,TMPINT) !GENPLOT%ISEL) DEALLOCATE(TMPINT,TMPNAME) CALL WDIALOGPUTIMAGE(IDF_COLOUR1,ID_ICONLEGEND) CALL WDIALOGSELECT(ID_D3DSETTINGS) IF(NIDFLIST+NIPF+NIFFLIST+ISOLID_3D.EQ.0)CALL WDIALOGSETTAB(IDF_TAB1,ID_D3DSETTINGS_TAB4) ELSE CALL WDIALOGSELECT(ID_D3DSETTINGS) CALL WDIALOGTABSTATE(IDF_TAB1,ID_D3DSETTINGS_TAB4,0) ENDIF CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5) CALL WDIALOGPUTIMAGE(IDF_COLOUR1,ID_ICONLEGEND) CALL WDIALOGPUTIMAGE(IDF_COLOUR2,ID_ICONLEGEND) CALL WDIALOGPUTIMAGE(IDF_COLOUR3,ID_ICONLEGEND) CALL WDIALOGPUTIMAGE(IDF_COLOUR4,ID_ICONLEGEND) IF(NIDFLIST.GT.0)THEN ALLOCATE(TMPNAME(DISP_NIDFLIST)); TMPNAME=IDFPLOT%DISP_ALIAS CALL WDIALOGPUTMENU(IDF_MENU1,TMPNAME,DISP_NIDFLIST,1) DEALLOCATE(TMPNAME) ELSE CALL WDIALOGFIELDSTATE(IDF_RADIO3,3) CALL WDIALOGFIELDSTATE(IDF_MENU1,3) ENDIF IF(IACTBITMAP.EQ.0)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO5) !## no IF(IACTBITMAP.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO3) !## idf IF(IACTBITMAP.EQ.2)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO4) !## horizontally IF(IACTBITMAP.EQ.2)THEN CALL WDIALOGFIELDSTATE(IDF_TRACKBAR1,1) CALL WDIALOGFIELDSTATE(IDF_LABEL10,1) CALL WDIALOGFIELDSTATE(IDF_LABEL11,1) ELSE CALL WDIALOGFIELDSTATE(IDF_TRACKBAR1,0) CALL WDIALOGFIELDSTATE(IDF_LABEL10,0) CALL WDIALOGFIELDSTATE(IDF_LABEL11,0) ENDIF !## vertical position of bitmap CALL WDIALOGRANGETRACKBAR(IDF_TRACKBAR1,0,100,25) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR1,99) !## view angle CALL WDIALOGRANGETRACKBAR(IDF_TRACKBAR7,1,180,30) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR7,10) CALL WDIALOGFIELDSTATE(IDF_TRACKBAR6,MIN(1,IACTBITMAP)) CALL WDIALOGFIELDSTATE(IDF_LABEL12,MIN(1,IACTBITMAP)) CALL WDIALOGFIELDSTATE(IDF_LABEL5,MIN(1,IACTBITMAP)) CALL WDIALOGFIELDSTATE(IDF_LABEL9,MIN(1,IACTBITMAP)) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR6,ITRANSPARANCYBITMAP) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB7) ALLOCATE(TMPINT(NCLPLIST)); TMPINT=CLPPLOT%ISEL ALLOCATE(TMPNAME(NCLPLIST)); TMPNAME=CLPPLOT%FNAME CALL WDIALOGPUTMENU(IDF_MENU1,TMPNAME,NCLPLIST,TMPINT) CALL WDIALOGPUTIMAGE(IDF_COLOUR1,ID_ICONLEGEND) DEALLOCATE(TMPNAME,TMPINT) IF(.NOT.LCAP)THEN CALL WDIALOGFIELDSTATE(IDF_CHECK1,0) CALL WDIALOGPUTSTRING(IDF_CHECK1,'Capping Disabled') CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,0) ELSE !## by default capping off CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,0) ENDIF CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB9) CALL WDIALOGPUTIMAGE(ID_SELECT,ID_ICONSELECTPOINT,1) CALL WDIALOGPUTIMAGE(ID_DISPLAY,ID_ICONINFO,1) CALL WDIALOGPUTIMAGE(ID_DELETE,ID_ICONDELETE,1) CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB1); CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB2) CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB3); CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB4) CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB5); CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB6) CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB7); CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB9) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB1); CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB3); CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB4) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB5); CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB6) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB7) END SUBROUTINE IMOD3D_SETTINGSINIT !###====================================================================== SUBROUTINE IMOD3D_SETTINGSMAIN(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ITYPE TYPE(WIN_MESSAGE),INTENT(IN) :: MESSAGE INTEGER :: IIPF,IROW,ICOL,IRGB,I,J,ILEG,PL_ITYPE,DID TYPE(WIN_MESSAGE) :: PL_MESSAGE REAL(KIND=DP_KIND) :: ANGLE,X,Y,Z,D CHARACTER(LEN=256) :: FNAME CALL WDIALOGSELECT(MESSAGE%WIN) SELECT CASE (MESSAGE%WIN) !## main dialog CASE (ID_D3DSETTINGS) SELECT CASE (ITYPE) CASE (KEYDOWN) IF(WALK_MODE.EQ.0)THEN CALL IMOD3D_PROCESSKEYS(MESSAGE%VALUE1) ELSE CALL IMOD3D_PROCESSKEYS_WALK(MESSAGE%VALUE1) ENDIF CASE (MOUSEBUTDOWN,MOUSEBUTUP) CALL IMOD3D_PROCESSMOUSEBUTTON(ITYPE,MESSAGE%VALUE1,MESSAGE%X,MESSAGE%Y) CASE (MOUSEMOVE) IF(WALK_MODE.EQ.0)THEN CALL IMOD3D_PROCESSMOUSEMOVE(MESSAGE) ELSE CALL IMOD3D_PROCESSMOUSEMOVE_WALK(MESSAGE%X,MESSAGE%Y) ENDIF CASE (EXPOSE) CALL IMOD3D_DISPLAY(1) CASE (RESIZE) CALL IMOD3D_PROCESSRESIZE(MESSAGE%VALUE1,MESSAGE%VALUE2) END SELECT !## idf-dialog CASE (ID_D3DSETTINGS_TAB1) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE1) !## time variant idf files CASE (IDF_MENU2) CALL IMOD3D_SETTINGS_4DVAR_PROGRESS(MESSAGE%VALUE1) CALL IMOD3D_DISPLAY(1) CASE (IDF_MENU1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGS_4DVAR_FIELDS() CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB1) !## rescale vertical if desired CALL IMOD3D_SETTINGS_VERTICALAXES() CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB1) CLPPLOT(1)%Z=TOP%Z CLPPLOT(2)%Z=BOT%Z CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_CHECK3,IDF_CHECK2,IDF_CHECK4,IDF_CHECK5) !## shading/plotlegend/transparancy IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB1,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB1) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF !## (a) colouring according a single colour (b) legend colouring CASE (IDF_RADIO1,IDF_RADIO2) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB1,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB1) CALL UTL_MESSAGEHANDLE(0) !## recompute current idf IF(.NOT.IMOD3D_REDRAWIDF(0))THEN; ENDIF IF(.NOT.IMOD3D_REDRAWIDF(1))THEN; ENDIF CALL UTL_MESSAGEHANDLE(1) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF !## wireframe,colouring,stacked idf CASE (IDF_RADIO3,IDF_RADIO4,IDF_RADIO5,IDF_TRACKBAR2) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB1,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB1) CALL IMOD3D_DISPLAY(1) ENDIF END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_LEGEND) IF(IMOD3D_SETTINGS_CHANGELEGEND())THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB1,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB1) CALL UTL_MESSAGEHANDLE(0) !## recompute current idf IF(.NOT.IMOD3D_REDRAWIDF(0))THEN; ENDIF IF(.NOT.IMOD3D_REDRAWIDF(1))THEN; ENDIF CALL UTL_MESSAGEHANDLE(1) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF CASE (ID_LEFT,ID_RIGHT) CALL IMOD3D_SETTINGS_4DVAR_PROGRESS(MESSAGE%VALUE1) CALL IMOD3D_DISPLAY(1) CASE(ID_FASTLEFT,ID_FASTRIGHT) CALL WDIALOGFIELDSTATE(ID_LEFT,0) CALL WDIALOGFIELDSTATE(ID_RIGHT,0) CALL WDIALOGFIELDSTATE(ID_STOP,1) IF(MESSAGE%VALUE1.EQ.ID_FASTLEFT)CALL WDIALOGFIELDSTATE(ID_FASTRIGHT,0) IF(MESSAGE%VALUE1.EQ.ID_FASTRIGHT)CALL WDIALOGFIELDSTATE(ID_FASTLEFT,0) D4ITIMEDIR=MESSAGE%VALUE1 CASE(ID_STOP) CALL WDIALOGFIELDSTATE(ID_LEFT,1) CALL WDIALOGFIELDSTATE(ID_RIGHT,1) CALL WDIALOGFIELDSTATE(ID_STOP,0) CALL WDIALOGFIELDSTATE(ID_FASTRIGHT,1) CALL WDIALOGFIELDSTATE(ID_FASTLEFT,1) D4ITIMEDIR=0 CASE (IDF_COLOUR1) CALL IMOD3D_SETTINGSCOLOUR(MESSAGE%VALUE1,ID_D3DSETTINGS_TAB1) CASE (ID_PROPERTIES) !## refresh if needed ... IF(IMOD3D_SETTINGS_IDF(1))THEN CALL IMOD3D_SETTINGS_IDF_ALIAS() IDFPLOT%ISEL=1 CALL UTL_MESSAGEHANDLE(0) !## recompute current idf IF(.NOT.IMOD3D_REDRAWIDF(0))THEN; ENDIF IF(.NOT.IMOD3D_REDRAWIDF(1))THEN; ENDIF CALL IMOD3D_SETTINGS_4DVAR_FIELDS() CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB1,MESSAGE%VALUE2) CALL UTL_MESSAGEHANDLE(1) CALL IMOD3D_SETUPDISPLAY_MISC(.TRUE.) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF END SELECT END SELECT !## ipf-dialog CASE (ID_D3DSETTINGS_TAB2) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) !## from field - store result first, before overwrite it CASE (IDF_MENU1,IDF_MENU2,IDF_GRID1) IF(MESSAGE%VALUE1.NE.MESSAGE%VALUE2)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) CALL WDIALOGGETMENU(IDF_MENU1,IPFPLOT%ISEL) IF(SUM(IPFPLOT%ISEL).EQ.1)THEN DO IIPF=1,SIZE(IPFPLOT); IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO CALL WDIALOGGETMENU(IDF_MENU2,ILEG) CALL IPFGETVALUE_GETCOLOURS(ID_D3DSETTINGS_TAB2,ILEG) ENDIF ENDIF CALL IMOD3D_SETTINGS_IPF_SELECTED() END SELECT SELECT CASE (MESSAGE%VALUE1) !## change in menu field !## wireframe,colouring,stacked idf CASE (IDF_RADIO3,IDF_RADIO4,IDF_RADIO5) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB2,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB2) CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_MENU1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN !## plot new legend CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) CALL WDIALOGGETMENU(IDF_MENU1,IPFPLOT%ISEL) IF(SUM(IPFPLOT%ISEL).EQ.1)THEN DO IIPF=1,SIZE(IPFPLOT); IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO CALL WDIALOGGETMENU(IDF_MENU2,ILEG) ILEG=IPFPLOT(IIPF)%ILEGDLF CALL WDIALOGFIELDSTATE(IDF_MENU2,1) CALL WDIALOGPUTOPTION(IDF_MENU2,ILEG) CALL IPFGETVALUE_PLOTCOLOURS(ID_D3DSETTINGS_TAB2,ILEG) ELSE CALL WDIALOGFIELDSTATE(IDF_MENU2,0) ENDIF CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB2) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_MENU2) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN !## plot new legend CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) CALL WDIALOGGETMENU(IDF_MENU1,IPFPLOT%ISEL) IF(SUM(IPFPLOT%ISEL).EQ.1)THEN DO IIPF=1,SIZE(IPFPLOT); IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO CALL WDIALOGGETMENU(IDF_MENU2,ILEG) IPFPLOT(IIPF)%ILEGDLF=ILEG CALL IPFGETVALUE_PLOTCOLOURS(ID_D3DSETTINGS_TAB2,ILEG) ENDIF CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_CHECK5) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB2,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB2) CALL UTL_MESSAGEHANDLE(0); IF(.NOT.IMOD3D_IPF(1,0))THEN; ENDIF; CALL UTL_MESSAGEHANDLE(1) DO IIPF=1,NIPF; IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO IF(IMOD3D_IPF_SELECTION(IIPF))THEN CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF ENDIF CASE (IDF_CHECK1,IDF_CHECK2,IDF_CHECK4) !## labeling/plotlegend IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB2,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB2) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF ! CASE (IDF_CHECK2) !## plotlegend ! IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN ! CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB2,MESSAGE%VALUE2) ! CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB2) ! CALL IMOD3D_LEGEND_MAIN() ! CALL IMOD3D_DISPLAY(1) ! ENDIF CASE (IDF_GRID1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) CALL WDIALOGGETMENU(IDF_MENU2,ILEG) CALL WGRIDPOS(MESSAGE%Y,ICOL,IROW) IF(ICOL.EQ.2)THEN IF(MESSAGE%Y.NE.MESSAGE%X)THEN IRGB=BH(ILEG,IROW)%LITHOCLR CALL WSELECTCOLOUR(IRGB) IF(WINFODIALOG(4).EQ.1)THEN CALL WGRIDPUTCELLINTEGER(IDF_GRID1,2,IROW,IRGB) CALL IPFGETVALUE_GETCOLOURS(ID_D3DSETTINGS_TAB2,ILEG) CALL IPFGETVALUE_PLOTCOLOURS(ID_D3DSETTINGS_TAB2,ILEG) !## force another cell after colour selection CALL WGRIDSETCELL(IDF_GRID1,1,IROW) ENDIF ENDIF ENDIF ENDIF END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_PROPERTIES) IF(SUM(IPFPLOT%ISEL).GT.1)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to select a single IPF to continue.','Warning') ELSE DO IIPF=1,NIPF; IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO !## refresh if needed ... CALL IMOD3D_LABELS(IIPF,IPFPLOT(IIPF)%IPLOT) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) !## fill display with drills IF(.NOT.IMOD3D_IPF(1,0))THEN; ENDIF !## refresh image and labels CALL IMOD3D_IPF_LABELS() IF(.NOT.IMOD3D_IPF_SELECTION(IIPF))THEN; ENDIF CALL IMOD3D_DISPLAY(1) ENDIF CASE (ID_SELECTION) IF(SUM(IPFPLOT%ISEL).GT.1)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to select a single IPF to continue.','Warning') ELSE !## refresh if needed ... DO IIPF=1,NIPF; IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO IF(IMOD3D_SETTINGS_IPF(IIPF))CALL IMOD3D_DISPLAY(1) CALL IMOD3D_SETTINGS_IPF_SELECTED() ENDIF !## save ipf files CASE (ID_EXPORTAS) IF(SUM(IPFPLOT%ISEL).GT.1)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to select a single IPF to continue.','Warning') ELSE DO IIPF=1,NIPF; IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO IF(.NOT.IMOD3D_IPF_EXPORTIPF(IIPF))THEN; ENDIF ENDIF CASE (IDF_COLOUR1) CALL IMOD3D_SETTINGSCOLOUR(MESSAGE%VALUE1,ID_D3DSETTINGS_TAB2) !## reload *.dlf file CASE (ID_OPEN) CALL WDIALOGGETMENU(IDF_MENU2,ILEG) CALL IPFGETVALUE_OPENSAVECOLOURS('',MESSAGE%VALUE1,ID_D3DSETTINGS_TAB2,ILEG) CALL UTL_MESSAGEHANDLE(0); IF(.NOT.IMOD3D_IPF(1,0))THEN; ENDIF; CALL UTL_MESSAGEHANDLE(1) DO IIPF=1,NIPF; IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO IF(IMOD3D_IPF_SELECTION(IIPF))THEN CALL IMOD3D_IPF_LABELS() CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF !## save *.dlf file CASE (ID_SAVEAS) CALL WDIALOGGETMENU(IDF_MENU2,ILEG) CALL IPFGETVALUE_OPENSAVECOLOURS('',MESSAGE%VALUE1,ID_D3DSETTINGS_TAB2,ILEG) !## redraw canvas based upon updates of colouring information CASE (ID_REDRAW) CALL WDIALOGGETMENU(IDF_MENU2,ILEG) CALL IPFGETVALUE_GETCOLOURS(ID_D3DSETTINGS_TAB2,ILEG) CALL UTL_MESSAGEHANDLE(0); IF(.NOT.IMOD3D_IPF(1,0))THEN; ENDIF; CALL UTL_MESSAGEHANDLE(1) DO IIPF=1,NIPF; IF(IPFPLOT(IIPF)%ISEL.EQ.1)EXIT; ENDDO IF(IMOD3D_IPF_SELECTION(IIPF))THEN CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF END SELECT END SELECT !## iff-dialog CASE (ID_D3DSETTINGS_TAB3) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_MENU1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB3) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB3) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_CHECK1,IDF_CHECK4) !## plotlegend IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB3,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB3) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_INTEGER2) CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB3,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSMENU() CALL IMOD3D_DISPLAY(1) CASE (IDF_RADIO1,IDF_RADIO2) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB3,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB3) CALL UTL_MESSAGEHANDLE(0) !## recompute current idf IF(.NOT.IMOD3D_REDRAWIFF())THEN ENDIF CALL UTL_MESSAGEHANDLE(1) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) ENDIF END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_COLOUR1) CALL IMOD3D_SETTINGSCOLOUR(MESSAGE%VALUE1,ID_D3DSETTINGS_TAB3) END SELECT END SELECT !## sol-dialog CASE (ID_D3DSETTINGS_TAB6) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_MENU1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB6) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB6) CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_CHECK2,IDF_CHECK3,IDF_CHECK4) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB6,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB6) CALL IMOD3D_DISPLAY(1) ENDIF END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## add new fence-diagram CASE (ID_NEW) !## start drawing a cross-section IDRAWCROSS=1; NXYZCROSS=0; NXYZCROSS(1)=1; IVALIDPOS=0 CASE (ID_NEWAUTO) !## initiate window CALL IMOD3D_FENCEINIT() CALL IMOD3D_FENCECOMPUTE() !## delete fench-diagram CASE (ID_DELETE) IF(IMOD3D_SOL_DELETE())THEN ENDIF CASE (ID_SAVEAS) CALL IMOD3D_SOL_SAVE() CASE (ID_LOAD) CALL IMOD3D_SPF_LOAD() CASE (IDF_COLOUR1) CALL IMOD3D_SETTINGSCOLOUR(MESSAGE%VALUE1,ID_D3DSETTINGS_TAB6) END SELECT END SELECT !## clipplanes-dialog CASE (ID_D3DSETTINGS_TAB7) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_MENU1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB7) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB7) CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_INTEGER2,IDF_CHECK1) CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB7,MESSAGE%VALUE1) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB7) CALL IMOD3D_DISPLAY(1) CASE (IDF_TRACKBAR1,IDF_TRACKBAR2,IDF_TRACKBAR3,IDF_TRACKBAR4,IDF_TRACKBAR5,IDF_TRACKBAR6) CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB7,MESSAGE%VALUE1) CALL IMOD3D_DISPLAY(1) END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_RESET) CALL WMESSAGEBOX(YESNO,QUESTIONICON,COMMONNO,'Are you sure to reset all clipping planes?','Question') IF(WINFODIALOG(4).EQ.1)THEN CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR2,0) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR3,0) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR4,0) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR1,0) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR5,0) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR6,0) CLPPLOT%IPOS=0 ! CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB7,MESSAGE%VALUE1) CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_COLOUR1) CALL IMOD3D_SETTINGSCOLOUR(MESSAGE%VALUE1,ID_D3DSETTINGS_TAB7) CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB7,MESSAGE%VALUE1) CALL IMOD3D_DISPLAY(1) END SELECT END SELECT !## gen-dialog CASE (ID_D3DSETTINGS_TAB4) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_MENU1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB4) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB4) CALL IMOD3D_DISPLAY(1) ENDIF CASE (IDF_INTEGER2,IDF_TRACKBAR1,IDF_CHECK1,IDF_CHECK4) CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB4,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSMENU() CALL IMOD3D_DISPLAY(1) END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_COLOUR1) CALL IMOD3D_SETTINGSCOLOUR(MESSAGE%VALUE1,ID_D3DSETTINGS_TAB4) END SELECT END SELECT !## misc-dialog CASE (ID_D3DSETTINGS_TAB5) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) CASE (IDF_CHECK6) CALL WDIALOGGETCHECKBOX(IDF_CHECK6,I) IF(I.EQ.1)CALL IMOD3D_DISPLAY_UPDATE(MPW%XMIN,MPW%YMIN,MPW%XMAX,MPW%YMAX) CASE (IDF_CHECK1,IDF_CHECK2,IDF_CHECK5,IDF_CHECK7) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB5,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB5) CALL IMOD3D_DISPLAY(1) ENDIF !## show bitmap currently shown !## change position of bitmap CASE (IDF_TRACKBAR1,IDF_TRACKBAR6) IF(.NOT.IMOD3D_BMP())THEN; ENDIF CALL IMOD3D_DISPLAY(1) !## fovy (view-angle) CASE (IDF_TRACKBAR7) CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR7,I) FOVY=I CALL GLMATRIXMODE(GL_PROJECTION); CALL GLLOADIDENTITY() CALL GLUPERSPECTIVE(FOVY,RAT,ZNEAR,ZFAR) !## angle(fovy), aspect (ratio:w/h), near () and far() CALL IMOD3D_SETLOOKAT_LOOKFROM() CALL IMOD3D_RESET_TO_INIT() CALL IMOD3D_DISPLAY(1) !## display background image CASE (IDF_RADIO3,IDF_RADIO4,IDF_RADIO5) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN CALL IMOD3D_SETTINGSGET(ID_D3DSETTINGS_TAB5,MESSAGE%VALUE2) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB5) IF(.NOT.IMOD3D_BMP())THEN; ENDIF CALL IMOD3D_DISPLAY(1) ENDIF !## light CASE (IDF_TRACKBAR2,IDF_TRACKBAR3,IDF_TRACKBAR4) CALL IMOD3D_LIGHT() CALL IMOD3D_DISPLAY(1) !## light position CASE (IDF_TRACKBAR5) CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR5,I) ANGLE=360.0D0/(2.0*PI_OPENGL) X=COS(REAL(I)/ANGLE) Y=SIN(REAL(I)/ANGLE) Z=1.0D0 D=SQRT(X**2.0D0+Y**2.0D0+Z**2.0D0) X=X/D; Y=Y/D; Z=Z/D D=SQRT(X**2.0D0+Y**2.0D0+Z**2.0D0) POS(1)=-1.0D0*X POS(2)=-1.0D0*Y POS(3)=-1.0D0*Z CALL IMOD3D_DISPLAY(1) END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_COLOUR1,IDF_COLOUR2,IDF_COLOUR3,IDF_COLOUR4) CALL IMOD3D_SETTINGSCOLOUR(MESSAGE%VALUE1,ID_D3DSETTINGS_TAB5) CASE (ID_ZSCALE) CALL IMOD3D_SETTINGS_VERTICALAXES() CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5) ! CALL WDIALOGGETCHECKBOX(IDF_CHECK7,I) CLPPLOT(1)%Z=TOP%Z CLPPLOT(2)%Z=BOT%Z ! !## remove clipping planes for up/down ! CALL IMOD3D_DELETECLIPPLANE('ClippingPlane Up'); CALL IMOD3D_DELETECLIPPLANE('ClippingPlane Down') ! !## add/refresh clipping planes for up/down ! CALL IMOD3D_CLP_ADD( 0.0_GLDOUBLE,0.0_GLDOUBLE,-1.0_GLDOUBLE, 0.0_GLDOUBLE,0.0_GLDOUBLE,TOP%Z,'ClippingPlane Up') ! CALL IMOD3D_CLP_ADD( 0.0_GLDOUBLE,0.0_GLDOUBLE, 1.0_GLDOUBLE, 0.0_GLDOUBLE,0.0_GLDOUBLE,BOT%Z,'ClippingPlane Down') ! CALL IMOD3D_CLP_ADD( 1.0_GLDOUBLE,0.0_GLDOUBLE, 0.0_GLDOUBLE,-4.0_GLDOUBLE,0.0_GLDOUBLE,0.0_GLDOUBLE,'West') ! CALL IMOD3D_CLP_ADD(-1.0_GLDOUBLE,0.0_GLDOUBLE, 0.0_GLDOUBLE, 4.0_GLDOUBLE,0.0_GLDOUBLE,0.0_GLDOUBLE,'East') ! CALL IMOD3D_CLP_ADD( 1.0_GLDOUBLE,0.0_GLDOUBLE, 0.0_GLDOUBLE,-4.0_GLDOUBLE,0.0_GLDOUBLE,0.0_GLDOUBLE,'North') ! CALL IMOD3D_CLP_ADD(-1.0_GLDOUBLE,0.0_GLDOUBLE, 0.0_GLDOUBLE, 4.0_GLDOUBLE,0.0_GLDOUBLE,0.0_GLDOUBLE,'South') ! CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB7) ! CALL WDIALOGPUTMENU(IDF_MENU1,CLPPLOT%FNAME,NCLPLIST,CLPPLOT%ISEL) CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB7) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB7) CALL IMOD3D_DISPLAY(1) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB7) ! CASE (ID_ZSCALE2) ! CALL IMOD3D_HORIZONTALAXES() ! CALL IMOD3D_DISPLAY(1) ! CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB7) END SELECT END SELECT !## pathline-dialog CASE (ID_D3DSETTINGS_TAB8) SELECT CASE (ITYPE) CASE (FIELDCHANGED) CALL IMOD3D_SETTINGSMAIN_FIELDSPL(MESSAGE) CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## location CASE (ID_PROP4) CALL TRACE_3D_STARTPOINTS_MAIN(); CALL TRACE_3D_STARTPOINTS_SHOW(); CALL IMOD3D_DISPLAY(1) !## location CASE (ID_PROP1,ID_PROP2,ID_PROP3,ID_PROP5,ID_PROP6) IF(MESSAGE%VALUE1.EQ.ID_PROP1)CALL WDIALOGSELECT(ID_D3DSETTINGS_LOCATION) IF(MESSAGE%VALUE1.EQ.ID_PROP2)THEN CALL WDIALOGGETMENU(IDF_MENU2,I); CALL WDIALOGGETDOUBLE(IDF_REAL10,X) CALL WDIALOGSELECT(ID_D3DSETTINGS_SINKS) CALL WDIALOGPUTOPTION(IDF_MENU2,I); CALL WDIALOGPUTDOUBLE(IDF_REAL10,X) CALL WDIALOGGETMENU(IDF_MENU2,I); J=1; IF(I.EQ.1)J=0 CALL WDIALOGFIELDSTATE(IDF_MENU3,I); CALL WDIALOGFIELDSTATE(IDF_REAL11,I) ENDIF IF(MESSAGE%VALUE1.EQ.ID_PROP3)CALL WDIALOGSELECT(ID_D3DSETTINGS_LAYER) IF(MESSAGE%VALUE1.EQ.ID_PROP5)CALL WDIALOGSELECT(ID_D3DSETTINGS_IDF) IF(MESSAGE%VALUE1.EQ.ID_PROP6)CALL WDIALOGSELECT(ID_D3DSETTINGS_IDF) DID=WINFODIALOG(CURRENTDIALOG) CALL UTL_DIALOGSHOW(-1,-1,0,3) DO CALL WMESSAGE(PL_ITYPE,PL_MESSAGE) SELECT CASE (PL_ITYPE) CASE (FIELDCHANGED) SELECT CASE (PL_MESSAGE%VALUE2) CASE (IDF_MENU4) CALL WDIALOGGETMENU(IDF_MENU4,I); J=1; IF(I.EQ.1)J=0 CALL WDIALOGFIELDSTATE(IDF_MENU3,I); CALL WDIALOGFIELDSTATE(IDF_REAL11,I) END SELECT CASE (EXPOSE) CALL IMOD3D_DISPLAY(1) CASE (PUSHBUTTON) SELECT CASE (PL_MESSAGE%VALUE1) CASE (IDOK,IDCANCEL) IF(MESSAGE%VALUE1.EQ.ID_PROP2)THEN CALL WDIALOGGETMENU(IDF_MENU2,I); CALL WDIALOGGETDOUBLE(IDF_REAL10,X) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB8) CALL WDIALOGPUTOPTION(IDF_MENU2,I); CALL WDIALOGPUTDOUBLE(IDF_REAL10,X) ENDIF EXIT END SELECT END SELECT ENDDO CALL WDIALOGSELECT(DID); CALL WDIALOGHIDE(); CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB8) CASE (ID_OPENXYZ) IF(.NOT.UTL_WSELECTFILE('iMOD Map (*.ipf,*.idf)|*.ipf;*.idf|',& LOADDIALOG+MUSTEXIST+PROMPTON+DIRCHANGE+APPENDEXT,FNAME,'Load iMOD Map (*.ipf;*.idf)'))RETURN CALL WDIALOGPUTSTRING(IDF_STRING2,TRIM(FNAME)) !## start new CASE (ID_NEW) CALL TRACE_3D_STARTPOINTS_RESET() IF(TRACE_3D_RESET(0))THEN; ENDIF CALL TRACE_3D_STARTPOINTS_SHOW() CALL IMOD3D_DISPLAY(1) !## add starting point to the list CASE (ID_ADD) CALL TRACE_3D_STARTPOINTS(); CALL TRACE_3D_STARTPOINTS_SHOW(); CALL IMOD3D_DISPLAY(1) !## change colour CASE (ID_COLOUR) IRGB=PL%SPCOLOR; CALL WSELECTCOLOUR(IRGB); IF(WINFODIALOG(4).EQ.1)PL%SPCOLOR=IRGB; CALL WDIALOGCOLOUR(IDF_LABEL17,IRGB,IRGB) CASE (ID_START) IF(PL%IRUN.EQ.0)THEN IF(TRACE_3D_RESET(1))THEN !## set the startpoints CALL TRACE_AL_SPR() CALL WDIALOGFIELDSTATE(ID_STOP,1) CALL WDIALOGPUTSTRING(ID_START,'Pause'); PL%IRUN=1 CALL WDIALOGFIELDSTATE(IDF_RADIO1,0); CALL WDIALOGFIELDSTATE(IDF_RADIO2,0) CALL WDIALOGFIELDSTATE(ID_NEW,0); CALL WDIALOGFIELDSTATE(ID_ADD,0) CALL WDIALOGFIELDSTATE(IDF_INTEGER4,2) ENDIF ELSEIF(PL%IRUN.EQ.1)THEN CALL WDIALOGPUTSTRING(ID_START,'Continue'); PL%IRUN=-1 ELSEIF(PL%IRUN.EQ.-1)THEN CALL WDIALOGPUTSTRING(ID_START,'Pause'); PL%IRUN=1 ENDIF CASE (ID_STOP) CALL TRACE_3D_COMPUTE_STOP() END SELECT END SELECT !## identify-dialog CASE (ID_D3DSETTINGS_TAB9) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## display graph of borehole CASE (ID_DISPLAY) CALL IMOD3D_SETTINGSMAIN_IPFGRAPH() !## clear borehole information CASE (ID_DELETE) ISELECTED=0 CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB9_TAB1) CALL WDIALOGCLEARFIELD(IDF_MENU1) CALL WGRIDPUTSTRING(IDF_GRID1,2,NANSTRING,NIDFLIST) CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB9_TAB2) CALL WDIALOGCLEARFIELD(IDF_GRID1) CALL WGRIDROWS(IDF_GRID1,1) CALL WGRIDCOLOURCOLUMN(IDF_GRID1,2,-1,-1) CALL IMOD3D_DISPLAY(1) CASE (ID_SELECT) CALL IMOD3D_SELECTOBJECT() END SELECT END SELECT !## identify-dialog CASE (ID_D3DSETTINGS_TAB9_TAB2) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) END SELECT END SELECT !## fence-auto dialog CASE (ID_D3DSETTINGS_FENCES) SELECT CASE (ITYPE) CASE (FIELDCHANGED) CALL IMOD3D_FENCECOMPUTE() CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (IDOK) IF(IMOD3D_SOL_ADD())CALL IMOD3D_FENCECLOSE() CASE (IDHELP) CASE (IDCANCEL) CALL IMOD3D_FENCECLOSE() END SELECT END SELECT END SELECT END SUBROUTINE IMOD3D_SETTINGSMAIN !###====================================================================== LOGICAL FUNCTION IMOD3D_SETTINGS_CHANGELEGEND() !###====================================================================== IMPLICIT NONE INTEGER :: I,NI,IPLOT INTEGER,ALLOCATABLE,DIMENSION(:) :: IL IMOD3D_SETTINGS_CHANGELEGEND=.FALSE. CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGS_GETSELECTED() ! CALL WDIALOGGETMENU(IDF_MENU1,IDFPLOT%DISP_ISEL) !## nothing selected IF(SUM(IDFPLOT%DISP_ISEL).EQ.0)RETURN IPLOT=0; IDFPLOT%ISEL=0; DO I=1,DISP_NIDFLIST; IF(IDFPLOT(I)%DISP_ISEL.EQ.1)EXIT; ENDDO; IPLOT=IDFPLOT(I)%IPLOT IF(IPLOT.LE.0)RETURN !## modify legend IF(.NOT.LEG_MAIN(IPLOT))RETURN ALLOCATE(IL(DISP_NIDFLIST)); IL=0 NI=0; DO I=1,DISP_NIDFLIST IF(IDFPLOT(I)%DISP_ISEL.EQ.1)THEN NI=NI+1; IL(NI)=IDFPLOT(I)%IPLOT ENDIF ENDDO !## change legend for all selected IF(NI.GT.1)CALL LEG_COPYTHEM(IPLOT,NI,IL) !## update legend for 3D DO I=1,NI; IDFPLOT(I)%LEG=MP(IL(I))%LEG; ENDDO; DEALLOCATE(IL) IMOD3D_SETTINGS_CHANGELEGEND=.TRUE. END FUNCTION IMOD3D_SETTINGS_CHANGELEGEND !###====================================================================== SUBROUTINE IMOD3D_SETTINGS_4DVAR_PROGRESS(ID) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ID INTEGER :: I,J,II,JJ CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGS_GETSELECTED() ! CALL WDIALOGGETMENU(IDF_MENU1,IDFPLOT%DISP_ISEL) ! !## nothing selected IF(SUM(IDFPLOT%DISP_ISEL).EQ.0)RETURN IDFPLOT%ISEL=0; DO I=1,DISP_NIDFLIST; IF(IDFPLOT(I)%DISP_ISEL.EQ.1)IDFPLOT(IDFPLOT(I)%DISP_ILIST)%ISEL=1; ENDDO !## change time for selected idf files JJ=0; DO II=1,DISP_NIDFLIST !## skip non-selected files IF(IDFPLOT(II)%DISP_ISEL.EQ.0)CYCLE !## skip non-time variant files J=IDFPLOT(II)%DISP_ILIST; IF(IDFPLOT(J)%ICUBE.LE.5)CYCLE SELECT CASE (ID) CASE (IDF_MENU2) CALL WDIALOGGETMENU(IDF_MENU2,IDFPLOT(J)%D4ITIME) IDFPLOT(J)%D4ITIME=MAX(1,MIN(IDFPLOT(J)%D4ITIME,SIZE(IDFPLOT(J)%TFILES))) CASE (ID_RIGHT) IDFPLOT(J)%D4ITIME=MIN(IDFPLOT(J)%D4ITIME+1,SIZE(IDFPLOT(J)%TFILES)) !## repeat CASE (ID_FASTRIGHT) IDFPLOT(J)%D4ITIME=IDFPLOT(J)%D4ITIME+1 IF(IDFPLOT(J)%D4ITIME.GT.SIZE(IDFPLOT(J)%TFILES))IDFPLOT(J)%D4ITIME=1 CASE (ID_LEFT) IDFPLOT(J)%D4ITIME=MAX(IDFPLOT(J)%D4ITIME-1,1) !## repeat CASE (ID_FASTLEFT) IDFPLOT(J)%D4ITIME=IDFPLOT(J)%D4ITIME-1 IF(IDFPLOT(J)%D4ITIME.LT.1)IDFPLOT(J)%D4ITIME=SIZE(IDFPLOT(J)%TFILES) END SELECT !## only the first IF(JJ.EQ.0)THEN; CALL WDIALOGPUTOPTION(IDF_MENU2,IDFPLOT(J)%D4ITIME); JJ=J; ENDIF ENDDO END SUBROUTINE IMOD3D_SETTINGS_4DVAR_PROGRESS !###====================================================================== SUBROUTINE IMOD3D_SETTINGS_GETSELECTED() !###====================================================================== IMPLICIT NONE INTEGER,ALLOCATABLE,DIMENSION(:) :: TMPINT ! CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) ALLOCATE(TMPINT(SIZE(IDFPLOT))) !DISP_NIDFLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IDFPLOT%DISP_ISEL=TMPINT DEALLOCATE(TMPINT) END SUBROUTINE IMOD3D_SETTINGS_GETSELECTED !###====================================================================== SUBROUTINE IMOD3D_SETTINGS_4DVAR_FIELDS() !###====================================================================== IMPLICIT NONE INTEGER :: I,J,II,N !## what is selected CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGS_GETSELECTED() ! CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IDFPLOT%ISEL=0; DO I=1,DISP_NIDFLIST; IF(IDFPLOT(I)%DISP_ISEL.EQ.1)IDFPLOT(IDFPLOT(I)%DISP_ILIST)%ISEL=1; ENDDO !## nothing to adjust I=0; IF(SUM(IDFPLOT(1:NIDFLIST)%ISEL).GT.0)THEN !## get first selected idf-file to fill in menu DO II=1,DISP_NIDFLIST; IF(IDFPLOT(II)%DISP_ISEL.EQ.1)EXIT; ENDDO; J=IDFPLOT(II)%DISP_ILIST IF(IDFPLOT(J)%ICUBE.GT.5)THEN I=1; N=SIZE(IDFPLOT(J)%TFILES) CALL WDIALOGPUTMENU(IDF_MENU2,IDFPLOT(J)%CDATES,N,IDFPLOT(J)%D4ITIME) ENDIF ENDIF CALL WDIALOGFIELDSTATE(ID_FASTLEFT,I); CALL WDIALOGFIELDSTATE(ID_LEFT,I) CALL WDIALOGFIELDSTATE(ID_RIGHT,I); !CALL WDIALOGFIELDSTATE(ID_STOP,I) CALL WDIALOGFIELDSTATE(ID_FASTRIGHT,I); CALL WDIALOGFIELDSTATE(IDF_MENU2,I) END SUBROUTINE IMOD3D_SETTINGS_4DVAR_FIELDS !###====================================================================== SUBROUTINE IMOD3D_SETTINGSMAIN_IPFGRAPH() !###====================================================================== IMPLICIT NONE INTEGER :: I,J,M,N,NXG,ICLR,WID,IEXIT REAL(KIND=DP_KIND) :: IWIDTH IF(ISELECTED.LE.0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to select a borehole first.','Error') RETURN ENDIF WID=WINFODIALOG(CURRENTDIALOG) M=ASSF(ISELECTED)%NRASS; N=1; NXG=1 CALL GRAPH_ALLOCATE(M,N) DO I=1,M; DO J=1,N ALLOCATE(GRAPH(I,J)%RX(NXG),GRAPH(I,J)%RY(NXG)) GRAPH(I,J)%RX=0.0D0; GRAPH(I,J)%RY=0.0D0; GRAPH(I,J)%NP=NXG; GRAPH(I,J)%CTYPE=''; GRAPH(I,J)%ICLR=0; GRAPH(I,J)%GTYPE=4 ENDDO; ENDDO !## add custom predefined axes titles GRAPHDIM(1)%IFIXX=0; GRAPHDIM(1)%IFIXY=0 ALLOCATE(GRAPHDIM(1)%XTXT(NXG),GRAPHDIM(1)%XPOS(NXG)); GRAPHDIM(1)%XTXT=''; GRAPHDIM(1)%XPOS=0.0D0; GRAPHDIM(1)%IFIXX=1; GRAPHDIM(1)%IGROUP=1 GRAPHDIM(1)%XTXT(1)='Borehole' GRAPHDIM(1)%XPOS(1)=0.0 !## set axes dimensions GRAPHDIM(1)%XINT=1.0D0; GRAPHDIM(1)%XMIN=GRAPHDIM(1)%XPOS(1)-1.0D0; GRAPHDIM(1)%XMAX=GRAPHDIM(1)%XPOS(NXG)+1.0D0 GRAPH(1,1)%RX=0.0D0 GRAPH(1,1)%RY=0.0D0 J=1 DO I=1,M !## fill in grid with information - vertical well IF(ASSF(ISELECTED)%ITOPIC.EQ.2)THEN GRAPH(I,1)%RY(1)=ASSF(ISELECTED)%Z(I) ELSEIF(ASSF(ISELECTED)%ITOPIC.EQ.4)THEN GRAPH(I,1)%RY(1)=ASSF(ISELECTED)%Z(I) ENDIF CALL IPFDRAWITOPIC2_ICLR(I,ISELECTED,ICLR,IWIDTH) GRAPH(I,1)%ICLR=ICLR GRAPH(I,1)%LEGTXT=ASSF(ISELECTED)%L(J,I) END DO !## skip non-unique legends DO I=1,M DO J=I+1,M !## skip cleaned ones IF(TRIM(GRAPH(J,1)%LEGTXT).EQ.'')CYCLE IF(TRIM(GRAPH(I,1)%LEGTXT).EQ.TRIM(GRAPH(J,1)%LEGTXT))GRAPH(J,1)%LEGTXT='' ENDDO ENDDO !## make sure last is equal to final-least GRAPH(1,1)%NP=1; GRAPHDIM%GRAPHNAMES=''; GRAPHDIM%XTITLE='[-]'; GRAPHDIM%YTITLE='Depth (m+MSL)'; GRAPHDIM%LDATE=.FALSE. CALL GRAPH_INIT(3) DO CALL WMESSAGE(ITYPE,MESSAGE) CALL GRAPH_MAIN(ITYPE,MESSAGE,IEXIT) IF(IEXIT.EQ.1)EXIT ENDDO CALL GRAPH_DEALLOCATE() CALL WDIALOGSELECT(WID) END SUBROUTINE IMOD3D_SETTINGSMAIN_IPFGRAPH !###====================================================================== SUBROUTINE IMOD3D_SETTINGSMAIN_FIELDSPL(MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(IN) :: MESSAGE INTEGER :: I SELECT CASE (MESSAGE%VALUE2) CASE (IDF_CHECK7) CALL WDIALOGGETCHECKBOX(IDF_CHECK7,I) I=ABS(I-1) !## overrule when a simulation is on IF(ABS(PL%IRUN).EQ.1)I=0 CALL WDIALOGFIELDSTATE(IDF_CHECK8,I) CASE (IDF_CHECK8) CALL WDIALOGGETCHECKBOX(IDF_CHECK8,I) CALL WDIALOGFIELDSTATE(IDF_REAL6,I) I=ABS(I-1); CALL WDIALOGFIELDSTATE(IDF_CHECK7,I) CASE (IDF_CHECK6) CALL WDIALOGGETCHECKBOX(IDF_CHECK6,I) CALL WDIALOGFIELDSTATE(IDF_MENU4,I) CASE (IDF_MENU3) CALL WDIALOGGETMENU(IDF_MENU3,I) IF(I.NE.3)THEN CALL WDIALOGFIELDSTATE(IDF_REAL8,2) ELSE CALL WDIALOGFIELDSTATE(IDF_REAL8,1) ENDIF CASE (ID_SHOW) CALL WDIALOGGETCHECKBOX(ID_SHOW,PL%IPLOTSP); CALL IMOD3D_DISPLAY(1) CASE (IDF_RADIO1,IDF_RADIO2) !## switch IF(MESSAGE%VALUE1.NE.MESSAGE%VALUE2)THEN PL%IREV=ABS(PL%IREV-1) !## equal particle direction SP%IREV=PL%IREV CALL TRACEIREV() ENDIF CASE (IDF_RADIO5) !## Area CALL IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(1,0,0,0,0) CASE (IDF_RADIO6) !## IDF CALL IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(0,1,0,0,0) CASE (IDF_RADIO7) !## Sink CALL IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(0,0,1,0,0) CASE (IDF_RADIO8) !## File CALL IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(0,0,0,1,0) CASE (IDF_RADIO11) !## Layer CALL IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(0,0,0,0,1) END SELECT END SUBROUTINE IMOD3D_SETTINGSMAIN_FIELDSPL !###====================================================================== SUBROUTINE IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY(J,K,L,M,N) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: J,K,L,M,N CALL WDIALOGFIELDSTATE(ID_LOCATE,J) CALL WDIALOGFIELDSTATE(ID_PROP1,J) CALL WDIALOGFIELDSTATE(IDF_MENU1,K) CALL WDIALOGFIELDSTATE(ID_PROP5,K) CALL WDIALOGFIELDSTATE(IDF_CHECK5,L) CALL WDIALOGFIELDSTATE(IDF_MENU2,L) CALL WDIALOGFIELDSTATE(IDF_REAL10,L) CALL WDIALOGFIELDSTATE(ID_PROP2,L) CALL WDIALOGFIELDSTATE(IDF_STRING2,M) CALL WDIALOGFIELDSTATE(ID_OPENXYZ,M) CALL WDIALOGFIELDSTATE(ID_PROP6,M) CALL WDIALOGFIELDSTATE(IDF_RADIO12,N) CALL WDIALOGFIELDSTATE(IDF_RADIO13,N) CALL WDIALOGFIELDSTATE(IDF_RADIO14,N) CALL WDIALOGFIELDSTATE(IDF_RADIO15,N) CALL WDIALOGFIELDSTATE(IDF_RADIO16,N) CALL WDIALOGFIELDSTATE(ID_PROP3,N) END SUBROUTINE IMOD3D_SETTINGSMAIN_FIELDSPL_GRAY !###====================================================================== SUBROUTINE IMOD3D_SETTINGS_VERTICALAXES() !###====================================================================== IMPLICIT NONE INTEGER :: I REAL(KIND=DP_KIND) :: Z1,Z2 LOGICAL :: LADJTB REAL(KIND=GLDOUBLE) :: TB,BB !## not adjusted top/bottom LADJTB=.FALSE.; TB=TOP%Z; BB=BOT%Z CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5) !## minimal z values given CALL WDIALOGGETCHECKBOX(IDF_CHECK7,I) IF(I.EQ.1)THEN CALL WDIALOGGETDOUBLE(IDF_REAL1,Z1); CALL WDIALOGGETDOUBLE(IDF_REAL2,Z2) IF(Z1.LE.Z2)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Whenever you give a minimal/maximal z-value, make'//CHAR(13)// & 'sure the minimal z value is less than the maximal value','Error') ELSE TOP%Z=Z1; BOT%Z=Z2 ENDIF ENDIF LADJTB=(TB.NE.TOP%Z.OR.BB.NE.BOT%Z) !## reconstruct environment CALL IMOD3D_SETUPDISPLAY_MISC(LADJTB) END SUBROUTINE IMOD3D_SETTINGS_VERTICALAXES !###====================================================================== SUBROUTINE IMOD3D_DISPLAY_UPDATE(XMIN,YMIN,XMAX,YMAX) !###====================================================================== IMPLICIT NONE REAL(KIND=DP_KIND),INTENT(IN) :: XMIN,YMIN,XMAX,YMAX INTEGER :: I CALL WINDOWSELECT(0); IF(WMENUGETSTATE(ID_3DTOOL,2).EQ.0)RETURN !## do synchronize 2d plane CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5); CALL WDIALOGGETCHECKBOX(IDF_CHECK6,I) IF(I.EQ.0)RETURN BOT%X=XMIN; BOT%Y=YMIN; TOP%X=XMAX; TOP%Y=YMAX IF(.NOT.IMOD3D_SETTINGS_UPDATE_DISPLAY())THEN CALL IMOD3D_CLOSE() ELSE IREADBMP=0; IF(.NOT.IMOD3D_BMP())THEN; ENDIF CALL IMOD3D_DISPLAY(1) ENDIF END SUBROUTINE IMOD3D_DISPLAY_UPDATE !###====================================================================== LOGICAL FUNCTION IMOD3D_SETTINGS_UPDATE_DISPLAY() !###====================================================================== IMPLICIT NONE IMOD3D_SETTINGS_UPDATE_DISPLAY=.FALSE. !## turn all message off CALL UTL_MESSAGEHANDLE(0) !## set mid-location of view MIDPOS%X=(TOP%X+BOT%X)/2.0_GLDOUBLE MIDPOS%Y=(TOP%Y+BOT%Y)/2.0_GLDOUBLE !## renew point of rotation ROTPOS=MIDPOS !## neccessary for axeslabels XSCALE_FACTOR= INIT_XSCALE_FACTOR YSCALE_FACTOR= INIT_YSCALE_FACTOR ZSCALE_FACTOR= INIT_ZSCALE_FACTOR !## fill display with idf's !## draw planes/cubes/voxels IF(IMOD3D_REDRAWIDF(0))THEN; ENDIF !## draw vectors IF(IMOD3D_REDRAWIDF(1))THEN; ENDIF !## fill display with drills IF(.NOT.IMOD3D_IPF(1,0))THEN; ENDIF !## refresh image and labels CALL IMOD3D_IPF_LABELS() !## recompute current idf IF(.NOT.IMOD3D_REDRAWIFF())RETURN !## construct miscellaneous features CALL IMOD3D_SETUPDISPLAY_MISC(.TRUE.) !## reset viewing properties and draw image CALL IMOD3D_RESET_TO_INIT() !## turn all message on CALL UTL_MESSAGEHANDLE(1) CALL IMOD3D_ERROR('IMOD3D_SETUPDISPLAY') IMOD3D_SETTINGS_UPDATE_DISPLAY=.TRUE. END FUNCTION IMOD3D_SETTINGS_UPDATE_DISPLAY !###====================================================================== SUBROUTINE IMOD3D_SETTINGSCOLOUR(ID,ITAB) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ID,ITAB INTEGER :: I,IRGB CALL WDIALOGSELECT(ITAB) SELECT CASE (ITAB) !## idf CASE (ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGS_GETSELECTED() ! CALL WDIALOGGETMENU(IDF_MENU1,IDFPLOT%DISP_ISEL) IDFPLOT%ISEL=0; DO I=1,DISP_NIDFLIST; IF(IDFPLOT(I)%DISP_ISEL.EQ.1)IDFPLOT(IDFPLOT(I)%DISP_ILIST)%ISEL=1; ENDDO IF(SUM(IDFPLOT(1:NIDFLIST)%ISEL).EQ.0)RETURN CALL WDIALOGGETINTEGER(IDF_INTEGER1,IRGB) CALL WSELECTCOLOUR(IRGB); IF(WINFODIALOG(4).NE.1)RETURN DO I=1,NIDFLIST; IF(IDFPLOT(I)%ISEL.EQ.1)IDFPLOT(I)%ICOLOR=IRGB; ENDDO !## ipf CASE (ID_D3DSETTINGS_TAB2) CALL WDIALOGGETINTEGER(IDF_INTEGER1,IRGB) CALL WSELECTCOLOUR(IRGB); IF(WINFODIALOG(4).NE.1)RETURN LCOLOR=IRGB !## iff CASE (ID_D3DSETTINGS_TAB3) CALL WDIALOGGETMENU(IDF_MENU1,IFFPLOT%ISEL) IF(SUM(IFFPLOT(1:NIFFLIST)%ISEL).EQ.0)RETURN CALL WDIALOGGETINTEGER(IDF_INTEGER1,IRGB) CALL WSELECTCOLOUR(IRGB); IF(WINFODIALOG(4).NE.1)RETURN DO I=1,NIFFLIST; IF(IFFPLOT(I)%ISEL.EQ.1)MP(IFFPLOT(I)%IPLOT)%SCOLOR=IRGB; END DO !## sol CASE (ID_D3DSETTINGS_TAB6) !## gen CASE (ID_D3DSETTINGS_TAB4) CALL WDIALOGGETMENU(IDF_MENU1,GENPLOT%ISEL) IF(SUM(GENPLOT(1:NGENLIST)%ISEL).EQ.0)RETURN CALL WDIALOGGETINTEGER(IDF_INTEGER1,IRGB) CALL WSELECTCOLOUR(IRGB); IF(WINFODIALOG(4).NE.1)RETURN DO I=1,NGENLIST; IF(GENPLOT(I)%ISEL.EQ.1)GENPLOT(I)%ICOLOR=IRGB; ENDDO !## clipplanes CASE (ID_D3DSETTINGS_TAB7) CALL WDIALOGGETMENU(IDF_MENU1,CLPPLOT%ISEL) IF(SUM(CLPPLOT(1:NCLPLIST)%ISEL).EQ.0)RETURN CALL WDIALOGGETINTEGER(IDF_INTEGER1,IRGB) CALL WSELECTCOLOUR(IRGB); IF(WINFODIALOG(4).NE.1)RETURN DO I=1,NCLPLIST; IF(CLPPLOT(I)%ISEL.EQ.1)CLPPLOT(I)%ICOLOR=IRGB; ENDDO !## misc CASE (ID_D3DSETTINGS_TAB5) IF(ID.EQ.IDF_COLOUR1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,IRGB) IF(ID.EQ.IDF_COLOUR2)CALL WDIALOGGETINTEGER(IDF_INTEGER2,IRGB) IF(ID.EQ.IDF_COLOUR3)CALL WDIALOGGETINTEGER(IDF_INTEGER3,IRGB) IF(ID.EQ.IDF_COLOUR4)CALL WDIALOGGETINTEGER(IDF_INTEGER4,IRGB) CALL WSELECTCOLOUR(IRGB) IF(WINFODIALOG(4).NE.1)RETURN IF(ID.EQ.IDF_COLOUR1)BCOLOR=IRGB IF(ID.EQ.IDF_COLOUR3)ACOLOR=IRGB IF(ID.EQ.IDF_COLOUR2)OCOLOR=IRGB IF(ID.EQ.IDF_COLOUR4)BGCOLOR=IRGB END SELECT CALL IMOD3D_SETTINGSPUT(ITAB) CALL IMOD3D_SETTINGSFIELDS(ITAB) CALL IMOD3D_LEGEND_MAIN() CALL IMOD3D_DISPLAY(1) END SUBROUTINE IMOD3D_SETTINGSCOLOUR !###====================================================================== SUBROUTINE IMOD3D_SETTINGSALL(ID,IOPT) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ID,IOPT INTEGER :: I DO I=1,NIDFLIST SELECT CASE (ID) CASE (ID_3DVIEW_SOLID) IDFPLOT(I)%IFILL=1 CASE (ID_3DVIEW_WIREFRAME) IDFPLOT(I)%IFILL=2 CASE (ID_3DVIEW_SOLIDWIREFRAME) IDFPLOT(I)%IFILL=3 CASE (ID_3DVIEW_SHADES_ON,ID_3DVIEW_SHADES_OFF) IDFPLOT(I)%ISHADED=IOPT CASE (ID_3DVIEW_SINGLECOLOUR) IDFPLOT(I)%ILEG=1 CASE (ID_3DVIEW_LEGENDCOLOUR) IDFPLOT(I)%ILEG=2 CASE (ID_3DVIEW_LEGEND) IDFPLOT(I)%IPLOTLEGEND=IOPT END SELECT END DO IF(ID.EQ.ID_3DVIEW_AXES_ON) IAXES=IOPT IF(ID.EQ.ID_3DVIEW_AXES_OFF)IAXES=IOPT IF(ID.EQ.ID_3DVIEW_ORIENTATION_ON) IORIENT=IOPT IF(ID.EQ.ID_3DVIEW_ORIENTATION_OFF)IORIENT=IOPT !## put adjustments on dialog CALL IMOD3D_SETTINGSPUT(ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGSFIELDS(ID_D3DSETTINGS_TAB1) END SUBROUTINE IMOD3D_SETTINGSALL !###====================================================================== SUBROUTINE IMOD3D_SETTINGSPUT(ID) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ID INTEGER :: I INTEGER,ALLOCATABLE,DIMENSION(:) :: TMPINT CHARACTER(LEN=52),ALLOCATABLE,DIMENSION(:) :: TMPNAME !## setting tab1 IF(NIDFLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB1)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGS_GETSELECTED() ! CALL WDIALOGGETMENU(IDF_MENU1,IDFPLOT%DISP_ISEL) IDFPLOT%ISEL=0; DO I=1,DISP_NIDFLIST; IF(IDFPLOT(I)%DISP_ISEL.EQ.1)IDFPLOT(IDFPLOT(I)%DISP_ILIST)%ISEL=1; ENDDO IF(SUM(IDFPLOT(1:NIDFLIST)%ISEL).GT.0)THEN DO I=1,NIDFLIST IF(IDFPLOT(I)%ISEL.EQ.1)THEN IF(IDFPLOT(I)%IFILL.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO3) !## colouring IF(IDFPLOT(I)%IFILL.EQ.2)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO4) !## fishnet IF(IDFPLOT(I)%IFILL.EQ.3)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO5) !## colouring+fishnet CALL WDIALOGPUTCHECKBOX(IDF_CHECK4,IDFPLOT(I)%ICLIP) CALL WDIALOGPUTCHECKBOX(IDF_CHECK3,IDFPLOT(I)%ISHADED) CALL WDIALOGPUTCHECKBOX(IDF_CHECK2,IDFPLOT(I)%IPLOTLEGEND) CALL WDIALOGPUTINTEGER(IDF_INTEGER1,IDFPLOT(I)%ICOLOR) IF(IDFPLOT(I)%ILEG.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO1) !## 1=one color IF(IDFPLOT(I)%ILEG.EQ.2)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO2) !## 2=legend CALL WDIALOGPUTCHECKBOX(IDF_CHECK5,IDFPLOT(I)%ITRANSPARANCY) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR2,IDFPLOT(I)%ISTACKED) EXIT ENDIF ENDDO ENDIF ENDIF !## setting tab2 IF(NIPF.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB2)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) ALLOCATE(TMPINT(SIZE(IPFPLOT))) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IPFPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) DO I=1,SIZE(IPFPLOT) IF(IPFPLOT(I)%ISEL.EQ.1)THEN IF(IPFPLOT(I)%IFILL.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO3) !## colouring IF(IPFPLOT(I)%IFILL.EQ.2)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO4) !## fishnet IF(IPFPLOT(I)%IFILL.EQ.3)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO5) !## colouring+fishnet CALL WDIALOGPUTCHECKBOX(IDF_CHECK4,IPFPLOT(I)%ICLIP) CALL WDIALOGPUTCHECKBOX(IDF_CHECK2,IPFPLOT(I)%IPLOTLEGEND) CALL WDIALOGPUTINTEGER(IDF_INTEGER1,LCOLOR) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,IPFPLOT(I)%IPLOTLABELS) CALL WDIALOGPUTCHECKBOX(IDF_CHECK5,IPFPLOT(I)%IPLOTACOL) !## overrule acol EXIT ENDIF ENDDO ENDIF !## setting tab3 IF(NIFFLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB3)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB3) ALLOCATE(TMPINT(NIFFLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IFFPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) IF(SUM(IFFPLOT(1:NIFFLIST)%ISEL).GT.0)THEN DO I=1,NIFFLIST IF(IFFPLOT(I)%ISEL.EQ.1)THEN IF(MP(IFFPLOT(I)%IPLOT)%ILEG.EQ.0)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO1) !## 1=one color IF(MP(IFFPLOT(I)%IPLOT)%ILEG.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO2) !## 2=legend CALL WDIALOGPUTCHECKBOX(IDF_CHECK4,IFFPLOT(I)%ICLIP) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,IFFPLOT(I)%IPLOTLEGEND) CALL WDIALOGPUTINTEGER(IDF_INTEGER1,MP(IFFPLOT(I)%IPLOT)%SCOLOR) CALL WDIALOGPUTINTEGER(IDF_INTEGER2,IFFPLOT(I)%ITHICKNESS) EXIT ENDIF ENDDO ENDIF ENDIF !## setting tab6 IF(NSOLLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB6)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB6) ALLOCATE(TMPINT(NSOLLIST)) SOLPLOT%ISEL=0; CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) SOLPLOT(1:NSOLLIST)%ISEL=TMPINT; DEALLOCATE(TMPINT) IF(SUM(SOLPLOT(1:NSOLLIST)%ISEL).GT.0)THEN DO I=1,NSOLLIST IF(SOLPLOT(I)%ISEL.EQ.1)THEN CALL WDIALOGPUTCHECKBOX(IDF_CHECK4,SOLPLOT(I)%ICLIP) CALL WDIALOGPUTCHECKBOX(IDF_CHECK2,SOLPLOT(I)%IBITMAP) !## show bitmaps CALL WDIALOGPUTCHECKBOX(IDF_CHECK3,SOLPLOT(I)%IINTERFACE) !## show interface EXIT ENDIF ENDDO ENDIF ! IF(ISOLID_3D.EQ.0)THEN IF(SUM(SOLPLOT%ISEL).GT.0)THEN CALL WDIALOGFIELDSTATE(ID_DELETE,1) CALL WDIALOGFIELDSTATE(ID_SAVEAS,1) ELSE CALL WDIALOGFIELDSTATE(ID_DELETE,2) CALL WDIALOGFIELDSTATE(ID_SAVEAS,2) ENDIF ! ENDIF ENDIF !## setting tab4 IF(NGENLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB4)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB4) ALLOCATE(TMPINT(NGENLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) GENPLOT%ISEL=TMPINT IF(SUM(GENPLOT(1:NGENLIST)%ISEL).GT.0)THEN DO I=1,NGENLIST IF(GENPLOT(I)%ISEL.EQ.1)THEN CALL WDIALOGPUTINTEGER(IDF_INTEGER1,GENPLOT(I)%ICOLOR) CALL WDIALOGPUTINTEGER(IDF_INTEGER2,GENPLOT(I)%ITHICKNESS) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR1,GENPLOT(I)%ITRANSPARANCY) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,GENPLOT(I)%ISHADE) CALL WDIALOGPUTCHECKBOX(IDF_CHECK4,GENPLOT(I)%ICLIP) EXIT ENDIF ENDDO ENDIF ENDIF !## setting tab7 IF(ID.EQ.ID_D3DSETTINGS_TAB7)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB7) ALLOCATE(TMPINT(NCLPLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) CLPPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) IF(SUM(CLPPLOT(1:NCLPLIST)%ISEL).GT.0)THEN DO I=1,NCLPLIST IF(CLPPLOT(I)%ISEL.EQ.1)THEN CALL WDIALOGPUTINTEGER(IDF_INTEGER1,CLPPLOT(I)%ICOLOR) CALL WDIALOGPUTINTEGER(IDF_INTEGER2,CLPPLOT(I)%ITHICKNESS) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1 ,CLPPLOT(I)%ICAP) EXIT ENDIF ENDDO ENDIF CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR2,CLPPLOT(1)%IPOS) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR3,CLPPLOT(2)%IPOS) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR4,CLPPLOT(3)%IPOS) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR1,CLPPLOT(4)%IPOS) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR5,CLPPLOT(5)%IPOS) CALL WDIALOGPUTTRACKBAR(IDF_TRACKBAR6,CLPPLOT(6)%IPOS) ENDIF !## setting tab5 IF(ID.EQ.ID_D3DSETTINGS_TAB5)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,IBNDBOX) CALL WDIALOGPUTCHECKBOX(IDF_CHECK5,IAXES) CALL WDIALOGPUTCHECKBOX(IDF_CHECK2,IORIENT) CALL WDIALOGPUTINTEGER(IDF_INTEGER1,BCOLOR) CALL WDIALOGPUTINTEGER(IDF_INTEGER2,OCOLOR) CALL WDIALOGPUTINTEGER(IDF_INTEGER3,ACOLOR) CALL WDIALOGPUTINTEGER(IDF_INTEGER4,BGCOLOR) ENDIF !## setting tab9 IF(ID.EQ.ID_D3DSETTINGS_TAB9)THEN !## disable tab IF(NIPFLIST.EQ.0)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS) CALL WDIALOGTABSTATE(IDF_TAB1,ID_D3DSETTINGS_TAB9,0) ELSE CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB9_TAB1) IF(NIDFLIST.GT.0)THEN CALL WGRIDROWS(IDF_GRID1,NIDFLIST) ALLOCATE(TMPNAME(NIDFLIST)) TMPNAME=IDFPLOT%ALIAS CALL WGRIDPUTSTRING(IDF_GRID1,1,TMPNAME,NIDFLIST) DEALLOCATE(TMPNAME) ! TMPNAME=NANSTRING CALL WGRIDPUTSTRING(IDF_GRID1,2,NANSTRING,NIDFLIST) ELSE CALL WDIALOGFIELDSTATE(IDF_GRID1,3) ENDIF ENDIF ENDIF END SUBROUTINE IMOD3D_SETTINGSPUT !###====================================================================== SUBROUTINE IMOD3D_SETTINGSGET(ID,JD) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ID,JD INTEGER :: I,K INTEGER,ALLOCATABLE,DIMENSION(:) :: TMPINT !## setting tab1 IF(NIDFLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB1)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGS_GETSELECTED() ! CALL WDIALOGGETMENU(IDF_MENU1,IDFPLOT%DISP_ISEL) IDFPLOT%ISEL=0; DO I=1,DISP_NIDFLIST; IF(IDFPLOT(I)%DISP_ISEL.EQ.1)IDFPLOT(IDFPLOT(I)%DISP_ILIST)%ISEL=1; ENDDO IF(SUM(IDFPLOT(1:NIDFLIST)%ISEL).GT.0)THEN K=0 DO I=1,NIDFLIST IF(IDFPLOT(I)%ISEL.EQ.1)THEN K=K+1 IF(JD.EQ.IDF_RADIO3.OR.JD.EQ.IDF_RADIO4.OR.JD.EQ.IDF_RADIO5)CALL WDIALOGGETRADIOBUTTON(IDF_RADIO3,IDFPLOT(I)%IFILL) !## colouring !## get only the first ... IF(K.EQ.1.AND.JD.EQ.IDF_INTEGER1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,IDFPLOT(I)%ICOLOR) !## default colour IF(JD.EQ.IDF_RADIO1.OR.JD.EQ.IDF_RADIO2)CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,IDFPLOT(I)%ILEG) !## 1=one color,2=legend colour IF(JD.EQ.IDF_CHECK4)CALL WDIALOGGETCHECKBOX(IDF_CHECK4,IDFPLOT(I)%ICLIP) !## iclip IF(JD.EQ.IDF_CHECK3)CALL WDIALOGGETCHECKBOX(IDF_CHECK3,IDFPLOT(I)%ISHADED) !## shade IF(JD.EQ.IDF_CHECK2)CALL WDIALOGGETCHECKBOX(IDF_CHECK2,IDFPLOT(I)%IPLOTLEGEND) !## plotlegend IF(JD.EQ.IDF_CHECK5)CALL WDIALOGGETCHECKBOX(IDF_CHECK5,IDFPLOT(I)%ITRANSPARANCY) !## transparancy value IF(JD.EQ.IDF_TRACKBAR2)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR2,IDFPLOT(I)%ISTACKED) !## stacked idf-files ENDIF END DO ENDIF ENDIF !## setting tab2 IF(NIPF.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB2)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) ALLOCATE(TMPINT(SIZE(IPFPLOT))) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IPFPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) DO I=1,SIZE(IPFPLOT); IF(IPFPLOT(I)%ISEL.EQ.1)THEN IF(JD.EQ.IDF_RADIO3.OR.JD.EQ.IDF_RADIO4.OR.JD.EQ.IDF_RADIO5)CALL WDIALOGGETRADIOBUTTON(IDF_RADIO3,IPFPLOT(I)%IFILL) !## colouring IF(JD.EQ.IDF_CHECK4)CALL WDIALOGGETCHECKBOX(IDF_CHECK4,IPFPLOT(I)%ICLIP) !## iclip IF(JD.EQ.IDF_CHECK2)CALL WDIALOGGETCHECKBOX(IDF_CHECK2,IPFPLOT(I)%IPLOTLEGEND) !## plotlegend IF(JD.EQ.IDF_CHECK1)CALL WDIALOGGETCHECKBOX(IDF_CHECK1,IPFPLOT(I)%IPLOTLABELS) !## label ipf IF(JD.EQ.IDF_CHECK5)CALL WDIALOGGETCHECKBOX(IDF_CHECK5,IPFPLOT(I)%IPLOTACOL) !## overrule acol ENDIF; ENDDO IF(JD.EQ.IDF_INTEGER1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,LCOLOR) ENDIF !## setting tab3 IF(NIFFLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB3)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB3) ALLOCATE(TMPINT(NIFFLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IFFPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) IF(SUM(IFFPLOT(1:NIFFLIST)%ISEL).GT.0)THEN K=0 DO I=1,NIFFLIST; IF(IFFPLOT(I)%ISEL.EQ.1)THEN K=K+1 IF(JD.EQ.IDF_RADIO1.OR.JD.EQ.IDF_RADIO2)THEN CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,MP(IFFPLOT(I)%IPLOT)%ILEG) !## 1=one color,2=legend colour MP(IFFPLOT(I)%IPLOT)%ILEG=MP(IFFPLOT(I)%IPLOT)%ILEG-1 ENDIF IF(JD.EQ.IDF_CHECK1)CALL WDIALOGGETCHECKBOX(IDF_CHECK1,IFFPLOT(I)%IPLOTLEGEND) !## plotlegend IF(JD.EQ.IDF_CHECK4)CALL WDIALOGGETCHECKBOX(IDF_CHECK4,IFFPLOT(I)%ICLIP) !## iclip IF(K.EQ.1.AND.JD.EQ.IDF_INTEGER1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,MP(IFFPLOT(I)%IPLOT)%SCOLOR) IF(JD.EQ.IDF_INTEGER2)CALL WDIALOGGETINTEGER(IDF_INTEGER2,IFFPLOT(I)%ITHICKNESS) ENDIF; ENDDO ENDIF ENDIF !## setting tab6 IF(NSOLLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB6)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB6) ALLOCATE(TMPINT(NSOLLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) SOLPLOT(1:NSOLLIST)%ISEL=TMPINT; DEALLOCATE(TMPINT) IF(SUM(SOLPLOT(1:NSOLLIST)%ISEL).GT.0)THEN DO I=1,NSOLLIST; IF(SOLPLOT(I)%ISEL.EQ.1)THEN IF(JD.EQ.IDF_CHECK2)CALL WDIALOGGETCHECKBOX(IDF_CHECK2,SOLPLOT(I)%IBITMAP) !## showing bitmaps IF(JD.EQ.IDF_CHECK3)CALL WDIALOGGETCHECKBOX(IDF_CHECK3,SOLPLOT(I)%IINTERFACE) !## show interfaces IF(JD.EQ.IDF_CHECK4)CALL WDIALOGGETCHECKBOX(IDF_CHECK4,SOLPLOT(I)%ICLIP) !## iclip ENDIF; END DO ENDIF ENDIF !## setting tab4 IF(NGENLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB4)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB4) ALLOCATE(TMPINT(NGENLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) GENPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) IF(SUM(GENPLOT(1:NGENLIST)%ISEL).GT.0)THEN K=0 DO I=1,NGENLIST; IF(GENPLOT(I)%ISEL.EQ.1)THEN K=K+1 IF(JD.EQ.IDF_CHECK1)CALL WDIALOGGETCHECKBOX(IDF_CHECK1,GENPLOT(I)%ISHADE) !## shade IF(JD.EQ.IDF_CHECK4)CALL WDIALOGGETCHECKBOX(IDF_CHECK4,GENPLOT(I)%ICLIP) !## iclip IF(K.EQ.1.AND.JD.EQ.IDF_INTEGER1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,GENPLOT(I)%ICOLOR) IF(JD.EQ.IDF_INTEGER2)CALL WDIALOGGETINTEGER(IDF_INTEGER2,GENPLOT(I)%ITHICKNESS) CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR1,GENPLOT(I)%ITRANSPARANCY) ENDIF; ENDDO ENDIF ENDIF !## setting tab7 IF(ID.EQ.ID_D3DSETTINGS_TAB7)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB7) ALLOCATE(TMPINT(NCLPLIST)) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) CLPPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) IF(SUM(CLPPLOT(1:NCLPLIST)%ISEL).GT.0)THEN K=0 DO I=1,NCLPLIST; IF(CLPPLOT(I)%ISEL.EQ.1)THEN K=K+1 IF(K.EQ.1.AND.JD.EQ.IDF_INTEGER1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,CLPPLOT(I)%ICOLOR) IF(JD.EQ.IDF_INTEGER2)CALL WDIALOGGETINTEGER(IDF_INTEGER2,CLPPLOT(I)%ITHICKNESS) IF(JD.EQ.IDF_CHECK1)CALL WDIALOGGETCHECKBOX(IDF_CHECK1,CLPPLOT(I)%ICAP) ENDIF; ENDDO ENDIF IF(JD.EQ.IDF_TRACKBAR2)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR2,CLPPLOT(1)%IPOS) IF(JD.EQ.IDF_TRACKBAR3)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR3,CLPPLOT(2)%IPOS) IF(JD.EQ.IDF_TRACKBAR4)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR4,CLPPLOT(3)%IPOS) IF(JD.EQ.IDF_TRACKBAR1)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR1,CLPPLOT(4)%IPOS) IF(JD.EQ.IDF_TRACKBAR5)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR5,CLPPLOT(5)%IPOS) IF(JD.EQ.IDF_TRACKBAR6)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR6,CLPPLOT(6)%IPOS) ENDIF !## setting tab5 IF(ID.EQ.ID_D3DSETTINGS_TAB5)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5) IF(JD.EQ.IDF_CHECK1) CALL WDIALOGGETCHECKBOX(IDF_CHECK1,IBNDBOX) IF(JD.EQ.IDF_CHECK5) CALL WDIALOGGETCHECKBOX(IDF_CHECK5,IAXES) IF(JD.EQ.IDF_CHECK2) CALL WDIALOGGETCHECKBOX(IDF_CHECK2,IORIENT) IF(JD.EQ.IDF_INTEGER1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,BCOLOR) IF(JD.EQ.IDF_INTEGER2)CALL WDIALOGGETINTEGER(IDF_INTEGER2,OCOLOR) IF(JD.EQ.IDF_INTEGER3)CALL WDIALOGGETINTEGER(IDF_INTEGER3,ACOLOR) IF(JD.EQ.IDF_INTEGER4)CALL WDIALOGGETINTEGER(IDF_INTEGER4,BGCOLOR) IF(JD.EQ.IDF_RADIO5.OR.JD.EQ.IDF_RADIO3.OR.JD.EQ.IDF_RADIO4)THEN CALL WDIALOGGETRADIOBUTTON(IDF_RADIO5,IACTBITMAP); IACTBITMAP=IACTBITMAP-1 IF(IACTBITMAP.EQ.2)THEN CALL WDIALOGFIELDSTATE(IDF_TRACKBAR1,1) CALL WDIALOGFIELDSTATE(IDF_LABEL10,1) CALL WDIALOGFIELDSTATE(IDF_LABEL11,1) ELSE CALL WDIALOGFIELDSTATE(IDF_TRACKBAR1,0) CALL WDIALOGFIELDSTATE(IDF_LABEL10,0) CALL WDIALOGFIELDSTATE(IDF_LABEL11,0) ENDIF CALL WDIALOGFIELDSTATE(IDF_TRACKBAR6,MIN(1,IACTBITMAP)) CALL WDIALOGFIELDSTATE(IDF_LABEL12,MIN(1,IACTBITMAP)) CALL WDIALOGFIELDSTATE(IDF_LABEL5,MIN(1,IACTBITMAP)) CALL WDIALOGFIELDSTATE(IDF_LABEL9,MIN(1,IACTBITMAP)) ENDIF IF(JD.EQ.IDF_TRACKBAR6)CALL WDIALOGGETTRACKBAR(IDF_TRACKBAR6,ITRANSPARANCYBITMAP) ENDIF END SUBROUTINE IMOD3D_SETTINGSGET !###====================================================================== SUBROUTINE IMOD3D_SETTINGSMENU() !###====================================================================== IMPLICIT NONE INTEGER :: I,ION,ILG CALL WINDOWSELECT(IWIN3D) !## check menu-items if all selected/non-selected IF(NIDFLIST.GT.0)THEN ION =0; ILG=0 DO I=1,NIDFLIST IF(IDFPLOT(I)%ISHADED.EQ.1)ION=1 IF(IDFPLOT(I)%IPLOTLEGEND.EQ.1)ILG=1 ENDDO CALL WMENUSETSTATE(ID_3DVIEW_SHADES_OFF,ITEMCHECKED,0) CALL WMENUSETSTATE(ID_3DVIEW_SHADES_ON,ITEMCHECKED,0) IF(ION.EQ.0)CALL WMENUSETSTATE(ID_3DVIEW_SHADES_OFF,ITEMCHECKED,1) IF(ION.EQ.1)CALL WMENUSETSTATE(ID_3DVIEW_SHADES_ON ,ITEMCHECKED,1) CALL WMENUSETSTATE(ID_3DVIEW_LEGEND,ITEMCHECKED,ILG) ELSE CALL WMENUSETSTATE(ID_3DVIEW_SOLID,ITEMENABLED,0) CALL WMENUSETSTATE(ID_3DVIEW_WIREFRAME,ITEMENABLED,0) CALL WMENUSETSTATE(ID_3DVIEW_SOLIDWIREFRAME,ITEMENABLED,0) CALL WMENUSETSTATE(ID_3DVIEW_SHADES,ITEMENABLED,0) ENDIF CALL WMENUSETSTATE(ID_3DVIEW_AXES_ON,ITEMCHECKED,0) CALL WMENUSETSTATE(ID_3DVIEW_AXES_OFF,ITEMCHECKED,0) IF(IAXES.EQ.0)CALL WMENUSETSTATE(ID_3DVIEW_AXES_OFF,ITEMCHECKED,1) IF(IAXES.EQ.1)CALL WMENUSETSTATE(ID_3DVIEW_AXES_ON,ITEMCHECKED,1) CALL WMENUSETSTATE(ID_3DVIEW_ORIENTATION_ON,ITEMCHECKED,0) CALL WMENUSETSTATE(ID_3DVIEW_ORIENTATION_OFF,ITEMCHECKED,0) IF(IORIENT.EQ.0)CALL WMENUSETSTATE(ID_3DVIEW_ORIENTATION_OFF,ITEMCHECKED,1) IF(IORIENT.EQ.1)CALL WMENUSETSTATE(ID_3DVIEW_ORIENTATION_ON,ITEMCHECKED,1) END SUBROUTINE IMOD3D_SETTINGSMENU !###====================================================================== SUBROUTINE IMOD3D_SETTINGSFIELDS(ID) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ID INTEGER :: I,J INTEGER,ALLOCATABLE,DIMENSION(:) :: TMPINT IF(NIDFLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB1)THEN !## setting tab1 CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB1) CALL IMOD3D_SETTINGS_GETSELECTED() ! CALL WDIALOGGETMENU(IDF_MENU1,IDFPLOT%DISP_ISEL) IDFPLOT%ISEL=0; DO I=1,DISP_NIDFLIST; IF(IDFPLOT(I)%DISP_ISEL.EQ.1)IDFPLOT(IDFPLOT(I)%DISP_ILIST)%ISEL=1; ENDDO !## at least one selected J=0; IF(SUM(IDFPLOT(1:NIDFLIST)%ISEL).GT.0)J=1 CALL WDIALOGFIELDSTATE(IDF_GROUP1,J); CALL WDIALOGFIELDSTATE(IDF_GROUP2,J) CALL WDIALOGFIELDSTATE(IDF_RADIO1,J); CALL WDIALOGFIELDSTATE(IDF_RADIO2,J) CALL WDIALOGFIELDSTATE(IDF_RADIO3,J); CALL WDIALOGFIELDSTATE(IDF_RADIO4,J) CALL WDIALOGFIELDSTATE(IDF_RADIO5,J); CALL WDIALOGFIELDSTATE(IDF_TRACKBAR2,J) CALL WDIALOGFIELDSTATE(IDF_LABEL6,J); CALL WDIALOGFIELDSTATE(IDF_CHECK5,J) CALL WDIALOGFIELDSTATE(IDF_CHECK4,J); CALL WDIALOGFIELDSTATE(IDF_CHECK2,J) CALL WDIALOGFIELDSTATE(IDF_LABEL7,J); CALL WDIALOGFIELDSTATE(IDF_LABEL10,J) IF(J.EQ.1)THEN CALL WDIALOGFIELDSTATE(ID_LEGEND,J) CALL WDIALOGFIELDSTATE(IDF_RADIO3,J) CALL WDIALOGGETRADIOBUTTON(IDF_RADIO3,I) IF(I.EQ.3)I=1; CALL WDIALOGFIELDSTATE(IDF_CHECK3,I) !## shading CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,I) CALL WDIALOGFIELDSTATE(IDF_INTEGER1,I) CALL WDIALOGFIELDSTATE(IDF_COLOUR1,I) CALL WDIALOGGETINTEGER(IDF_INTEGER1,I) CALL WDIALOGCOLOUR(IDF_INTEGER1,I,I) !## print selected IDF name on the graphical window CALL WINDOWSELECT(IWIN3D) IF(SUM(IDFPLOT(1:NIDFLIST)%ISEL).EQ.1)THEN DO I=1,NIDFLIST; IF(IDFPLOT(I)%ISEL.EQ.1)EXIT; ENDDO CALL WINDOWOUTSTATUSBAR(2,'Selected IDF file: '//TRIM(IDFPLOT(I)%FNAME)) ELSE CALL WINDOWOUTSTATUSBAR(2,'') ENDIF ELSE CALL WDIALOGFIELDSTATE(ID_LEGEND,J) CALL WDIALOGFIELDSTATE(IDF_CHECK3,J) !## shading CALL WDIALOGFIELDSTATE(IDF_INTEGER1,J) CALL WDIALOGFIELDSTATE(IDF_COLOUR1,J) CALL WINDOWSELECT(IWIN3D) CALL WINDOWOUTSTATUSBAR(2,'') ENDIF ENDIF !## setting tab2 IF(NIPF.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB2)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB2) ALLOCATE(TMPINT(SIZE(IPFPLOT))) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IPFPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) I=MAX(0,MIN(1,SUM(IPFPLOT%ISEL))) CALL WDIALOGFIELDSTATE(ID_PROPERTIES,I) CALL WDIALOGFIELDSTATE(ID_SELECTION,I) CALL WDIALOGFIELDSTATE(ID_EXPORTAS,I) CALL WDIALOGFIELDSTATE(ID_OPEN,I); CALL WDIALOGFIELDSTATE(ID_SAVEAS,I); CALL WDIALOGFIELDSTATE(ID_REDRAW,I) CALL WDIALOGFIELDSTATE(IDF_CHECK1,I); CALL WDIALOGFIELDSTATE(IDF_INTEGER1,I); CALL WDIALOGFIELDSTATE(IDF_COLOUR1,I) CALL WDIALOGFIELDSTATE(IDF_RADIO3,I); CALL WDIALOGFIELDSTATE(IDF_RADIO4,I); CALL WDIALOGFIELDSTATE(IDF_RADIO5,I) CALL WDIALOGFIELDSTATE(IDF_CHECK4,I); CALL WDIALOGFIELDSTATE(IDF_CHECK5,I) CALL WDIALOGFIELDSTATE(IDF_MENU2,I); CALL WDIALOGFIELDSTATE(IDF_GRID1,I); CALL WDIALOGFIELDSTATE(IDF_CHECK2,I) IF(I.EQ.1)THEN CALL WDIALOGGETCHECKBOX(IDF_CHECK1,I) CALL WDIALOGFIELDSTATE(IDF_COLOUR1,I) CALL WDIALOGCOLOUR(IDF_INTEGER1,LCOLOR,LCOLOR) ENDIF !## print selected IPF name on the graphical window CALL WINDOWSELECT(IWIN3D) IF(SUM(IPFPLOT(1:NIPF)%ISEL).EQ.1)THEN DO I=1,NIPF; IF(IPFPLOT(I)%ISEL.EQ.1)EXIT; ENDDO CALL WINDOWOUTSTATUSBAR(2,'Selected IPF file: '//TRIM(IPFPLOT(I)%FNAME)) ELSE CALL WINDOWOUTSTATUSBAR(2,'') ENDIF ENDIF !## setting tab3 IF(NIFFLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB3)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB3) ALLOCATE(TMPINT(SIZE(IFFPLOT))) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) IFFPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) !## at least one selected J=0; IF(SUM(IFFPLOT(1:NIFFLIST)%ISEL).GT.0)J=1 CALL WDIALOGFIELDSTATE(IDF_CHECK4,J) CALL WDIALOGFIELDSTATE(IDF_CHECK1,J) CALL WDIALOGFIELDSTATE(IDF_GROUP2,J) CALL WDIALOGFIELDSTATE(IDF_RADIO1,J) CALL WDIALOGFIELDSTATE(IDF_RADIO2,J) CALL WDIALOGFIELDSTATE(IDF_LABEL1,J) CALL WDIALOGFIELDSTATE(IDF_INTEGER2,J) IF(J.EQ.1)THEN CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,I) I=ABS(I-2) I=MIN(I,J) ELSE I=J ENDIF CALL WDIALOGFIELDSTATE(IDF_INTEGER1,I) CALL WDIALOGFIELDSTATE(IDF_COLOUR1,I) CALL WDIALOGGETINTEGER(IDF_INTEGER1,I) CALL WDIALOGCOLOUR(IDF_INTEGER1,I,I) !## print selected IPF name on the graphical window CALL WINDOWSELECT(IWIN3D) IF(SUM(IFFPLOT(1:NIFFLIST)%ISEL).EQ.1)THEN DO I=1,NIFFLIST; IF(IFFPLOT(I)%ISEL.EQ.1)EXIT; ENDDO CALL WINDOWOUTSTATUSBAR(2,'Selected IFF file: '//TRIM(IFFPLOT(I)%FNAME)) ELSE CALL WINDOWOUTSTATUSBAR(2,'') ENDIF ENDIF !## setting tab6 IF(NSOLLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB6)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB6) ALLOCATE(TMPINT(SIZE(SOLPLOT))) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) SOLPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) !## at least one selected J=0; IF(SUM(SOLPLOT(1:NSOLLIST)%ISEL).GT.0)J=1 CALL WDIALOGFIELDSTATE(IDF_CHECK3,J) CALL WDIALOGFIELDSTATE(IDF_CHECK4,J) !## print selected IPF name on the graphical window CALL WINDOWSELECT(IWIN3D) IF(SUM(SOLPLOT(1:NSOLLIST)%ISEL).EQ.1)THEN DO I=1,NSOLLIST; IF(SOLPLOT(I)%ISEL.EQ.1)EXIT; ENDDO CALL WINDOWOUTSTATUSBAR(2,'Selected SOL file: '//TRIM(SPF(I)%FNAME)) ELSE CALL WINDOWOUTSTATUSBAR(2,'') ENDIF ENDIF !## setting tab4 IF(NGENLIST.GT.0.AND.ID.EQ.ID_D3DSETTINGS_TAB4)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB4) ALLOCATE(TMPINT(SIZE(GENPLOT))) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) GENPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) !## at least one selected J=0; IF(SUM(GENPLOT(1:NGENLIST)%ISEL).GT.0)J=1 CALL WDIALOGFIELDSTATE(IDF_LABEL1,J) CALL WDIALOGFIELDSTATE(IDF_LABEL2,J) CALL WDIALOGFIELDSTATE(IDF_INTEGER2,J) CALL WDIALOGFIELDSTATE(IDF_INTEGER1,J) CALL WDIALOGFIELDSTATE(IDF_COLOUR1,J) CALL WDIALOGGETINTEGER(IDF_INTEGER1,I) CALL WDIALOGCOLOUR(IDF_INTEGER1,I,I) CALL WDIALOGFIELDSTATE(IDF_TRACKBAR1,J) CALL WDIALOGFIELDSTATE(IDF_LABEL3,J) CALL WDIALOGFIELDSTATE(IDF_LABEL5,J) CALL WDIALOGFIELDSTATE(IDF_LABEL9,J) CALL WDIALOGFIELDSTATE(IDF_CHECK1,J) CALL WDIALOGFIELDSTATE(IDF_CHECK4,J) !## print selected IPF name on the graphical window CALL WINDOWSELECT(IWIN3D) IF(SUM(GENPLOT(1:NGENLIST)%ISEL).EQ.1)THEN DO I=1,NGENLIST; IF(GENPLOT(I)%ISEL.EQ.1)EXIT; ENDDO CALL WINDOWOUTSTATUSBAR(2,'Selected GEN file: '//TRIM(GENPLOT(I)%FNAME)) ELSE CALL WINDOWOUTSTATUSBAR(2,'') ENDIF ENDIF !## setting tab7 IF(ID.EQ.ID_D3DSETTINGS_TAB7)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB7) ALLOCATE(TMPINT(SIZE(CLPPLOT))) CALL WDIALOGGETMENU(IDF_MENU1,TMPINT) CLPPLOT%ISEL=TMPINT; DEALLOCATE(TMPINT) !## at least one selected J=0; IF(SUM(CLPPLOT(1:NCLPLIST)%ISEL).GT.0)J=1 CALL WDIALOGFIELDSTATE(IDF_LABEL1,J) CALL WDIALOGFIELDSTATE(IDF_LABEL2,J) CALL WDIALOGFIELDSTATE(IDF_INTEGER2,J) CALL WDIALOGFIELDSTATE(IDF_INTEGER1,J) CALL WDIALOGFIELDSTATE(IDF_COLOUR1,J) CALL WDIALOGGETINTEGER(IDF_INTEGER1,I) CALL WDIALOGCOLOUR(IDF_INTEGER1,I,I) !## top J=0; IF(CLPPLOT(1)%ISEL)J=1 CALL WDIALOGFIELDSTATE(IDF_TRACKBAR2,J) CALL WDIALOGFIELDSTATE(IDF_LABEL6,J) CALL WDIALOGFIELDSTATE(IDF_LABEL11,J) CALL WDIALOGFIELDSTATE(IDF_LABEL12,J) !## bottom J=0; IF(CLPPLOT(2)%ISEL)J=1 CALL WDIALOGFIELDSTATE(IDF_TRACKBAR3,J) CALL WDIALOGFIELDSTATE(IDF_LABEL7,J) CALL WDIALOGFIELDSTATE(IDF_LABEL13,J) CALL WDIALOGFIELDSTATE(IDF_LABEL14,J) !## west J=0; IF(CLPPLOT(3)%ISEL)J=1 CALL WDIALOGFIELDSTATE(IDF_TRACKBAR4,J) CALL WDIALOGFIELDSTATE(IDF_LABEL8,J) CALL WDIALOGFIELDSTATE(IDF_LABEL15,J) CALL WDIALOGFIELDSTATE(IDF_LABEL16,J) !## east J=0; IF(CLPPLOT(4)%ISEL)J=1 CALL WDIALOGFIELDSTATE(IDF_TRACKBAR1,J) CALL WDIALOGFIELDSTATE(IDF_LABEL5,J) CALL WDIALOGFIELDSTATE(IDF_LABEL9,J) CALL WDIALOGFIELDSTATE(IDF_LABEL10,J) !## south J=0; IF(CLPPLOT(5)%ISEL)J=1 CALL WDIALOGFIELDSTATE(IDF_TRACKBAR5,J) CALL WDIALOGFIELDSTATE(IDF_LABEL17,J) CALL WDIALOGFIELDSTATE(IDF_LABEL18,J) CALL WDIALOGFIELDSTATE(IDF_LABEL19,J) !## north J=0; IF(CLPPLOT(6)%ISEL)J=1 CALL WDIALOGFIELDSTATE(IDF_TRACKBAR6,J) CALL WDIALOGFIELDSTATE(IDF_LABEL20,J) CALL WDIALOGFIELDSTATE(IDF_LABEL21,J) CALL WDIALOGFIELDSTATE(IDF_LABEL22,J) ENDIF !## setting tab5 IF(ID.EQ.ID_D3DSETTINGS_TAB5)THEN CALL WDIALOGSELECT(ID_D3DSETTINGS_TAB5) !## draw bounding box CALL WDIALOGGETCHECKBOX(IDF_CHECK1,I) CALL WDIALOGFIELDSTATE(IDF_COLOUR1,I) CALL WDIALOGCOLOUR(IDF_INTEGER1,BCOLOR,BCOLOR) !## draw axes CALL WDIALOGGETCHECKBOX(IDF_CHECK5,I) CALL WDIALOGFIELDSTATE(IDF_COLOUR3,I) CALL WDIALOGCOLOUR(IDF_INTEGER3,ACOLOR,ACOLOR) !## draw orientation box CALL WDIALOGGETCHECKBOX(IDF_CHECK2,I) CALL WDIALOGFIELDSTATE(IDF_COLOUR2,I) CALL WDIALOGCOLOUR(IDF_INTEGER2,OCOLOR,OCOLOR) CALL WDIALOGCOLOUR(IDF_INTEGER4,BGCOLOR,BGCOLOR) !## display current window CALL WDIALOGGETRADIOBUTTON(IDF_RADIO5,I) J=0; IF(I.EQ.2)J=1; CALL WDIALOGFIELDSTATE(IDF_MENU1,J) J=0; IF(I.EQ.3)J=1; CALL WDIALOGFIELDSTATE(IDF_TRACKBAR1,J) CALL WDIALOGGETCHECKBOX(IDF_CHECK7,I) CALL WDIALOGFIELDSTATE(IDF_REAL1,I) CALL WDIALOGFIELDSTATE(IDF_REAL2,I) CALL WDIALOGFIELDSTATE(ID_ZSCALE,I) ENDIF CALL IMOD3D_SETTINGSMENU() END SUBROUTINE IMOD3D_SETTINGSFIELDS END MODULE MOD_3D_SETTINGS