fix many add windows

This commit is contained in:
gti 2025-02-14 11:29:55 +08:00
parent 6b93db3442
commit daa30c0818
8 changed files with 246 additions and 107 deletions

View File

@ -1,5 +1,9 @@
import dataclasses
import json
from pathlib import Path from pathlib import Path
from PIL.TiffImagePlugin import SOFTWARE
PLAYBACK_SOCKET_PORT = 5003 PLAYBACK_SOCKET_PORT = 5003
PLAYBACK_SOCKET = f'127.0.0.1:{PLAYBACK_SOCKET_PORT}' PLAYBACK_SOCKET = f'127.0.0.1:{PLAYBACK_SOCKET_PORT}'
LIVE_SOCKET_IP = '11.6.1.66' LIVE_SOCKET_IP = '11.6.1.66'
@ -22,5 +26,30 @@ LAST_CONFIG = BASE / 'config' / 'last_imaging_config.json'
CONFIG_FOLDER.mkdir(exist_ok=True) CONFIG_FOLDER.mkdir(exist_ok=True)
SOFTWARE_CONFIG_PATH = BASE / 'software.json'
@dataclasses.dataclass
class SoftwareConfig:
base_dir: Path = DS
@staticmethod
def read_config():
j = json.loads(SOFTWARE_CONFIG_PATH.read_text(encoding='utf-8'))
sc = SoftwareConfig()
sc.base_dir = Path(j['base_dir'])
return sc
def write_config(self):
SOFTWARE_CONFIG_PATH.write_text(json.dumps(dict(
base_dir=self.base_dir.__str__(),
), indent=4), encoding='utf-8')
SOFTWARE_CONFIG = SoftwareConfig()
if SOFTWARE_CONFIG_PATH.exists():
SOFTWARE_CONFIG = SoftwareConfig.read_config()
if __name__ == '__main__': if __name__ == '__main__':
print(BASE) print(SOFTWARE_CONFIG)

View File

@ -13,6 +13,7 @@ from utils.Msg import BMMsg, ImageArgMsg, KillMsg, SeqMetaMsg, SetPlayMode, SetD
RecordFrameMsg RecordFrameMsg
from utils.RfFile import RfFrame, RfSequenceMeta from utils.RfFile import RfFrame, RfSequenceMeta
from utils.RfMat import RfMat from utils.RfMat import RfMat
from utils.RfMeta import RfFrameMeta
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -20,8 +21,8 @@ logger = logging.getLogger(__name__)
class Beamformer(Node): class Beamformer(Node):
topics = [ImageArgMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg] topics = [ImageArgMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg]
def __init__(self): def __init__(self, level=logging.INFO):
super(Beamformer, self).__init__() super(Beamformer, self).__init__(level=level)
self.arg = ImageArgMsg('', t_start=0, t_end=1499) self.arg = ImageArgMsg('', t_start=0, t_end=1499)
self.seq_meta_live = None self.seq_meta_live = None
self.seq_meta_playback = None self.seq_meta_playback = None
@ -63,19 +64,18 @@ class Beamformer(Node):
socks = dict(self.c.poller.poll()) socks = dict(self.c.poller.poll())
if device_socket in socks and socks[device_socket] == zmq.POLLIN: if device_socket in socks and socks[device_socket] == zmq.POLLIN:
buffer = device_socket.recv() buffer = device_socket.recv()
logger.debug(f'device receive {buffer.__len__()}')
_, sequence_id, encoder = struct.unpack_from('=iqi', buffer) _, sequence_id, encoder = struct.unpack_from('=iqi', buffer)
s = buffer[4 + 8 + 4:] s = buffer[4 + 8 + 4:]
seq_meta = None logger.debug(f'live meta {self.seq_meta_live}, playback meta {self.seq_meta_playback}')
match self.play_mode: seq_meta: RfSequenceMeta | None = {
case 'live': "live": self.seq_meta_live,
seq_meta = self.seq_meta_live "playback": self.seq_meta_playback,
case 'playback': }.get(self.play_mode, None)
seq_meta = self.seq_meta_playback
if seq_meta is not None: if seq_meta is not None:
fb1 = cp.frombuffer(s, dtype=cp.int16) fb1 = cp.frombuffer(s, dtype=cp.int16)
if fb1.shape[0] == np.prod(seq_meta.shape): if fb1.shape[0] == np.prod(seq_meta.shape):
mat = RfMat(fb1.reshape(seq_meta.shape), RfFrame.RfFrameMeta( mat = RfMat(fb1.reshape(seq_meta.shape), RfFrameMeta(
encoder=encoder, encoder=encoder,
sequence_id=sequence_id, sequence_id=sequence_id,
), seq_meta) ), seq_meta)
@ -98,6 +98,7 @@ class Beamformer(Node):
if isinstance(msg, ImageArgMsg): if isinstance(msg, ImageArgMsg):
self.arg = msg self.arg = msg
if isinstance(msg, SetPlayMode): if isinstance(msg, SetPlayMode):
logger.debug(f'set playmode {msg}')
self.play_mode = msg.value self.play_mode = msg.value
if msg.value == 'live': if msg.value == 'live':
try: try:
@ -111,6 +112,7 @@ class Beamformer(Node):
except: except:
pass pass
device_socket.connect(f"tcp://{PLAYBACK_SOCKET}") device_socket.connect(f"tcp://{PLAYBACK_SOCKET}")
logger.debug('connect to playback')
if isinstance(msg, SetRecordMsg): if isinstance(msg, SetRecordMsg):
self.record_enable = msg.enable self.record_enable = msg.enable
if msg.enable: if msg.enable:

