source: trunk/SRC/ToBeReviewed/TRIANGULATION/tracemask.pro @ 76

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

upgrade of TRIANGULATION 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: 6.1 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:tracemask
6;
7; PURPOSE:dessiner des contour d''un mask
8;
9; CATEGORY:plus simple que tracecote, car ne s''occuppe pas du type de
10; projection et de la periodicite de la grille
11;
12; CALLING SEQUENCE: tracemask, maskentree, xentree, yentree
13;
14; INPUTS:maskentree, xentree, yentree tableaux 2d specifiant le mask
15; et ses coordonees en longitude te latitude.
16;
17; KEYWORD PARAMETERS:
18;
19;        COAST_COLOR: the color of the coastline.
20;                     defaut value is 0 => black
21;
22;        COAST_THICK: l''epaisseur du trait pour tracer les
23;        continents. par defaut c''est 1.
24;
25; OUTPUTS: none
26;
27; COMMON BLOCKS:common.pro
28;
29; SIDE EFFECTS:
30;
31; RESTRICTIONS:
32;
33; EXAMPLE:
34;
35; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr)
36;
37;-
38;------------------------------------------------------------
39;------------------------------------------------------------
40;------------------------------------------------------------
41PRO tracemask, maskentree, xin, yin, COAST_COLOR = coast_color, COAST_THICK = coast_thick, OVERPLOT = overplot, _extra = ex
42;
43   if keyword_set(overplot) then return
44;---------------------------------------------------------
45@cm_general
46  IF NOT keyword_set(key_forgetold) THEN BEGIN
47@updatekwd
48  ENDIF
49;---------------------------------------------------------
50   tempsun = systime(1)         ; pour key_performance
51; on s''afranchit des problemes de bord:
52   tempdeux = systime(1)        ; pour key_performance =2
53   tailleentree = size(maskentree)
54   nx = tailleentree[1]+1
55   ny = tailleentree[2]+1
56; we check the input axis
57  IF n_elements(xin) EQ 0 THEN xentree = findgen(nx-1) ELSE xentree = xin
58  IF (size(xentree))[0] EQ 1 THEN xentree = xentree#replicate(1,ny-1)
59  IF n_elements(yin) EQ 0 THEN yentree = findgen(ny-1) ELSE yentree = yin
60  IF (size(yentree))[0] EQ 1 THEN yentree = replicate(1,nx-1)#yentree
61; on agrandi le mask de une colonne a gauche et de une colonne en bas
62   mask = intarr(tailleentree[1]+1, tailleentree[2]+1)
63   mask[1:tailleentree[1], 1:tailleentree[2]] = maskentree
64; les 2 premieres colonnes sont identiques
65   mask[0, 1:tailleentree[2]] = maskentree[0, *]
66; les 2 premieres lignes sont identiques
67   mask[1:tailleentree[1], 0] = maskentree[*, 0]
68; on calcul la position suivant x des points qui seviront a tracer le
69; masque. ils sont situes entre chaque points du masque, sauf pour la
70; derniere colonne que l''on ne peut pas calculer et que l''on met
71; donc a max(!x.range)
72   xrange = !x.range[sort(!x.range)] ; si reverse_x est utilise!
73   xentree = .5*(xentree+shift(xentree, -1, 0))
74   IF not keyword_set(overplot) THEN xentree[nx-2, *] = xrange[1] $
75   ELSE xentree[nx-2, *] = xentree[nx-3, *]
76; on seuil
77   xentree = xrange[0] > xentree < xrange[1]
78; on agrandit le tableau
79   xf = fltarr(nx, ny)
80   xf[1:nx-1, 1:ny-1] = xentree
81   IF not keyword_set(overplot) THEN xf[0, *] = xrange[0] $
82   ELSE xf[0, *] = xf[1, *]
83   xf[1:nx-1, 0] = xentree[*, 0]
84;
85   yinverse = yentree[0, 0] GT yentree[0, ny-2]
86   yrange = !y.range[sort(!y.range)]
87   yentree = .5*(yentree+shift(yentree, 0, -1))
88   IF not keyword_set(overplot) THEN BEGIN
89      if yinverse then yentree[*, ny-2] = yrange[0] ELSE yentree[*, ny-2] = yrange[1]
90   ENDIF ELSE yentree[*, ny-2] = yentree[*, ny-3]
91   yentree = yrange[0] > yentree < yrange[1]
92   yf = fltarr(nx, ny)
93   yf[1:nx-1, 1:ny-1] = yentree
94   yf[0, 1:ny-1] = yentree[0, *]
95   IF not keyword_set(overplot) THEN BEGIN
96      if yinverse then yf[*, 0] = yrange[1] ELSE yf[*, 0] = yrange[0]
97   ENDIF ELSE yentree[*, 0] = yentree[*, 1]
98;
99   IF testvar(var = key_performance) EQ 2 THEN $
100    print, 'temps tracemask: determination du mask et des ses coordonnes', systime(1)-tempdeux
101;
102; on trace les segments verticaux:
103;
104   tempdeux = systime(1)        ; pour key_performance =2
105   liste = where(mask+shift(mask, -1, 0) EQ 1)
106   IF liste[0] NE -1 THEN BEGIN
107; on recupere lx et ly qui sont les indices ds un tableau 2d des
108; points donnes par liste
109      ly = liste/nx & lx = temporary(liste)-nx*ly
110      indice = where(ly NE 0)   ; on ne prend pas les points concernant
111; la premiere ligne car ds ce cas le pt j-1 n''est pas definit
112      if indice[0] NE -1 then begin
113         lx = lx[indice] & ly = ly[temporary(indice)]
114         IF testvar(var = key_performance) EQ 2 THEN $
115          print, 'temps tracemask: liste traits verticaux', systime(1)-tempdeux
116         tempdeux = systime(1)  ; pour key_performance =2
117; boucle sur les points concernes et trace du segment
118; rq: on utilise plots au lieu de plot car plots est bcp plus rapide.
119         for pt = 0L, n_elements(lx)-1 do BEGIN
120            i = lx[pt] & j = ly[pt]
121            plots, [xf[i, j-1], xf[i, j]], [yf[i, j-1], yf[i, j]] $
122              , color = coast_color, thick = coast_thick, _extra = ex
123            if pt LT 5 then begin
124            endif
125         endfor
126         IF testvar(var = key_performance) EQ 2 THEN $
127          print, 'temps tracemask: trace traits verticaux', systime(1)-tempdeux
128      endif
129   ENDIF
130;
131; on trace les segments horizontaux:
132;
133   tempdeux = systime(1)        ; pour key_performance =2
134   liste = where(mask+shift(mask, 0, -1) EQ 1)
135   IF liste[0] NE -1 THEN BEGIN
136      ly = liste/nx & lx = temporary(liste)-nx*ly
137      indice = where(lx NE 0)   ; on ne prend pas les points de la  premiere colonne
138      if indice[0] EQ -1 then return
139      lx = lx[indice] & ly = ly[temporary(indice)]
140      IF testvar(var = key_performance) EQ 2 THEN $
141       print, 'temps tracemask: liste traits horizontaux', systime(1)-tempdeux
142      tempdeux = systime(1)     ; pour key_performance =2
143      for pt = 0L, n_elements(lx)-1 do BEGIN
144         i = lx[pt] & j = ly[pt]
145         plots, [xf[i-1, j], xf[i, j]], [yf[i-1, j], yf[i, j]] $
146           , color = coast_color, thick = coast_thick, _extra = ex
147      endfor
148      IF testvar(var = key_performance) EQ 2 THEN $
149       print, 'temps tracemask: trace traits horizontaux', systime(1)-tempdeux
150   endif
151;
152;
153   if keyword_set(key_performance) THEN print, 'temps tracemask', systime(1)-tempsun
154   
155   return
156end
157
158
159
160
161
Note: See TracBrowser for help on using the repository browser.