source: trunk/SRC/ToBeReviewed/PLOTS/DIVERS/placedessin.pro @ 134

Last change on this file since 134 was 134, checked in by navarro, 18 years ago

change *.pro file properties (del eof-style, del executable, set keywords Id

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 6.9 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 $
49                 , NOCOLORBAR = nocolorbar, NOFILL = nofill, COLOR_c = color_c $
50                 , CONTOUR = contour $
51                 , VECTEUR = vecteur, PORTRAIT = portrait, LANDSCAPE = landscape $
52                 , SMALL = small, MARGES = marges, MAP = map $
53                 , REMPLI = REMPLI, POST = post, WINDOW = window $
54                 , ENDPOINTS = endpoints, TYPE = type, BASICMARGES = basicmarges $
55                 , NOERASE = noerase, LCT = lct, DIREC = direc, CB_TITLE = cb_title, _extra = ex
56;---------------------------------------------------------
57; include common
58;
59  compile_opt idl2, strictarrsubs
60;
61@cm_4ps
62@cm_4mesh
63  IF NOT keyword_set(key_forgetold) THEN BEGIN
64@updatekwd
65  ENDIF
66;-------------------------------------------------------------
67; 1) determination de la taille des marges (unite=nbre de lignes ou colonnes)
68; a gauche, a droite, en bas, en haut
69; ATTENTION ds margebar le dernier element est le coint en haut a droite au
70; lieu de la marge en haut
71;-------------------------------------------------------------
72  if n_elements(typedessin) EQ 0 then typedessin = 'autre'
73  if keyword_set(basicmarges) then begin
74    marge = 1.*[6, 2, 4, 3]
75    if keyword_set(marges) THEN marge = marge+marges
76    margebar = 1.*[marge[0]+1, marge[1]+1,  marge[2]-8,  marge[2]-6]
77    if keyword_set(barmarges) then margebar = margebar+barmarges
78  ENDIF ELSE BEGIN
79    nocolorbar = keyword_set(nocolorbar) + keyword_set(nofill) + keyword_set(color_c) 
80    case typedessin of
81      'plt':marge = 1.*[6, 2, 4, 3]
82      'pltt':marge = 1.*[6+4*(type EQ 'xt'), 2, 4, 4]
83      'pltz':marge = 1.*[6, 2, 4, 3]
84      else:marge = 1.*[6, 2, 4, 3]
85    ENDCASE
86    if keyword_set(marges) THEN marge = marge+marges
87    if NOT keyword_set(barmarges) then barmarges = replicate(0, 4)
88    barmarges[3] = -barmarges[3]
89    margebar = 1.*[marge[0]+1, marge[1]+1, 2, 4]+barmarges
90    marge = marge+[0, 0, 4, 0]*keyword_set(cb_title)
91    IF keyword_set(direc) THEN $
92      marge = marge+[0, 0, 2, 0]*(strlowcase(direc) NE 't')
93    marge = marge+[0, 0, 2, 0]*keyword_set(contour)
94    marge = marge+[0, 0, 2, 0]*keyword_set(vecteur)
95    if n_elements(lon1) NE 0 and n_elements(lon2) NE 0 $
96      and n_elements(lat1) NE 0 and n_elements(lat2) NE 0 then begin
97      if keyword_set(type) then $
98        marge = marge+[0, 3*(type EQ 'yt' AND lon1 NE lon2), 0 $
99                       , 2*(type NE 'yt' AND lat1 NE lat2)]*keyword_set(endpoints) $
100      ELSE marge = marge+[0, 0, 0, 2*(lat1 NE lat2)]*keyword_set(endpoints)
101    endif
102    marge = marge+[0, 0, 2+margebar[3], 0]*(1-keyword_set(nocolorbar))
103  ENDELSE
104;--------------------------------------------------------------
105; portrair ou landscape
106;--------------------------------------------------------------
107  IF NOT keyword_set(noerase) THEN BEGIN
108    CASE 1 OF
109      n_elements(portrait) NE 0:key_portrait = portrait
110      n_elements(landscape) NE 0:key_portrait = 1-landscape
111      ELSE:
112    ENDCASE
113  ENDIF
114;--------------------------------------------------------------
115; Quel type de rapport d''aspect (sera ecrase si YXASPECT existe)
116;--------------------------------------------------------------
117  case typedessin of
118    'plt':yaspect = 1.*(lat2-lat1)/(lon2-lon1)
119    'pltt':yaspect = 1.
120    'pltz':yaspect = .5
121    ELSE:yaspect = 1.
122  endcase
123;-------------------------------------------------------------
124; 2) calcul de !p.position
125; cf calibre.pro.
126;------------------------------------------------------------
127;
128  IF NOT keyword_set(small) then small = [1, 1, 1]
129;
130  if keyword_set(map) then rempli = 1
131;
132  calibre, yaspect, marge, margebar, small, posfenetre, posbar, REMPLI = rempli, _extra = ex
133;
134  !p.position = posfenetre
135;------------------------------------------------------------
136; 3) ouverture de la fenetre graphique ou du postscript
137;------------------------------------------------------------
138  case 1 of
139; cas du premier dessin sur un postcript
140    keyword_set(post) AND !d.name ne 'PS':openps, _extra = ex
141; cas du premier dessin sur un ecran
142    keyword_set(post) EQ 0 AND keyword_set(noerase) EQ 0 $
143      AND !d.name ne 'PS' AND !d.name ne 'Z':BEGIN
144      if not keyword_set(window) then window = 0
145; pour l''utilisation de @ps, @oups et de @vzoom
146      if lmgr(/demo) EQ 0 then BEGIN ; on est en mode demo??
147        if !journal NE 0 then journal ; on ferme le journal s''il est ouvert
148        homedir = isadirectory(io = homedir, title = 'Bad definition of homedir')
149        def_myuniquetmpdir
150        journal, myuniquetmpdir+'idlsave.pro' ; on en ouvre un nouveau
151        help, /recall_commands, output = listecommande ; on recupere la derniere commande
152        listecommande = strmid(strcompress(listecommande[1]), 2)
153        journal, listecommande ; on l''ecrit dans le journal
154      ENDIF
155      windsize = givewindowsize()
156      window, window, xsize = windsize[0], ysize = windsize[1],  retain = 2, _extra = ex
157; qd on utilise des couleurs codees sur 24 bit, je n''arrive pas a stipuler la couleur du
158; fond d''une fenetre a l'aide de !p.background, je suis oblige de faire cette bidouille!!!
159;          if !d.n_colors gt 256 then begin
160;             device, decomposed=1
161;             !p.background='ffffff'x
162;             plot,[0],[0], /nodata, xstyle = 4, ystyle = 4
163;             device, decomposed=0
164;          endif
165    END
166    ELSE:
167  endcase
168;------------------------------------------------------------
169  if n_elements(lct) NE 0 then lct, lct, _extra = ex
170;------------------------------------------------------------
171
172  return
173end
Note: See TracBrowser for help on using the repository browser.