source: trunk/SRC/ToBeReviewed/WIDGET/AUTOUR_de_XXX/xcreateanim.pro @ 114

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

new compilation options (compile_opt idl2, strictarrsubs) in each routine

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 7.8 KB
Line 
1pro xcreateanim_event, event
2;
3  compile_opt idl2, strictarrsubs
4;
5@common
6; on recupere les aguments contenus ds le widget
7  if tag_names(event, /structure_name) NE 'WIDGET_BUTTON' then return
8  widget_control, event.id, get_uvalue = uval
9  if n_elements(uval) EQ 0 then return
10  if uval EQ 'cancel' then begin
11    widget_control, event.top, /destroy
12    return
13  ENDIF
14; on va ecrire l''animation!
15;
16  widget_control, event.top, get_uvalue = local_uvalue
17  widget_control, local_uvalue.parent, get_uvalue = top_uvalue
18;
19  calendar = (*(extractatt(top_uvalue, 'fileparameters'))[local_uvalue.indexfile]).time_counter
20  key_caltype = (*(extractatt(top_uvalue, 'fileparameters'))[local_uvalue.indexfile]).caltype
21  fakecal = (*(extractatt(top_uvalue, 'fileparameters'))[local_uvalue.indexfile]).fakecal
22;
23  widget_control, widget_info(event.top, find_by_uname = 'Filename') $
24                  , get_value = nomfic & nomfic = nomfic[0]
25;
26  widget_control, widget_info(event.top, find_by_uname = 'directorie') $
27                  , get_value = animdir & animdir = animdir[0]
28;
29  widget_control, widget_info(event.top, find_by_uname = 'debut') $
30                  , get_value = vdate1
31  index1 = where(calendar eq date2jul(vdate1)) & index1 = index1[0]
32  if index1 EQ -1 then return
33;
34  widget_control, widget_info(event.handler, find_by_uname = 'fin') $
35                  , get_value = vdate2
36  index2 = where(calendar eq date2jul(vdate2)) & index2 = index2[0]
37  if index2 EQ -1 OR index2 LE index1 then return
38; on detruit le widget avant de creer le fichier .ps
39  widget_control, event.top, /destroy
40;
41; creation de la routine qui nous serviera pour faire le dessin
42;
43; on recupere la liste des instructions
44  globalcommand = extractatt(top_uvalue, 'globalcommand')
45; on complete par le premiere et les dernieres lignes du programme
46  createpro, globalcommand, filename = myuniquetmpdir + 'xxx2ps.pro' $
47             , KWDLIST = ', NOERASE = noerase, POSTSCRIPT = postscript, DATE1IN = date1in, DATE2IN = date2in'
48;
49;--------creation du fichier----------
50;
51;  recupere le nombre d'octets surlequel on code la palette
52  device, get_visual_depth = depth
53; taille de l''image (en nombre de pixel:
54  xsize = !d.x_size
55  ysize = !d.y_size
56;
57; on verifie que le nom du fichier termine bien par .gif
58  if strpos(nomfic, '.gif') EQ -1 then nomfic = nomfic+'.gif'
59
60  current_window = !d.window
61  window, /free, /pixmap, xsize = xsize, ysize = ysize
62
63
64; indication du numero de l''image que l''on est en train de creer
65  base = widget_base()
66  sliderid = widget_slider(base, minimum = 1, maximum = index2-index1+1, value = 1 $
67                           , title = 'image number: ')
68  widget_control, base, /realize
69;
70; commencement du fichier gif. ecriture d''une image vide
71  IF keyword_set(fakecal) THEN date = index1 ELSE date = jul2date(calendar[index1])
72  xxx2ps, /noerase, date1in = date, date2in = date
73;
74;
75  image = tvrd(true = depth GT 8)
76;- If an 8-bit image was read, reduce the number of colors
77  if depth le 8 then begin
78    tvlct, red, green, blue, /get
79    reduce_colors, image, index
80    red = red[index]
81    green = green[index]
82    blue = blue[index]
83  endif           
84;
85  if depth gt 8 then $
86;- Convert 24-bit image to 8-bit
87  image = color_quan(image, 1, red, green, blue, colors = 256, get_translation = translation, /map_all)
88;
89;
90  write_gif, animdir+nomfic, image, red, green, blue, /multiple
91  wdelete, !d.window
92;
93; boucle de creation et d''ecriture ds le fichier.
94;
95  IF index2 GT index1 THEN BEGIN
96    FOR ind = index1+1, index2 do BEGIN
97;
98      widget_control, sliderid, set_value = ind-index1+1 ; on bouge le slider
99;
100      window, /free, /pixmap, xsize = xsize, ysize = ysize
101      IF keyword_set(fakecal) THEN date = ind ELSE date = jul2date(calendar[ind])
102      xxx2ps, /noerase, date1 = date, date2 = date
103;     
104      image = tvrd(true = depth GT 8)
105;
106      if depth gt 8 then $
107        image = color_quan(image, 1, aaa, bbb, ccc, colors = 256, translation = translation) ;
108;
109      write_gif, animdir+nomfic, image, red, green, blue, /multiple
110      wdelete, !d.window
111    ENDFOR
112  ENDIF
113; on met une derniere image blanche
114  window, /free, /pixmap, xsize = xsize, ysize = ysize
115  reinitplt
116  plot,  [0],  [0], /nodata
117  image = tvrd(true = depth GT 8)
118;
119  if depth gt 8 then $
120    image = color_quan(image, 1, aaa, bbb, ccc, colors = 256, translation = translation) ;
121;
122  write_gif, animdir+nomfic, image, red, green, blue, /multiple
123  wdelete, !d.window
124; fermeture du fichier
125  write_gif, animdir+nomfic, /close
126  widget_control, base, /destroy
127; rebascule en mode "normal"
128  thisOS = strupcase(strmid(!version.os_family, 0, 3))
129;
130  wset, current_window
131
132; si on est sous x on essaie de lancer xanim...
133
134  if thisOS NE 'MAC' AND thisOS NE 'WIN' then begin
135    spawn, 'which xanim', result
136    if strpos(result[0], 'xanim') EQ strlen(result[0])-5 then spawn, 'xanim '+animdir+nomfic+' &'
137  endif
138;
139 
140  return
141end
142;----------------------------------------------------------------
143PRO xcreateanim, parent
144;
145  compile_opt idl2, strictarrsubs
146;
147@common
148;
149   widget_control, parent, get_uvalue = top_uvalue
150;
151; on va s''assurer que toutes les procedures de sont pas pltt
152;
153   procedures = extractatt(top_uvalue, 'nameprocedures')
154   if total(procedures EQ 'pltt') NE 0 then begin
155      nothing = report('Certains des plots ont un axe se rapportant au temps. !C Animation impossible!', /error)
156      return
157   ENDIF
158;
159; on va s''assurer que toutes les figures ont le meme calendrier
160;
161   filelist = extractatt(top_uvalue,  'filelist')
162   filenames = (extractatt(top_uvalue,  'varinfo'))[0, *]
163   filenames = reform(filenames)
164   filenames = filenames[uniq(filenames, sort(filenames))]
165   if strtrim(filenames[0], 1) EQ '' then filenames = filenames[1:n_elements(filenames)-1]
166   indexfile = (where(filelist EQ filenames[0]))[0]
167   calendar = (*(extractatt(top_uvalue, 'fileparameters'))[indexfile]).time_counter 
168   key_caltype = (*(extractatt(top_uvalue, 'fileparameters'))[indexfile]).caltype
169   fakecal = (*(extractatt(top_uvalue, 'fileparameters'))[indexfile]).fakecal
170   if n_elements(filenames) GT 1 then begin
171      for i = 1, n_elements(filenames)-1 do begin
172         indexfilebis = (where(filelist EQ filenames[i]))[0]
173         calendarbis = (*(extractatt(top_uvalue, 'fileparameters'))[indexfilebis]).time_counter
174         if n_elements(calendarbis) NE n_elements(calendar)  then begin
175            nothing = report('Les diffrents plots n''utilisent pas le meme calendrier. !C Animation impossible!', /error)
176            return
177         ENDIF
178         if total(calendar NE calendarbis) NE 0 then begin
179            nothing = report('Les diffrents plots n''utilisent pas le meme calendrier. !C Animation impossible!', /error)
180            return
181         endif
182      endfor
183   endif
184;
185; c''est possible de faire une animation 
186;
187   base = widget_base(/column, title = 'animation creation', uvalue = {parent:parent, indexfile:indexfile})   
188   rien = widget_label(base, value = 'animation name')
189   rien = widget_text(base,value='anim_idl.gif', uname='Filename', /editable)
190   rien = widget_label(base, value = 'animation directory')
191   if n_elements(animdir) EQ 0 then cd, current = animdir
192   rien = widget_text(base,value=animdir, uname='directorie', /editable)
193   rien = widget_label(base, value = 'starting date')
194   rien = cw_calendar(base, calendar, calendar[0] $
195                      , FAKECAL = fakecal, uname = 'debut', uvalue = {name:'calendar'}, /frame)
196   rien = widget_label(base, value = 'ending date')
197   rien = cw_calendar(base, calendar, calendar[n_elements(calendar)-1] $
198                      , FAKECAL = fakecal, uname = 'fin', uvalue = {name:'calendar'}, /frame)
199   rien = widget_button(base,value='OK', uvalue = 'ok')
200   rien = widget_button(base,value='Cancel', uvalue = 'cancel')
201;
202   widget_control,base,/realize
203   xmanager,'xcreateanim', base, /no_block
204   
205   return
206end
Note: See TracBrowser for help on using the repository browser.