View File

@ -5,9 +5,9 @@ from pathlib import Path
import zmq import zmq
from config import PLAYBACK_SOCKET_PORT from config import PLAYBACK_SOCKET_PORT, SOFTWARE_CONFIG
from nodes.Node import Node from nodes.Node import Node
from utils.Msg import MoveAxisMsg, KillMsg, SelectSeqMsg, SeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg from utils.Msg import MoveAxisMsg, KillMsg, SelectSeqMsg, SeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg, SeqIdList
from utils.RfFile import RfSequence from utils.RfFile import RfSequence
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -17,32 +17,39 @@ class Loader(Node):
topics = [MoveAxisMsg, SelectSeqMsg, SetBaseMsg] topics = [MoveAxisMsg, SelectSeqMsg, SetBaseMsg]
def loop(self): def loop(self):
s2 = self.context.socket(zmq.PUSH) playback_socket = self.context.socket(zmq.PUSH)
s2.bind(f"tcp://*:{PLAYBACK_SOCKET_PORT}") playback_socket.bind(f"tcp://*:{PLAYBACK_SOCKET_PORT}")
# base = Path('/mnt/16T/private_dataset/us/') # base = Path('/mnt/16T/private_dataset/us/')
base: Path | None = None base: Path | None = None
rff = None rff = None
while True: while True:
r = self.recv() msg = self.recv()
if isinstance(r, MoveAxisMsg) and rff is not None: if isinstance(msg, MoveAxisMsg) and rff is not None:
logger.debug(f'Move axis: {rff}') logger.debug(f'Move axis: {msg}')
for frame in rff.frames: if msg.axis == 'S':
if frame.meta.sequence_id == r.value: frame = rff.frames[msg.value]
buffer = io.BytesIO() buffer = io.BytesIO()
buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder)) buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder))
buffer.write(frame.bytes) buffer.write(frame.bytes)
s2.send(buffer.getvalue()) playback_socket.send(buffer.getvalue())
elif isinstance(r, SelectSeqMsg): elif isinstance(msg, SelectSeqMsg):
if base is None: if base is None:
continue continue
rff = RfSequence.from_folder(base / r.value) rff = RfSequence.from_folder(base / msg.value)
self.send(SeqMetaMsg('playback', rff.meta.name)) self.send(SeqMetaMsg('playback', rff.meta.name))
self.send(SeqIdMinMax(*rff.seq_id_minmax)) self.send(SeqIdMinMax(*rff.seq_id_minmax))
elif isinstance(r, SetBaseMsg): self.send(SeqIdList([f.meta.sequence_id for f in rff.frames]))
base = Path(r.value) elif isinstance(msg, SetBaseMsg):
self.send(SeqListMsg([f.name for f in base.glob('*')])) base = Path(msg.value)
elif isinstance(r, KillMsg): seq_list = [f.name for f in base.glob('*')]
if r.name == '': if not seq_list:
logger.warning(f'No sequences found in {base}')
else:
SOFTWARE_CONFIG.base_dir = base
SOFTWARE_CONFIG.write_config()
self.send(SeqListMsg(seq_list))
elif isinstance(msg, KillMsg):
if msg.name == '':
break break

