- Added enabling of midpsnap and prepared others
- Show dimesnion on hover
This commit is contained in:
parent
f26a596159
commit
4d7b2cdbad
@ -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)
|
||||
|
||||
|
7
main.py
7
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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user