Skip to content

Commit 8bf6cb0

Browse files
committed
ctrl-alt 90 case
1 parent eaaa719 commit 8bf6cb0

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

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

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@ impl PathToolData {
708708
handle_id: ManipulatorPointId,
709709
lock_angle: bool,
710710
snap_angle: bool,
711+
tangent_to_neighboring_tangents: bool,
711712
) -> f64 {
712713
let current_angle = -handle_vector.angle_to(DVec2::X);
713714

@@ -718,7 +719,7 @@ impl PathToolData {
718719
.and_then(|(layer, _)| document.network_interface.compute_modified_vector(*layer))
719720
{
720721
if relative_vector.length() < 25. && lock_angle && !self.angle_locked {
721-
if let Some(angle) = calculate_lock_angle(self, shape_editor, responses, document, &vector_data, handle_id) {
722+
if let Some(angle) = calculate_lock_angle(self, shape_editor, responses, document, &vector_data, handle_id, tangent_to_neighboring_tangents) {
722723
self.angle = angle;
723724
self.angle_locked = true;
724725
return angle;
@@ -873,7 +874,17 @@ impl PathToolData {
873874
let snapped_delta = if let Some((handle_pos, anchor_pos, handle_id)) = self.try_get_selected_handle_and_anchor(shape_editor, document) {
874875
let cursor_pos = handle_pos + raw_delta;
875876

876-
let handle_angle = self.calculate_handle_angle(shape_editor, document, responses, handle_pos - anchor_pos, cursor_pos - anchor_pos, handle_id, lock_angle, snap_angle);
877+
let handle_angle = self.calculate_handle_angle(
878+
shape_editor,
879+
document,
880+
responses,
881+
handle_pos - anchor_pos,
882+
cursor_pos - anchor_pos,
883+
handle_id,
884+
lock_angle,
885+
snap_angle,
886+
equidistant,
887+
);
877888

878889
let constrained_direction = DVec2::new(handle_angle.cos(), handle_angle.sin());
879890
let projected_length = (cursor_pos - anchor_pos).dot(constrained_direction);
@@ -1801,6 +1812,7 @@ fn calculate_lock_angle(
18011812
document: &DocumentMessageHandler,
18021813
vector_data: &VectorData,
18031814
handle_id: ManipulatorPointId,
1815+
tangent_to_neighboring_tangents: bool,
18041816
) -> Option<f64> {
18051817
let anchor = handle_id.get_anchor(vector_data)?;
18061818
let anchor_position = vector_data.point_domain.position_from_id(anchor);
@@ -1834,7 +1846,14 @@ fn calculate_lock_angle(
18341846
let angle_2 = calculate_segment_angle(anchor, segment, vector_data, false);
18351847

18361848
match (angle_1, angle_2) {
1837-
(Some(angle_1), Some(angle_2)) => Some((angle_1 + angle_2) / 2.0),
1849+
(Some(angle_1), Some(angle_2)) => {
1850+
let angle = Some((angle_1 + angle_2) / 2.0);
1851+
if tangent_to_neighboring_tangents {
1852+
angle.map(|angle| angle + std::f64::consts::FRAC_PI_2)
1853+
} else {
1854+
angle
1855+
}
1856+
}
18381857
(Some(angle_1), None) => Some(angle_1),
18391858
(None, Some(angle_2)) => Some(angle_2),
18401859
(None, None) => None,

0 commit comments

Comments
 (0)