diff --git a/CU/Feeding_C.py b/CU/Feeding_C.py index 692bf84..b44bb9a 100644 --- a/CU/Feeding_C.py +++ b/CU/Feeding_C.py @@ -39,26 +39,57 @@ class FeedPosition: class FeedLine: def __init__(self, id, name, feed_positions:list): self.feed_positions = feed_positions - self.pos_index = 0 + self.feeding2end_pos_index = 0 + self.origin2start_pos_index = 0 + self.start2take_pos_index = 0 self.name = name self.id = id + self.get_position_list() def get_current_position(self): - pos = self.feed_positions[self.pos_index] + pos = self.feeding_to_end[self.feeding2end_pos_index] return pos - def get_next_position(self): - pos = self.feed_positions[self.pos_index] - self.pos_index += 1 + def get_next_feed_position(self): + pos = self.feeding_to_end[self.feeding2end_pos_index] + self.feeding2end_pos_index += 1 return pos + + def get_next_start_position(self): + pos = self.origin2start_pos_index[self.origin2start_pos_index] + self.origin2start_pos_index += 1 + return pos + + def get_next_take_position(self): + pos = self.start2take_pos_index[self.start2take_pos_index] + self.start2take_pos_index += 1 + return pos + def get_take_position(self): - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FTake: - return self.feed_positions[i] + for i in range(len(self.feeding_to_end)): + if self.feeding_to_end[i].status == FeedStatus.FTake: + return self.feeding_to_end[i] def set_take_position(self,position:Real_Position): + for i in range(len(self.feeding_to_end)): + if self.feeding_to_end[i].status == FeedStatus.FTake: + self.feeding_to_end[i].position = position + + def get_position_list(self): + index_start = -1 + for i in range(len(self.feed_positions)): + if self.feed_positions[i].status == FeedStatus.FStart: + index_start = i + break for i in range(len(self.feed_positions)): if self.feed_positions[i].status == FeedStatus.FTake: - self.feed_positions[i].position = position + index_take = i + + self.origin_to_start = self.feed_positions[: index_start+1] + self.start_to_take = self.feed_positions[index_start:index_take+1] + self.feeding_to_end = self.feed_positions[index_take:] + + + class FeedingConfig: def __init__(self, num: int, feedLine: FeedLine, photo_locs): @@ -310,6 +341,7 @@ class Feeding: self.robotClient.add_sendQuene(request_command) pass + def def next_target(self): feed_pos = self.feedConfig.feedLine.get_next_position() self.feedStatus = feed_pos.status diff --git a/ThreadTest.py b/ThreadTest.py index 6676f67..471b16a 100644 --- a/ThreadTest.py +++ b/ThreadTest.py @@ -1,61 +1,64 @@ -from PySide6.QtWidgets import ( - QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, - QLineEdit, QLabel, QGroupBox, QSpacerItem, QSizePolicy -) -from PySide6.QtGui import QIcon -from PySide6.QtCore import Qt +from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget +from PySide6.QtDataVisualization import Q3DScatter, QScatter3DSeries, Q3DTheme,Q3DCamera,QScatterDataItem +from PySide6.QtGui import QVector3D, Qt -class OptimizedUI(QWidget): +import sys + +class Scatter3DWindow(QMainWindow): def __init__(self): super().__init__() + self.setWindowTitle("3D 轨迹点图") - self.setWindowTitle("UI Optimization") - self.setFixedSize(600, 150) - self.init_ui() + # 创建 3D Scatter 图 + self.graph = Q3DScatter() + self.graph.activeTheme().setType(Q3DTheme.Theme.ThemeEbony) # 设置主题 + self.graph.scene().activeCamera().setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront) # 修正属性名 - def init_ui(self): - # 主布局 - main_layout = QHBoxLayout(self) - main_layout.setSpacing(10) + # 创建容器 + container = QWidget.createWindowContainer(self.graph) + container.setMinimumSize(800, 600) - # 1. 坐标输入框组 - coord_group = QGroupBox("坐标") - coord_layout = QVBoxLayout() - for _ in range(2): # 两行坐标输入 - row_layout = QHBoxLayout() - for label in ["x", "y", "z"]: - row_layout.addWidget(QLineEdit(), 1) - coord_layout.addLayout(row_layout) - coord_group.setLayout(coord_layout) + # 设置布局 + widget = QWidget() + layout = QVBoxLayout(widget) + layout.addWidget(container) + self.setCentralWidget(widget) - # 2. 功能按钮组 - button_layout = QVBoxLayout() - get_btn = QPushButton("获取位置") - save_btn = QPushButton("保存位置") - for btn in [get_btn, save_btn]: - btn.setStyleSheet("background-color: #a8e6cf; border-radius: 5px;") - button_layout.addWidget(btn) + # 添加数据 + self.add_data() - # 3. 右侧操作按钮 - add_point_btn = QPushButton("添加中间点") - add_point_btn.setIcon(QIcon.fromTheme("list-add")) - add_point_btn.setStyleSheet("background-color: #61c0bf; border-radius: 5px; color: white;") - dropdown_btn = QPushButton("▼") - dropdown_btn.setFixedWidth(30) + def add_data(self): + # 创建轨迹点数据 + series = QScatter3DSeries() + series.setItemSize(0.2) # 点的大小 + data = [] + data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5))) + data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4))) + data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2))) + series.dataProxy().addItems(data) - right_layout = QHBoxLayout() - right_layout.addWidget(add_point_btn) - right_layout.addWidget(dropdown_btn) + # 添加到图表 + self.graph.addSeries(series) - # 添加控件到主布局 - main_layout.addWidget(QPushButton("破碎点"), 1) - main_layout.addWidget(coord_group, 3) - main_layout.addLayout(button_layout, 2) - main_layout.addLayout(right_layout, 2) - - if __name__ == "__main__": - import sys +if __name__ == "__main__": app = QApplication(sys.argv) - window = OptimizedUI() - window.show() + scatter = Q3DScatter() + scatter.setFlags(scatter.flags()) + series = QScatter3DSeries() + data = [] + data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5))) + data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4))) + data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2))) + series.dataProxy().addItems(data) + scatter.addSeries(series) + + # 调整相机位置,更好的角度来观察散点 + camera = scatter.scene().activeCamera() + camera.setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront) + + scatter.setTitle('实战 Qt for Python: 3D散点图演示') + scatter.resize(480, 360) + scatter.show() + sys.exit(app.exec()) +