@@ -537,6 +537,7 @@ fn delete_preview(tool_data: &mut SplineToolData, responses: &mut VecDeque<Messa
537537
538538#[ cfg( test) ]
539539mod test_spline_tool {
540+ use crate :: messages:: portfolio:: document:: graph_operation:: utility_types:: TransformIn ;
540541 use crate :: messages:: tool:: tool_messages:: spline_tool:: find_spline;
541542 use crate :: test_utils:: test_prelude:: * ;
542543 use glam:: DAffine2 ;
@@ -799,4 +800,48 @@ mod test_spline_tool {
799800 // Assert all points are correctly positioned
800801 assert_point_positions ( & vector_data, layer_to_viewport, & expected_points, 1e-10 ) ;
801802 }
803+
804+ #[ tokio:: test]
805+ async fn test_spline_tool_with_transformed_artboard ( ) {
806+ let mut editor = EditorTestUtils :: create ( ) ;
807+ editor. new_document ( ) . await ;
808+
809+ editor. drag_tool ( ToolType :: Artboard , 0. , 0. , 500. , 500. , ModifierKeys :: empty ( ) ) . await ;
810+ let document = editor. active_document ( ) ;
811+ let artboard_layer = document. network_interface . selected_nodes ( ) . selected_layers ( document. metadata ( ) ) . next ( ) . unwrap ( ) ;
812+
813+ editor
814+ . handle_message ( GraphOperationMessage :: TransformSet {
815+ layer : artboard_layer,
816+ transform : DAffine2 :: from_scale_angle_translation ( DVec2 :: new ( 1.5 , 1.2 ) , 30_f64 . to_radians ( ) , DVec2 :: new ( 50. , 25. ) ) ,
817+ transform_in : TransformIn :: Local ,
818+ skip_rerender : false ,
819+ } )
820+ . await ;
821+
822+ let spline_points = [ DVec2 :: new ( 100. , 100. ) , DVec2 :: new ( 200. , 150. ) , DVec2 :: new ( 300. , 100. ) ] ;
823+
824+ editor. draw_spline ( & spline_points) . await ;
825+
826+ let document = editor. active_document ( ) ;
827+
828+ let mut layers = document. metadata ( ) . all_layers ( ) ;
829+ layers. next ( ) ;
830+
831+ let spline_layer = layers. next ( ) . expect ( "Failed to find the spline layer" ) ;
832+ assert ! ( find_spline( document, spline_layer) . is_some( ) , "Spline node not found in the layer" ) ;
833+
834+ let vector_data = document. network_interface . compute_modified_vector ( spline_layer) . expect ( "Vector data not found for the spline layer" ) ;
835+
836+ // Verify we have the correct number of points and segments
837+ let point_count = vector_data. point_domain . ids ( ) . len ( ) ;
838+ let segment_count = vector_data. segment_domain . ids ( ) . len ( ) ;
839+
840+ assert_eq ! ( point_count, 3 , "Expected 3 points in the spline, found {}" , point_count) ;
841+ assert_eq ! ( segment_count, 2 , "Expected 2 segments in the spline, found {}" , segment_count) ;
842+
843+ let layer_to_viewport = document. metadata ( ) . transform_to_viewport ( spline_layer) ;
844+
845+ assert_point_positions ( & vector_data, layer_to_viewport, & spline_points, 1e-10 ) ;
846+ }
802847}
0 commit comments