View File

@ -6,7 +6,7 @@ from pathlib import Path
from PyQt6 import QtCore from PyQt6 import QtCore
from PyQt6.QtCore import QByteArray from PyQt6.QtCore import QByteArray
from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog
from Main import Ui_MainWindow from Main import Ui_MainWindow
from ZMQReceiver import ZMQReceiver from ZMQReceiver import ZMQReceiver
@ -14,9 +14,12 @@ from config import DS
from nodes.Node import Node from nodes.Node import Node
from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \ from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \
SeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \ SeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \
SeqIdList
from utils.RfMeta import RfSequenceMeta from utils.RfMeta import RfSequenceMeta
logger = logging.getLogger(__name__)
class LinkStatus(Enum): class LinkStatus(Enum):
RED = auto() RED = auto()
@ -54,7 +57,7 @@ class Adv(QMainWindow, Ui_MainWindow):
zmq_receiver.start() zmq_receiver.start()
self.s_t_start.valueChanged.connect(self.on_t_start) self.s_t_start.valueChanged.connect(self.on_t_start)
self.s_t_end.valueChanged.connect(self.on_t_end) self.s_t_end.valueChanged.connect(self.on_t_end)
self.c_playback_seq_name.currentIndexChanged.connect(self.cbc) self.c_playback_seq_name.currentIndexChanged.connect(self.on_select_plyayback_seq_name)
self.s_sid.valueChanged.connect(self.c_sid) self.s_sid.valueChanged.connect(self.c_sid)
self.arg = ImageArgMsg('ui', t_start=0, t_end=1499) self.arg = ImageArgMsg('ui', t_start=0, t_end=1499)
self.b_base.clicked.connect(self.on_base) self.b_base.clicked.connect(self.on_base)
@ -77,6 +80,14 @@ class Adv(QMainWindow, Ui_MainWindow):
self.record_frame_cnt = 0 self.record_frame_cnt = 0
self.update_device_buttons() self.update_device_buttons()
self.seq_id_list = []
self.b_select_base.clicked.connect(self.on_select_base)
def on_select_base(self):
base = QFileDialog.getExistingDirectory(self, 'Select Base Folder', DS.__str__())
self.l_base.setText(Path(base).__str__())
def update_b_play_live_enabled(self): def update_b_play_live_enabled(self):
self.b_play_live.setEnabled(all([self.b1, self.b2])) self.b_play_live.setEnabled(all([self.b1, self.b2]))
@ -136,6 +147,7 @@ class Adv(QMainWindow, Ui_MainWindow):
self.l_record_commit.setEnabled(False) self.l_record_commit.setEnabled(False)
self.p.send(SeqMetaMsg('playback', self.c_playback_seq_name.itemText(self.c_playback_seq_name.currentIndex()))) self.p.send(SeqMetaMsg('playback', self.c_playback_seq_name.itemText(self.c_playback_seq_name.currentIndex())))
self.p.send(SetPlayMode('playback')) self.p.send(SetPlayMode('playback'))
logger.debug(f'set playmode playback')
self.b3 = True self.b3 = True
self.update_c_playback_seq_name_enable() self.update_c_playback_seq_name_enable()
@ -235,13 +247,13 @@ class Adv(QMainWindow, Ui_MainWindow):
match msg.axis: match msg.axis:
case 'S': case 'S':
self.s_sid.setValue(msg.value) self.s_sid.setValue(msg.value)
elif isinstance(msg, SeqIdMinMax): self.l_seq_current.setText(str(self.seq_id_list[msg.value]))
self.s_sid.setMinimum(msg.min) elif isinstance(msg, SeqIdList):
self.s_sid.setMaximum(msg.max) self.seq_id_list = msg.li
self.s_sid.setMinimum(msg.min) self.s_sid.setMaximum(msg.li.__len__() - 1)
self.sp_sid.setMaximum(msg.max) self.sp_sid.setMaximum(msg.li.__len__() - 1)
self.sp_sid.setValue(msg.min) self.l_seq_min.setText(str(min(msg.li)))
self.sp_sid.setValue(msg.min) self.l_seq_max.setText(str(max(msg.li)))
elif isinstance(msg, SeqListMsg): elif isinstance(msg, SeqListMsg):
self.b4 = True self.b4 = True
self.update_c_playback_seq_name_enable() self.update_c_playback_seq_name_enable()
@ -306,7 +318,7 @@ class Adv(QMainWindow, Ui_MainWindow):
self.p.send(self.arg) self.p.send(self.arg)
@QtCore.pyqtSlot(int) @QtCore.pyqtSlot(int)
def cbc(self, v): def on_select_plyayback_seq_name(self, v):
if self.c_playback_seq_name.sender() is None or isinstance(self.c_playback_seq_name.sender(), QFrame): if self.c_playback_seq_name.sender() is None or isinstance(self.c_playback_seq_name.sender(), QFrame):
self.p.send(SelectSeqMsg(self.c_playback_seq_name.itemText(v))) self.p.send(SelectSeqMsg(self.c_playback_seq_name.itemText(v)))
@ -328,7 +340,7 @@ class Adv(QMainWindow, Ui_MainWindow):
class MainUI(Node): class MainUI(Node):
topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg, topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg,
SeqListMsg, SeqMetaMsg, SeqListMsg, SeqMetaMsg, SeqIdList,
DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg,
RobotRtsiMsg, RobotRtsiMsg,
RecordFrameMsg] RecordFrameMsg]

