start working with interpolation toggling

This commit is contained in:
q
2025-08-21 12:46:13 +03:00
parent a0f17d034d
commit 1c3926041b

View File

@@ -48,6 +48,8 @@ class Marker:
self.points = {} self.points = {}
self.points_interpolated = {} self.points_interpolated = {}
self.point_index = None self.point_index = None
self.points_interpolation_enabled = True
self.points_interpolation_required = False
self.message = None self.message = None
self.message_timer = time.time() self.message_timer = time.time()
@@ -254,7 +256,6 @@ class Marker:
for index in self.points: for index in self.points:
if index == self.point_index and self.point_click == 1: if index == self.point_index and self.point_click == 1:
continue continue
current = self.get_interpolated_point(index=index) current = self.get_interpolated_point(index=index)
if current["type"] in ("pre", "post"): if current["type"] in ("pre", "post"):
continue continue
@@ -313,10 +314,10 @@ class Marker:
cv2.polylines(frame, [history], False, COLOR_INTERP, 1) cv2.polylines(frame, [history], False, COLOR_INTERP, 1)
except KeyError: except KeyError:
print(current, self.nr) print(self.get_interpolated_point(), self.nr)
pass pass
except IndexError: except IndexError:
print(current, self.nr) print(self.get_interpolated_point(), self.nr)
pass pass
try: try:
current = self.get_point() current = self.get_point()
@@ -650,9 +651,12 @@ class World:
post: after any keyframes post: after any keyframes
""" """
if self.points_interpolation_enabled:
process = threading.Thread(target=self.interpolate_points_in_thread, args=(point_index,)) process = threading.Thread(target=self.interpolate_points_in_thread, args=(point_index,))
process.start() process.start()
def interpolate_points_in_thread(self, point_index=None): def interpolate_points_in_thread(self, point_index=None):
if point_index is None: if point_index is None:
@@ -670,6 +674,8 @@ class World:
if not point_index in self.points_interpolated: if not point_index in self.points_interpolated:
self.points_interpolated[point_index] = {key: {} for key in range(self.frames)} self.points_interpolated[point_index] = {key: {} for key in range(self.frames)}
# ~ self.points_interpolation_required = False
new_points = {k: v for k, v in self.points_interpolated[point_index].items()} new_points = {k: v for k, v in self.points_interpolated[point_index].items()}
if len(self.points[point_index]) == 1: # only one point added if len(self.points[point_index]) == 1: # only one point added
@@ -732,6 +738,12 @@ class World:
self.points_interpolated[point_index] = new_points self.points_interpolated[point_index] = new_points
def toggle_interpolation(self):
self.points_interpolation_enabled = not self.points_interpolation_enabled
if self.points_interpolation_enabled:
self.interpolate_points()
def draw_help(self, frame): def draw_help(self, frame):
bottom = 80 bottom = 80
@@ -832,6 +844,7 @@ class World:
o toggle object is visible/occluded/hidden o toggle object is visible/occluded/hidden
x toggle (delete) key frame x toggle (delete) key frame
r convert interpolated points to points (no undo!) r convert interpolated points to points (no undo!)
u toggle automatic interpolation
mouse left: set top-left corner of box mouse left: set top-left corner of box
mouse middle: set center of box mouse middle: set center of box
mouse right: set lower right corner of box mouse right: set lower right corner of box
@@ -1322,7 +1335,8 @@ class World:
self.track_point() self.track_point()
elif k & 0xFF == ord("e"): # point edit (width height) elif k & 0xFF == ord("e"): # point edit (width height)
self.modify_point_wh() self.modify_point_wh()
elif k & 0xFF == ord("u"): # toggle interpolation
self.toggle_interpolation()
elif k & 0xFF == ord("x"): # toggle ts elif k & 0xFF == ord("x"): # toggle ts
if self.point_click == 1: if self.point_click == 1:
self.toggle_point(self.nr) self.toggle_point(self.nr)