Skip to content

Commit ee2d4a0

Browse files
authored
Make Pen tool always snap to endpoint anchors, even when snapping is off (#2107)
* pen should always snap on last anchor Signed-off-by: James Ryans <[email protected]> * snap anchor on every single connected points Signed-off-by: James Ryans <[email protected]> --------- Signed-off-by: James Ryans <[email protected]>
1 parent 3ce1317 commit ee2d4a0

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

editor/src/messages/tool/tool_messages/pen_tool.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,24 @@ impl PenToolData {
359359
}
360360

361361
fn place_anchor(&mut self, snap_data: SnapData, transform: DAffine2, mouse: DVec2, responses: &mut VecDeque<Message>) -> Option<PenToolFsmState> {
362+
let document = snap_data.document;
363+
362364
let relative = self.latest_point().map(|point| point.pos);
363365
self.next_point = self.compute_snapped_angle(snap_data, transform, false, mouse, relative, true);
366+
367+
let selected_nodes = document.network_interface.selected_nodes(&[]).unwrap();
368+
let mut selected_layers = selected_nodes.selected_layers(document.metadata());
369+
let layer = selected_layers.next().filter(|_| selected_layers.next().is_none())?;
370+
let vector_data = document.network_interface.compute_modified_vector(layer)?;
371+
let transform = document.metadata().document_to_viewport * transform;
372+
for point in vector_data.single_connected_points() {
373+
let Some(pos) = vector_data.point_domain.position_from_id(point) else { continue };
374+
let transformed_distance_between_squared = transform.transform_point2(pos).distance_squared(transform.transform_point2(self.next_point));
375+
let snap_point_tolerance_squared = crate::consts::SNAP_POINT_TOLERANCE.powi(2);
376+
if transformed_distance_between_squared < snap_point_tolerance_squared {
377+
self.next_point = pos;
378+
}
379+
}
364380
if let Some(handle_end) = self.handle_end.as_mut() {
365381
*handle_end = self.next_point;
366382
self.next_handle_start = self.next_point;

0 commit comments

Comments
 (0)