source: trunk/PLOTS/DIVERS/placedessin.pro @ 2

Last change on this file since 2 was 2, checked in by opalod, 22 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 6.6 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:placedessin
6;
7; PURPOSE: mise en place du dessin / ouverture de la fenetre ou du PS
8;
9; CATEGORY: pour alleger les programmes plt, pltz, pltt.
10;
11; CALLING SEQUENCE: placedessin, typedessin,posfenetre, posbar
12;
13; INPUTS:
14;   typedessin: une chaine de charactere specifiant quelle procedure
15;   appelle placedessin: 'plt', 'pltz', 'pltt'
16;
17; KEYWORD PARAMETERS: pleins (ce de CALIBRE de WINDOW ...)
18;
19;       LCT: intier designant le numero de la palette de couleur que
20;       l''on veut utiliser pour les plot.
21;       
22; OUTPUTS:
23;
24;       posfenetre: un vecteur de 4 elements contenant la position de
25;       cadre contenant les legendes + le graphe en coordonnes
26;       normalises. Rq: pour positionner le dessin il faut apres
27;       l''appelle de calibre faire !p.position=posfenetre
28;
29;       posbar: cf posfentre mais pour la barre de couleur. meme
30;       remarque pour positionner la barre de couleur, !p.position=posbar
31;
32;
33; COMMON BLOCKS:
34;       common.pro
35;
36; SIDE EFFECTS:
37;
38; RESTRICTIONS:
39;
40; EXAMPLE:
41;
42; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr)
43;                       26/4/1999
44;-
45;------------------------------------------------------------
46;------------------------------------------------------------
47;------------------------------------------------------------
48PRO placedessin, typedessin,posfenetre, posbar, BARMARGES = barmarges, NOCOLORBAR = nocolorbar, CONTOUR = contour $
49                 , VECTEUR = vecteur, PORTRAIT = portrait, LANDSCAPE = landscape $
50                 , YSURX = ysurx, PETITDESSIN = petitdessin, MARGES = marges, MAP = map $
51                 , REMPLI = REMPLI, POST = post, WINDOW = window $
52                 , ENDPOINTS = endpoints, TYPE = type, Basicmarges = basicmarges $
53                 , NOERASE = noerase, LCT = lct, DIREC = direc, CB_TITLE = cb_title, _extra = ex
54@common
55;-------------------------------------------------------------
56; 1) determination de la taille des marges (unite=nbre de lignes ou colonnes)
57; a gauche, a droite, en bas, en haut
58; ATTENTION ds margebar le dernier element est le coint en haut a droite au
59; lieu de la marge en haut
60;-------------------------------------------------------------
61   if n_elements(typedessin) EQ 0 then typedessin = 'autre'
62   if keyword_set(basicmarges) then begin
63      marge=1.*[6,2,4,3]
64      margebar= replicate(0, 4)
65      if keyword_set(marges) THEN marge = marge+marges
66   ENDIF ELSE BEGIN
67      if n_elements(ex)  NE 0 then $
68       if (where(tag_names(ex) EQ 'NOCOULEUR'))[0] NE -1 then IF ex.NOCOULEUR EQ 1 THEN nocolorbar=1
69      case typedessin of
70         'plt':marge=1.*[6,2,4,3]
71         'pltt':marge=1.*[6+4*(type EQ 'xt'),2,4,4]
72         'pltz':marge=1.*[6,2,4,3]
73         else:marge=1.*[6,2,4,3]
74      ENDCASE
75      if keyword_set(marges) THEN marge = marge+marges
76      if NOT keyword_set(barmarges) then barmarges = replicate(0, 4)
77      barmarges[3] = -barmarges[3]
78      margebar=1.*[marge[0]+1,marge[1]+1,2,4]+barmarges
79      marge=marge+[0,0,4,0]*keyword_set(cb_title)
80      marge=marge+[0,0,2,0]*keyword_set(direc)
81      marge=marge+[0,0,2,0]*keyword_set(contour)
82      marge=marge+[0,0,2,0]*keyword_set(vecteur)
83      if n_elements(lon1) NE 0 and n_elements(lon2) NE 0 $
84       and n_elements(lat1) NE 0 and n_elements(lat2) NE 0 then begin
85         if keyword_set(type) then $
86          marge=marge+[0, 3*(type EQ 'yt' AND lon1 NE lon2),0 $
87                       ,2*(type NE 'yt' AND lat1 NE lat2)]*keyword_set(endpoints) $
88         ELSE marge=marge+[0,0,0,2*(lat1 NE lat2)]*keyword_set(endpoints)
89      endif
90      marge=marge+[0,0,2+margebar[3],0]*(1-keyword_set(nocolorbar))
91   ENDELSE
92;--------------------------------------------------------------
93; portrair ou landscape
94;--------------------------------------------------------------
95   if n_elements(portrait) NE 0 then key_portrait=portrait $
96   else if key_portrait ne 1 then key_portrait=0
97   if n_elements(landscape) then key_portrait=1-landscape
98;--------------------------------------------------------------
99; Quel type de rapport d''aspect (sera ecrase si YSURX existe)
100;--------------------------------------------------------------
101   case typedessin of
102      'plt':yaspect=1.*(lat2-lat1)/(lon2-lon1)
103      'pltt':yaspect= 1.
104      'pltz':yaspect=.5
105      ELSE:yaspect= 1.
106   endcase
107;-------------------------------------------------------------
108; 2) calcul de !p.position
109; cf calibre.pro.
110;------------------------------------------------------------
111;
112   IF NOT keyword_set(petitdessin) then petitdessin = [1, 1, 1]
113;
114   if keyword_set(map) then rempli = 1
115;
116   calibre,yaspect,marge,margebar,petitdessin,posfenetre, posbar,YSURX=ysurx,REMPLI=rempli, _extra = xe
117;
118   !p.position=posfenetre
119;------------------------------------------------------------
120; 3) ouverture de la fenetre graphique ou du postscript
121;------------------------------------------------------------
122   case 1 of
123; cas du premier dessin sur un postcript
124      keyword_set(post) AND !d.name ne 'PS':openps, _extra = ex
125; cas du premier dessin sur un ecran
126      keyword_set(post) EQ 0 AND keyword_set(noerase) EQ 0 $
127       AND !d.name ne 'PS' AND !d.name ne 'Z':BEGIN
128         if not keyword_set(window) then window=0
129; pour l''utilisation de @ps, @oups et de @vzoom
130         if lmgr(/demo) EQ 0 then BEGIN ; on est en mode demo??
131            if !journal NE 0 then journal ; on ferme le journal s''il est ouvert
132            homedir = isadirectory(io = homedir, title = 'Bad definition of homedir')
133            journal, homedir+'idlsave.pro' ; on en ouvre un nouveau
134            help, /recall_commands, output = listecommande ; on recupere la derniere commande
135            listecommande = strmid(strcompress(listecommande[1]), 2)
136            printf, !journal, listecommande ; on l''ecrit dans le journal
137         ENDIF
138         windsize = givewindowsize()
139         window, window, xsize = windsize[0], ysize = windsize[1],  retain = 2, _extra = ex
140; qd on utilise des couleurs codees sur 24 bit, je n''arrive pas a stipuler la couleur du
141; fond d''une fenetre a l'aide de !p.background, je suis oblige de faire cette bidouille!!!
142;          if !d.n_colors gt 256 then begin
143;             device, decomposed=1
144;             !p.background='ffffff'x
145;             plot,[0],[0], /nodata, xstyle = 4, ystyle = 4
146;             device, decomposed=0
147;          endif
148      END
149      ELSE:
150   endcase
151;------------------------------------------------------------
152   if n_elements(lct) NE 0 then lct, lct
153;------------------------------------------------------------
154
155   return
156end
Note: See TracBrowser for help on using the repository browser.