!! 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_SPOINTS_UTL USE WINTERACTER USE RESOURCE USE IMODVAR, ONLY : IDIAGERROR USE MOD_POLYGON_DRAW USE MOD_POLYGON_UTL USE MOD_POLYGON_PAR USE MOD_SPOINTS_PAR USE MOD_COLOURS CONTAINS !###====================================================================== LOGICAL FUNCTION STARTP1_UTL_SAVELOAD(CODE) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: CODE ! 0=load, 1=save INTEGER :: IU,J,K,IOS,SHPI CHARACTER(LEN=256) :: FNAME,LINE LOGICAL :: LEX STARTP1_UTL_SAVELOAD=.FALSE. FNAME=TRIM(PREFVAL(1))//'\STARTPOINTS\*.isd' IF(CODE.EQ.0)THEN IF(SDFFNAME.EQ.'')THEN IF(.NOT.UTL_WSELECTFILE('iMOD Start Point Definition Files (*.isd)|*.isd|', & LOADDIALOG+MUSTEXIST+PROMPTON+DIRCHANGE+APPENDEXT,FNAME,& 'Load iMOD Start Point Definition File'))RETURN ELSE FNAME=SDFFNAME ENDIF !## test to see whether the file exists INQUIRE(FILE=FNAME,EXIST=LEX) IF(LEX)THEN IU=UTL_GETUNIT() CALL OSD_OPEN(IU,FILE=FNAME,STATUS='OLD',ACTION='READ,DENYWRITE',FORM='FORMATTED') ELSE IU=0 ENDIF SHP%NPOL =0 SHPI =0 SHP%POL%IACT=0 SHP%POL%PNAME='' IF(IU.GT.0)THEN DO READ(IU,*,IOSTAT=IOS) IF(IOS.NE.0)EXIT SHPI=SHPI+1 IF(SHPI.GT.MAXSHAPES)THEN CALL WMESSAGEBOX(OKONLY,COMMONOK,EXCLAMATIONICON,'Total number of polygons read is '// & TRIM(ITOS(SHPI))//CHAR(13)//'* Maximal allowed is '//TRIM(ITOS(MAXSHAPES))//CHAR(13)//& 'You can increase these settings in the menu-option: Preferences'//CHAR(13)//CHAR(13)// & 'Selected file not read!','Error') CLOSE(IU) RETURN ENDIF READ(IU,*,IOSTAT=IOS) SHP%POL(SHPI)%PNAME IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ShapeName'//TRIM(ITOS(SHPI))))RETURN READ(IU,*,IOSTAT=IOS) IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,''))RETURN READ(IU,*,IOSTAT=IOS) SHP%POL(SHPI)%ITYPE IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ShapeType'//TRIM(ITOS(SHPI))))RETURN SELECT CASE (SHP%POL(SHPI)%ITYPE) CASE (ID_GRID) READ(IU,*,IOSTAT=IOS) SPNT(SHPI)%IDZ CASE (ID_POLYGON,ID_RECTANGLE) READ(IU,'(A256)',IOSTAT=IOS) LINE IF(IOS.EQ.0)THEN READ(LINE,*,IOSTAT=IOS) SPNT(SHPI)%IDX,SPNT(SHPI)%IDY,SPNT(SHPI)%ISNAP IF(IOS.NE.0)THEN SPNT(SHPI)%ISNAP=0 READ(LINE,*,IOSTAT=IOS) SPNT(SHPI)%IDX,SPNT(SHPI)%IDY ENDIF SPNT(SHPI)%IDX=MAX(0.01D0,SPNT(SHPI)%IDX) SPNT(SHPI)%IDY=MAX(0.01D0,SPNT(SHPI)%IDY) ENDIF CASE (ID_CIRCLE,ID_POINT) READ(IU,'(A256)',IOSTAT=IOS) LINE IF(IOS.EQ.0)THEN READ(LINE,*,IOSTAT=IOS) SPNT(SHPI)%IRADIUS,SPNT(SHPI)%ISX,SPNT(SHPI)%ISNAP IF(IOS.NE.0)THEN SPNT(SHPI)%ISNAP=0 READ(LINE,*,IOSTAT=IOS) SPNT(SHPI)%IRADIUS,SPNT(SHPI)%ISX ENDIF SPNT(SHPI)%IRADIUS=MAX(0.01D0,SPNT(SHPI)%IRADIUS) SPNT(SHPI)%ISX=MAX(0.01D0,SPNT(SHPI)%ISX) ENDIF CASE (ID_LINE) READ(IU,*,IOSTAT=IOS) SPNT(SHPI)%ISX SPNT(SHPI)%ISX=MAX(0.01D0,SPNT(SHPI)%ISX) CASE DEFAULT IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'iMOD cannot recognize the specified shape '//TRIM(ITOS(SHP%POL(SHPI)%ITYPE))))RETURN END SELECT IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ShapeLat.Dimension'//TRIM(ITOS(SHPI))))RETURN READ(IU,*,IOSTAT=IOS) SPNT(SHPI)%TOPIDF IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ShapeTopIDF'//TRIM(ITOS(SHPI))))RETURN IF(SHP%POL(SHPI)%ITYPE.NE.ID_GRID)THEN READ(IU,*,IOSTAT=IOS) SPNT(SHPI)%BOTIDF IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ShapeBotIDF'//TRIM(ITOS(SHPI))))RETURN READ(IU,'(A256)',IOSTAT=IOS) LINE READ(LINE,*,IOSTAT=IOS) SPNT(SHPI)%IREF IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ShapeIREF'//TRIM(ITOS(SHPI))))RETURN SPNT(SHPI)%IREF=MAX(0,MIN(1,SPNT(SHPI)%IREF)) IF(SPNT(SHPI)%IREF.EQ.1)THEN READ(LINE,*,IOSTAT=IOS) SPNT(SHPI)%IREF,SPNT(SHPI)%REFIDF IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'RefName'//TRIM(ITOS(SHPI))))RETURN SPNT(SHPI)%IREF=MAX(0,MIN(1,SPNT(SHPI)%IREF)) ENDIF READ(IU,*,IOSTAT=IOS) SPNT(SHPI)%ISZ IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ISZ'//TRIM(ITOS(SHPI))))RETURN READ(IU,*,IOSTAT=IOS) IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,''))RETURN READ(IU,*,IOSTAT=IOS) SHP%POL(SHPI)%N IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'ShpNcrd'//TRIM(ITOS(SHPI))))RETURN ALLOCATE(SHP%POL(SHPI)%X(SHP%POL(SHPI)%N),SHP%POL(SHPI)%Y(SHP%POL(SHPI)%N)) DO J=1,SHP%POL(SHPI)%N READ(IU,*,IOSTAT=IOS) SHP%POL(SHPI)%X(J),SHP%POL(SHPI)%Y(J) IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,'Polygon:'//TRIM(ITOS(SHPI)//',coord.:'//TRIM(ITOS(J)))))RETURN END DO READ(IU,*,IOSTAT=IOS) IF(.NOT.STARTP1_UTL_CHECK(IU,IOS,''))RETURN SHP%POL(SHPI)%IACT =1 SHP%POL(SHPI)%ICOLOR=WRGB(0,0,0) SHP%POL(SHPI)%IWIDTH=2 ENDIF ENDDO CLOSE(IU) ENDIF SHP%NPOL=SHPI !## no attributes here IF(ASSOCIATED(SHP%COLNAMES))DEALLOCATE(SHP%COLNAMES) CALL WDIALOGSELECT(ID_DSPTAB1) CALL WDIALOGPUTMENU(IDF_MENU1,SHP%POL%PNAME,SHP%NPOL,SHP%POL%IACT) CALL POLYGON1FIELDS(ID_DSPTAB1) CALL STARTP1_UTL_FIELDS_PUTTAB2() CALL STARTP1_UTL_FIELDS() ELSEIF(CODE.EQ.1)THEN ! Save ISD file !## update last dialog fields --- error occured IF(.NOT.STARTP1_UTL_FIELDS_GETTAB2(1))RETURN IF(SDFFNAME.EQ.'')THEN IF(.NOT.UTL_WSELECTFILE('iMOD Start Point Definition Files (*.isd)|*.isd|', & SAVEDIALOG+PROMPTON+DIRCHANGE+APPENDEXT,FNAME, & 'Save iMOD Start Point Definition File'))RETURN ELSE INQUIRE(FILE=SDFFNAME,EXIST=LEX) IF(LEX)THEN CALL WMESSAGEBOX(YESNOCANCEL,COMMONNO,QUESTIONICON,'Do you want to overwrite the existing file:'// & CHAR(13)//TRIM(SDFFNAME),'Question') IF(WINFODIALOG(4).EQ.0)RETURN !## cancel STARTP1_UTL_SAVELOAD=.TRUE. IF(WINFODIALOG(4).EQ.2)RETURN !## no ELSE CALL WMESSAGEBOX(YESNOCANCEL,COMMONNO,QUESTIONICON,'Do you want to save the file:'// & CHAR(13)//TRIM(SDFFNAME),'Question') IF(WINFODIALOG(4).EQ.0)RETURN !## cancel STARTP1_UTL_SAVELOAD=.TRUE. IF(WINFODIALOG(4).EQ.2)RETURN !## no ENDIF FNAME=SDFFNAME ENDIF IU=UTL_GETUNIT() CALL OSD_OPEN(IU,FILE=FNAME,STATUS='REPLACE',ACTION='WRITE,DENYREAD',FORM='FORMATTED') DO SHPI=1,SHP%NPOL IF(SHP%POL(SHPI)%N.GT.0)THEN WRITE(IU,'(50A1)') ('=',K=1,50) WRITE(IU,'(A)') TRIM(SHP%POL(SHPI)%PNAME) WRITE(IU,'(50A1)') ('-',K=1,50) SELECT CASE (SHP%POL(SHPI)%ITYPE) CASE (ID_POLYGON) LINE=TRIM(ITOS(SHP%POL(SHPI)%ITYPE)) WRITE(IU,'(A)') TRIM(LINE)//',POLYGON' LINE=TRIM(RTOS(SPNT(SHPI)%IDX,'F',3))//','//TRIM(RTOS(SPNT(SHPI)%IDY,'F',3))//','//TRIM(ITOS(SPNT(SHPI)%ISNAP)) WRITE(IU,'(A)') TRIM(LINE) CASE (ID_POINT) LINE=TRIM(ITOS(SHP%POL(SHPI)%ITYPE)) WRITE(IU,'(A)') TRIM(LINE)//',POINT' LINE=TRIM(RTOS(SPNT(SHPI)%IRADIUS,'F',3))//','//TRIM(RTOS(SPNT(SHPI)%ISX,'F',3))//','//TRIM(ITOS(SPNT(SHPI)%ISNAP)) WRITE(IU,'(A)') TRIM(LINE) CASE (ID_CIRCLE) LINE=TRIM(ITOS(SHP%POL(SHPI)%ITYPE)) WRITE(IU,'(A)') TRIM(LINE)//',CIRCLE' SPNT(SHPI)%IRADIUS=UTL_DIST(SHP%POL(SHPI)%X(1),SHP%POL(SHPI)%Y(1),SHP%POL(SHPI)%X(2),SHP%POL(SHPI)%Y(2)) LINE=TRIM(RTOS(SPNT(SHPI)%IRADIUS,'F',3))//','//TRIM(RTOS(SPNT(SHPI)%ISX,'F',3))//','//TRIM(ITOS(SPNT(SHPI)%ISNAP)) WRITE(IU,'(A)') TRIM(LINE) CASE (ID_LINE) LINE=TRIM(ITOS(SHP%POL(SHPI)%ITYPE)) WRITE(IU,'(A)') TRIM(LINE)//',LINE' LINE=TRIM(RTOS(SPNT(SHPI)%ISX,'F',3)) WRITE(IU,'(A)') TRIM(LINE) CASE (ID_RECTANGLE) LINE=TRIM(ITOS(SHP%POL(SHPI)%ITYPE)) WRITE(IU,'(A)') TRIM(LINE)//',RECTANGLE' LINE=TRIM(RTOS(SPNT(SHPI)%IDX,'F',3))//','//TRIM(RTOS(SPNT(SHPI)%IDY,'F',3))//','//TRIM(ITOS(SPNT(SHPI)%ISNAP)) WRITE(IU,'(A)') TRIM(LINE) CASE (ID_GRID) LINE=TRIM(ITOS(SHP%POL(SHPI)%ITYPE)) WRITE(IU,'(A)') TRIM(LINE)//',GRID' LINE=TRIM(RTOS(SPNT(SHPI)%IDZ,'F',3)) WRITE(IU,'(A)') TRIM(LINE) END SELECT WRITE(IU,'(A)') '"'//TRIM(ADJUSTL(SPNT(SHPI)%TOPIDF))//'"' IF(SHP%POL(SHPI)%ITYPE.NE.ID_GRID)THEN WRITE(IU,'(A)') '"'//TRIM(ADJUSTL(SPNT(SHPI)%BOTIDF))//'"' IF(SPNT(SHPI)%IREF.EQ.0)THEN LINE=TRIM(ITOS(SPNT(SHPI)%IREF)) WRITE(IU,'(A)') TRIM(LINE) ELSE LINE=TRIM(ITOS(SPNT(SHPI)%IREF))//',"'//TRIM(ADJUSTL(SPNT(SHPI)%REFIDF))//'"' WRITE(IU,'(A)') TRIM(LINE) ENDIF LINE=TRIM(ITOS(SPNT(SHPI)%ISZ)) WRITE(IU,'(A)') TRIM(LINE) WRITE(IU,'(50A1)') ('-',K=1,50) LINE=TRIM(ITOS(SHP%POL(SHPI)%N)) WRITE(IU,'(A)') TRIM(LINE) DO J=1,SHP%POL(SHPI)%N LINE=TRIM(RTOS(SHP%POL(SHPI)%X(J),'F',3))//','//TRIM(RTOS(SHP%POL(SHPI)%Y(J),'F',3)) WRITE(IU,'(A)') TRIM(LINE) END DO ENDIF WRITE(IU,'(50A1)') ('=',K=1,50) ENDIF END DO CLOSE(IU) ENDIF STARTP1_UTL_SAVELOAD=.TRUE. END FUNCTION STARTP1_UTL_SAVELOAD !###====================================================================== LOGICAL FUNCTION STARTP1_UTL_CHECK(IU,TIOS,LABEL) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: IU,TIOS CHARACTER(LEN=*),INTENT(IN) :: LABEL STARTP1_UTL_CHECK=.TRUE. IF(TIOS.NE.0)THEN CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Selected file not read because there were errors inside the file'//CHAR(13)// & TRIM(LABEL),'Error') STARTP1_UTL_CHECK=.FALSE. ENDIF END FUNCTION STARTP1_UTL_CHECK !###====================================================================== SUBROUTINE STARTP1_UTL_FIELDS_PUTTAB2() !###====================================================================== IMPLICIT NONE INTEGER :: SHPI CALL WDIALOGSELECT(ID_DSPTAB1) CALL WDIALOGGETMENU(IDF_MENU1,SHP%POL%IACT) !## use first selected to display values DO SHPI=1,SHP%NPOL; IF(SHP%POL(SHPI)%IACT.EQ.1)EXIT; END DO !## nothing selected --- return IF(SHPI.GT.SHP%NPOL)RETURN CALL WDIALOGSELECT(ID_DSPTAB2) !## reset window fields before case dependant changes CALL WDIALOGFIELDSTATE(IDF_LABEL4,1) ; CALL WDIALOGFIELDSTATE(IDF_REAL1,1) CALL WDIALOGFIELDSTATE(IDF_LABEL6,1) ; CALL WDIALOGFIELDSTATE(IDF_REAL3,1) CALL WDIALOGFIELDSTATE(IDF_LABEL10,1) ; CALL WDIALOGFIELDSTATE(IDF_STRING2,1) ; CALL WDIALOGFIELDSTATE(ID_OPEN1,1) CALL WDIALOGFIELDSTATE(IDF_LABEL11,1) ; CALL WDIALOGFIELDSTATE(IDF_STRING3,1) ; CALL WDIALOGFIELDSTATE(ID_OPEN2,1) CALL WDIALOGFIELDSTATE(IDF_CHECK1,1) ; CALL WDIALOGFIELDSTATE(IDF_STRING4,1) ; CALL WDIALOGFIELDSTATE(ID_OPEN3,1) CALL WDIALOGFIELDSTATE(IDF_LABEL12,1) ; CALL WDIALOGFIELDSTATE(IDF_INTEGER5,1) CALL WDIALOGFIELDSTATE(IDF_CHECK2,1) SELECT CASE (SHP%POL(SHPI)%ITYPE) CASE (ID_POLYGON,ID_RECTANGLE) CALL WDIALOGPUTSTRING(IDF_LABEL10,'Top-Level (enter IDF/numeric value)') CALL WDIALOGPUTIMAGE(IDF_PICTURE1,ID_ICONPOLYGON,1) CALL WDIALOGPUTSTRING(IDF_LABEL4,'Distance X (m)') CALL WDIALOGPUTSTRING(IDF_LABEL6,'Distance Y (m)') CALL WDIALOGPUTDOUBLE(IDF_REAL1,SPNT(SHPI)%IDX) CALL WDIALOGPUTDOUBLE(IDF_REAL3,SPNT(SHPI)%IDY) CASE (ID_CIRCLE,ID_POINT) CALL WDIALOGPUTSTRING(IDF_LABEL10,'Top-Level (enter IDF/numeric value)') CALL WDIALOGPUTIMAGE(IDF_PICTURE1,ID_ICONCIRCLE,1) IF(SHP%POL(SHPI)%ITYPE.EQ.ID_POINT)CALL WDIALOGFIELDSTATE(IDF_LABEL4,1) IF(SHP%POL(SHPI)%ITYPE.EQ.ID_CIRCLE)CALL WDIALOGFIELDSTATE(IDF_LABEL4,0) CALL WDIALOGPUTSTRING(IDF_LABEL4,'Radius (m)') CALL WDIALOGPUTSTRING(IDF_LABEL6,'Sampling (m)') CALL WDIALOGPUTDOUBLE(IDF_REAL1,SPNT(SHPI)%IRADIUS) CALL WDIALOGPUTDOUBLE(IDF_REAL3,SPNT(SHPI)%ISX) CASE (ID_LINE) CALL WDIALOGPUTSTRING(IDF_LABEL10,'Top-Level (enter IDF/numeric value)') CALL WDIALOGPUTIMAGE(IDF_PICTURE1,ID_ICONLINE,1) CALL WDIALOGFIELDSTATE(IDF_LABEL6,3) CALL WDIALOGPUTSTRING(IDF_LABEL4,'Sampling (m)') CALL WDIALOGFIELDSTATE(IDF_REAL3,3) CALL WDIALOGPUTDOUBLE(IDF_REAL1,SPNT(SHPI)%ISX) CASE (ID_GRID) CALL WDIALOGPUTSTRING(IDF_LABEL10,'Reference IDF') CALL WDIALOGPUTSTRING(IDF_LABEL4,'Vertical Offset') CALL WDIALOGPUTDOUBLE(IDF_REAL1,SPNT(SHPI)%IDZ) CALL WDIALOGFIELDSTATE(IDF_LABEL4,1) CALL WDIALOGFIELDSTATE(IDF_PICTURE1,3) CALL WDIALOGFIELDSTATE(IDF_LABEL6,3) CALL WDIALOGFIELDSTATE(IDF_LABEL12,3) CALL WDIALOGFIELDSTATE(IDF_LABEL11,3) CALL WDIALOGFIELDSTATE(IDF_REAL3,3) CALL WDIALOGFIELDSTATE(IDF_REAL1,1) CALL WDIALOGFIELDSTATE(IDF_CHECK1,3) CALL WDIALOGFIELDSTATE(IDF_CHECK2,0) CALL WDIALOGPUTCHECKBOX(IDF_CHECK2,1) CALL WDIALOGFIELDSTATE(IDF_STRING4,3) CALL WDIALOGFIELDSTATE(IDF_STRING3,3) CALL WDIALOGFIELDSTATE(ID_OPEN2,3) CALL WDIALOGFIELDSTATE(ID_OPEN3,3) CALL WDIALOGFIELDSTATE(IDF_INTEGER5,3) END SELECT CALL WDIALOGPUTCHECKBOX(IDF_CHECK2,SPNT(SHPI)%ISNAP) CALL WDIALOGPUTSTRING(IDF_STRING2,SPNT(SHPI)%TOPIDF) CALL WDIALOGPUTSTRING(IDF_STRING3,SPNT(SHPI)%BOTIDF) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,SPNT(SHPI)%IREF) CALL WDIALOGPUTSTRING(IDF_STRING4,SPNT(SHPI)%REFIDF) CALL WDIALOGPUTINTEGER(IDF_INTEGER5,SPNT(SHPI)%ISZ) END SUBROUTINE STARTP1_UTL_FIELDS_PUTTAB2 !###====================================================================== LOGICAL FUNCTION STARTP1_UTL_FIELDS_GETTAB2(ICHECK) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ICHECK STARTP1_UTL_FIELDS_GETTAB2=.FALSE. !## apply to all selected shapes DO SHPI=1,SHP%NPOL IF(SHP%POL(SHPI)%IACT.EQ.0)CYCLE CALL WDIALOGSELECT(ID_DSPTAB2) CALL WDIALOGGETSTRING(IDF_STRING2,SPNT(SHPI)%TOPIDF) CALL WDIALOGGETSTRING(IDF_STRING3,SPNT(SHPI)%BOTIDF) CALL WDIALOGGETINTEGER(IDF_INTEGER5,SPNT(SHPI)%ISZ) CALL WDIALOGGETCHECKBOX(IDF_CHECK2,SPNT(SHPI)%ISNAP) IF(LEN_TRIM(SPNT(SHPI)%TOPIDF).EQ.0)THEN IF(ICHECK.EQ.1)THEN; CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to specify TOP IDF.','Error'); RETURN; ENDIF ENDIF SELECT CASE (SHP%POL(SHPI)%ITYPE) CASE (ID_POLYGON,ID_RECTANGLE) CALL WDIALOGGETDOUBLE(IDF_REAL1,SPNT(SHPI)%IDX) CALL WDIALOGGETDOUBLE(IDF_REAL3,SPNT(SHPI)%IDY) IF(SPNT(SHPI)%IDX.LE.0.0D0.OR.SPNT(SHPI)%IDY.LE.0.0D0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to specify positive values for'//CHAR(13)// & 'Distance X and Distance Y.','Error') RETURN ENDIF CASE (ID_POINT) CALL WDIALOGGETDOUBLE(IDF_REAL1,SPNT(SHPI)%IRADIUS) CALL WDIALOGGETDOUBLE(IDF_REAL3,SPNT(SHPI)%ISX) IF(SPNT(SHPI)%IRADIUS.LE.0.0D0.OR.SPNT(SHPI)%ISX.LE.0.0D0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to specify positive values for'//CHAR(13)// & 'Radius and Sampling.','Error') RETURN ENDIF CASE (ID_CIRCLE) CALL WDIALOGGETDOUBLE(IDF_REAL3,SPNT(SHPI)%ISX) IF(SPNT(SHPI)%ISX.LE.0.0D0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to specify positive values for Sampling.','Error') RETURN ENDIF CASE (ID_LINE) CALL WDIALOGGETDOUBLE(IDF_REAL1,SPNT(SHPI)%ISX) IF(SPNT(SHPI)%ISX.LE.0.0D0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to specify a positive value for Sampling.','Error') RETURN ENDIF CASE (ID_GRID) CALL WDIALOGGETDOUBLE(IDF_REAL1,SPNT(SHPI)%IDZ) IF(SPNT(SHPI)%IDZ.LE.0)THEN IF(ICHECK.EQ.1)THEN; CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to specify Z-interval.','Error'); RETURN; ENDIF ENDIF SPNT(SHPI)%ISNAP=1 END SELECT IF(SHP%POL(SHPI)%ITYPE.NE.ID_GRID)THEN CALL WDIALOGGETCHECKBOX(IDF_CHECK1,SPNT(SHPI)%IREF) IF(SPNT(SHPI)%IREF.EQ.1)THEN CALL WDIALOGGETSTRING(IDF_STRING4,SPNT(SHPI)%REFIDF) IF(LEN_TRIM(SPNT(SHPI)%REFIDF).EQ.0)THEN IF(ICHECK.EQ.1)THEN; CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to enter a reference IDF.','Error'); RETURN; ENDIF ENDIF ENDIF ENDIF ENDDO STARTP1_UTL_FIELDS_GETTAB2=.TRUE. END FUNCTION STARTP1_UTL_FIELDS_GETTAB2 !###====================================================================== SUBROUTINE STARTP1_UTL_FIELDS() !###====================================================================== IMPLICIT NONE INTEGER :: I,J,K CALL WDIALOGSELECT(ID_DSPOINTS) !## option to modify all selected entries if similar itype I=0; K=0; IF(SHP%NPOL.GT.0)THEN I=1 DO J=1,SHP%NPOL IF(SHP%POL(J)%IACT.GT.0)THEN IF(K.EQ.0)K=SHP%POL(J)%ITYPE IF(SHP%POL(J)%ITYPE.NE.K)I=0 ENDIF ENDDO ENDIF CALL WDIALOGTABSTATE(ID_DTAB,ID_DSPTAB2,I) DO J=1,SHP%NPOL IF(SHP%POL(J)%IACT.EQ.0)CYCLE I=3; IF(SPNT(J)%ISNAP.EQ.1)I=1 CALL WDIALOGFIELDSTATE(IDF_LABEL2,I) IF(I.EQ.1)EXIT ENDDO END SUBROUTINE STARTP1_UTL_FIELDS !###====================================================================== SUBROUTINE STARTP1_UTL_CLOSE(ICODE) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ICODE IDIAGERROR=1 IF(ICODE.EQ.1)THEN !## save startpoint IF(.NOT.STARTP1_UTL_SAVELOAD(1))RETURN ENDIF IF(ALLOCATED(SPNT))DEALLOCATE(SPNT) CALL POLYGON1DRAWSHAPE(1,SHP%NPOL); CALL POLYGON1CLOSE() CALL WINDOWSELECT(0); CALL WMENUSETSTATE(ID_SPOINTS,2,0) CALL WDIALOGSELECT(ID_DSPOINTS); CALL WDIALOGUNLOAD() IDIAGERROR=0 END SUBROUTINE STARTP1_UTL_CLOSE END MODULE MOD_SPOINTS_UTL