diff --git a/drawing_modules/draw_widget_solve.py b/drawing_modules/draw_widget_solve.py index 2386485..c2d8c49 100644 --- a/drawing_modules/draw_widget_solve.py +++ b/drawing_modules/draw_widget_solve.py @@ -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) diff --git a/main.py b/main.py index 6e67dfe..b8fcddc 100644 --- a/main.py +++ b/main.py @@ -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