- Sketch projection and extrude in place working

This commit is contained in:
bklronin
2024-07-13 13:46:13 +02:00
parent d2b8d9540a
commit 0c3e4eeb5e
5 changed files with 726 additions and 494 deletions

View File

@@ -18,11 +18,13 @@ class SketchWidget(QWidget):
def __init__(self):
super().__init__()
self.line_draw_buffer = [None, None]
self.drag_buffer = [None, None]
self.main_buffer = [None, None]
self.proj_snap_points = []
self.proj_snap_lines = []
self.hovered_point = None
self.selected_line = None
@@ -59,7 +61,9 @@ class SketchWidget(QWidget):
for point in lines:
print(point)
x, y = point
self.proj_snap_points = lines
self.proj_snap_lines = lines
self.proj_snap_points.append(QPoint(x, y))
#point = self.solv.add_point_2d(x, y, self.wp)
@@ -311,7 +315,10 @@ class SketchWidget(QWidget):
self.reset_buffers()
if event.button() == Qt.LeftButton and self.mouse_mode == "line":
clicked_pos = local_event_pos
if self.hovered_point:
clicked_pos = self.hovered_point
else:
clicked_pos = local_event_pos
if not self.line_draw_buffer[0]:
self.line_draw_buffer[0] = clicked_pos
@@ -564,6 +571,12 @@ class SketchWidget(QWidget):
closest_point = point['ui_point']
min_distance = distance
for point in self.proj_snap_points:
distance = (local_event_pos - point).manhattanLength()
if distance < threshold and distance < min_distance:
closest_point = point
min_distance = distance
if closest_point != self.hovered_point:
self.hovered_point = closest_point
print(self.hovered_point)
@@ -636,7 +649,7 @@ class SketchWidget(QWidget):
def draw_cross(self, painter, x, y, size=10):
# Set up the pen
pen = QPen(QColor('red')) # You can change the color as needed
pen = QPen(QColor('green')) # You can change the color as needed
pen.setWidth(int(2 / self.zoom)) # Set the line widt)h
painter.setPen(pen)
@@ -712,7 +725,7 @@ class SketchWidget(QWidget):
painter.setPen(QPen(Qt.red, 2))
painter.drawLine(p1, p2)
for cross in self.proj_snap_points:
for cross in self.proj_snap_lines:
# Calculate the endpoints of the cross
self.draw_cross(painter, cross[0], cross[1], 10)