mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 03:31:50 +02:00
feat: total number of points, scatter size and number of point to dim after last position can be changed from GUI
This commit is contained in:
@ -7,13 +7,13 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1129</width>
|
<width>1129</width>
|
||||||
<height>542</height>
|
<height>550</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Motor Controller</string>
|
<string>Motor Controller</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="6,4,6">
|
<layout class="QHBoxLayout" name="horizontalLayout" stretch="8,5,8">
|
||||||
<item>
|
<item>
|
||||||
<widget class="GraphicsLayoutWidget" name="glw">
|
<widget class="GraphicsLayoutWidget" name="glw">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
@ -190,7 +190,17 @@
|
|||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="2">
|
<item row="2" column="2">
|
||||||
<widget class="QDoubleSpinBox" name="spinBox_step"/>
|
<widget class="QDoubleSpinBox" name="spinBox_step">
|
||||||
|
<property name="minimum">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<double>1.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
@ -246,10 +256,30 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QDoubleSpinBox" name="spinBox_absolute_x"/>
|
<widget class="QDoubleSpinBox" name="spinBox_absolute_x">
|
||||||
|
<property name="minimum">
|
||||||
|
<double>-500.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>500.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
<item row="1" column="2">
|
||||||
<widget class="QDoubleSpinBox" name="spinBox_absolute_y"/>
|
<widget class="QDoubleSpinBox" name="spinBox_absolute_y">
|
||||||
|
<property name="minimum">
|
||||||
|
<double>-500.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>500.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
@ -272,7 +302,7 @@
|
|||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tab_coordinates">
|
<widget class="QWidget" name="tab_coordinates">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
@ -447,50 +477,6 @@
|
|||||||
<string>Motor Config</string>
|
<string>Motor Config</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_5">
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
<item row="2" column="2">
|
|
||||||
<widget class="QSpinBox" name="spinBox_update_frequency_y">
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>500</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Update Frequency</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Tolerance</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
|
||||||
<widget class="QLabel" name="label_10">
|
|
||||||
<property name="text">
|
|
||||||
<string>Y</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Speed</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QSpinBox" name="spinBox_3">
|
<widget class="QSpinBox" name="spinBox_3">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
@ -501,46 +487,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_4">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Decimal Precision</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QDoubleSpinBox" name="doubleSpinBox">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QSpinBox" name="spinBox_speed_y">
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>1000</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="label_9">
|
|
||||||
<property name="text">
|
|
||||||
<string>X</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="2">
|
<item row="3" column="2">
|
||||||
<widget class="QSpinBox" name="spinBox_6">
|
<widget class="QSpinBox" name="spinBox_6">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
@ -551,16 +497,23 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="2">
|
<item row="0" column="1">
|
||||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_2">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="enabled">
|
<property name="text">
|
||||||
<bool>false</bool>
|
<string>X</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Speed</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QSpinBox" name="spinBox_speed_x">
|
<widget class="QSpinBox" name="spinBox_speed_x">
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
@ -581,6 +534,99 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QSpinBox" name="spinBox_speed_y">
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>1000</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="text">
|
||||||
|
<string>Y</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_15">
|
||||||
|
<property name="text">
|
||||||
|
<string>Max Points</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1" colspan="2">
|
||||||
|
<widget class="QSpinBox" name="spinBox_num_dim_points">
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>1000</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Update Frequency</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QDoubleSpinBox" name="doubleSpinBox_2">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Tolerance</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="doubleSpinBox">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QSpinBox" name="spinBox_update_frequency_y">
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>500</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QPushButton" name="pushButton_update_config">
|
<widget class="QPushButton" name="pushButton_update_config">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -588,6 +634,65 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Decimal Precision</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="label_16">
|
||||||
|
<property name="text">
|
||||||
|
<string>N dim</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1" colspan="2">
|
||||||
|
<widget class="QSpinBox" name="spinBox_max_points">
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>10000</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>5000</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0">
|
||||||
|
<widget class="QLabel" name="label_11">
|
||||||
|
<property name="text">
|
||||||
|
<string>Scatter Size</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="1" colspan="2">
|
||||||
|
<widget class="QSpinBox" name="spinBox_scatter_size">
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>15</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -44,6 +44,7 @@ class MotorApp(QWidget):
|
|||||||
self.motor_positions = np.array([])
|
self.motor_positions = np.array([])
|
||||||
self.max_points = 5000 # Maximum number of points to keep
|
self.max_points = 5000 # Maximum number of points to keep
|
||||||
self.num_dim_points = 15 # Number of points to dim gradually
|
self.num_dim_points = 15 # Number of points to dim gradually
|
||||||
|
self.scatter_size = 5
|
||||||
|
|
||||||
# QThread for motor movement + signals
|
# QThread for motor movement + signals
|
||||||
self.motor_thread.motors_loaded.connect(self.get_available_motors)
|
self.motor_thread.motors_loaded.connect(self.get_available_motors)
|
||||||
@ -144,6 +145,18 @@ class MotorApp(QWidget):
|
|||||||
self.enable_motor_controls(False)
|
self.enable_motor_controls(False)
|
||||||
self.motor_thread.move_relative(motor, value)
|
self.motor_thread.move_relative(motor, value)
|
||||||
|
|
||||||
|
def update_plot_setting(self, max_points, num_dim_points, scatter_size):
|
||||||
|
self.max_points = max_points
|
||||||
|
self.num_dim_points = num_dim_points
|
||||||
|
self.scatter_size = scatter_size
|
||||||
|
|
||||||
|
for spinBox in (
|
||||||
|
self.spinBox_max_points,
|
||||||
|
self.spinBox_num_dim_points,
|
||||||
|
self.spinBox_scatter_size,
|
||||||
|
):
|
||||||
|
spinBox.setStyleSheet("")
|
||||||
|
|
||||||
def init_ui(self) -> None:
|
def init_ui(self) -> None:
|
||||||
"""Setup all ui elements"""
|
"""Setup all ui elements"""
|
||||||
# TODO can be separated to multiple functions
|
# TODO can be separated to multiple functions
|
||||||
@ -157,7 +170,7 @@ class MotorApp(QWidget):
|
|||||||
self.limit_map = pg.ImageItem()
|
self.limit_map = pg.ImageItem()
|
||||||
self.plot_map.addItem(self.limit_map)
|
self.plot_map.addItem(self.limit_map)
|
||||||
self.motor_map = pg.ScatterPlotItem(
|
self.motor_map = pg.ScatterPlotItem(
|
||||||
size=2, pen=pg.mkPen(None), brush=pg.mkBrush(255, 255, 255, 255)
|
size=self.scatter_size, pen=pg.mkPen(None), brush=pg.mkBrush(255, 255, 255, 255)
|
||||||
)
|
)
|
||||||
self.plot_map.addItem(self.motor_map)
|
self.plot_map.addItem(self.motor_map)
|
||||||
self.plot_map.showGrid(x=True, y=True)
|
self.plot_map.showGrid(x=True, y=True)
|
||||||
@ -206,7 +219,7 @@ class MotorApp(QWidget):
|
|||||||
self.pushButton_stop.clicked.connect(self.motor_thread.stop_movement)
|
self.pushButton_stop.clicked.connect(self.motor_thread.stop_movement)
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
# Motor limits signals
|
# Motor Configs
|
||||||
##########################
|
##########################
|
||||||
|
|
||||||
# SpinBoxes - Motor Limits #TODO make spinboxes own limits updated, currently is [-1000, 1000]
|
# SpinBoxes - Motor Limits #TODO make spinboxes own limits updated, currently is [-1000, 1000]
|
||||||
@ -229,7 +242,18 @@ class MotorApp(QWidget):
|
|||||||
lambda: self.param_changed(self.spinBox_update_frequency_y)
|
lambda: self.param_changed(self.spinBox_update_frequency_y)
|
||||||
)
|
)
|
||||||
|
|
||||||
# Confog updates
|
# SpinBoxes - Max Points and N Dim Points
|
||||||
|
self.spinBox_max_points.valueChanged.connect(
|
||||||
|
lambda: self.param_changed(self.spinBox_max_points)
|
||||||
|
)
|
||||||
|
self.spinBox_num_dim_points.valueChanged.connect(
|
||||||
|
lambda: self.param_changed(self.spinBox_num_dim_points)
|
||||||
|
)
|
||||||
|
self.spinBox_scatter_size.valueChanged.connect(
|
||||||
|
lambda: self.param_changed(self.spinBox_scatter_size)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Config updates
|
||||||
self.pushButton_updateLimits.clicked.connect(
|
self.pushButton_updateLimits.clicked.connect(
|
||||||
lambda: self.update_all_motor_limits(
|
lambda: self.update_all_motor_limits(
|
||||||
x_limit=[self.spinBox_x_min.value(), self.spinBox_x_max.value()],
|
x_limit=[self.spinBox_x_min.value(), self.spinBox_x_max.value()],
|
||||||
@ -237,6 +261,14 @@ class MotorApp(QWidget):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.pushButton_update_config.clicked.connect(
|
||||||
|
lambda: self.update_plot_setting(
|
||||||
|
max_points=self.spinBox_max_points.value(),
|
||||||
|
num_dim_points=self.spinBox_num_dim_points.value(),
|
||||||
|
scatter_size=self.spinBox_scatter_size.value(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
self.pushButton_update_config.clicked.connect(
|
self.pushButton_update_config.clicked.connect(
|
||||||
lambda: self.update_all_config(
|
lambda: self.update_all_config(
|
||||||
speed=[self.spinBox_speed_x.value(), self.spinBox_speed_y.value()],
|
speed=[self.spinBox_speed_x.value(), self.spinBox_speed_y.value()],
|
||||||
@ -316,13 +348,17 @@ class MotorApp(QWidget):
|
|||||||
|
|
||||||
# Determine brushes based on position in the array
|
# Determine brushes based on position in the array
|
||||||
self.brushes = [pg.mkBrush(50, 50, 50, 255)] * len(self.motor_positions)
|
self.brushes = [pg.mkBrush(50, 50, 50, 255)] * len(self.motor_positions)
|
||||||
|
|
||||||
|
# Calculate the decrement step based on self.num_dim_points
|
||||||
|
decrement_step = (255 - 50) / self.num_dim_points
|
||||||
|
|
||||||
for i in range(1, min(self.num_dim_points + 1, len(self.motor_positions) + 1)):
|
for i in range(1, min(self.num_dim_points + 1, len(self.motor_positions) + 1)):
|
||||||
brightness = max(50, 255 - 20 * (i - 1))
|
brightness = max(50, 255 - decrement_step * (i - 1))
|
||||||
self.brushes[-i] = pg.mkBrush(brightness, brightness, brightness, 255)
|
self.brushes[-i] = pg.mkBrush(brightness, brightness, brightness, 255)
|
||||||
|
|
||||||
self.brushes[-1] = pg.mkBrush(255, 255, 255, 255) # Newest point is always full brightness
|
self.brushes[-1] = pg.mkBrush(255, 255, 255, 255) # Newest point is always full brightness
|
||||||
|
|
||||||
self.motor_map.setData(pos=self.motor_positions, brush=self.brushes)
|
self.motor_map.setData(pos=self.motor_positions, brush=self.brushes, size=self.scatter_size)
|
||||||
|
|
||||||
def update_all_motor_limits(self, x_limit: list = None, y_limit: list = None) -> None:
|
def update_all_motor_limits(self, x_limit: list = None, y_limit: list = None) -> None:
|
||||||
self.motor_thread.update_all_motor_limits(x_limit=x_limit, y_limit=y_limit)
|
self.motor_thread.update_all_motor_limits(x_limit=x_limit, y_limit=y_limit)
|
||||||
|
Reference in New Issue
Block a user