@@ -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