Skip to content

Commit c46880c

Browse files
committed
Add command to slow down move
1 parent 49adbd2 commit c46880c

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

src/py_eddy_tracker/appli.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from matplotlib import pyplot
2626
from netCDF4 import Dataset
2727
from matplotlib.collections import LineCollection
28+
from datetime import datetime
2829
from py_eddy_tracker.poly import create_vertice
2930
from py_eddy_tracker.generic import flatten_line_matrix
3031
from py_eddy_tracker import EddyParser
@@ -63,12 +64,13 @@ def merge_eddies():
6364

6465

6566
class Anim:
66-
def __init__(self, eddy, intern, **kwargs):
67+
def __init__(self, eddy, intern=False, sleep_event=0.1, **kwargs):
6768
self.eddy = eddy
6869
x_name, y_name = eddy.intern(intern)
6970
self.t, self.x, self.y = eddy.time, eddy[x_name], eddy[y_name]
7071
self.pause = False
7172
self.period = self.eddy.period
73+
self.sleep_event = sleep_event
7274
self.setup(**kwargs)
7375

7476
def setup(self, cmap="jet", nb_step=25):
@@ -99,13 +101,16 @@ def setup(self, cmap="jet", nb_step=25):
99101
zorder=10,
100102
bbox=dict(facecolor="w", alpha=0.85),
101103
)
104+
self.display_speed = self.ax.text(
105+
x_min + 0.02 * d_x, y_max - 0.04 * d_y, "", fontsize=10
106+
)
102107
self.contour = LineCollection([], zorder=1)
103108
self.ax.add_collection(self.contour)
104109

105110
self.fig.canvas.draw()
106111
self.fig.canvas.mpl_connect("key_press_event", self.keyboard)
107112

108-
def show(self, sleep_event=0.1, infinity_loop=False):
113+
def show(self, infinity_loop=False):
109114
pyplot.show(block=False)
110115
# save background for future bliting
111116
self.bg_cache = self.fig.canvas.copy_from_bbox(self.ax.bbox)
@@ -115,9 +120,17 @@ def show(self, sleep_event=0.1, infinity_loop=False):
115120
self.segs = list()
116121
self.now = t0
117122
while True:
123+
dt = self.sleep_event
118124
if not self.pause:
125+
d0 = datetime.now()
119126
self.next()
120-
self.fig.canvas.start_event_loop(sleep_event)
127+
dt_draw = (datetime.now() - d0).total_seconds()
128+
dt = self.sleep_event - dt_draw
129+
if dt < 0:
130+
self.sleep_event = dt_draw * 1.01
131+
dt = 1e-10
132+
self.fig.canvas.start_event_loop(dt)
133+
121134
if self.now > t1:
122135
break
123136
if infinity_loop:
@@ -149,8 +162,10 @@ def draw_contour(self):
149162
self.contour.set_paths(self.segs)
150163
self.contour.set_color(self.colors[-len(self.segs) :])
151164
self.txt.set_text(f"{t0} -> {self.now} -> {t1}")
165+
self.display_speed.set_text(f"{1/self.sleep_event:.0f} frame/s")
152166
self.ax.draw_artist(self.contour)
153167
self.ax.draw_artist(self.txt)
168+
self.ax.draw_artist(self.display_speed)
154169
# Remove first segment to keep only T contour
155170
if len(self.segs) > self.nb_step:
156171
self.segs.pop(0)
@@ -162,6 +177,10 @@ def keyboard(self, event):
162177
exit()
163178
elif event.key == " ":
164179
self.pause = not self.pause
180+
elif event.key == "+":
181+
self.sleep_event *= 0.9
182+
elif event.key == "-":
183+
self.sleep_event *= 1.1
165184
elif event.key == "right" and self.pause:
166185
self.next()
167186
elif event.key == "left" and self.pause:
@@ -172,7 +191,8 @@ def keyboard(self, event):
172191

173192
def anim():
174193
parser = EddyParser(
175-
"Anim eddy, keyboard shortcut : Escape => exit, SpaceBar => pause, left arrow => t - 1, right arrow => t + 1"
194+
"""Anim eddy, keyboard shortcut : Escape => exit, SpaceBar => pause,
195+
left arrow => t - 1, right arrow => t + 1, + => speed increase of 10 %, - => speed decrease of 10 %"""
176196
)
177197
parser.add_argument("filename", help="eddy atlas")
178198
parser.add_argument("id", help="Track id to anim", type=int)
@@ -195,8 +215,16 @@ def anim():
195215
"--infinity_loop", action="store_true", help="Press Escape key to stop loop"
196216
)
197217
args = parser.parse_args()
218+
variables = ["time", "track"]
219+
variables.extend(TrackEddiesObservations.intern(args.intern, public_label=True))
198220

199-
atlas = TrackEddiesObservations.load_file(args.filename)
221+
atlas = TrackEddiesObservations.load_file(args.filename, include_vars=variables)
200222
eddy = atlas.extract_ids([args.id])
201-
a = Anim(eddy, intern=args.intern, cmap=args.cmap, nb_step=args.keep_step)
202-
a.show(sleep_event=args.time_sleep, infinity_loop=args.infinity_loop)
223+
a = Anim(
224+
eddy,
225+
intern=args.intern,
226+
sleep_event=args.time_sleep,
227+
cmap=args.cmap,
228+
nb_step=args.keep_step,
229+
)
230+
a.show(infinity_loop=args.infinity_loop)

0 commit comments

Comments
 (0)