C OPTDES SOURCE BP208322 12/08/02 21:15:28 7468 SUBROUTINE OPTDES (IOPTIO,NOL,AXE,TITRE,TXTIT,TXAXE,TYAXE, & TTXX,TTXXX,TTYY,TTYYY,ZAXES,ZSEPAR,ZOPTIO,ZLEGEN,IEV, & DYN,NDIMT,CUR,NDIMT2,NC,INBEVO,ZMIMA,ZDATE,YMINI,YMAXI, & IPOSI,XPOSI,YPOSI,IGRIL) *============================================================= * * TESTS POUR L'EVOLUTION DE DESSIN * *============================================================= * * Modifications : * * 05 sept. 2007 Maugis * Maintien du segment AXE actif en modification * *============================================================= * * Entrée : Cf. dessin.eso * *============================================================= IMPLICIT LOGICAL (Z) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-S,U-Y) CHARACTER*72 TITRE,TXTIT,BUFFER,CHOPT,TIME CHARACTER*20 TXAXE,TYAXE,TITOPT c LOGICAL VALEUR REAL RXDIM,RYDIM,HMIN CHARACTER*8 CTYPE,CHVIDE,ETYPE,MTYPI,MTYPR,CHARR LOGICAL ZGRIL1 -INC CCOPTIO -INC SMEVOLL -INC SMLREEL -INC CCGEOME -INC TMAXE -INC SMTABLE SEGMENT DYN LOGICAL ZTRACE(NDIMT) ENDSEGMENT SEGMENT CUR LOGICAL ZCUR(NDIMT2) ENDSEGMENT NOL=25 ETYPE(1:8)='ENTIER ' CHVIDE(1:8)=' ' *============================================================= * MARGE PROPORTIONNELLE A LA GRADUATION DE LA FENETRE USER *============================================================= * SEGACT AXE*MOD D=DABS(XSUP-XINF) IF (ZCARRE) THEN BG=0.14*REAL(D) BD=0.55*REAL(D) ELSE BG=0.10*REAL(D) BD=0.10*REAL(D) ENDIF D=DABS(YSUP-YINF) BH=0.08*REAL(D) BB=0.13*REAL(D) *============================================================= * DEFINITION FENETRE *============================================================= * c DIOCAD = taille du cadre include CCOPTIO XDIM = DIOCAD * .9D0*29.D0 / 30.D0 *1.134D0 YDIM = DIOCAD * .9D0*21.D0 / 30.D0 *1.08D0 IF (XSUP.LE.XINF) GOTO 950 IF (YSUP.LE.YINF) GOTO 950 RXDIM=XDIM RYDIM=YDIM IF (TXTIT.NE.' ') TITRE=TXTIT NCOUMA=NBCOUL c appel a trinit pour definir les bonnes ENTRY selon IOGRA CALL TRINIT (NOL,RXDIM,RYDIM,TITRE,.15,.false.,NCOUMA) c definition de la fenetre TTX1=REAL(XINF)-BG TTX2=REAL(XSUP)+BD TTX3=REAL(YINF)-BB TTX4=REAL(YSUP)+BH CALL DFENET (TTX1,TTX2,TTX3,TTX4,-1.,+1.,TTXX,TTXXX,TTYY,TTYYY, > .FALSE.) XX=DBLE(TTXX) XXX=DBLE(TTXXX) YY=DBLE(TTYY) YYY=DBLE(TTYYY) IF (TXAXE.NE.' ') TITREX=TXAXE IF (TYAXE.NE.' ') TITREY=TYAXE *============================================================= * CONSTRUCTION DE L'AXE *============================================================= * *PM SEGDES AXE CALL TRBOX (0.7,0.7) CALL DAXES (AXE,ZAXES,IGRIL) CALL TRBOX (1./0.7,1./0.7) *PM SEGACT AXE*MOD *============================================================= * AFFICHAGES DIVERS *============================================================= * * AFFICHAGE DU MINIMUM ET DU MAXIMUM * IF (ZMIMA) THEN CALL TRBOX(0.7,0.7) TYY=REAL(YSUP)+BH/4. TXX=REAL(XINF+(XSUP-XINF)*2.D0/3.D0) BUFFER(1:10)='MINIMUM : ' WRITE (BUFFER(11:21),FMT='(G11.4)') YMINI CALL TRLABL (TXX,TYY,0.,BUFFER,21,HMIN) BUFFER(1:10)='MAXIMUM : ' TYY=YSUP+(BH/1.8) TXX=XINF+(XSUP-XINF)*2/3 WRITE (BUFFER(11:21),FMT='(G11.4)') YMAXI CALL TRLABL (TXX,TYY,0.,BUFFER,21,HMIN) CALL TRBOX(1./0.7,1./0.7) ENDIF * * AFFICHAGE DE LA DATE * IF (ZDATE) THEN CALL GIBDAT(JOUR,MOIS,IANNEE) iannee=mod(iannee,100) **TC TIME=FDATE() BUFFER(1:22)=' / /20 ' WRITE (BUFFER(4:5),FMT='(I2)') JOUR WRITE (BUFFER(7:8),FMT='(I2)') MOIS WRITE (BUFFER(12:13),FMT='(I2)') IANNEE **TC WRITE (BUFFER(15:22),FMT='(A8)') TIME(12:20) cbp : cette position ne me semble pas tres esthetique .... c TXX=TTXXX-0.98*(TTXXX-TTXX) c TYY=TTYY +0.02*(TTYYY-TTYY) IF (ZCARRE) THEN TXX=REAL(XSUP)-(13.5*.017*(XSUP-XINF)) ELSE TXX=REAL(XSUP)-(14.*.011*(XSUP-XINF)) ENDIF TYY=REAL(YSUP)+(.05*(YSUP-YINF)) CALL TRBOX(0.8,0.8) CALL TRLABL(TXX,TYY,0.,BUFFER(1:22),22,HMIN) CALL TRBOX(1./0.8,1./0.8) ENDIF *============================================================= * TRACE DES COURBES *============================================================= * MEVOLL=IEV SEGACT MEVOLL CTYPE(1:8)=' ' NCT=0 NLG=0 * * TRACES SEPARES ==================================== * IF (ZSEPAR) THEN IPTR=IEVOLL(NC) * * RECHERCHE EVENTUELLE DES PARAMETRES SPECIFIQUES * IF (ZOPTIO) THEN CALL ACCTAB(IOPTIO,ETYPE,NC,X,CHVIDE,Z,II,CTYPE,ILG,XX,CHOPT, # ZZ,III) IF (CTYPE(1:3).NE.'MOT') CHOPT='''' TITOPT(1:20)=' ' IVALI=0 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' MTYPR=' ' ITITOP=0 CHARR=' ' CALL ACCTAB(IOPTIO,MTYPI,IVALI,X,'TITRE',.TRUE.,IRETI, * MTYPR,IVALR,XVALR,CHARR,ZZ,IRETR) IF(MTYPR(1:5).EQ.'TABLE')THEN MTAB1=IRETR SEGACT MTAB1 CTYPE(1:8)=' ' CALL ACCTAB(ITITOP,ETYPE,NC,X,CHVIDE,Z,II,CTYPE,ILG,XX, # TITOPT, ZZ,III) IF(CTYPE(1:3).NE.'MOT') TITOPT(1:20)='PAS DE LEGENDE' ENDIF ELSE CHOPT(1:72)=' ' TITOPT(1:20)=' ' ENDIF *PM SEGDES AXE CALL TRBOX(0.7,0.7) CALL TREVOL (AXE,IPTR,CHOPT,TITOPT,ZLEGEN,NCT,NLG,INBEVO & ,IPOSI,XPOSI,YPOSI) CALL TRBOX(1./0.7,1./0.7) *PM SEGACT AXE*MOD * * CAS DES CURVILIGNES * IF (ZCUR(NC+1)) THEN * On affiche le long de l'axe des abscisses, avec des marqueurs, * les noms des points nommés rencontrés *PM SEGDES AXE CALL TRBOX(0.7,0.7) IPTR=IEVOLL(NC+1) CALL TRCUR(AXE,IPTR) CALL TRBOX(1./0.7,1./0.7) *PM SEGACT AXE*MOD ENDIF * * * TRACES SIMULTANES ==================================== * ELSE KK=0 DO 49 I=1,INBEVO IF (ZTRACE(I)) THEN KK=KK+1 IPTR=IEVOLL(I) * * RECHERCHE EVENTUELLE DES PARAMETRES SPECIFIQUES * IF (ZOPTIO) THEN CTYPE(1:8)=' ' CALL ACCTAB(IOPTIO,ETYPE,KK,X,CHVIDE,Z,II,CTYPE,ILG,XX, # CHOPT,ZZ,III) IF (CTYPE(1:3).NE.'MOT') CHOPT=' ' TITOPT(1:20)=' ' IVALI=0 XVALI=0.D0 IRETI=0 IVALR=0 XVALR=0.D0 IRETR=0 MTYPI='MOT ' MTYPR=' ' ITITOP=0 CHARR=' ' CALL ACCTAB(IOPTIO,MTYPI,IVALI,X,'TITRE',.TRUE.,IRETI, * MTYPR,IVALR,XVALR,CHARR,ZZ,IRETR) IF(MTYPR(1:5).EQ.'TABLE')THEN MTAB1=IRETR SEGACT MTAB1 CTYPE(1:8)=' ' CALL ACCTAB(MTAB1,ETYPE,KK,X,CHVIDE,Z,II,CTYPE,ILG,XX, # TITOPT,ZZ,III) IF(CTYPE(1:3).NE.'MOT')TITOPT(1:20)=' ' ENDIF ELSE CHOPT(1:72)=' ' TITOPT(1:20)=' ' ENDIF *PM SEGDES AXE CALL TRBOX(0.7,0.7) CALL TREVOL (AXE,IPTR,CHOPT,TITOPT,ZLEGEN,NCT,NLG,INBEVO & ,IPOSI,XPOSI,YPOSI) CALL TRBOX(1./0.7,1./0.7) *PM SEGACT AXE*MOD ENDIF * * CAS DES CURVILIGNES * IF (ZCUR(I)) THEN * On affiche le long de l'axe des abscisses, avec des marqueurs, * les noms des points nommés rencontrés *PM SEGDES AXE CALL TRBOX(0.7,0.7) IPTR=IEVOLL(I) CALL TRCUR(AXE,IPTR) CALL TRBOX(1./0.7,1./0.7) *PM SEGACT AXE*MOD ENDIF 49 CONTINUE * ENDIF SEGDES MEVOLL *============================================================= * On redessine les axes sans grille pour repasser sur d'éventuelles * ombres *============================================================= CALL TRBOX (0.7,0.7) ZGRIL1=ZGRILL ZGRILL=.FALSE. CALL DAXES (AXE,ZAXES,IGRIL) ZGRILL=ZGRIL1 CALL TRBOX (1./0.7,1./0.7) GOTO 1000 * L'intervalle entre les bornes est trop faible. 950 CALL ERREUR (497) GOTO 1000 1000 CONTINUE *PM SEGDES AXE END