;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:placedessin ; ; PURPOSE: mise en place du dessin / ouverture de la fenetre ou du PS ; ; CATEGORY: pour alleger les programmes plt, pltz, pltt. ; ; CALLING SEQUENCE: placedessin, typedessin,posfenetre, posbar ; ; INPUTS: ; typedessin: une chaine de charactere specifiant quelle procedure ; appelle placedessin: 'plt', 'pltz', 'pltt' ; ; KEYWORD PARAMETERS: pleins (ce de CALIBRE de WINDOW ...) ; ; LCT: intier designant le numero de la palette de couleur que ; l''on veut utiliser pour les plot. ; ; OUTPUTS: ; ; posfenetre: un vecteur de 4 elements contenant la position de ; cadre contenant les legendes + le graphe en coordonnes ; normalises. Rq: pour positionner le dessin il faut apres ; l''appelle de calibre faire !p.position=posfenetre ; ; posbar: cf posfentre mais pour la barre de couleur. meme ; remarque pour positionner la barre de couleur, !p.position=posbar ; ; ; COMMON BLOCKS: ; common.pro ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr) ; 26/4/1999 ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ PRO placedessin, typedessin,posfenetre, posbar, BARMARGES = barmarges, NOCOLORBAR = nocolorbar, CONTOUR = contour $ , VECTEUR = vecteur, PORTRAIT = portrait, LANDSCAPE = landscape $ , YSURX = ysurx, PETITDESSIN = petitdessin, MARGES = marges, MAP = map $ , REMPLI = REMPLI, POST = post, WINDOW = window $ , ENDPOINTS = endpoints, TYPE = type, Basicmarges = basicmarges $ , NOERASE = noerase, LCT = lct, DIREC = direc, CB_TITLE = cb_title, _extra = ex @common ;------------------------------------------------------------- ; 1) determination de la taille des marges (unite=nbre de lignes ou colonnes) ; a gauche, a droite, en bas, en haut ; ATTENTION ds margebar le dernier element est le coint en haut a droite au ; lieu de la marge en haut ;------------------------------------------------------------- if n_elements(typedessin) EQ 0 then typedessin = 'autre' if keyword_set(basicmarges) then begin marge=1.*[6,2,4,3] margebar= replicate(0, 4) if keyword_set(marges) THEN marge = marge+marges ENDIF ELSE BEGIN if n_elements(ex) NE 0 then $ if (where(tag_names(ex) EQ 'NOCOULEUR'))[0] NE -1 then IF ex.NOCOULEUR EQ 1 THEN nocolorbar=1 case typedessin of 'plt':marge=1.*[6,2,4,3] 'pltt':marge=1.*[6+4*(type EQ 'xt'),2,4,4] 'pltz':marge=1.*[6,2,4,3] else:marge=1.*[6,2,4,3] ENDCASE if keyword_set(marges) THEN marge = marge+marges if NOT keyword_set(barmarges) then barmarges = replicate(0, 4) barmarges[3] = -barmarges[3] margebar=1.*[marge[0]+1,marge[1]+1,2,4]+barmarges marge=marge+[0,0,4,0]*keyword_set(cb_title) marge=marge+[0,0,2,0]*keyword_set(direc) marge=marge+[0,0,2,0]*keyword_set(contour) marge=marge+[0,0,2,0]*keyword_set(vecteur) if n_elements(lon1) NE 0 and n_elements(lon2) NE 0 $ and n_elements(lat1) NE 0 and n_elements(lat2) NE 0 then begin if keyword_set(type) then $ marge=marge+[0, 3*(type EQ 'yt' AND lon1 NE lon2),0 $ ,2*(type NE 'yt' AND lat1 NE lat2)]*keyword_set(endpoints) $ ELSE marge=marge+[0,0,0,2*(lat1 NE lat2)]*keyword_set(endpoints) endif marge=marge+[0,0,2+margebar[3],0]*(1-keyword_set(nocolorbar)) ENDELSE ;-------------------------------------------------------------- ; portrair ou landscape ;-------------------------------------------------------------- if n_elements(portrait) NE 0 then key_portrait=portrait $ else if key_portrait ne 1 then key_portrait=0 if n_elements(landscape) then key_portrait=1-landscape ;-------------------------------------------------------------- ; Quel type de rapport d''aspect (sera ecrase si YSURX existe) ;-------------------------------------------------------------- case typedessin of 'plt':yaspect=1.*(lat2-lat1)/(lon2-lon1) 'pltt':yaspect= 1. 'pltz':yaspect=.5 ELSE:yaspect= 1. endcase ;------------------------------------------------------------- ; 2) calcul de !p.position ; cf calibre.pro. ;------------------------------------------------------------ ; IF NOT keyword_set(petitdessin) then petitdessin = [1, 1, 1] ; if keyword_set(map) then rempli = 1 ; calibre,yaspect,marge,margebar,petitdessin,posfenetre, posbar,YSURX=ysurx,REMPLI=rempli, _extra = xe ; !p.position=posfenetre ;------------------------------------------------------------ ; 3) ouverture de la fenetre graphique ou du postscript ;------------------------------------------------------------ case 1 of ; cas du premier dessin sur un postcript keyword_set(post) AND !d.name ne 'PS':openps, _extra = ex ; cas du premier dessin sur un ecran keyword_set(post) EQ 0 AND keyword_set(noerase) EQ 0 $ AND !d.name ne 'PS' AND !d.name ne 'Z':BEGIN if not keyword_set(window) then window=0 ; pour l''utilisation de @ps, @oups et de @vzoom if lmgr(/demo) EQ 0 then BEGIN ; on est en mode demo?? if !journal NE 0 then journal ; on ferme le journal s''il est ouvert homedir = isadirectory(io = homedir, title = 'Bad definition of homedir') journal, homedir+'idlsave.pro' ; on en ouvre un nouveau help, /recall_commands, output = listecommande ; on recupere la derniere commande listecommande = strmid(strcompress(listecommande[1]), 2) printf, !journal, listecommande ; on l''ecrit dans le journal ENDIF windsize = givewindowsize() window, window, xsize = windsize[0], ysize = windsize[1], retain = 2, _extra = ex ; qd on utilise des couleurs codees sur 24 bit, je n''arrive pas a stipuler la couleur du ; fond d''une fenetre a l'aide de !p.background, je suis oblige de faire cette bidouille!!! ; if !d.n_colors gt 256 then begin ; device, decomposed=1 ; !p.background='ffffff'x ; plot,[0],[0], /nodata, xstyle = 4, ystyle = 4 ; device, decomposed=0 ; endif END ELSE: endcase ;------------------------------------------------------------ if n_elements(lct) NE 0 then lct, lct ;------------------------------------------------------------ return end