mirror of
https://github.com/Team4388/autoPlanner2025.git
synced 2026-06-09 08:48:07 -06:00
Butttttooonns
Nutton editor shows the path now I need to fix it but Im taking a break
This commit is contained in:
+44
-3
@@ -11,7 +11,6 @@ class ButtonEditor(QMainWindow):
|
|||||||
self.setWindowTitle("Button Editor")
|
self.setWindowTitle("Button Editor")
|
||||||
self.path_planner = path_planner
|
self.path_planner = path_planner
|
||||||
|
|
||||||
#Set background image to the field
|
|
||||||
self.image_label = QLabel(self)
|
self.image_label = QLabel(self)
|
||||||
|
|
||||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
@@ -23,7 +22,6 @@ class ButtonEditor(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
self.image_label.setPixmap(self.pixmap)
|
self.image_label.setPixmap(self.pixmap)
|
||||||
|
|
||||||
#Layout stuff
|
|
||||||
self.path_planner_button = QPushButton("Main Window")
|
self.path_planner_button = QPushButton("Main Window")
|
||||||
self.path_planner_button.clicked.connect(self.show_path_planner)
|
self.path_planner_button.clicked.connect(self.show_path_planner)
|
||||||
self.button_editor_button = QPushButton("Button Editor")
|
self.button_editor_button = QPushButton("Button Editor")
|
||||||
@@ -33,7 +31,6 @@ class ButtonEditor(QMainWindow):
|
|||||||
button_layout.addWidget(self.path_planner_button)
|
button_layout.addWidget(self.path_planner_button)
|
||||||
button_layout.addWidget(self.button_editor_button)
|
button_layout.addWidget(self.button_editor_button)
|
||||||
|
|
||||||
#Layout of the auto planner
|
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
layout.addLayout(button_layout)
|
layout.addLayout(button_layout)
|
||||||
layout.addWidget(self.image_label)
|
layout.addWidget(self.image_label)
|
||||||
@@ -51,3 +48,47 @@ class ButtonEditor(QMainWindow):
|
|||||||
def show_path_planner(self):
|
def show_path_planner(self):
|
||||||
self.hide()
|
self.hide()
|
||||||
self.path_planner.show()
|
self.path_planner.show()
|
||||||
|
|
||||||
|
def update_scene(self):
|
||||||
|
self.pixmap = QPixmap(os.path.join(os.path.dirname(os.path.abspath(__file__)), "images", "Field.png"))
|
||||||
|
painter = QPainter(self.pixmap)
|
||||||
|
|
||||||
|
grey_pen = QPen(QColor(127, 127, 127))
|
||||||
|
grey_pen.setWidth(2)
|
||||||
|
painter.setPen(grey_pen)
|
||||||
|
|
||||||
|
# Draw the Bezier curve segments
|
||||||
|
if self.path_planner.coordinates.size > 0:
|
||||||
|
for i in range(len(self.path_planner.coordinates) - 1):
|
||||||
|
start = QPoint(self.path_planner.coordinates[i][0], self.path_planner.coordinates[i][1])
|
||||||
|
end = QPoint(self.path_planner.coordinates[i + 1][0], self.path_planner.coordinates[i + 1][1])
|
||||||
|
|
||||||
|
if i < len(self.path_planner.control_points):
|
||||||
|
control_pair = self.path_planner.control_points[i]
|
||||||
|
|
||||||
|
pen = QPen(Qt.yellow)
|
||||||
|
pen.setWidth(2)
|
||||||
|
painter.setPen(pen)
|
||||||
|
|
||||||
|
path = QPainterPath()
|
||||||
|
path.moveTo(start)
|
||||||
|
path.cubicTo(control_pair[0], control_pair[1], end)
|
||||||
|
painter.drawPath(path)
|
||||||
|
|
||||||
|
# Draw the nodes
|
||||||
|
painter.setPen(Qt.white)
|
||||||
|
font = painter.font()
|
||||||
|
font.setPointSize(25)
|
||||||
|
painter.setFont(font)
|
||||||
|
|
||||||
|
painter.setPen(Qt.NoPen)
|
||||||
|
painter.setBrush(Qt.white)
|
||||||
|
|
||||||
|
for i, (x, y) in enumerate(self.path_planner.coordinates):
|
||||||
|
node_rect = QRect(x - self.path_planner.node_size // 2, y - self.path_planner.node_size // 2,
|
||||||
|
self.path_planner.node_size, self.path_planner.node_size)
|
||||||
|
painter.drawEllipse(node_rect)
|
||||||
|
painter.drawText(node_rect, Qt.AlignCenter, str(i + 1))
|
||||||
|
|
||||||
|
painter.end()
|
||||||
|
self.image_label.setPixmap(self.pixmap)
|
||||||
|
|||||||
@@ -13,7 +13,11 @@ class PathPlanner(QMainWindow):
|
|||||||
|
|
||||||
self.setWindowTitle("Auto Planner")
|
self.setWindowTitle("Auto Planner")
|
||||||
|
|
||||||
#Set background image to the field
|
self.coordinates = np.empty((0, 2), dtype=int)
|
||||||
|
self.control_points = []
|
||||||
|
self.rotation_handles = []
|
||||||
|
self.node_angles = []
|
||||||
|
|
||||||
self.image_label = QLabel(self)
|
self.image_label = QLabel(self)
|
||||||
|
|
||||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
@@ -25,10 +29,6 @@ class PathPlanner(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
self.image_label.setPixmap(self.pixmap)
|
self.image_label.setPixmap(self.pixmap)
|
||||||
|
|
||||||
#I want to put these in a side toolbar
|
|
||||||
#self.clear_button = QPushButton("Clear Auto")
|
|
||||||
#self.clear_button.clicked.connect(self.show_clear_warning)
|
|
||||||
|
|
||||||
self.main_window_button = QPushButton("Main Window")
|
self.main_window_button = QPushButton("Main Window")
|
||||||
self.main_window_button.clicked.connect(self.show_main_window)
|
self.main_window_button.clicked.connect(self.show_main_window)
|
||||||
self.button_editor_button = QPushButton("Button Editor")
|
self.button_editor_button = QPushButton("Button Editor")
|
||||||
@@ -38,7 +38,6 @@ class PathPlanner(QMainWindow):
|
|||||||
button_layout.addWidget(self.main_window_button)
|
button_layout.addWidget(self.main_window_button)
|
||||||
button_layout.addWidget(self.button_editor_button)
|
button_layout.addWidget(self.button_editor_button)
|
||||||
|
|
||||||
#Layout of the auto planner
|
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
layout.addLayout(button_layout)
|
layout.addLayout(button_layout)
|
||||||
layout.addWidget(self.image_label)
|
layout.addWidget(self.image_label)
|
||||||
@@ -53,7 +52,6 @@ class PathPlanner(QMainWindow):
|
|||||||
|
|
||||||
self.setMouseTracking(True)
|
self.setMouseTracking(True)
|
||||||
|
|
||||||
#Variables
|
|
||||||
self.last_click_pos = QPoint()
|
self.last_click_pos = QPoint()
|
||||||
|
|
||||||
self.coordinates = np.empty((0, 2), dtype=int)
|
self.coordinates = np.empty((0, 2), dtype=int)
|
||||||
@@ -83,7 +81,7 @@ class PathPlanner(QMainWindow):
|
|||||||
self.calculate_control_points()
|
self.calculate_control_points()
|
||||||
self.calculate_rotation_handle_pos()
|
self.calculate_rotation_handle_pos()
|
||||||
self.draw_scene()
|
self.draw_scene()
|
||||||
self.draw_scene()
|
self.button_editor.update_scene()
|
||||||
elif event.button() == Qt.LeftButton:
|
elif event.button() == Qt.LeftButton:
|
||||||
current_time = event.timestamp()
|
current_time = event.timestamp()
|
||||||
if (current_time - self.last_click_time < 300 and
|
if (current_time - self.last_click_time < 300 and
|
||||||
@@ -96,21 +94,22 @@ class PathPlanner(QMainWindow):
|
|||||||
if control_point_index != (-1, -1):
|
if control_point_index != (-1, -1):
|
||||||
self.smoothPoints(control_point_index[0], control_point_index[1])
|
self.smoothPoints(control_point_index[0], control_point_index[1])
|
||||||
self.draw_scene()
|
self.draw_scene()
|
||||||
|
self.button_editor.update_scene()
|
||||||
else:
|
else:
|
||||||
control_point_index = self.is_point_in_control_point(x, y)
|
control_point_index = self.is_point_in_control_point(x, y)
|
||||||
if control_point_index != (-1, -1):
|
if control_point_index != (-1, -1):
|
||||||
self.dragging_control_point = True
|
self.dragging_control_point = True
|
||||||
self.dragging_control_point_index = control_point_index
|
self.dragging_control_point_index = control_point_index
|
||||||
|
else:
|
||||||
|
node_index = self.is_point_in_node(x, y)
|
||||||
|
if node_index != -1:
|
||||||
|
self.dragging_node = True
|
||||||
|
self.dragging_node_index = node_index
|
||||||
else:
|
else:
|
||||||
node_index = self.is_point_in_node(x, y)
|
rotation_handle_index = self.is_point_in_rotation_handle(x, y)
|
||||||
if node_index != -1:
|
if rotation_handle_index != -1:
|
||||||
self.dragging_node = True
|
self.dragging_rotation_handle = True
|
||||||
self.dragging_node_index = node_index
|
self.dragging_rotation_handle_index = rotation_handle_index
|
||||||
else:
|
|
||||||
rotation_handle_index = self.is_point_in_rotation_handle(x, y)
|
|
||||||
if rotation_handle_index != -1:
|
|
||||||
self.dragging_rotation_handle = True
|
|
||||||
self.dragging_rotation_handle_index = rotation_handle_index
|
|
||||||
|
|
||||||
self.last_click_time = current_time
|
self.last_click_time = current_time
|
||||||
self.last_click_pos = pos
|
self.last_click_pos = pos
|
||||||
@@ -125,6 +124,7 @@ class PathPlanner(QMainWindow):
|
|||||||
if index < len(self.rotation_handles):
|
if index < len(self.rotation_handles):
|
||||||
del self.rotation_handles[index]
|
del self.rotation_handles[index]
|
||||||
self.draw_scene()
|
self.draw_scene()
|
||||||
|
self.button_editor.update_scene()
|
||||||
|
|
||||||
def mouseMoveEvent(self, event: QMouseEvent):
|
def mouseMoveEvent(self, event: QMouseEvent):
|
||||||
if self.dragging_control_point:
|
if self.dragging_control_point:
|
||||||
@@ -133,6 +133,7 @@ class PathPlanner(QMainWindow):
|
|||||||
curve_index, point_index = self.dragging_control_point_index
|
curve_index, point_index = self.dragging_control_point_index
|
||||||
self.control_points[curve_index][point_index] = QPoint(x, y)
|
self.control_points[curve_index][point_index] = QPoint(x, y)
|
||||||
self.draw_scene()
|
self.draw_scene()
|
||||||
|
self.button_editor.update_scene()
|
||||||
elif self.dragging_node:
|
elif self.dragging_node:
|
||||||
pos = self.image_label.mapFrom(self, event.position().toPoint())
|
pos = self.image_label.mapFrom(self, event.position().toPoint())
|
||||||
x, y = pos.x(), pos.y()
|
x, y = pos.x(), pos.y()
|
||||||
@@ -140,6 +141,7 @@ class PathPlanner(QMainWindow):
|
|||||||
self.calculate_control_points()
|
self.calculate_control_points()
|
||||||
self.calculate_rotation_handle_pos()
|
self.calculate_rotation_handle_pos()
|
||||||
self.draw_scene()
|
self.draw_scene()
|
||||||
|
self.button_editor.update_scene()
|
||||||
elif self.dragging_rotation_handle:
|
elif self.dragging_rotation_handle:
|
||||||
pos = self.image_label.mapFrom(self, event.position().toPoint())
|
pos = self.image_label.mapFrom(self, event.position().toPoint())
|
||||||
x, y = pos.x(), pos.y()
|
x, y = pos.x(), pos.y()
|
||||||
@@ -154,7 +156,7 @@ class PathPlanner(QMainWindow):
|
|||||||
rotation_handle_y = int(node_y + self.rotation_handle_distance * np.sin(angle))
|
rotation_handle_y = int(node_y + self.rotation_handle_distance * np.sin(angle))
|
||||||
self.rotation_handles[self.dragging_rotation_handle_index] = QPoint(rotation_handle_x, rotation_handle_y)
|
self.rotation_handles[self.dragging_rotation_handle_index] = QPoint(rotation_handle_x, rotation_handle_y)
|
||||||
self.draw_scene()
|
self.draw_scene()
|
||||||
self.draw_scene()
|
self.button_editor.update_scene()
|
||||||
|
|
||||||
#Resets dragging when mouse is released
|
#Resets dragging when mouse is released
|
||||||
def mouseReleaseEvent(self, event: QMouseEvent):
|
def mouseReleaseEvent(self, event: QMouseEvent):
|
||||||
@@ -165,6 +167,7 @@ class PathPlanner(QMainWindow):
|
|||||||
self.dragging_node_index = -1
|
self.dragging_node_index = -1
|
||||||
self.dragging_rotation_handle = False
|
self.dragging_rotation_handle = False
|
||||||
self.dragging_rotation_handle_index = -1
|
self.dragging_rotation_handle_index = -1
|
||||||
|
self.button_editor.update_scene()
|
||||||
|
|
||||||
#These 3 are for distinguishing what the user is clicking
|
#These 3 are for distinguishing what the user is clicking
|
||||||
def is_point_in_rotation_handle(self, x, y):
|
def is_point_in_rotation_handle(self, x, y):
|
||||||
@@ -215,6 +218,10 @@ class PathPlanner(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
self.rotation_handles[i] = QPoint(rotation_handle_x, rotation_handle_y)
|
self.rotation_handles[i] = QPoint(rotation_handle_x, rotation_handle_y)
|
||||||
|
|
||||||
|
#Updates buttonEditor
|
||||||
|
def update_scene(self):
|
||||||
|
self.button_editor.update_scene(self.coordinates, self.control_points)
|
||||||
|
|
||||||
#Draws the scene, big important function
|
#Draws the scene, big important function
|
||||||
def draw_scene(self):
|
def draw_scene(self):
|
||||||
self.pixmap = QPixmap(os.path.join(os.path.dirname(os.path.abspath(__file__)), "images", "Field.png"))
|
self.pixmap = QPixmap(os.path.join(os.path.dirname(os.path.abspath(__file__)), "images", "Field.png"))
|
||||||
@@ -289,6 +296,7 @@ class PathPlanner(QMainWindow):
|
|||||||
painter.setBrush(Qt.NoBrush)
|
painter.setBrush(Qt.NoBrush)
|
||||||
|
|
||||||
self.image_label.setPixmap(self.pixmap)
|
self.image_label.setPixmap(self.pixmap)
|
||||||
|
self.button_editor.update_scene()
|
||||||
|
|
||||||
#S M O O T H
|
#S M O O T H
|
||||||
def smoothPoints(self, curve_index: int, point_index: int):
|
def smoothPoints(self, curve_index: int, point_index: int):
|
||||||
@@ -318,6 +326,7 @@ class PathPlanner(QMainWindow):
|
|||||||
self.rotation_handles.clear()
|
self.rotation_handles.clear()
|
||||||
self.node_angles.clear()
|
self.node_angles.clear()
|
||||||
self.draw_scene()
|
self.draw_scene()
|
||||||
|
self.button_editor.update_scene()
|
||||||
|
|
||||||
#Warning for clearing
|
#Warning for clearing
|
||||||
def show_clear_warning(self):
|
def show_clear_warning(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user