【IDL】使用WIDGET_TIMER进行动画控制

IDL中进行动画控制的方法有很多,如下所示的一组过程便可以实现直接图形法的动画控制,并提供了现成的用户界面。如图所示。

  • CW_ANIMATE – 创建复合组件用来显示和控制动画
  • CW_ANIMATE_GETP - 获取由CW_ANIMATE创建的窗口ID
  • CW_ANIMATE_LOAD – 加载图像到动画界面
  • CW_ANIMATE_RUN – 显示加载到动画界面的图片 

图:利用CW_ANIMATE实现动画显示

注:上面的示例代码可以查看IDL中的CW_ANIMATE帮助。

 

下面介绍另一种动画控制的方法,即WIDGET_TIMER。通过判断事件的“STRUCTURE_NAME”是否等于“WIDGET_TIMER”进行动画控制。这里有一个技巧,使用WIDGET_CONTROL将TopBase的TIMER属性设置为-1即可暂停动画事件。

直接贴代码,编译运行之后弹出界面,三个按钮分别进行“播放”、“暂停”和“停止”的操作。 

图:动画界面 

;+
; :DESCRIPTION:
;    Example for widget_timer
; :AUTHOR: duhj@geoscene.cn;
; :Date: 2013-4-27
;-
 
PRO TIMER_EXAMPLE_EVENT, ev
 
 WIDGET_CONTROL, ev.TOP, get_uvalue=s
  uname = WIDGET_INFO(ev.ID, /uname)
 
  ;动画间隔时间
  TIMER = 0.01
 
  ;通过WIDGET_TIMER进行动画
 IF (TAG_NAMES(ev, /STRUCTURE_NAME) EQ 'WIDGET_TIMER') THEN BEGIN 
   ;旋转
   s.ROTATE, 1
   ;动画速度
   WIDGET_CONTROL, ev.TOP, TIMER=TIMER   
 ENDIF
 
 CASE uname OF
   'play' : WIDGET_CONTROL, ev.TOP, TIMER=TIMER
   'pause' : WIDGET_CONTROL, ev.TOP, TIMER=-1  ;暂停动画时,设置TIMER=-1即可
   'stop': BEGIN
     WIDGET_CONTROL, ev.TOP, TIMER=-1
     s.ROTATE, /default   ;重置视图
   END
   ELSE:
 ENDCASE 
END
 
PRO TIMER_EXAMPLE
 
 COMPILE_OPT idl2
 
  ;构建界面
  base = WIDGET_BASE(/COLUMN, xoffset = 100, yoffset = 100)
 
  ;开始、暂停、停止三个按钮
  btnBase = WIDGET_BASE(base, /row, /align_center)
  b1 = WIDGET_BUTTON(btnBase, VALUE='Play', uname='play')
  b2 = WIDGET_BUTTON(btnBase, VALUE='Pause', uname='pause')
  b3 = WIDGET_BUTTON(btnBase, VALUE='Stop', uname='stop')
 
  ;创建绘图界面
  wDraw = WIDGET_WINDOW(base, xsize = 400, ysize = 400) 
 WIDGET_CONTROL, base, /REALIZE
 
  ;绘制曲面
  s = SURFACE(/test, /current) 
 WIDGET_CONTROL, base, set_uvalue = s 
 XMANAGER, 'timer_example', base, /NO_BLOCK
 
END
posted @   地理遥感生态网平台  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示