@@ -212,15 +212,15 @@ impl ClosestSegment {
212
212
self . bezier_point_to_viewport
213
213
}
214
214
215
- pub fn closest_point ( & self , document_metadata : & DocumentMetadata ) -> DVec2 {
216
- let transform = document_metadata. transform_to_viewport ( self . layer ) ;
215
+ pub fn closest_point ( & self , document_metadata : & DocumentMetadata , network_interface : & NodeNetworkInterface ) -> DVec2 {
216
+ let transform = document_metadata. transform_to_viewport_if_feeds ( self . layer , network_interface ) ;
217
217
let bezier_point = self . bezier . evaluate ( TValue :: Parametric ( self . t ) ) ;
218
218
transform. transform_point2 ( bezier_point)
219
219
}
220
220
221
221
/// Updates this [`ClosestSegment`] with the viewport-space location of the closest point on the segment to the given mouse position.
222
- pub fn update_closest_point ( & mut self , document_metadata : & DocumentMetadata , mouse_position : DVec2 ) {
223
- let transform = document_metadata. transform_to_viewport ( self . layer ) ;
222
+ pub fn update_closest_point ( & mut self , document_metadata : & DocumentMetadata , network_interface : & NodeNetworkInterface , mouse_position : DVec2 ) {
223
+ let transform = document_metadata. transform_to_viewport_if_feeds ( self . layer , network_interface ) ;
224
224
let layer_mouse_pos = transform. inverse ( ) . transform_point2 ( mouse_position) ;
225
225
226
226
let t = self . bezier . project ( layer_mouse_pos) . clamp ( 0. , 1. ) ;
@@ -239,9 +239,9 @@ impl ClosestSegment {
239
239
tolerance. powi ( 2 ) < self . distance_squared ( mouse_position)
240
240
}
241
241
242
- pub fn handle_positions ( & self , document_metadata : & DocumentMetadata ) -> ( Option < DVec2 > , Option < DVec2 > ) {
242
+ pub fn handle_positions ( & self , document_metadata : & DocumentMetadata , network_interface : & NodeNetworkInterface ) -> ( Option < DVec2 > , Option < DVec2 > ) {
243
243
// Transform to viewport space
244
- let transform = document_metadata. transform_to_viewport ( self . layer ) ;
244
+ let transform = document_metadata. transform_to_viewport_if_feeds ( self . layer , network_interface ) ;
245
245
246
246
// Split the Bezier at the parameter `t`
247
247
let [ first, second] = self . bezier . split ( TValue :: Parametric ( self . t ) ) ;
@@ -307,7 +307,7 @@ impl ClosestSegment {
307
307
}
308
308
309
309
pub fn calculate_perp ( & self , document : & DocumentMessageHandler ) -> DVec2 {
310
- let tangent = if let ( Some ( handle1) , Some ( handle2) ) = self . handle_positions ( document. metadata ( ) ) {
310
+ let tangent = if let ( Some ( handle1) , Some ( handle2) ) = self . handle_positions ( document. metadata ( ) , & document . network_interface ) {
311
311
( handle1 - handle2) . try_normalize ( )
312
312
} else {
313
313
let [ first_point, last_point] = self . points ( ) ;
@@ -339,7 +339,7 @@ impl ClosestSegment {
339
339
break_colinear_molding : bool ,
340
340
temporary_adjacent_handles_while_molding : Option < [ Option < HandleId > ; 2 ] > ,
341
341
) -> Option < [ Option < HandleId > ; 2 ] > {
342
- let transform = document. metadata ( ) . transform_to_viewport ( self . layer ) ;
342
+ let transform = document. metadata ( ) . transform_to_viewport_if_feeds ( self . layer , & document . network_interface ) ;
343
343
344
344
let start = self . bezier . start ;
345
345
let end = self . bezier . end ;
@@ -507,7 +507,7 @@ impl ShapeState {
507
507
continue ;
508
508
} ;
509
509
510
- let to_document = document. metadata ( ) . transform_to_document ( * layer) ;
510
+ let to_document = document. metadata ( ) . transform_to_document_if_feeds ( * layer, & document . network_interface ) ;
511
511
512
512
for & selected in & state. selected_points {
513
513
let source = match selected {
@@ -564,7 +564,11 @@ impl ShapeState {
564
564
let already_selected = selected_shape_state. is_point_selected ( manipulator_point_id) ;
565
565
566
566
// Offset to snap the selected point to the cursor
567
- let offset = mouse_position - network_interface. document_metadata ( ) . transform_to_viewport ( layer) . transform_point2 ( point_position) ;
567
+ let offset = mouse_position
568
+ - network_interface
569
+ . document_metadata ( )
570
+ . transform_to_viewport_if_feeds ( layer, network_interface)
571
+ . transform_point2 ( point_position) ;
568
572
569
573
// This is selecting the manipulator only for now, next to generalize to points
570
574
@@ -621,7 +625,11 @@ impl ShapeState {
621
625
let already_selected = selected_shape_state. is_point_selected ( manipulator_point_id) ;
622
626
623
627
// Offset to snap the selected point to the cursor
624
- let offset = mouse_position - network_interface. document_metadata ( ) . transform_to_viewport ( layer) . transform_point2 ( point_position) ;
628
+ let offset = mouse_position
629
+ - network_interface
630
+ . document_metadata ( )
631
+ . transform_to_viewport_if_feeds ( layer, network_interface)
632
+ . transform_point2 ( point_position) ;
625
633
626
634
// Gather current selection information
627
635
let points = self
@@ -653,7 +661,7 @@ impl ShapeState {
653
661
let Some ( vector_data) = document. network_interface . compute_modified_vector ( layer) else {
654
662
return ;
655
663
} ;
656
- let to_viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
664
+ let to_viewport = document. metadata ( ) . transform_to_viewport_if_feeds ( layer, & document . network_interface ) ;
657
665
let layer_mouse = to_viewport. inverse ( ) . transform_point2 ( mouse) ;
658
666
let state = self . selected_shape_state . entry ( layer) . or_default ( ) ;
659
667
@@ -875,7 +883,7 @@ impl ShapeState {
875
883
}
876
884
877
885
let vector_data = network_interface. compute_modified_vector ( layer) ?;
878
- let transform = network_interface. document_metadata ( ) . transform_to_document ( layer) . inverse ( ) ;
886
+ let transform = network_interface. document_metadata ( ) . transform_to_document_if_feeds ( layer, network_interface ) . inverse ( ) ;
879
887
let position = transform. transform_point2 ( new_position) ;
880
888
let current_position = point. get_position ( & vector_data) ?;
881
889
let delta = position - current_position;
@@ -1026,7 +1034,7 @@ impl ShapeState {
1026
1034
let Some ( vector_data) = document. network_interface . compute_modified_vector ( layer) else {
1027
1035
continue ;
1028
1036
} ;
1029
- let transform = document. metadata ( ) . transform_to_document ( layer) ;
1037
+ let transform = document. metadata ( ) . transform_to_document_if_feeds ( layer, & document . network_interface ) ;
1030
1038
1031
1039
for & point in layer_state. selected_points . iter ( ) {
1032
1040
let Some ( handles) = point. get_handle_pair ( & vector_data) else { continue } ;
@@ -1116,8 +1124,8 @@ impl ShapeState {
1116
1124
1117
1125
let opposing_handles = handle_lengths. as_ref ( ) . and_then ( |handle_lengths| handle_lengths. get ( & layer) ) ;
1118
1126
1119
- let transform_to_viewport_space = document. metadata ( ) . transform_to_viewport ( layer) ;
1120
- let transform_to_document_space = document. metadata ( ) . transform_to_document ( layer) ;
1127
+ let transform_to_viewport_space = document. metadata ( ) . transform_to_viewport_if_feeds ( layer, & document . network_interface ) ;
1128
+ let transform_to_document_space = document. metadata ( ) . transform_to_document_if_feeds ( layer, & document . network_interface ) ;
1121
1129
let delta_transform = if in_viewport_space {
1122
1130
transform_to_viewport_space
1123
1131
} else {
@@ -1210,7 +1218,7 @@ impl ShapeState {
1210
1218
. iter ( )
1211
1219
. filter_map ( |( & layer, state) | {
1212
1220
let vector_data = document. network_interface . compute_modified_vector ( layer) ?;
1213
- let transform = document. metadata ( ) . transform_to_document ( layer) ;
1221
+ let transform = document. metadata ( ) . transform_to_document_if_feeds ( layer, & document . network_interface ) ;
1214
1222
let opposing_handle_lengths = vector_data
1215
1223
. colinear_manipulators
1216
1224
. iter ( )
@@ -1575,7 +1583,7 @@ impl ShapeState {
1575
1583
let mut manipulator_point = None ;
1576
1584
1577
1585
let vector_data = network_interface. compute_modified_vector ( layer) ?;
1578
- let viewspace = network_interface. document_metadata ( ) . transform_to_viewport ( layer) ;
1586
+ let viewspace = network_interface. document_metadata ( ) . transform_to_viewport_if_feeds ( layer, network_interface ) ;
1579
1587
1580
1588
// Handles
1581
1589
for ( segment_id, bezier, _, _) in vector_data. segment_bezier_iter ( ) {
@@ -1611,7 +1619,7 @@ impl ShapeState {
1611
1619
1612
1620
/// Find the `t` value along the path segment we have clicked upon, together with that segment ID.
1613
1621
fn closest_segment ( & self , network_interface : & NodeNetworkInterface , layer : LayerNodeIdentifier , position : glam:: DVec2 , tolerance : f64 ) -> Option < ClosestSegment > {
1614
- let transform = network_interface. document_metadata ( ) . transform_to_viewport ( layer) ;
1622
+ let transform = network_interface. document_metadata ( ) . transform_to_viewport_if_feeds ( layer, network_interface ) ;
1615
1623
let layer_pos = transform. inverse ( ) . transform_point2 ( position) ;
1616
1624
1617
1625
let tolerance = tolerance + 0.5 ;
@@ -1785,7 +1793,7 @@ impl ShapeState {
1785
1793
pub fn flip_smooth_sharp ( & self , network_interface : & NodeNetworkInterface , target : glam:: DVec2 , tolerance : f64 , responses : & mut VecDeque < Message > ) -> bool {
1786
1794
let mut process_layer = |layer| {
1787
1795
let vector_data = network_interface. compute_modified_vector ( layer) ?;
1788
- let transform_to_screenspace = network_interface. document_metadata ( ) . transform_to_viewport ( layer) ;
1796
+ let transform_to_screenspace = network_interface. document_metadata ( ) . transform_to_viewport_if_feeds ( layer, network_interface ) ;
1789
1797
1790
1798
let mut result = None ;
1791
1799
let mut closest_distance_squared = tolerance * tolerance;
@@ -1889,7 +1897,7 @@ impl ShapeState {
1889
1897
1890
1898
let vector_data = network_interface. compute_modified_vector ( layer) ;
1891
1899
let Some ( vector_data) = vector_data else { continue } ;
1892
- let transform = network_interface. document_metadata ( ) . transform_to_viewport ( layer) ;
1900
+ let transform = network_interface. document_metadata ( ) . transform_to_viewport_if_feeds ( layer, network_interface ) ;
1893
1901
1894
1902
assert_eq ! ( vector_data. segment_domain. ids( ) . len( ) , vector_data. start_point( ) . count( ) ) ;
1895
1903
assert_eq ! ( vector_data. segment_domain. ids( ) . len( ) , vector_data. end_point( ) . count( ) ) ;
0 commit comments