[timeline] improvements and use in tracks
This commit is contained in:
parent
df878ea95e
commit
336f9b0a4c
@ -58,6 +58,8 @@ class DetectionTimeline(QWidget):
|
||||
self._trackone = trackone_id
|
||||
self._tracktwo = tracktwo_id
|
||||
self._data = detectiondata
|
||||
self._rangeStart = 0.0
|
||||
self._rangeStop = 1.0
|
||||
self._width = 2000
|
||||
self._stepCount = 200
|
||||
self._bg_brush = QBrush(QColor(20, 20, 20, 255))
|
||||
@ -76,12 +78,13 @@ class DetectionTimeline(QWidget):
|
||||
font.setPointSize(15)
|
||||
font.setBold(False)
|
||||
|
||||
self._scene = QGraphicsScene(QRectF(0, 0, self._width, 50.))
|
||||
self._scene.setBackgroundBrush(self._bg_brush)
|
||||
|
||||
self._view = QGraphicsView()
|
||||
self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform);
|
||||
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio)
|
||||
self._scene = QGraphicsScene(QRectF(0, 0, self._width, 50.))
|
||||
self._scene.setBackgroundBrush(self._bg_brush)
|
||||
|
||||
t1_label = self._scene.addText("track 1", font)
|
||||
t1_label.setDefaultTextColor(self._t1_pen.color())
|
||||
@ -133,6 +136,14 @@ class DetectionTimeline(QWidget):
|
||||
if t2_coverage[i]: self._scene.addLine(pos[i], 17, pos[i], 32., pen=self._t2_pen)
|
||||
if other_coverage[i]: self._scene.addLine(pos[i], 34, pos[i], 49., pen=self._other_pen)
|
||||
|
||||
@property
|
||||
def rangeStart(self):
|
||||
return self._rangeStart
|
||||
|
||||
@property
|
||||
def rangeStop(self):
|
||||
return self._rangeStop
|
||||
|
||||
def fit_scene_to_view(self):
|
||||
"""Scale the image to fit the QGraphicsView."""
|
||||
self._view.fitInView(self._scene.sceneRect(), Qt.KeepAspectRatio)
|
||||
@ -147,9 +158,9 @@ class DetectionTimeline(QWidget):
|
||||
start_pos = x - w/2 + scene_width/2
|
||||
end_pos = x + w/2 + scene_width/2
|
||||
|
||||
range_start = np.round(start_pos / scene_width, 3)
|
||||
range_end = np.round(end_pos / scene_width, 3)
|
||||
self.signals.windowMoved.emit(range_start, range_end)
|
||||
self._rangeStart = np.round(start_pos / scene_width, 3)
|
||||
self._rangeStop = np.round(end_pos / scene_width, 3)
|
||||
self.signals.windowMoved.emit(self._rangeStart, self._rangeStop)
|
||||
|
||||
# TODO add method to change window size
|
||||
|
||||
|
@ -11,7 +11,7 @@ from PySide6.QtWidgets import QSpinBox, QSpacerItem, QFileDialog, QProgressBar,
|
||||
from fixtracks.utils.reader import PickleLoader
|
||||
from fixtracks.widgets.detectionview import DetectionView
|
||||
from fixtracks.widgets.timeline import Timeline
|
||||
|
||||
from fixtracks.widgets.detectiontimeline import DetectionTimeline
|
||||
|
||||
class PoseTableModel(QAbstractTableModel):
|
||||
column_header = ["frame", "track"]
|
||||
@ -108,8 +108,8 @@ class FixTracks(QWidget):
|
||||
self._progress_bar.setValue(0)
|
||||
self._tasklabel = QLabel()
|
||||
|
||||
self._timeline = Timeline()
|
||||
self._timeline.signals.changed.connect(self.on_windowChanged)
|
||||
self._timeline = DetectionTimeline()
|
||||
self._timeline.signals.windowMoved.connect(self.on_windowChanged)
|
||||
self._windowspinner = QSpinBox()
|
||||
self._windowspinner.setRange(100, 10000)
|
||||
self._windowspinner.setSingleStep(100)
|
||||
@ -208,8 +208,11 @@ class FixTracks(QWidget):
|
||||
|
||||
left_trackid = 1
|
||||
right_trackid = 2
|
||||
start_frame = self._timeline.sliderPosition - self._windowspinner.value() // 2
|
||||
stop_frame = self._timeline.sliderPosition + self._windowspinner.value() // 2
|
||||
max_frames = np.max(self._dataframe.frame.values)
|
||||
start = self._timeline.rangeStart
|
||||
stop = self._timeline._rangeStop
|
||||
start_frame = np.floor(start * max_frames)
|
||||
stop_frame = np.ceil(stop * max_frames)
|
||||
|
||||
df = self._dataframe[(self._dataframe.frame >= start_frame) & (self._dataframe.frame < stop_frame)]
|
||||
assigned_left = df[(df.track == left_trackid)]
|
||||
@ -235,7 +238,7 @@ class FixTracks(QWidget):
|
||||
self._progress_bar.setValue(0)
|
||||
if state and self._reader is not None:
|
||||
self._dataframe = self._reader.data
|
||||
self._timeline.setRange(np.max(self._dataframe.frame.values), self._windowspinner.value())
|
||||
self._timeline.setDetectionData(self._dataframe)
|
||||
self.populateTables()
|
||||
|
||||
def on_save(self):
|
||||
@ -251,8 +254,8 @@ class FixTracks(QWidget):
|
||||
def on_assignRight(self):
|
||||
pass
|
||||
|
||||
def on_windowChanged(self, value):
|
||||
logging.info("Timeline reports window change")
|
||||
def on_windowChanged(self, start, stop):
|
||||
logging.info("Timeline reports window change to range %f %f percent of data", start, stop)
|
||||
|
||||
self.populateTables()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user