source: trunk/PLOTS/DESSINE/pltbase.pro @ 2

Last change on this file since 2 was 2, checked in by opalod, 22 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 12.1 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:pltbase
6;
7; PURPOSE: surcouche de contour pour tracer un champ eventuellement
8; masque. brique elementaire de plt, pltz et pltt.
9;
10; CATEGORY:un tarce vite fait et/ou delestage de l''ecriture de plt, pltz, pltt
11;
12; CALLING SEQUENCE: pltbase, z2d, x, y, mask,xm, ym, [, levels, colors],
13;
14; INPUTS:
15;        z2d:le tableau a tracer
16;
17;        x et y les axes. vecteurs ou tableaux de meme taille que
18;        z2d. Ce sont les coordonnees de z2d
19;
20;        mask: le tableau qui masque z2d (avec des 0 sur les points a
21;        masquer et des 1 sur les autres). si z2d n'est pas masque
22;        mettre cet argument egale a 1.
23;
24;        xm et ym les axes du mask. vecteurs ou tableaux de meme taille que
25;        mask. Ce sont les coordonnees de mask
26;
27;        levels et colors: (optionnels) les vecteurs qui contiennent
28;        les niveaus et les couleurs necessaires au contour. S''il ne
29;        sont pas donnes on prends 20 niveau entre le min et le max.
30;
31; KEYWORD PARAMETERS:
32;
33;        COLORTRICHAMP : la couleur que l''on veut utiliser pour
34;        dessiner la triangulation qui est utilisee pour faire les
35;        contour du champ
36;
37;        COLORTRIMASK : la couleur que l''on veut utiliser pour
38;        dessiner la triangulation qui est utilisee pour faire les
39;        contour du mask
40;
41;        /CONT_NOFILL: activer pour ne pas remplir les points masques
42;        a la couleur c_cont mais pour les laisser en transparent! Rq
43;        on trace qd meme le contour du mask de la couleur c_cote
44;
45;        CONT_THICK: l''epaisseur du trait pour tracer les
46;        continents. par defaut c''est 1.
47;
48;        /DESSTRICHAMP: pour dessiner la triangulation qui est
49;        utilisee pour faire les contour du champ.
50;
51;        /DESSTRIMASK: pour dessiner la triangulation qui est
52;        utilisee pour faire les contour du mask
53;
54;        /FORPLT: a activer si on veut que le trace des cote soit
55;        realise par tracecote plutot que tracemask.
56;
57;        I_COLORS: un vecteur specifiant la couleur a utiliser pour
58;        tracer les contours. C''est la meme chose que c_colors qui
59;        ajit sur les contours.
60;
61;        MORE: chiffre a donner pour eviter les bug du style:
62;  % Out of range subscript encountered: <LONG      Array[38911]>.
63;  % Execution halted at:  PLTBASE           151
64;             par defaut more=10 si le bug existe tjs, augmenter la
65;             valeur de more! (l''explication et la justification de
66;             cette methode n''ont pas encore de fondements
67;             scientifiques)...
68;         
69;
70;
71;        /NOCOULEUR: pour faire juste les isolignes
72;
73;        /NOCONTOUR: pour faire juste les couleurs
74;
75;        /UNSUR2: pour tarcer une isoligne sur 2
76;
77;        UNLABSUR: entier n. specifant qu''on ne labelle qu''un
78;        contour sur n
79;
80;        CONTOUR: pour etrte utilise depuis plt, pltz ou pltt. cf ces
81;        routines.
82;
83;        _EXTRA: mot cle magique d''idl pour faire passer tous lse
84;        mots cles acceptes par les routines et fonctions utilises ds
85;        ce programme sans les declarer explicitement.
86;
87; OUTPUTS:
88;
89; COMMON BLOCKS:
90;        common.pro
91;
92; SIDE EFFECTS:
93;
94; RESTRICTIONS:ds le cas ou z2d, x et y sont des tableaux de meme
95; taille il faut les metre sous forme de vecteur: z2d[*], x[*], y[*].
96;
97; EXAMPLE:
98;
99; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr)
100;                       ????
101;                       8/2/2000 check if the tri array is not equal to
102;                       -1. allow contour with out using a triangulation.
103;
104;-
105;------------------------------------------------------------
106;------------------------------------------------------------
107;------------------------------------------------------------
108PRO pltbase, z2d, x, y, mask,xm, ym, levels, colors,UNSUR2 = unsur2, CONTOUR = contour $
109             , NOCONTOUR = nocontour, NOCOULEUR = nocouleur, TRICHAMP = trichamp, TRIMSK = trimsk $
110             , CARTE = carte, NAN = nan $
111             , COLORTRICHAMP = colortrichamp, COLORTRIMASK = colortrimask $
112             , COLORTRINAN = colortrinan $
113             , TH_TRICHAMP = th_trichamp, TH_TRIMASK = th_trimask $
114             , DESSTRICHAMP = desstrichamp, DESSTRIMASK = desstrimask $
115             , DESSTRINAN = desstrinan $
116             , I_COLORS = i_colors $
117             , CONT_THICK = cont_thick,CONT_NOFILL = cont_nofill, UNLABSUR = unlabsur $
118             , COINMONTEMASK = coinmontemask, COINDESCENDMASK = coindescendmask $
119             , COINMONTENAN = coinmontenan, COINDESCENDNAN = coindescendnan $
120             , INDICEZOOMMASK = indicezoommask, INDICEZOOMNAN = indicezoomnan $
121             , MASKNAN = masknan, TRINAN = trinan, XNAN = xnan, YNAN = ynan, FORPLT = forplt $
122             , MORE = more, _EXTRA = ex
123@common
124;
125; explication concernant contour. Ce mot cle est active qd on on trace
126; un contour en couleur different de celui en trait noir.
127; si il est active (cas n_elements(contour) NE 0), on passe 2 fois ds pltbase:
128;   1) on trace les couleurs puis on sort c''est le cas:
129;         n_elements(contour) NE 0 AND n_elements(contour) NE 4)
130;   2) on trace les contour en trait puis les continents c''est le cas
131;         n_elements(contour) NE 0 AND n_elements(contour) EQ 4)
132;
133;------------------------------------------------------------
134   tempsun = systime(1)         ; pour key_performance
135   if n_elements(masknan) EQ 0 then masknan = 1
136;----------------------------------------------------------------------
137; si les niveaux et les couleurs ne sont pas donnes
138;----------------------------------------------------------------------
139   if n_params() EQ 4 then BEGIN
140      label,0,min(z2d*mask),max(z2d*mask),ncontour,levels
141      colors = couleur
142   endif
143; attention bidouille inexplicable pour que tout se passe bien avec les
144; postcript ds pltz!!!
145   if n_elements(contour) LE 4 AND !x.type EQ 0 THEN $
146    plot, [0], [0], xstyle = 5, ystyle = 5,/noerase, title = '',  subtitle = ''
147;----------------------------------------------------------------------
148; si cell_fill fait partit de _extra, on le desactive si il n''est pas
149; egale a 2
150;----------------------------------------------------------------------
151   IF chkstru(ex, 'CELL_FILL') THEN BEGIN
152      cell_fill = ex.CELL_FILL
153      if ex.CELL_FILL NE 2 then ex.CELL_FILL = 0
154   ENDIF ELSE cell_fill = 0     ;
155; do we use the triangulation??
156   usetri = n_elements(trichamp) NE 0 AND (testvar(var = trichamp))[0] NE -1
157;----------------------------------------------------------------------
158; I) remplissage des contours en palette de couleur
159;----------------------------------------------------------------------
160   if NOT keyword_set(more) then more = 10
161   if NOT keyword_set(nocouleur) then begin
162      if n_elements(contour) NE 4 THEN BEGIN
163         if usetri then $
164          contour,[z2d[*], fltarr(more)],[x[*], fltarr(more)],[y[*], fltarr(more)],levels=levels,c_color=colors,/noerase,/fill,/closed $
165          ,TRIANGULATION=trichamp, _extra = ex $
166         else $
167          contour,z2d,x,y,levels=levels,c_color=colors,/noerase,/fill,/closed, _extra = ex
168      endif
169   endif
170   if n_elements(contour) NE 0 AND n_elements(contour) NE 4 THEN GOTO, fini
171   IF chkstru(ex, 'C_ORIENTATION') THEN ex = extractstru(ex, 'C_ORIENTATION')
172   IF chkstru(ex, 'C_SPACING') THEN ex = extractstru(ex, 'C_SPACING')
173;------------------------------------------------------------
174; II) trace des contours en trait de couleur c_lab
175;------------------------------------------------------------
176   if n_elements(contour) EQ 4 OR n_elements(contour) EQ 0 THEN BEGIN
177; on ne passe pas si on doit faire des contours differents...
178; ds le cas on unsur2 est active on reduit levels
179      if NOT keyword_set(nocontour) then begin
180         IF keyword_set(unsur2) THEN levels = levels(where(zeroun(n_elements(levels) ) eq 1))
181; unlabsur est active?  C_LABEL est passe via _EXTRA?
182         if keyword_set(unlabsur) THEN IF chkstru(ex, 'C_LABELS') THEN $
183          ex.C_LABELS = 1-((indgen(n_elements(ex.C_LABELS)) MOD unlabsur) < 1)
184;
185; pour ne pas filler qd cell_fill est impose...
186         IF chkstru(ex, 'CELL_FILL') THEN ex.CELL_FILL = 0
187         IF chkstru(ex, 'C_COLORS') THEN ex = extractstru(ex, 'C_COLORS')
188;
189         if usetri then $
190          contour, [z2d[*], fltarr(more)], [x[*], fltarr(more)],[y[*], fltarr(more)],levels=levels, overplot = 1-keyword_set(nocouleur) $
191          ,noerase = keyword_set(nocouleur), c_color=c_lab*(1-keyword_set(i_colors))+testvar(var = i_colors),TRIANGULATION=trichamp, _extra = ex $
192         else $
193          contour, z2d, x,y,levels=levels, overplot = 1-keyword_set(nocouleur) $
194          ,noerase = keyword_set(nocouleur), c_color=c_lab*(1-keyword_set(i_colors))+testvar(var = i_colors), _extra = ex
195;
196      endif
197;
198      if keyword_set(carte) then if carte EQ 1 then mask = 1
199      if n_elements(mask) NE 1 then BEGIN ; si mask=1 on saute.
200;----------------------------------------------------------------------
201; III) remplissage des continents de couleur c_cont
202;----------------------------------------------------------------------
203         if NOT keyword_set(cont_nofill) then BEGIN
204            IF chkstru(ex, 'CELL_FILL') THEN ex.CELL_FILL = cell_fill < 1
205            IF chkstru(ex, 'LEVELS') THEN ex = extractstru(ex, 'LEVELS')
206            if n_elements(trimsk) eq 0 and usetri then trimsk = trichamp
207;
208            usetri = n_elements(trimsk) NE 0 AND (testvar(var = trimsk))[0] NE -1
209            if usetri then BEGIN
210               if keyword_set(forplt) then $
211                contour, -1*[mask[*], fltarr(more)], [xm[*], fltarr(more)], [ym[*], fltarr(more)], levels=-0.5, /overplot, /fill ,c_color=c_cont $
212                ,TRIANGULATION=trimsk, _extra=ex ELSE $
213                contour, -1*[(mask*masknan)[*], fltarr(more)], [xm[*], fltarr(more)], [ym[*], fltarr(more)], levels=-0.5, /overplot, /fill $
214                ,c_color=c_cont,TRIANGULATION=trimsk, _extra=ex ;
215               completecointerre, coinmonte=coinmontemask, coindescend=coindescendmask $
216                , indicezoom = indicezoommask, _extra = ex
217            ENDIF ELSE BEGIN
218               if keyword_set(forplt) then $
219                contour, -1*mask, xm, ym, levels=-0.5, /overplot, /fill ,c_color=c_cont $
220                , _extra=ex ELSE $
221                contour, -1*(mask*masknan), xm, ym, levels=-0.5, /overplot, /fill $
222                ,c_color=c_cont, _extra=ex ;
223            ENDELSE
224;
225
226; si il y a des points a nan et que le champ n''est pas sur la grille T
227; on trace en blanc les points a nan avant de dessiner les cotes avec
228; un trait.
229            if keyword_set(trinan) THEN BEGIN
230               contour, [-masknan[*], fltarr(more)],[xnan[*], fltarr(more)],[ynan[*], fltarr(more)],levels=-0.5,/overplot,/fill,c_color=c_cont $
231                , TRIANGULATION=trinan, _extra = ex
232               completecointerre, coinmonte=coinmontenan, coindescend=coindescendnan $
233                , indicezoom = indicezoomnan, _extra = ex
234               if keyword_set(desstrinan) then dessinetri, trinan, xnan, ynan, color = colortrinan
235            endif
236         endif
237;------------------------------------------------------------
238; IV) trace les cotes en trait de couleur c_cote
239;------------------------------------------------------------
240
241         if NOT keyword_set(cont_thick) then cont_thick = 1
242         IF chkstru(ex, 'C_THICK') THEN ex.C_THICK = cont_thick
243;
244         if n_elements(key_stride) LE 2 then key_stride = [1, 1, 1]
245         key_stride = 1l > long(key_stride)
246;
247         if (keyword_set(forplt) AND (!map.projection GT 0 OR key_irregular)) $
248          OR keyword_set(nan) then $
249          tracecote, CONT_THICK = cont_thick, _extra = ex $
250         ELSE tracemask, mask, xm, ym, CONT_THICK = cont_thick, _extra = ex
251;
252      endif
253   ENDIF
254;------------------------------------------------------------
255fini:
256   if keyword_set(desstrichamp) then dessinetri, trichamp, x, y, color = colortrichamp, thick = th_trichamp
257   if keyword_set(desstrimask) then dessinetri, trimsk, xm, ym, color = colortrimask, thick = th_trimask
258   IF keyword_set(key_performance) THEN print, 'temps pltbase', systime(1)-tempsun
259
260   return
261end
Note: See TracBrowser for help on using the repository browser.