;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:tracecote ; ; PURPOSE: dessine les cotes ds plt ; ; CATEGORY: pour faire un joli dessin ; ; CALLING SEQUENCE:tracecote,mask ; ; INPUTS:mask le tableau mask sur la zone consideree pour le dessin ; ; KEYWORD PARAMETERS: ; ; COAST_COLOR: the color of the coastline. ; defaut value is 0 => black ; ; COAST_THICK: l''epaisseur du trait pour tracer les ; continents. par defaut c''est 1. ; ; /SURFACE_COASTLINE: to draw the furface coast line instead of ; the coast line at level firstz[tw]. Usefull only for deep ; plots! ; ; XSEUIL: pour eliminer les segments de cote qui sont trop ; grand (qui relient des points qui peuvent etre tres proches ; sur la sphere mais tres eloignes sur le dessin) on supprime ; tous les egments dot la taille depasse: ; taille de la fenetre suivant X/ xseuil. ; Par defaut xseuil est egale a 5. masi peut etre trop grand si ; on fait un fort zoom ou trout petit pour certaines ; projections... le specifier alors a l''aide de ce mot cle! ; ; YSEUIL: cf. xseuil ; ; OUTPUTS: rien ; ; COMMON BLOCKS:common.pro ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr) ; 30/9/1999 ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ PRO tracecote, SURFACE_COASTLINE = surface_coastline, _EXTRA = ex ;-------------------------------------------------------------- ; include commons @cm_4data @cm_4mesh IF NOT keyword_set(key_forgetold) THEN BEGIN @updatenew ENDIF ;-------------------------------------------------------------- tempsun = systime(1) ; pour key_performance if n_elements(key_gridtype) EQ 0 then key_gridtype = 'c' ; ; on agrandi un peu le cadre definit par les premier..., dernier... de ; facon a bien recuperer les bords de cote qui sont en bordure du ; domaine a tracer ; tempdeux = systime(1) ; pour key_performance =2 firstx = 0 > (min([firstxt, firstxf])-1) lastx = (max([lastxt, lastxf])+1) < (jpi-1) firsty = 0 > (min([firstyt, firstyf])-1) lasty = (max([lastyt, lastyf])+1) < (jpj-1) nx = lastx-firstx+1 ny = lasty-firsty+1 ; quel niveau vertical choisir ? IF keyword_set(surface_coastline) THEN firstz = 0 ELSE $ IF strupcase(vargrid) eq 'W' THEN firstz = firstzw ELSE firstz = firstzt ; attribution du masque et des coordonnes delimitant les limites de la ; terre (coordonnees f) mask = tmask[firstx:lastx, firsty:lasty, firstz] xf = glamf[firstx:lastx, firsty:lasty] yf = gphif[firstx:lastx, firsty:lasty] ; IF testvar(var = key_performance) EQ 2 THEN $ print, 'temps tracecote: determiner mask xf yf', systime(1)-tempdeux ; if key_gridtype EQ 'e' then onemore = xf[0, 0] gT xf[0, 1] ; on passe en coordonnee normaliser pour pouvoir s'affranchir du type ; de projection choisie et du suport surlequel on fait le dessin ; (ecran ou postscript) z = convert_coord(xf(*),yf(*),/data,/to_normal) xf = reform(z[0, *], nx, ny) yf = reform(z[1, *], nx, ny) tempvar = SIZE(TEMPORARY(z)) ; ; attention, suivant la projection certains points x ou y peuvent ; devenir NaN (cf. points deriere la terre ds une projection ; orthographique) ; ; on met les points a eliminer a une tres gande valeur comme ca il ne ; passerons pas le test avec distanceseuil (cf. plus bas) ; if (!map.projection LE 7 AND !map.projection NE 0) $ OR !map.projection EQ 14 OR !map.projection EQ 15 OR !map.projection EQ 18 then begin ind = where(finite(xf*yf) EQ 0) IF ind[0] NE -1 THEN BEGIN xf[ind] = 1e5 yf[ind] = 1e5 ENDIF ENDIF ind = where(xf LT !p.position[0] OR xf GT !p.position[2]) IF ind[0] NE -1 THEN xf[ind] = 1e5 ind = where(yf LT !p.position[1] OR yf GT !p.position[3]) IF ind[0] NE -1 THEN yf[ind] = 1e5 tempvar = SIZE(TEMPORARY(ind)) ; on efface ind ; if n_elements(key_gridtype) EQ 0 then key_gridtype = 'c' case key_gridtype of 'c':drawcoast_c, mask, xf, yf, nx, ny, _extra = ex 'e':drawcoast_e, mask, xf, yf, nx, ny, onemore = onemore, _extra = ex endcase if keyword_set(key_performance) THEN print, 'temps tracecote', systime(1)-tempsun return end