Compare commits

...

2 Commits

Author SHA1 Message Date
23f96c214b Zoom & scroll profile chart 2023-01-28 17:51:10 +01:00
c62bbb8ef4 Fill chart series in python
QML doesn't have a method for replacing all points at once, which makes
it extremely slow when loading large profiles
2023-01-28 17:04:01 +01:00
2 changed files with 43 additions and 8 deletions

View File

@ -2,7 +2,8 @@ import enum
import csv
import time
from PySide6.QtCore import QObject, Signal, QTimer
from PySide6.QtCore import QObject, Signal, Slot, QTimer, QPointF
from PySide6.QtCharts import QLineSeries
class ProfileState(enum.Enum):
@ -50,6 +51,14 @@ class ProfileHandler(QObject):
self.profileChanged.emit(result)
return result
@Slot(QLineSeries)
def fill_series(self, series: QLineSeries):
points = []
for x, y in self._profile:
points.append(QPointF(x, y))
series.replace(points)
pass
def start(self):
assert self.state == ProfileState.STOPPED

View File

@ -29,21 +29,23 @@ ApplicationWindow {
}
function onProfileChanged(data) {
profileSeries.clear();
var last_x = 0;
for (var point of data) {
profileSeries.append(point[0], point[1]);
last_x = point[0];
}
axisX.max = last_x;
profile_handler.fill_series(profileSeries);
var x_max = data[data.length - 1][0];
axisX.max = x_max;
axisX.applyNiceNumbers();
profileView.zoomReset();
}
}
onProfileTimeChanged: {
var old_x = profileView.mapToPosition(currentTimeSeries.at(0)).x;
currentTimeSeries.clear()
currentTimeSeries.append(profileTime, 0)
currentTimeSeries.append(profileTime, 100)
var new_x = profileView.mapToPosition(currentTimeSeries.at(0)).x;
if (new_x > profileView.plotArea.width / 2) {
profileView.scrollRight(new_x - old_x);
}
}
onBmsErrorChanged: {
@ -68,6 +70,8 @@ ApplicationWindow {
}
}
ChartView {
id: profileView
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumWidth: 400
@ -102,6 +106,28 @@ ApplicationWindow {
visible: true
}
}
RowLayout {
Button {
text: "+"
onClicked: {
var r = Qt.rect(profileView.plotArea.x, profileView.plotArea.y, profileView.plotArea.width / 2, profileView.plotArea.height);
profileView.zoomIn(r);
}
}
Button {
text: "-"
onClicked: {
var r = Qt.rect(profileView.plotArea.x, profileView.plotArea.y, profileView.plotArea.width * 2, profileView.plotArea.height);
profileView.zoomIn(r);
}
}
Button {
text: "Reset zoom"
onClicked: {
profileView.zoomReset();
}
}
}
RowLayout {
Button {
objectName: "start_pause"