source: trunk/ToBeReviewed/PLOTS/DESSINE/pltz.pro @ 35

Last change on this file since 35 was 35, checked in by pinsard, 18 years ago

upgrade of PLOTS/DESSINE according to cerbere.lodyc.jussieu.fr: /usr/home/smasson/SAXO_RD/ : files

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 24.6 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:
6;       PLTZ
7;
8; PURPOSE:
9;       trace des graphes verticaux
10;
11; CATEGORY:
12;       Graphics
13;
14; CALLING SEQUENCE:
15;       pltz, champ [,min[, max]]
16;
17; INPUTS:
18;       champ: le champ dont on veut faire la coupe verticale champ
19;       peut etre de 2 types:
20;         1) un tableau 2d ou 3d.
21;         Si le champ est 2d undiquer avec le mot cle boxzoom les
22;         delimitations geographiques de la boxzoom. Si le chyamp est
23;         3d, on extrait la section et on moyenne eventuellement avant
24;         de faire le plot
25;         2) une structure repondant aux critaire specifies par
26;         litchamp.pro. cf. IDL> xhelp,'litchamp'. le tableau contenu
27;         ds la structure doit etre 2 ou 3d cf cas 1) si dessus
28;
29; ces arguments ne sont pas obligatoires:
30
31;       MAX: valeur maximum que l'on veut prendre en compte dans le trace
32; des contours. Par defaut on prend le max de tab1 (sur les pts mer)
33;
34;       MIN: valeur minimum que l'on veut prendre en compte dans le trace
35; des contours. Par defaut on prend le min de tab1 (sur les pts mer)
36;
37; KEYWORD PARAMETERS:
38;
39;       BOXZOOM:vecteur indiquant la zone geographique sur laquelle doit etre
40; faite la coupe. Si BOXZOOM a :
41; 1 element : l''extraction est faite sur [lon1, lon2, lat1, lat2, 0.,boxzoom[0]]
42; 2 elements: l''extraction est faite sur [lon1, lon2, lat1, lat2, boxzoom[0],boxzoom[1]]
43; 4 elements: l''extraction est faite sur [Boxzoom, 0, 200]
44; 5 elements: l''extraction est faite sur [Boxzoom[0:3], 0, Boxzoom[4]]
45; 6 elements: l''extraction est faite sur Boxzoom
46;
47; Ou lon1, lon2,lat1,lat2 sont les variables globales
48; definies lors du dernier domdef!
49;
50;      CB_TITLE: le titre de la colorbar
51;
52;      CB_SUBTITLE: le soustitre de la colorbar
53;
54;      CB_CHARSIZE: The character size of the color bar annotations
55;
56;       CONTINTERVALLE: lorsque CONTOUR est active, valeur d'un
57; intervalle entre deux isolignes traces par un trait. Il peut ainsi
58; etre different de celui specifie par INTERVALLE
59; qui, cas ce cas, ne controle que les isolignes coloriees en
60; couleurs. Si aucun min n''est specifie, on choisit un contour min qui va
61; bien avec l''intervalle specifie!. Si ce mot cle n''est pas
62; specifie, on trace 20 isolignes du min au max.
63;
64;       CONTLABEL: un entier n. lorsque CONTOUR est active, si n
65; different de 0, choisit le type de label correspondant aux cas n
66; pour les isolignes tracees par un trait. Pour specifier le type de
67; label du contour en couleur, utiliser LABEL
68;
69;       CONTMAX: lorsque CONTOUR est active, valeur maximum que l''on
70; veut prendre en compte dans le trace des isolignes traces par un
71; trait. Par defaut on prend le max (sur les pts mer)
72; du tableau passe ds le mot cle CONTOUR.
73;
74;        COAST_COLOR: the color of the coastline.
75;                     defaut value is 0 => black
76;
77;        COAST_THICK: the thickness of the coastline.
78;                     defaut value is 1
79;
80;        /CONT_NOFILL: activer pour ne pas remplir les points masques
81;        pour les laisser en transparent!
82;        Rq: on trace qd meme le contour du mask
83;
84;        CONT_COLOR: the color of the continent. defaut value is
85;        (!d.n_colors - 1) < 255 => white
86;
87;       CONTMIN: lorsque CONTOUR est active, valeur minimum que l''on
88; veut prendre en compte dans le trace des isolignes traces par un
89; trait. Par defaut on prend le max (sur les pts mer)
90; du tableau passe ds le mot cle CONTOUR.
91;
92;       CONTNLEVEL: lorsque CONTOUR est active, nombre de contours
93; trace par un trait a dessiner (actif si
94; CONTLABEL=0) par defaut =20.
95;
96;       CONTOUR: si on veut tracer les contours d'un champ different que celui
97; que l''on dessin en couleur (par ex E-P en couleur et QSR en
98; contours). Doit etre un champ reponadnt aux meme caracteristiques
99; que l''argument numero 1 de pltz
100;
101;       ENDPOINTS: mot clef specifiant que l'on veut faire une coupe
102;       verticale en diagonale. les coordonnees des extremites de
103;       celle-ci sont alors definies les 4 elements du vecteur
104;       ENDPOINTS: [x1,y1,x2,y2] qui sont les coordonnees
105;
106;       INTERVALLE: valeur d''un intervalle entre deux isolignes. Si
107; aucun min n''est specifie, on choisit un contour min qui va bien
108; avec l'intervalle specifie!. Si ce mot cle n''est pas specifie, on
109; trace 20 isolignes du min au max. Rq: Qd CONTOUR est active
110; INTERVALLE ne specifie que intervalle entre 2 isolignes coloriees en
111; couleur. Pour specifier l''intervalle entre 2 isolignes traces par un trait
112; utiliser CONTINTERVALLE.
113;
114;       /INV: inverse le vecteur couleur utilisee pour colorier le graphe
115;             (sans toucher au noir, au blanc et a la palette utilisee)
116;
117;       ZRATIO: lorsque le dessin presente une partie zoomee, rapport de
118; taille entre la partie zommee, hz (hauteur zoom), et le dessin entier, ht
119; (hauteur total). Par defaut =2./3
120;
121;       LABEL: un entier n. si n different de 0, choisit le type de
122; label correspondant aux cas n. cf label.pro
123; Rq: Qd CONTOUR est active, ne specifie le type de label que pour les
124; isolignes coloriees en couleur. Pour celles tracees par un trait
125; utiliser CONTLABEL.
126;
127;       /LANDSCAPE: oblige la feuille ou la fenetre a etre en position
128;       "allongee"
129;
130;       LCT: entier designant le numero de la palette de couleur que
131;       l''on veut utiliser pour le plot.
132;       
133;       MAXIN: permet de specifier la valeur maximum que l''on veut
134;       prendre en compte dans le trace des contours a l''aide d''un
135;       mot cle plutot que par l''argument max. Si l''argument et le
136;       mot cle sont specifies en meme temps, c''est la valeur
137;       specifiee par le mot cle qui est retenue.
138;
139;       MININ: permet de specifier la valeur minimum que l''on veut
140;       prendre en compte dans le trace des contours a l''aide d''un
141;       mot cle plutot que par l''argument min. Si l''argument et le
142;       mot cle sont specifies en meme temps, c''est la valeur
143;       specifiee par le mot cle qui est retenue.
144;       
145;       NLEVEL: nombre de contours a dessiner. par defaut =20. actif si
146; LABEL=0 ou n'est pas specifie.
147;
148;       /NOCOLORBAR: activer si on ne veut pas de colorbar
149;
150;       /NOCONTOUR: activer si on ne veut pas de contour mais juste
151;       les couleurs
152;
153;       /NOFILL: activer si on veut juste les contours en noir et
154;       blanc sur fond blanc
155;
156;       /NOERASE: activer pour faire un dessin a l''ecran sans creer
157;       une nouvelle fenetre
158;
159;       /NOTRI: pour forcer a ne pas utiliser de triangulation.
160;
161;       OVERPLOT: pour faire un plt par dessus un autre. Rq:
162;       contrairemnet a l''utilisation de CONTOUR,
163;       l''utilisation de ce mot clef ne modifie pas la legende ou/et
164;       la barre de couleur.
165;
166;       PETITDESSIN: vecteur de 3 ou 4 elements, applique pour faire un
167; dessin sur une petite portion de feuille ou d''ecran. il delimite
168; la zone ds laquelle va etre fait le dessin
169; si il a 4 elements:
170;       il est alors constitute des coordonnees -exprime en cm reperes par
171;       rapport au coin en bas a gauche de la feuille ou de la fenetre
172;       (en portrait comme en landscape)- du coin en bas a
173;       gauche et du coin en haut a droite  de la zone de dessin.
174; si il a 3 elements:
175;       Ds ce cas, on divise la fenetre ou l''ecran en PETITDESSIN[0]
176;       colonnes, en PETITDESSIN[1] lignes le dessin se faisant ds la
177;       case numero PETITDESSIN[2].La numerotation commencant en haut
178;       a gauche par le numero 1 et suivant apres dans le sens de
179;       l''ecriture.
180; Par defaut on fait un dessin occupant la plus grande place possible
181; tout en concervant le rapport d''aspect (sauf qd REMPLI est active)
182;
183;       /PORTRAIT: oblige la feuille ou la fenetre a etre en position
184;       "debout"
185;
186;       /POST: faire une sortie postscript. Ne marche que si on fait
187;       un seul dessin sur la feuille. Si on fait plusieurs dessins,
188;       utiliser @ps ou plein2dessins
189;
190;       /REMPLI:oblige le dessin a occuper l'espace maximum definit
191;       par petitdessin
192;
193;       /SIN: activer ce mot cle si l''on veut que l'' axe des x soit
194;       trace en sinus de la latitude qd on fait une coupe 'yz'
195;
196;       /STRICTFILL: activer ce mot clef pour que le remplissage des
197;       contours ce fasse precisement entre le min et le max specifie
198;       en laissant en banc les valeurs inferieurs au min specifie et
199;       superieurs au max specifie.
200;
201;       STYLE: style de tracer a adopter pour dessiner les isolignes par
202; defaut style=0. cf style.pro
203;
204;       /TRANS: fait un postscript (active /post automatiquement) et l'imprime
205; -si on le desire- sur un transparant
206;
207;        UNLABSUR: entier n. specifant qu''on ne labelle qu''un
208;        contour sur n. Par defaut unlabsur=2
209;
210;       /UNSUR2: si on veut tracer un countour sur deux. par  defaut trace
211; tous les contours
212;
213;       WINDOW: nimero de la fenetre ou l'on veut faire le graphe (permet
214; d'ouvrir plusieurs fenetres). par defaut on ouvre 'IDL0'
215;
216;       /WDEPTH: to specify that the field is at W depth instad of T
217;         depth (automatically activated if vargrid eq 'W')
218;
219;       /XZ: force a faire une coupe xz
220;
221;       /YZ: force a faire une coupe yz
222;
223;       YXASPECT: rapport d'echelle entre y et x (par ex: =1 pour un repere
224; presque orthonorme, =2 si l'axe des y est environ deux fois plus dilate
225; que celui des x). Par defaut on adapte pour occupe une grande partie de
226; la feuille en sortie postScript ou pour cree une fenetre pas trop etiree
227;
228;         /WDEPTH: to specify that the field is at W depth instad of T
229;         depth (automatically activated if vargrid eq 'W')
230;
231;       ZOOM: profondeur jusqu'a laquelle on fait un zoom. par defaut 200m ou
232; la profondeur maximale si elle est inf a 200
233;
234;       /ZEROMIDDLE: fo force the middle of the colorbar to be equal
235;       to 0 (force max=max(abs([min,max])) and min=-max)
236;
237; OUTPUTS:
238;
239; COMMON BLOCKS:
240;       common.pro     
241;
242; SIDE EFFECTS:
243;
244; RESTRICTIONS:
245;
246; EXAMPLE:
247;
248; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr)
249;                       7/1999
250;                       Sebastien Masson 08/02/2000 checkfield and
251;                       notri keyword.
252;-
253;------------------------------------------------------------
254;------------------------------------------------------------
255;------------------------------------------------------------
256pro pltz, tab, giventype, givenmin, givenmax, BOXZOOM = boxzoom, CONTOUR = contour $
257          , ENDPOINTS = endpoints, INTERVALLE = intervalle, INV = inv, ZRATIO = zratio $
258          , CONTINTERVALLE = contintervalle, LABEL = label, CONTLABEL = contlabel $
259          , STYLE = style, CONTMAX = contmax, SIN = sin, TYPEIN = typein $
260          , CONTMIN = contmin, NLEVEL = nlevel, CONTNLEVEL = contnlevel $
261          , NOTRI = notri, USETRI = usetri, FILLXDIR = fillxdir $
262          , ZOOM = zoom, XZ = xz, YZ = yz, MININ = minin, MAXIN = maxin $
263          , STRICTFILL = strictfill, OVERPLOT = overplot, MASKFILL = maskfill $
264          , WDEPTH = wdepth, REALSECTION = realsection $
265          , _EXTRA = ex
266;---------------------------------------------------------
267; include common
268@cm_4mesh
269@cm_4data
270@cm_4ps
271  IF NOT keyword_set(key_forgetold) THEN BEGIN
272@updatenew
273@updatekwd
274  ENDIF
275;--------------------------------------------------------------
276  tempsun = systime(1)          ; pour key_performance
277;------------------------------------------------------------
278;--------------------------------------------------------------
279; 1ere partie: initialisation et petits calculs...
280;--------------------------------------------------------------
281;on ne reinitialise pas qd on rapelle pltz en boucle pour utiliser contour
282  if n_elements(contour) ne 4 AND NOT keyword_set(overplot) then reinitplt
283;
284  if n_elements(contour) ne 4 THEN saveboxparam, 'boxparam4pltz.dat'
285;--------------------------------------------------------------
286; lecture du champ
287;--------------------------------------------------------------
288  if n_elements(giventype) NE 0 then type = giventype
289  if n_elements(givenmin) NE 0 then min = givenmin
290  if n_elements(givenmax) NE 0 then max = givenmax
291  if n_elements(minin) NE 0 then min = minin
292  if n_elements(maxin) NE 0 then max = maxin
293  if n_elements(realsection) EQ 0 then realsection = 1
294  IF n_elements(usetri) EQ 0 THEN BEGIN
295    IF n_elements(notri) NE 0 THEN usetri = 2-notri ELSE usetri = 1
296  ENDIF
297; no need of triangulation
298  IF usetri EQ 1 AND keyword_set(realsection) THEN usetri = 0
299; did we specify the type ?
300  if keyword_set(typein) then BEGIN
301    if size(type, /type) NE 7 AND size(type, /type) NE 0 then begin
302      if n_elements(min) NE 0 then max = min
303      min = type
304    endif
305    type = typein
306  ENDIF
307;
308  checktypeminmax, 'pltz', TYPE = type, MIN = min, MAX = max $
309    , XZ = xz, YZ = yz, ENDPOINTS = endpoints, _extra = ex
310;
311  if keyword_set(endpoints) then begin
312    section, tab, z2d, glam, gphi, ENDPOINTS = endpoints, TYPE = type $
313    , BOXZOOM = boxzoom, DIREC = direc, WDEPTH = wdepth, _extra = ex
314    if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN
315      restoreboxparam, 'boxparam4pltz.dat'
316      return
317    ENDIF
318    nx = n_elements(glam)
319    ny = nx
320    if strupcase(vargrid) EQ 'W' then begin
321      gdep = gdepw[firstzw:lastzw]
322      nz = nzw
323    ENDIF ELSE BEGIN
324      gdep = gdept[firstzt:lastzt]
325      nz = nzt
326    ENDELSE
327    mask = z2d LE valmask/10.
328  ENDIF ELSE BEGIN
329    z2d = checkfield(tab, 'pltz', TYPE = type, BOXZOOM = boxzoom $
330                     , DIREC = direc, WDEPTH = wdepth, _extra = ex)
331    if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN
332      restoreboxparam, 'boxparam4pltz.dat'
333      return
334    ENDIF
335    IF realsection EQ 1 THEN grille, mask, glam, gphi, gdep, nx, ny, nz, ifpltz = type, WDEPTH = wdepth $
336    ELSE grille, mask, glam, gphi, gdep, nx, ny, nz, WDEPTH = wdepth
337  ENDELSE
338; stop
339;---------------------------------------------------------------
340  profmax = !y.range[0]
341  profmin = !y.range[1]
342  if not keyword_set(zoom) then zoom = 200
343  zoom = zoom[0]
344  IF zoom LT profmin THEN zoom = profmax
345  if zoom GE vert2 then zoom = profmax
346; construction of the mask and of the axis
347  axis4pltz, type, mask, glam, gphi, gdep, XXAXIS = xxaxis, ZZAXIS = zzaxis, SIN = sin, ZRATIO = zratio, ZOOM = zoom, PROFMAX = profmax, PROFMIN = profmin, _extra = ex
348; to draw from bottom to top (avoid using cell_fill)
349  z2d = reverse(z2d, 2)
350;-----------------------------------------------------------------------------
351;   determination du mi:min et du ma:max de tab1 ainsi que de max: max et
352;   min: min pour le dessin.
353;-----------------------------------------------------------------------------
354  nan = total(finite(z2d, /nan)) < 1
355; faudra-t-il faire un autoscale ???
356  autoscale = testvar(var = min) EQ testvar(var = max) AND NOT keyword_set(intervalle)
357  determineminmax, z2d, mask, mi, ma, MININ = min, MAXIN = max, nan = nan, INTERVALLE = intervalle, _extra = ex
358  if z2d[0] EQ -1 THEN GOTO, sortie
359; on fait un autoscale si besoin
360  if autoscale then autoscale, min, max, intervalle
361;--------------------------------------------------------------
362;--------------------------------------------------------------
363; 2eme partie: dessin
364;--------------------------------------------------------------
365;--------------------------------------------------------------
366  if n_elements(contour) NE 4 AND NOT keyword_set(overplot) THEN $
367    placedessin, 'pltz', posfenetre, posbar, contour = contour, endpoints = endpoints $
368    , direc = direc, _extra = ex
369;------------------------------------------------------------
370;--------------------------------------------------------------
371; choix des labels
372;-----------------------------------------------------------
373  if keyword_set(intervalle) AND NOT keyword_set(label) then label = 1
374  if keyword_set(label) eq 0 then cas = 0 else cas = label
375  label, cas, min, max, ncontour, level_z2d, colnumb, NLEVEL = nlevel $
376         , INTERVALLE = intervalle, strictfill = strictfill
377;--------------------------------------------------------------
378; choix de style
379;-----------------------------------------------------------
380  if not keyword_set(style) then style = 0
381  style, style, level_z2d, linestyle, thick
382  if keyword_set(inv) then colnumb = reverse(colnumb)
383;-----------------------------------------------------------
384;   definition des axes
385;----------------------------------------------------------
386  if NOT keyword_set(overplot) THEN axe, type, SIN = sin, _EXTRA = ex
387  !y.range = [-1, 0]
388;--------------------------------------------------------------
389; extrapolation des donnees sur les terres et seuillage
390;--------------------------------------------------------------
391; define masknan
392  if keyword_set(nan) then BEGIN
393    masknan = finite(z2d)
394    z2d[where(masknan EQ 0)] = max
395  ENDIF ELSE masknan = 1
396  IF n_elements(fillxdir) EQ 0  THEN fillxdir = 1
397  IF keyword_set(fillxdir) THEN BEGIN
398; filling the mask values only in the x direction.
399    z2d = remplit(z2d, nite = nx*(1-(n_elements(maskfill) NE 0)) $
400                  , mask = mask*masknan, /basique $
401                  , /fillxdir, _extra = ex)
402; if some lines contains no data (the bottom line for ex) it must be
403; also filled with 8 neighbourg method
404    IF (where(total(mask*masknan, 1) EQ 0))[0] NE -1 THEN $
405      z2d = remplit(z2d, nite = 1-(n_elements(maskfill) NE 0) $
406                    , mask = z2d LT valmask/10, /basique, _extra = ex)
407  ENDIF ELSE BEGIN
408; filling the mask values with 8 neighbourg
409    z2d = remplit(z2d, nite = (1+(vargrid NE 'T')+keyword_set(nan)) $
410                  *(1-(n_elements(maskfill) NE 0)), mask = mask*masknan $
411                  , /basique, _extra = ex)
412  ENDELSE
413  if keyword_set(strictfill) EQ 0 AND n_elements(maskfill) EQ 0 $
414    then z2d = min > z2d <  max
415  if n_elements(maskfill) NE 0 then BEGIN
416    z2d = z2d*mask*masknan
417    if maskfill NE 0 then z2d = temporary(z2d) + maskfill*(1b-mask*masknan)
418  ENDIF
419;----------------------------------------------------------
420; check the mask and the triangulation according to the grid type and
421; nan values. find the coordinates of the mask
422;----------------------------------------------------------
423;   if (where(mask EQ 0))[0] EQ -1 AND NOT keyword_set(nan) then notri = 1
424;   if keyword_set(notri) then trifield = -1 $
425;   ELSE trifield = triangule(mask,/basic)
426  if (usetri GE 1 AND (vargrid EQ 'T' OR vargrid EQ 'W')) $
427    OR (usetri EQ 2 AND (vargrid NE 'T' AND vargrid NE 'W')) THEN $
428    trifield = triangule(mask, /basic)
429;
430  IF NOT keyword_set(endpoints)  THEN BEGIN
431    if keyword_set(nan) then trinan = triangule(masknan, /basic, coinmonte = coinmontenan, coindescend = coindescendnan)
432    decoupeterre, mask, glammsk, gphimsk, gdepmsk, type = type, WDEPTH = wdepth, REALSECTION = realsection
433    axis4pltz, type, mask, glammsk, gphimsk, gdepmsk, XXAXIS = xmask, ZZAXIS = zmask, SIN = sin, ZRATIO = zratio, ZOOM = zoom, PROFMAX = profmax, PROFMIN = profmin, _extra = ex
434  ENDIF ELSE BEGIN
435    xmask = xxaxis
436    zmask = zzaxis
437  ENDELSE
438;
439  if (usetri GE 1 AND (vargrid NE 'T' AND vargrid NE 'W')) THEN BEGIN
440    IF keyword_set(realsection) THEN trimsk = triangule(mask, /basic) $
441    ELSE trimsk = triangule(mask, /basic, coinmonte = coinmontemask $
442                            , coindescend = coindescendmask)
443  ENDIF     
444;------------------------------------------------------------
445; dessin en lui meme
446;------------------------------------------------------------
447  pltbase, z2d, xxaxis, zzaxis, mask, xmask, zmask $
448    , level_z2d, colnumb, overplot = overplot $
449    , contour = contour, trichamp = trifield, trimsk = trimsk  $
450    , c_linestyle = linestyle $
451    , c_labels = 1-(indgen(n_elements(level_z2d)) MOD 2) $
452    , c_thick = thick, unsur2 = unsur2 $
453    , masknan = masknan, trinan = trinan $
454    , coinmontenan = coinmontenan, coindescendnan = coindescendnan $
455    , coinmontemask = coinmontemask, coindescendmask = coindescendmask $
456    , REALSECTION = realsection, USETRI = usetri, _extra = ex
457;------------------------------------------------------------
458; rappelle de pltz en boucle qd contour est active
459;------------------------------------------------------------
460  if n_elements(contour) eq 4 then BEGIN ; c''est la 2eme fois que je passe ds pltt
461    contour = {mietma:[mi, ma], unit:varunit, inter:intervalle} ; je renvoie le min, le max et l''unite
462    return
463  endif
464  if keyword_set(contour) THEN BEGIN
465    pourlegende = [1, 1, 1, 1]
466    oldattributs = saveatt()
467    oldcolnumb = colnumb
468    pltz, contour, contmin, contmax, CONTOUR = pourlegende, ZRATIO = zratio $
469      , INTERVALLE = contintervalle, LABEL = contlabel, STYLE = style, /noerase  $
470      , NLEVEL = contnlevel, ZOOM = zoom, BOXZOOM = boxzoom, ENDPOINTS = endpoints $
471      , STRICTFILL = strictfill, REALSECTION = realsection, MASKFILL = maskfill $
472      , USETRI = usetri, WDEPTH = wdepth, _extra = ex
473    restoreatt, oldattributs
474    colnumb = oldcolnumb
475  ENDIF
476;------------------------------------------------------------
477;------------------------------------------------------------
478; 3eme partie: dessin du cadre, legendes, colorbar...
479;------------------------------------------------------------
480  if keyword_set(overplot) then BEGIN
481    !y.range =  [zoom, profmin] ; on repasse en coordonees physiques!
482    plot, [0], [0], /nodata, /noerase, title = '', subtitle = '', xstyle = 5, ystyle = 5
483    GOTO, fini
484  endif
485;------------------------------------------------------------
486; legendes + affichage de celles-ci
487;------------------------------------------------------------
488  legende, mi, ma, type, CONTOUR = pourlegende, INTERVALLE = intervalle, DIREC = direc, endpoints = endpoints, _EXTRA = ex
489  if type eq 'yz' then xaxe = 'lataxe' else xaxe = 'lonaxe'
490  if keyword_set(sin) OR NOT key_onearth then xaxe = ''
491; cadre applique par defaut
492  plot, [xxaxis[0], xxaxis[n_elements(xxaxis)-1]], [-zratio, -zratio], /noerase $
493    , xstyle = 1+4*(keyword_set(endpoints) AND ((type EQ 'xz' AND lat1 NE lat2) OR (type EQ 'yz' AND lon1 NE lon2))) $
494    , xtickformat = xaxe, _extra = ex
495; ajout d'un axe ds le cas ou l'on utilise endpoints
496  if keyword_set(endpoints) then addaxe, endpoints, type, posfenetre, _EXTRA = ex
497;------------------------------------------------------------
498; axe y en 1 ou 2 parties
499;------------------------------------------------------------
500  if n_elements(ex) NE 0 then BEGIN
501; pour ne plus mettre de titre
502    if (where(tag_names(ex) EQ 'TITLE'))[0] NE -1 then ex.TITLE = ' '
503; pour ne plus mettre de sous titre
504    if (where(tag_names(ex) EQ 'SUBTITLE'))[0] NE -1 then ex.SUBTITLE = ' '
505; pour n''avoir q''un ytitle
506    if (where(tag_names(ex) EQ 'YTITLE'))[0] NE -1 then BEGIN
507      ytitle = ex.YTITLE
508      ex.YTITLE = ' '
509    endif
510  ENDIF
511  htotal = posfenetre[3]-posfenetre[1]
512  hzoom = 1.*zratio*htotal
513  if zoom LT profmax then $
514    plot, [0], [0], /nodata, /noerase, ystyle = 1, yrange = [profmax, zoom+0.001] $
515    , position = posfenetre+[0, 0, 0, -hzoom], _extra = ex, title = '', subtitle = '', ytitle = ''
516;
517  !y.range =  [zoom, profmin]   ; on repasse en coordonees physiques!
518  plot, [0], [0], /nodata, /noerase, ystyle = 1, _extra = ex $
519    , title = '', subtitle = '', ytitle = '', position = posfenetre+[0, htotal-hzoom, 0, 0]
520;------------------------------------------------------------
521; pour ecrire le ytitle...
522;------------------------------------------------------------
523  if !d.name EQ 'PS' then $
524    xs = (max(page_size, min = mi)*(1-key_portrait) + mi*key_portrait)*!d.x_px_cm $
525  ELSE xs = !d.x_size
526  if n_elements(ytitle) NE 0 then !y.title = ytitle
527  charsize = chkstru(ex, 'ycharsize', /extract)
528  if charsize EQ -1 then charsize = !p.charsize
529  IF chkstru(ex, 'charsize') THEN ex.charsize = charsize
530  if chkstru(ex, 'ytitle', /extract) NE '' then $
531    decalage = string(format = '(e10.3)', profmax)
532  decalage = float(strmid(decalage, strpos(decalage, 'e')+1))
533  posy = posfenetre[1]+1.*htotal/2
534  posx = posfenetre[0]-(decalage+3)*!d.x_ch_size*charsize/xs
535  xyouts, posx, posy, !y.title, /normal, orientation = 90, color = 0, ALIGNMENT = .5, charsize = charsize, _extra = ex
536
537;------------------------------------------------------------
538; barre de couleur
539;------------------------------------------------------------
540  colnumb = colnumb[0:ncontour-1-keyword_set(strictfill)]
541  barrecouleur, colnumb, min,  max, (ncontour-keyword_set(strictfill))/2 $
542                , position = posbar, _extra = ex
543;------------------------------------------------------------
544;------------------------------------------------------------
545; 4eme partie: impression eventuelle
546;------------------------------------------------------------
547;------------------------------------------------------------
548fini:
549  terminedessin, _extra = ex
550;------------------------------------------------------------
551;------------------------------------------------------------
552;------------------------------------------------------------
553;------------------------------------------------------------
554sortie:
555  restoreboxparam, 'boxparam4pltz.dat'
556;
557  if keyword_set(key_performance) NE 0 THEN print, 'temps pltz', systime(1)-tempsun
558  return
559end
560
561
562
Note: See TracBrowser for help on using the repository browser.