source: trunk/SRC/ToBeReviewed/TRIANGULATION/drawcoast_c.pro @ 134

Last change on this file since 134 was 134, checked in by navarro, 18 years ago

change *.pro file properties (del eof-style, del executable, set keywords Id

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.9 KB
Line 
1PRO drawcoast_c, mask, xf, yf, nx, ny, COAST_COLOR = coast_color, COAST_THICK = coast_thick, YSEUIL = yseuil, XSEUIL = xseuil, _extra = ex
2;---------------------------------------------------------
3;
4  compile_opt idl2, strictarrsubs
5;
6@cm_4mesh
7  IF NOT keyword_set(key_forgetold) THEN BEGIN
8@updatenew
9@updatekwd
10  ENDIF
11;---------------------------------------------------------
12   tempsun = systime(1)         ; pour key_performance
13;---------------------------------------------------------
14;
15; on trace les segments verticaux:
16;
17   if NOT keyword_set(yseuil) then yseuil = 5. < (min([nx, ny])-2)
18   distanceseuil = (!p.position[3]-!p.position[1])/yseuil
19; liste: liste des points i pourlesquels on va tracer un segment entre
20; le point i,j-1 et i,j
21   tempdeux = systime(1)        ; pour key_performance =2
22   liste = where((mask+shift(mask, -1, 0)) EQ 1 $
23                 AND ((xf-shift(xf, 0, 1))^2+(yf-shift(yf, 0, 1))^2) LE distanceseuil^2)
24   IF liste[0] NE -1 THEN BEGIN
25; on recupere lx et ly qui sont les indices ds un tableau 2d des
26; points donnes par liste
27      ly = liste/nx & lx = temporary(liste)-nx*ly
28      indice = where(ly NE 0)   ; on ne prend pas les points concernant
29      if indice[0] NE -1 then begin
30; la premiere ligne car ds ce cas le pt j-1 n''est pas definit
31         lx = lx[indice] & ly = ly[temporary(indice)]
32; boucle sur les points concernes et trace du segment
33; rq: on utilise plost au lieu de plot car plots est bcp plus rapide.
34         IF testvar(var = key_performance) EQ 2 THEN $
35          print, 'temps tracecote: determiner liste des points concernes par un trait vertical', systime(1)-tempdeux
36         tempdeux = systime(1)  ; pour key_performance =2
37         for pt = 0L, n_elements(lx)-1 do BEGIN
38            i = lx[pt] & j = ly[pt]
39            plots, [xf[i, j-1], xf[i, j]], [yf[i, j-1], yf[i, j]] $
40              , color = coast_color, thick = coast_thick, /normal, _extra = ex
41         endfor
42         IF testvar(var = key_performance) EQ 2 THEN $
43          print, 'temps tracecote: trace des traits verticaux', systime(1)-tempdeux
44      endif
45   ENDIF
46;
47; pour le trace des segments horizontaux, c''est la meme chose sauf
48; qu'il faut faire attention si on est periodique:
49;
50; si on est periodique on duplique la premiere colonne et on la met a
51; la fin. (ceci est fait non pas pour le shift qui est par defaut
52; periodique mais pour le plots
53   tempdeux = systime(1)        ; pour key_performance =2
54   if keyword_set(key_periodic) AND nx EQ jpi then begin
55      mask = [mask, mask[0, *]]
56      xf = [xf, xf[0, *]]
57      yf = [yf, yf[0, *]]
58      nx = nx+1
59   ENDIF
60   if NOT keyword_set(xseuil) then xseuil = 5. < (min([nx, ny])-2)
61   distanceseuil = (!p.position[2]-!p.position[0])/xseuil
62   liste = where((mask+shift(mask, 0, -1)) EQ 1 $
63                 AND ((xf-shift(xf, 1, 0))^2+(yf-shift(yf, 1, 0))^2) LE distanceseuil^2)
64   IF liste[0] NE -1 THEN BEGIN
65      ly = liste/nx & lx = temporary(liste)-nx*ly
66      indice = where(ly NE ny-1 AND lx NE 0)
67      if indice[0] NE -1 then begin
68; on ne prend pas les points de la
69; premiere colonne et de la derniere ligne (car on l''a rajoute artificiellement!))
70         lx = lx[indice] & ly = ly[temporary(indice)]
71         IF testvar(var = key_performance) EQ 2 THEN $
72          print, 'temps tracecote: determiner liste des points concernes par un trait horizontal', systime(1)-tempdeux
73         tempdeux = systime(1)  ; pour key_performance =2
74         for pt = 0L, n_elements(lx)-1 do BEGIN
75            i = lx[pt] & j = ly[pt]
76            plots, [xf[i-1, j], xf[i, j]], [yf[i-1, j], yf[i, j]] $
77              , color = coast_color, thick = coast_thick, /normal, _extra = ex
78         endfor
79         IF testvar(var = key_performance) EQ 2 THEN $
80          print, 'temps tracecote: trace des traits horizontaux', systime(1)-tempdeux
81      endif
82   endif
83;---------------------------------------------------------
84   if keyword_set(key_performance) THEN print, 'temps drawcoast_c', systime(1)-tempsun
85   return
86end
Note: See TracBrowser for help on using the repository browser.