source: trunk/ToBeReviewed/PLOTS/DIVERS/placedessin.pro @ 69

Last change on this file since 69 was 69, checked in by smasson, 18 years ago

debug + new xxx

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