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