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