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