- delete sketch working

- added mid point snap
- added hovering line with distance
This commit is contained in:
bklronin
2025-01-01 21:35:43 +01:00
parent f5861b8bd1
commit e9383f76a2
2 changed files with 75 additions and 50 deletions

View File

@@ -19,6 +19,7 @@ class SketchWidget(QWidget):
self.line_draw_buffer = [None, None]
self.drag_buffer = [None, None]
self.main_buffer = [None, None]
self.dynamic_line_end = None # Cursor position for dynamic drawing
self.hovered_point = None
self.selected_line = None
@@ -186,7 +187,7 @@ class SketchWidget(QWidget):
def get_point_line_handles_from_ui_point(self, ui_point: QPoint) -> tuple:
"""Input Qpoint that is on a line and you shall receive the handles of the points of the line!"""
for target_line_con in self.sketch.slv_lines:
for target_line_con in self.sketch.lines:
if self.is_point_on_line(ui_point, target_line_con.crd1.ui_point, target_line_con.crd2.ui_point):
lines_to_cons = target_line_con.crd1.handle, target_line_con.crd2.handle
@@ -535,13 +536,18 @@ class SketchWidget(QWidget):
def mouseMoveEvent(self, event):
local_event_pos = self.viewport_to_local_coord(event.pos())
#print(local_event_pos)
closest_point = None
min_distance = float('inf')
threshold = 10 # Distance threshold for highlighting
if len(self.sketch.points) > 0:
if self.mouse_mode == "line" and self.line_draw_buffer[0]:
# Update the current cursor position as the second point
self.dynamic_line_end = self.viewport_to_local_coord(event.pos())
self.update() # Trigger a repaint
if self.sketch.points is not None and len(self.sketch.points) > 0:
for point in self.sketch.points:
distance = (local_event_pos - point.ui_point).manhattanLength()
if distance < threshold and distance < min_distance:
@@ -564,6 +570,10 @@ class SketchWidget(QWidget):
if self.is_point_on_line(local_event_pos, p1, p2):
self.selected_line = p1, p2
mid = self.calculate_midpoint(p1, p2)
distance = (local_event_pos - mid).manhattanLength()
if distance < threshold and distance < min_distance:
self.hovered_point = mid
break
else:
self.selected_line = None
@@ -695,7 +705,10 @@ class SketchWidget(QWidget):
pen_solver = QPen(Qt.green)
pen_solver.setWidthF(2 / self.zoom)
# Draw points
pen_text = QPen(Qt.white)
pen_text.setWidthF(1 / self.zoom)
# Draw points and lines
if self.sketch:
painter.setPen(pen_normal)
for point in self.sketch.points:
@@ -703,10 +716,34 @@ class SketchWidget(QWidget):
painter.setPen(pen_construct)
painter.drawEllipse(point.ui_point, 10 / self.zoom, 10 / self.zoom)
else:
#Normal point
# Normal point
painter.setPen(pen_normal)
painter.drawEllipse(point.ui_point, 3 / self.zoom, 3 / self.zoom)
# Draw the dynamic line
if self.mouse_mode == "line" and self.line_draw_buffer[0] and self.dynamic_line_end is not None:
start_point = self.line_draw_buffer[0].ui_point
end_point = self.dynamic_line_end
painter.setPen(Qt.red) # Use a different color for the dynamic line
painter.drawLine(start_point, end_point)
# Save painter state
painter.save()
painter.setPen(pen_text)
# Calculate the distance and midpoint
dis = self.distance(start_point, end_point)
mid = self.calculate_midpoint(start_point, end_point)
# Transform for text
painter.translate(mid.x(), mid.y()) # Move to the midpoint
painter.scale(1, -1) # Flip y-axis back to make text readable
# Draw the text
painter.drawText(0, 0, str(round(dis, 2))) # Draw text at transformed position
# Restore painter state
painter.restore()
for line in self.sketch.lines:
if line.is_helper:
@@ -720,11 +757,6 @@ class SketchWidget(QWidget):
p2 = line.crd2.ui_point
painter.drawLine(p1, p2)
dis = self.distance(p1, p2)
mid = self.calculate_midpoint(p1, p2)
painter.drawText(mid, str(round(dis, 2)))
# Draw all solver points
if self.sketch.entity_len():
painter.setPen(pen_solver)