1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- """Create a simple Play/Pause app with a timer event
- You can interact with the scene during the loop!
- ..press q to quit"""
- import time
- import numpy as np
- from vedo import Plotter
- from vedo.pyplot import plot
- def bfunc(obj, ename):
- global timer_id
- plotter.timer_callback("destroy", timer_id)
- if "Play" in button.status():
- # instruct to call handle_timer() every 10 msec:
- timer_id = plotter.timer_callback("create", dt=10)
- button.switch()
- def handle_timer(event):
- t = time.time() - t0
- x = np.linspace(t, t + 4*np.pi, 50)
- y = np.sin(x) * np.sin(x/12)
- fig = plot(
- x, y, '-o', ylim=(-1.2, 1.2), aspect=3/1,
- xtitle="time window [s]", ytitle="intensity [a.u.]",
- )
- fig.shift(-x[0]) # put the whole plot object back at (0,0)
- # Pop (remove) the old plot and add the new one
- plotter.pop().add(fig).render()
- timer_id = -1
- t0 = time.time()
- plotter= Plotter(size=(1200,600))
- # plt.initialize_interactor() # on windows this is needed
- button = plotter.add_button(bfunc, states=[" Play ","Pause"], size=40)
- evntid = plotter.add_callback("timer", handle_timer, enable_picking=False)
- x = np.linspace(0, 4*np.pi, 50)
- y = np.sin(x) * np.sin(x/12)
- fig = plot(x, y, ylim=(-1.2, 1.2), xtitle="time", aspect=3/1, lc='grey5')
- plotter.show(__doc__, fig, zoom=2)
|