- Added enabling of midpsnap and prepared others

- Show dimesnion on hover
This commit is contained in:
bklronin 2025-03-29 22:36:11 +01:00
parent f26a596159
commit 4d7b2cdbad
2 changed files with 46 additions and 24 deletions

View File

@ -33,6 +33,15 @@ class SketchWidget(QWidget):
self.mouse_mode = False
self.is_construct = False
self.snap_mode = {
"point": False,
"mpoint": False,
"horiz": False,
"vert":False,
"grid": False,
"angle": False
}
# Solver
self.solv = SolverSystem()
@ -61,7 +70,10 @@ class SketchWidget(QWidget):
self.mouse_mode = 'distance'
def act_constrain_mid_point_mode(self):
self.sketchWidget.mouse_mode = 'pb_con_mid'
self.mouse_mode = 'pb_con_mid'
def on_snap_mode_change(self, helper_type: str, value: bool):
self.snap_mode[helper_type] = value
def on_construct_change(self, checked):
self.is_construct = checked
@ -292,7 +304,7 @@ class SketchWidget(QWidget):
for (old_index, old_point), new_point in zip(old_points_ui, new_points_ui):
if old_point != new_point:
print(old_point)
#print(old_point)
differences.append((old_index, old_point, new_point))
return differences
@ -314,8 +326,8 @@ class SketchWidget(QWidget):
# Update the point in slv_points_main
self.sketch.points[index].ui_point = new_point
for points in self.sketch.points:
print(points.ui_point)
"""for points in self.sketch.points:
print(points.ui_point)"""
# Print updated state
# print("Updated slv_points_main:", self.slv_points_main)
@ -523,10 +535,10 @@ class SketchWidget(QWidget):
# Add succesful constraint to constrain draw list so it gets drawn in paint function
for idx, line in enumerate(self.sketch.lines):
print(line.crd1.ui_point)
#print(line.crd1.ui_point)
if self.is_point_on_line(local_event_pos, line.crd1.ui_point, line.crd2.ui_point):
self.sketch.lines[idx].constraints.append("hrz")
print(self.sketch.lines[idx].constraints)
#print(self.sketch.lines[idx].constraints)
elif self.sketch.solve() == ResultFlag.DIDNT_CONVERGE:
print("Solve_failed - Converge")
@ -540,8 +552,6 @@ class SketchWidget(QWidget):
if event.button() == Qt.LeftButton and self.mouse_mode == "vert":
line_selected = self.get_line_handle_from_ui_point(local_event_pos)
if line_selected:
self.sketch.vertical(line_selected, self.sketch.wp)
@ -568,8 +578,6 @@ class SketchWidget(QWidget):
e1 = None
e2 = None
if self.hovered_point:
# print("buf point")
# Get the point as UI point as buffer
@ -628,7 +636,7 @@ class SketchWidget(QWidget):
closest_point = None
min_distance = float('inf')
threshold = 10 # Distance threshold for highlighting
threshold = 15 # Distance threshold for highlighting
if self.mouse_mode == "line" and self.line_draw_buffer[0]:
# Update the current cursor position as the second point
@ -659,11 +667,14 @@ class SketchWidget(QWidget):
if self.is_point_on_line(local_event_pos, p1, p2):
self.selected_line = p1, p2
# Midpointsnap only in drawer not solver
mid = self.calculate_midpoint(p1, p2)
distance = (local_event_pos - mid).manhattanLength()
if distance < threshold and distance < min_distance:
self.hovered_point = mid
if self.snap_mode.get("mpoint"):
# Midpointsnap only in drawer not solver
mid = self.calculate_midpoint(p1, p2)
distance = (local_event_pos - mid).manhattanLength()
if distance < threshold and distance < min_distance:
self.hovered_point = mid
break
break
else:
self.selected_line = None
@ -932,15 +943,16 @@ class SketchWidget(QWidget):
p2 = line.crd2.ui_point
painter.drawLine(p1, p2)
self.draw_measurement(painter, p1, p2)
painter.save()
midp = self.calculate_midpoint(p1, p2)
painter.translate(midp)
painter.scale(1, -1)
if not self.selected_line:
for i, text in enumerate(line.constraints):
painter.drawText(0, i * 15, f"> {text} <")
painter.restore()
painter.save()
midp = self.calculate_midpoint(p1, p2)
painter.translate(midp)
painter.scale(1, -1)
for i, text in enumerate(line.constraints):
painter.drawText(0, i * 15, f"> {text} <")
painter.restore()
# Draw all solver points
if self.sketch.entity_len():
@ -965,6 +977,9 @@ class SketchWidget(QWidget):
painter.setPen(QPen(Qt.red, 2 / self.zoom))
painter.drawLine(p1, p2)
self.draw_measurement(painter, p1, p2)
"""for cross in self.sketch.proj_points:
self.draw_cross(painter, cross, 10 / self.zoom)

View File

@ -142,6 +142,13 @@ class MainWindow(QMainWindow):
self.project = Project()
self.new_project()
### SNAPS
self.ui.pb_snap_midp.toggled.connect(lambda checked: self.sketchWidget.on_snap_mode_change("mpoint", checked))
self.ui.pb_snap_horiz.toggled.connect(lambda checked: self.sketchWidget.on_snap_mode_change("horiz", checked))
self.ui.pb_snap_vert.toggled.connect(lambda checked: self.sketchWidget.on_snap_mode_change("vert", checked))
self.ui.pb_snap_angle.toggled.connect(lambda checked: self.sketchWidget.on_snap_mode_change("angle", checked))
self.ui.pb_enable_snap.toggled.connect(lambda checked: self.sketchWidget.on_snap_mode_change("point", checked))
### COMPOS
### COMPOS