From c234ac5cd387f97b6427fda869497791c25d55d2 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 12 Jun 2025 13:41:32 +0200 Subject: [PATCH] GUI: Show grid size for raster scan --- gui/src/aaregui/main_window.py | 1 + .../aaregui/panels/raster_data_collection.py | 60 ++++++++++++++++--- .../aaregui/scan_logic/raster_grid_manager.py | 5 ++ 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/gui/src/aaregui/main_window.py b/gui/src/aaregui/main_window.py index 4bcfbba4..b5cd9266 100644 --- a/gui/src/aaregui/main_window.py +++ b/gui/src/aaregui/main_window.py @@ -168,6 +168,7 @@ class MainWindow(QMainWindow): self.tell_samples.unmount.connect(self.daq.unmount) self.data_collection.raster.grid_size_updated.connect(self.raster.update_grid_size) + self.raster.grid_scan_size_changed.connect(self.data_collection.raster.grid_scan_size_change) self.status_bar.set_pgroup.connect(self.daq.set_pgroup) self.status_bar.end_session.connect(self.daq.end_session) self.status_bar.force_session.connect(self.daq.force_session) diff --git a/gui/src/aaregui/panels/raster_data_collection.py b/gui/src/aaregui/panels/raster_data_collection.py index 2d2fed55..8c08a5fc 100644 --- a/gui/src/aaregui/panels/raster_data_collection.py +++ b/gui/src/aaregui/panels/raster_data_collection.py @@ -1,4 +1,4 @@ -from PySide6.QtCore import Signal, Slot +from PySide6.QtCore import Signal, Slot, Qt from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSizePolicy, QSpacerItem from aaregui.widgets.number_line_edit import NumberLineEdit @@ -9,6 +9,11 @@ class RasterDataCollectionPanel(QWidget): def __init__(self, parent=None): super().__init__(parent) + self.__n_x = 0 + self.__n_y = 0 + self.__size_x = 20 + self.__size_y = 20 + grid_layout = QGridLayout(self) grid_layout.addWidget(QLabel("High resolution", parent=self), 0, 0) @@ -28,15 +33,15 @@ class RasterDataCollectionPanel(QWidget): ) grid_layout.addWidget(self.transmission_enter, 2, 1,1,3) - grid_layout.addWidget(QLabel("Grid size", parent=self), 3, 0) + grid_layout.addWidget(QLabel("Grid element size", parent=self), 3, 0) - self.width_enter = NumberLineEdit(5, 100, decimals=0, default=20, parent=self) + self.width_enter = NumberLineEdit(5, 100, decimals=0, default=self.__size_x, parent=self) self.width_enter.newValue.connect(self.grid_size) grid_layout.addWidget(self.width_enter, 3, 1) grid_layout.addWidget(QLabel(" x ", parent=self), 3, 2) - self.height_enter = NumberLineEdit(5, 100, decimals=0, default=20, parent=self) + self.height_enter = NumberLineEdit(5, 100, decimals=0, default=self.__size_y, parent=self) self.height_enter.newValue.connect(self.grid_size) grid_layout.addWidget(self.height_enter, 3, 3) @@ -49,13 +54,52 @@ class RasterDataCollectionPanel(QWidget): grid_layout.addWidget(self.image_time_enter, 4, 1, 1, 3) grid_layout.addWidget(QLabel("s", parent=self), 4, 4) + grid_layout.addWidget(QLabel("Grid elements", parent=self), 5, 0) + + self.n_x_label = QLabel("-", parent=self) + self.n_x_label.setAlignment(Qt.AlignmentFlag.AlignRight) + grid_layout.addWidget(self.n_x_label, 5, 1) + grid_layout.addWidget(QLabel(" x ", parent=self), 5, 2) + + self.n_y_label = QLabel("-", parent=self) + self.n_y_label.setAlignment(Qt.AlignmentFlag.AlignRight) + grid_layout.addWidget(self.n_y_label, 5, 3) + + grid_layout.addWidget(QLabel("Grid size", parent=self), 6, 0) + + self.size_x_label = QLabel("-", parent=self) + self.size_x_label.setAlignment(Qt.AlignmentFlag.AlignRight) + grid_layout.addWidget(self.size_x_label, 6, 1) + grid_layout.addWidget(QLabel(" x ", parent=self), 6, 2) + + self.size_y_label = QLabel("-", parent=self) + self.size_y_label.setAlignment(Qt.AlignmentFlag.AlignRight) + grid_layout.addWidget(self.size_y_label, 6, 3) + + grid_layout.addWidget(QLabel("μm", parent=self), 6, 4) + horizontal_spacer = QSpacerItem( 40, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding ) - grid_layout.addItem(horizontal_spacer, 5, 0, 1, 4) + grid_layout.addItem(horizontal_spacer, 7, 0, 1, 4) + self.update_grid_scan_size() @Slot(float) def grid_size(self, _: float): - width = self.width_enter.value / 1000.0 - height = self.height_enter.value / 1000.0 - self.grid_size_updated.emit(width, height) + self.__size_x = self.width_enter.value + self.__size_y = self.height_enter.value + self.grid_size_updated.emit(self.__size_x / 1000.0, + self.__size_y / 1000.0) + self.update_grid_scan_size() + + @Slot(int, int) + def grid_scan_size_change(self, n_x: int, n_y: int): + self.__n_x = n_x + self.__n_y = n_y + self.update_grid_scan_size() + + def update_grid_scan_size(self): + self.n_x_label.setText(str(self.__n_x)) + self.size_x_label.setText(f"{self.__size_x * self.__n_x:.1f}") + self.n_y_label.setText(str(self.__n_y)) + self.size_y_label.setText(f"{self.__size_y * self.__n_y:.1f}") \ No newline at end of file diff --git a/gui/src/aaregui/scan_logic/raster_grid_manager.py b/gui/src/aaregui/scan_logic/raster_grid_manager.py index ea334c67..6843d21f 100644 --- a/gui/src/aaregui/scan_logic/raster_grid_manager.py +++ b/gui/src/aaregui/scan_logic/raster_grid_manager.py @@ -59,6 +59,7 @@ def normalize_angle(angle_deg: float) -> float: class RasterGridManager(QObject): grid_updated = Signal() grid_scan = Signal(RasterGridRequest) + grid_scan_size_changed = Signal(int, int) def __init__(self, geom): super().__init__() @@ -120,6 +121,7 @@ class RasterGridManager(QObject): ) self.__active_grid.omega_deg = self.__geom.omega_deg + self.grid_scan_size_changed.emit(self.__active_grid.n_x, self.__active_grid.n_y) def move_active_grid(self, delta: QPointF): if not self._is_grid_visible(self.__active_grid): @@ -138,6 +140,7 @@ class RasterGridManager(QObject): def clear_active_grid(self): self.__active_grid.n_x = 0 self.__active_grid.n_y = 0 + self.grid_scan_size_changed.emit(self.__active_grid.n_x, self.__active_grid.n_y) def is_part_of_active_grid(self, point: QPointF) -> bool: if not self._is_grid_visible(self.__active_grid): @@ -163,6 +166,8 @@ class RasterGridManager(QObject): self.__active_grid.grid_size_mm = Coordinate(x=grid_size_mm_x, y=grid_size_mm_y) + self.grid_scan_size_changed.emit(self.__active_grid.n_x, self.__active_grid.n_y) + @Slot() def run_grid_scan(self): self.grid_scan.emit(self.__active_grid)