!! 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_CREATEIPF USE WINTERACTER USE RESOURCE USE MOD_DBL USE MOD_IDFPLOT USE IMODVAR, ONLY : DP_KIND,SP_KIND,IDIAGERROR USE MOD_POLYGON_PAR USE MOD_POLYGON_DRAW, ONLY : POLYGON1DRAWSHAPE USE MOD_POLYGON_UTL, ONLY : POLYGON1CLOSE,POLYGON1INIT,POLYGON1IMAGES,POLYGON1FIELDS,POLYGON_UTL_FILLDATAGRID !POLYGON1SAVELOADSHAPE USE MOD_POLYGON, ONLY : POLYGON1MAIN,POLYGON1CREATEPOLYGON USE MODPLOT, ONLY : MPW USE MOD_UTL, ONLY : ITOS,DBL_IGRINSIDEPOLYGON,UTL_PLOT1BITMAP,UTL_PLOT2BITMAP,UTL_GETHELP USE MOD_MAIN_UTL USE MOD_CREATE_UTL USE MOD_CREATE_UTL USE MOD_MAIN_UTL CONTAINS !###====================================================================== SUBROUTINE CREATEIPF1MAIN(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(IN) :: MESSAGE INTEGER,INTENT(IN) :: ITYPE !## check polygon actions IACTSHAPES=(/1,3,3,3,3,3/) CALL POLYGON1MAIN(ITYPE,MESSAGE) IF(ITYPE.EQ.PUSHBUTTON.AND.MESSAGE%VALUE1.EQ.ID_ZOOMSELECT)THEN CALL IDFZOOM(ID_DGOTOXY,0.0D0,0.0D0,0) CALL IDFPLOT(1) ENDIF CALL WDIALOGSELECT(MESSAGE%WIN) CALL WDIALOGFIELDSTATE(ID_INFO,MIN(1,SHP%NPOL)) SELECT CASE(ITYPE) CASE(FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) END SELECT CASE(PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_INFO) !## read/show current data from memory! CALL POLYGON_UTL_FILLDATAGRID() CALL WDIALOGPUTMENU(IDF_MENU1,SHP%POL%PNAME,SHP%NPOL,SHP%POL%IACT) CASE (ID_SELECTPOLYGON) CALL CREATEIPF_SELECTPOLYGON() CALL IDFPLOTFAST(1) CASE (IDHELP) CALL UTL_GETHELP('3.2.2','EMO.CreateGEN') CASE (IDCANCEL) CALL CREATEIPF1CLOSE() END SELECT END SELECT END SUBROUTINE !###==================================================================== SUBROUTINE CREATEIPF_SELECTPOLYGON() !###==================================================================== IMPLICIT NONE INTEGER,PARAMETER :: MAXPOL=500 REAL(KIND=DP_KIND),ALLOCATABLE,DIMENSION(:) :: XPOL,YPOL REAL(KIND=DP_KIND) :: X,Y INTEGER :: NPOL,I,J,N ALLOCATE(XPOL(MAXPOL),YPOL(MAXPOL)) CALL POLYGON1CREATEPOLYGON(XPOL,YPOL,MAXPOL,NPOL) !## correct polygon specified IF(NPOL.GT.0)THEN !## get lines completely within polygon SHP%POL%IACT=0 DO I=1,SHP%NPOL !## count number of points within polygon N=0; DO J=1,SHP%POL(I)%N X=SHP%POL(I)%X(J); Y=SHP%POL(I)%Y(J) IF(MPW%XMIN.LE.X.AND.MPW%XMAX.GE.X.AND.MPW%YMIN.LE.Y.AND.MPW%YMAX.GE.Y)THEN IF(DBL_IGRINSIDEPOLYGON(X,Y,XPOL,YPOL,NPOL).NE.1)EXIT N=N+1 ENDIF ENDDO IF(N.EQ.SHP%POL(I)%N)SHP%POL(I)%IACT=1 ENDDO ENDIF DEALLOCATE(XPOL,YPOL) CALL WCURSORSHAPE(CURARROW); CALL IGRPLOTMODE(MODECOPY); CALL IGRFILLPATTERN(OUTLINE) CALL WDIALOGSELECT(ID_DCREATEIPF) CALL WDIALOGPUTMENU(IDF_MENU1,SHP%POL%PNAME,SHP%NPOL,SHP%POL%IACT) END SUBROUTINE CREATEIPF_SELECTPOLYGON !###====================================================================== SUBROUTINE CREATEIPF1INIT() !###====================================================================== IMPLICIT NONE CALL WINDOWSELECT(0) IF(WMENUGETSTATE(ID_CREATEIPF,2).EQ.1)THEN CALL CREATEIPF1CLOSE() RETURN ENDIF CALL MAIN_UTL_INACTMODULE(ID_CREATEIPF) !## other module no closed, no approvement given IF(IDIAGERROR.EQ.1)RETURN CALL WMENUSETSTATE(ID_CREATEIPF,2,1) CALL WDIALOGLOAD(ID_DCREATEIPF,ID_DCREATEIPF) CALL POLYGON1INIT() CALL POLYGON1IMAGES(ID_DCREATEIPF) CALL POLYGON1FIELDS(ID_DCREATEIPF) CALL WDIALOGPUTIMAGE(ID_INFO,ID_ICONINFO) ! CALL WDIALOGPUTIMAGE(ID_SAVE,ID_ICONSAVE) CALL WDIALOGFIELDSTATE(ID_INFO,0) ! CALL WDIALOGFIELDSTATE(ID_SAVE,0) CALL WDIALOGSELECT(ID_DCREATEIPF); CALL UTL_DIALOGSHOW(-1,-1,0,2) END SUBROUTINE CREATEIPF1INIT END MODULE MOD_CREATEIPF