- delete sketch working
- added mid point snap - added hovering line with distance
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user