diff --git a/software/gui.py b/software/gui.py
index 784794e..4bbc24a 100644
--- a/software/gui.py
+++ b/software/gui.py
@@ -10,7 +10,7 @@ from dataclasses import dataclass
from PyQt6.QtCore import QProcess, QTimer
from PyQt6.QtCore import QObject, QThread, pyqtSignal
-
+from PyQt6.QtCore import Qt
import pyqtgraph as pg
from PyQt6.QtWidgets import QApplication, QMainWindow
@@ -574,9 +574,23 @@ class MainWindow(QMainWindow):
self.graph_widget.setLabel("bottom", "Sample")
self.graph_widget.showGrid(x=True, y=True)
- self.graph_curve = self.graph_widget.plot([])
+ self.graph_curve = self.graph_widget.plot(
+ [],
+ name="Data",
+ )
+
+ self.reference_curve = self.graph_widget.plot(
+ [],
+ name="Reference",
+ )
self.graph_layout.addWidget(self.graph_widget)
+ self.graph_curve = self.graph_widget.plot([], pen=pg.mkPen(width=2))
+ self.reference_curve = self.graph_widget.plot(
+ [], pen=pg.mkPen(style=Qt.PenStyle.DashLine))
+
+ self.checkbox_draw_reference.stateChanged.connect(
+ self.update_reference_graph)
def setup_network_settings(self):
self._bind_spinbox_setting(
@@ -655,8 +669,8 @@ class MainWindow(QMainWindow):
def on_data_received(self, data: list[int]):
self.data = data
- x = list(range(len(data)))
- self.graph_curve.setData(x, data)
+ self.draw_main_graph()
+ self.update_reference_graph()
if data:
self.set_measurement_status(
@@ -684,6 +698,54 @@ class MainWindow(QMainWindow):
if hasattr(self, "label_ping_status"):
self.label_ping_status.setText(text)
+ def draw_main_graph(self):
+ if not self.data:
+ self.graph_curve.setData([])
+ return
+
+ x = list(range(len(self.data)))
+ self.graph_curve.setData(x, self.data)
+
+ def update_reference_graph(self):
+ """
+ Рисует или очищает эталонный график.
+ Вызывается после получения данных и при переключении checkbox_draw_reference.
+ """
+
+ if not self.checkbox_draw_reference.isChecked():
+ self.reference_curve.setData([])
+ return
+
+ if not self.data:
+ self.reference_curve.setData([])
+ return
+
+ reference_data = self.build_reference_data(len(self.data))
+
+ if not reference_data:
+ self.reference_curve.setData([])
+ return
+
+ x = list(range(len(reference_data)))
+ self.reference_curve.setData(x, reference_data)
+
+ def build_reference_data(self, length: int) -> list[int]:
+ """
+ Тут потом опишешь свою логику построения эталонного сигнала.
+
+ Главное: вернуть массив такой же или нужной тебе длины.
+ Например:
+ reference = [0] * length
+ reference[10:100] = ...
+ return reference
+ """
+
+ # TODO: сюда вставить свою логику эталонного графика
+
+ reference = [0] * length
+
+ return reference
+
def main():
app = QApplication(sys.argv)
diff --git a/software/reflectometer.ui b/software/reflectometer.ui
index 59e8de5..654da3c 100644
--- a/software/reflectometer.ui
+++ b/software/reflectometer.ui
@@ -23,7 +23,7 @@
-
- 0
+ 1
@@ -409,6 +409,13 @@
+ -
+
+
+ Отрисовка эталона
+
+
+
-