[29] | 1 | PRO drawcoast_c, mask, xf, yf, nx, ny, COAST_COLOR = coast_color, COAST_THICK = coast_thick, YSEUIL = yseuil, XSEUIL = xseuil, _extra = ex |
---|
| 2 | ;--------------------------------------------------------- |
---|
[114] | 3 | ; |
---|
| 4 | compile_opt idl2, strictarrsubs |
---|
| 5 | ; |
---|
[29] | 6 | @cm_4mesh |
---|
| 7 | IF NOT keyword_set(key_forgetold) THEN BEGIN |
---|
| 8 | @updatenew |
---|
| 9 | @updatekwd |
---|
| 10 | ENDIF |
---|
| 11 | ;--------------------------------------------------------- |
---|
[2] | 12 | tempsun = systime(1) ; pour key_performance |
---|
| 13 | ;--------------------------------------------------------- |
---|
| 14 | ; |
---|
| 15 | ; on trace les segments verticaux: |
---|
| 16 | ; |
---|
[29] | 17 | if NOT keyword_set(yseuil) then yseuil = 5. < (min([nx, ny])-2) |
---|
| 18 | distanceseuil = (!p.position[3]-!p.position[1])/yseuil |
---|
[2] | 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 |
---|
[29] | 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) |
---|
[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 |
---|
[29] | 37 | for pt = 0L, n_elements(lx)-1 do BEGIN |
---|
[2] | 38 | i = lx[pt] & j = ly[pt] |
---|
| 39 | plots, [xf[i, j-1], xf[i, j]], [yf[i, j-1], yf[i, j]] $ |
---|
[29] | 40 | , color = coast_color, thick = coast_thick, /normal, _extra = ex |
---|
[2] | 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 |
---|
[29] | 54 | if keyword_set(key_periodic) AND nx EQ jpi then begin |
---|
[2] | 55 | mask = [mask, mask[0, *]] |
---|
| 56 | xf = [xf, xf[0, *]] |
---|
| 57 | yf = [yf, yf[0, *]] |
---|
| 58 | nx = nx+1 |
---|
| 59 | ENDIF |
---|
[29] | 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) |
---|
[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 |
---|
[29] | 74 | for pt = 0L, n_elements(lx)-1 do BEGIN |
---|
[2] | 75 | i = lx[pt] & j = ly[pt] |
---|
| 76 | plots, [xf[i-1, j], xf[i, j]], [yf[i-1, j], yf[i, j]] $ |
---|
[29] | 77 | , color = coast_color, thick = coast_thick, /normal, _extra = ex |
---|
[2] | 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 |
---|
| 86 | end |
---|