View File

@ -1,4 +1,4 @@
# Form implementation generated from reading ui file 'Main.ui' # Form implementation generated from reading ui file '.\Main.ui'
# #
# Created by: PyQt6 UI code generator 6.8.0 # Created by: PyQt6 UI code generator 6.8.0
# #
@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object): class Ui_MainWindow(object):
def setupUi(self, MainWindow): def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow") MainWindow.setObjectName("MainWindow")
MainWindow.resize(1177, 910) MainWindow.resize(936, 479)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow) self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget") self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
@ -22,26 +22,50 @@ class Ui_MainWindow(object):
self.s_sid = QtWidgets.QSlider(parent=self.centralwidget) self.s_sid = QtWidgets.QSlider(parent=self.centralwidget)
self.s_sid.setOrientation(QtCore.Qt.Orientation.Horizontal) self.s_sid.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.s_sid.setObjectName("s_sid") self.s_sid.setObjectName("s_sid")
self.gridLayout_7.addWidget(self.s_sid, 2, 1, 1, 1) self.gridLayout_7.addWidget(self.s_sid, 3, 1, 1, 1)
self.label_4 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_4.setObjectName("label_4")
self.gridLayout_7.addWidget(self.label_4, 2, 0, 1, 1)
self.sp_sid = QtWidgets.QSpinBox(parent=self.centralwidget) self.sp_sid = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_sid.setObjectName("sp_sid") self.sp_sid.setObjectName("sp_sid")
self.gridLayout_7.addWidget(self.sp_sid, 2, 2, 1, 1) self.gridLayout_7.addWidget(self.sp_sid, 3, 2, 1, 1)
self.b_play_playback = QtWidgets.QPushButton(parent=self.centralwidget) self.b_play_playback = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_play_playback.setEnabled(False) self.b_play_playback.setEnabled(False)
self.b_play_playback.setObjectName("b_play_playback") self.b_play_playback.setObjectName("b_play_playback")
self.gridLayout_7.addWidget(self.b_play_playback, 0, 0, 1, 3) self.gridLayout_7.addWidget(self.b_play_playback, 0, 0, 1, 3)
self.label_16 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_16.setObjectName("label_16")
self.gridLayout_7.addWidget(self.label_16, 1, 0, 1, 1)
self.label_4 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_4.setObjectName("label_4")
self.gridLayout_7.addWidget(self.label_4, 3, 0, 1, 1)
self.c_playback_seq_name = QtWidgets.QComboBox(parent=self.centralwidget) self.c_playback_seq_name = QtWidgets.QComboBox(parent=self.centralwidget)
self.c_playback_seq_name.setEnabled(False) self.c_playback_seq_name.setEnabled(False)
self.c_playback_seq_name.setEditable(False) self.c_playback_seq_name.setEditable(False)
self.c_playback_seq_name.setObjectName("c_playback_seq_name") self.c_playback_seq_name.setObjectName("c_playback_seq_name")
self.c_playback_seq_name.addItem("") self.c_playback_seq_name.addItem("")
self.gridLayout_7.addWidget(self.c_playback_seq_name, 1, 1, 1, 2) self.gridLayout_7.addWidget(self.c_playback_seq_name, 1, 1, 1, 2)
self.label_16 = QtWidgets.QLabel(parent=self.centralwidget) self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.label_16.setObjectName("label_16") self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.gridLayout_7.addWidget(self.label_16, 1, 0, 1, 1) self.label26 = QtWidgets.QLabel(parent=self.centralwidget)
self.label26.setObjectName("label26")
self.horizontalLayout_5.addWidget(self.label26)
self.l_seq_min = QtWidgets.QLabel(parent=self.centralwidget)
self.l_seq_min.setObjectName("l_seq_min")
self.horizontalLayout_5.addWidget(self.l_seq_min)
self.label_28 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_28.setObjectName("label_28")
self.horizontalLayout_5.addWidget(self.label_28)
self.l_seq_current = QtWidgets.QLabel(parent=self.centralwidget)
self.l_seq_current.setObjectName("l_seq_current")
self.horizontalLayout_5.addWidget(self.l_seq_current)
self.label_29 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_29.setObjectName("label_29")
self.horizontalLayout_5.addWidget(self.label_29)
self.l_seq_max = QtWidgets.QLabel(parent=self.centralwidget)
self.l_seq_max.setObjectName("l_seq_max")
self.horizontalLayout_5.addWidget(self.l_seq_max)
self.horizontalLayout_5.setStretch(1, 1)
self.horizontalLayout_5.setStretch(3, 1)
self.horizontalLayout_5.setStretch(5, 1)
self.gridLayout_7.addLayout(self.horizontalLayout_5, 2, 0, 1, 3)
self.gridLayout.addLayout(self.gridLayout_7, 1, 1, 1, 1) self.gridLayout.addLayout(self.gridLayout_7, 1, 1, 1, 1)
self.gridLayout_6 = QtWidgets.QGridLayout() self.gridLayout_6 = QtWidgets.QGridLayout()
self.gridLayout_6.setObjectName("gridLayout_6") self.gridLayout_6.setObjectName("gridLayout_6")
@ -105,7 +129,6 @@ class Ui_MainWindow(object):
font = QtGui.QFont() font = QtGui.QFont()
font.setPointSize(20) font.setPointSize(20)
font.setBold(False) font.setBold(False)
font.setWeight(50)
self.label_3.setFont(font) self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.label_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_3.setObjectName("label_3") self.label_3.setObjectName("label_3")
@ -190,7 +213,6 @@ class Ui_MainWindow(object):
font = QtGui.QFont() font = QtGui.QFont()
font.setPointSize(20) font.setPointSize(20)
font.setBold(False) font.setBold(False)
font.setWeight(50)
self.label_2.setFont(font) self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.label_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_2.setObjectName("label_2") self.label_2.setObjectName("label_2")
@ -282,6 +304,9 @@ class Ui_MainWindow(object):
self.l_base.setText("") self.l_base.setText("")
self.l_base.setObjectName("l_base") self.l_base.setObjectName("l_base")
self.horizontalLayout_4.addWidget(self.l_base) self.horizontalLayout_4.addWidget(self.l_base)
self.b_select_base = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_select_base.setObjectName("b_select_base")
self.horizontalLayout_4.addWidget(self.b_select_base)
self.b_base = QtWidgets.QPushButton(parent=self.centralwidget) self.b_base = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_base.setObjectName("b_base") self.b_base.setObjectName("b_base")
self.horizontalLayout_4.addWidget(self.b_base) self.horizontalLayout_4.addWidget(self.b_base)
@ -320,7 +345,7 @@ class Ui_MainWindow(object):
self.gridLayout.addLayout(self.gridLayout_2, 0, 1, 1, 1) self.gridLayout.addLayout(self.gridLayout_2, 0, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget) MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow) self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1177, 30)) self.menubar.setGeometry(QtCore.QRect(0, 0, 936, 18))
self.menubar.setObjectName("menubar") self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar) MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
@ -333,10 +358,16 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow): def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label_4.setText(_translate("MainWindow", "Frame ID"))
self.b_play_playback.setText(_translate("MainWindow", "Playback")) self.b_play_playback.setText(_translate("MainWindow", "Playback"))
self.c_playback_seq_name.setItemText(0, _translate("MainWindow", "Unset"))
self.label_16.setText(_translate("MainWindow", "SeqName")) self.label_16.setText(_translate("MainWindow", "SeqName"))
self.label_4.setText(_translate("MainWindow", "Frame ID"))
self.c_playback_seq_name.setItemText(0, _translate("MainWindow", "Unset"))
self.label26.setText(_translate("MainWindow", "Min:"))
self.l_seq_min.setText(_translate("MainWindow", "0"))
self.label_28.setText(_translate("MainWindow", "Current:"))
self.l_seq_current.setText(_translate("MainWindow", "0"))
self.label_29.setText(_translate("MainWindow", "Max:"))
self.l_seq_max.setText(_translate("MainWindow", "0"))
self.label_17.setText(_translate("MainWindow", "RecordName")) self.label_17.setText(_translate("MainWindow", "RecordName"))
self.b_record.setText(_translate("MainWindow", "Record")) self.b_record.setText(_translate("MainWindow", "Record"))
self.label_18.setText(_translate("MainWindow", "Record Frames:")) self.label_18.setText(_translate("MainWindow", "Record Frames:"))
@ -369,6 +400,7 @@ class Ui_MainWindow(object):
self.lb_device_enable.setText(_translate("MainWindow", "Disabled")) self.lb_device_enable.setText(_translate("MainWindow", "Disabled"))
self.label_21.setText(_translate("MainWindow", "<html><head/><body><p style=\"line-height:0.3\" align=\"center\">Connection</p><p align=\"center\">Status</p></body></html>")) self.label_21.setText(_translate("MainWindow", "<html><head/><body><p style=\"line-height:0.3\" align=\"center\">Connection</p><p align=\"center\">Status</p></body></html>"))
self.label.setText(_translate("MainWindow", "Base Path")) self.label.setText(_translate("MainWindow", "Base Path"))
self.b_select_base.setText(_translate("MainWindow", "Select"))
self.b_base.setText(_translate("MainWindow", "Open")) self.b_base.setText(_translate("MainWindow", "Open"))
self.l_robot_pos.setText(_translate("MainWindow", "0,0,0,0,0,0")) self.l_robot_pos.setText(_translate("MainWindow", "0,0,0,0,0,0"))
self.l_robot_force.setText(_translate("MainWindow", "0,0,0,0,0,0")) self.l_robot_force.setText(_translate("MainWindow", "0,0,0,0,0,0"))

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1177</width> <width>936</width>
<height>910</height> <height>479</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -17,21 +17,14 @@
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0"> <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0">
<item row="1" column="1"> <item row="1" column="1">
<layout class="QGridLayout" name="gridLayout_7"> <layout class="QGridLayout" name="gridLayout_7">
<item row="2" column="1"> <item row="3" column="1">
<widget class="QSlider" name="s_sid"> <widget class="QSlider" name="s_sid">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="3" column="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Frame ID</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="sp_sid"/> <widget class="QSpinBox" name="sp_sid"/>
</item> </item>
<item row="0" column="0" colspan="3"> <item row="0" column="0" colspan="3">
@ -44,6 +37,20 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>SeqName</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Frame ID</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2"> <item row="1" column="1" colspan="2">
<widget class="QComboBox" name="c_playback_seq_name"> <widget class="QComboBox" name="c_playback_seq_name">
<property name="enabled"> <property name="enabled">
@ -59,13 +66,52 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="2" column="0" colspan="3">
<widget class="QLabel" name="label_16"> <layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,1,0,1,0,1">
<item>
<widget class="QLabel" name="label26">
<property name="text"> <property name="text">
<string>SeqName</string> <string>Min:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QLabel" name="l_seq_min">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_28">
<property name="text">
<string>Current:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_seq_current">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_29">
<property name="text">
<string>Max:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_seq_max">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
@ -164,7 +210,7 @@
<item row="2" column="1"> <item row="2" column="1">
<widget class="QSlider" name="horizontalSlider_5"> <widget class="QSlider" name="horizontalSlider_5">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -178,7 +224,7 @@
<item row="3" column="1"> <item row="3" column="1">
<widget class="QSlider" name="horizontalSlider_6"> <widget class="QSlider" name="horizontalSlider_6">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -187,7 +233,6 @@
<property name="font"> <property name="font">
<font> <font>
<pointsize>20</pointsize> <pointsize>20</pointsize>
<weight>50</weight>
<bold>false</bold> <bold>false</bold>
</font> </font>
</property> </property>
@ -195,7 +240,7 @@
<string>Probe Position</string> <string>Probe Position</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -214,14 +259,14 @@
<item row="7" column="1"> <item row="7" column="1">
<widget class="QSlider" name="horizontalSlider_7"> <widget class="QSlider" name="horizontalSlider_7">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="4" column="1">
<widget class="QSlider" name="horizontalSlider_10"> <widget class="QSlider" name="horizontalSlider_10">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -235,7 +280,7 @@
<item row="5" column="1"> <item row="5" column="1">
<widget class="QSlider" name="horizontalSlider_9"> <widget class="QSlider" name="horizontalSlider_9">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -272,14 +317,14 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QSlider" name="horizontalSlider_3"> <widget class="QSlider" name="horizontalSlider_3">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="1"> <item row="8" column="1">
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -299,7 +344,7 @@
<item row="6" column="1"> <item row="6" column="1">
<widget class="QSlider" name="horizontalSlider_8"> <widget class="QSlider" name="horizontalSlider_8">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -333,7 +378,7 @@
<number>1500</number> <number>1500</number>
</property> </property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -342,7 +387,6 @@
<property name="font"> <property name="font">
<font> <font>
<pointsize>20</pointsize> <pointsize>20</pointsize>
<weight>50</weight>
<bold>false</bold> <bold>false</bold>
</font> </font>
</property> </property>
@ -350,21 +394,21 @@
<string>Imaging</string> <string>Imaging</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="4" column="1">
<widget class="QSlider" name="horizontalSlider_4"> <widget class="QSlider" name="horizontalSlider_4">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="5" column="1">
<spacer name="verticalSpacer_2"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -387,7 +431,7 @@
<item row="3" column="1"> <item row="3" column="1">
<widget class="QSlider" name="horizontalSlider_2"> <widget class="QSlider" name="horizontalSlider_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -400,7 +444,7 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QSlider" name="s_t_start"> <widget class="QSlider" name="s_t_start">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -461,7 +505,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Beam&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Beam&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -471,7 +515,7 @@
<string>Disconnected</string> <string>Disconnected</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -489,7 +533,7 @@
<string>Device Offline</string> <string>Device Offline</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -499,7 +543,7 @@
<string>Disabled</string> <string>Disabled</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -509,7 +553,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Connection&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Connection&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -531,6 +575,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="b_select_base">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="b_base"> <widget class="QPushButton" name="b_base">
<property name="text"> <property name="text">
@ -553,7 +604,7 @@
<string>0,0,0,0,0,0</string> <string>0,0,0,0,0,0</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -568,7 +619,7 @@
<string>0,0,0,0,0,0</string> <string>0,0,0,0,0,0</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -600,7 +651,7 @@
<string>Robot Offline</string> <string>Robot Offline</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
@ -613,8 +664,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1177</width> <width>936</width>
<height>30</height> <height>18</height>
</rect> </rect>
</property> </property>
</widget> </widget>

View File

@ -29,6 +29,7 @@ class BG(Enum):
SetRecordMsg = auto() SetRecordMsg = auto()
RobotRtsiMsg = auto() RobotRtsiMsg = auto()
RecordFrameMsg = auto() RecordFrameMsg = auto()
SeqIdList = auto()
class Msg: class Msg:
@ -153,6 +154,11 @@ class SeqIdMinMax(Msg):
max: int max: int
@dataclasses.dataclass
class SeqIdList(Msg):
li: list[int]
@dataclasses.dataclass @dataclasses.dataclass
class MoveAxisMsg(Msg): class MoveAxisMsg(Msg):
sender: str sender: str

View File

@ -26,12 +26,12 @@ def main():
pps = [] pps = []
ps = [ ps = [
Broker(), Broker(),
WebRTC(), # WebRTC(),
MainUI(), MainUI(level=logging.DEBUG),
Device(level=logging.DEBUG), Device(level=logging.DEBUG),
ImageCV(), ImageCV(),
Beamformer(), Beamformer(level=logging.DEBUG),
Loader(), Loader(level=logging.DEBUG),
Robot(), Robot(),
] ]
for p in ps: for p in ps: