1- use crate :: messages:: tool:: {
2- common_functionality:: shapes:: shape_utility:: { calculate_polygon_vertex_position, extract_polygon_parameters, inside_polygon, inside_star} ,
3- tool_messages:: tool_prelude:: Key ,
4- } ;
5- use std:: { collections:: VecDeque , f64:: consts:: TAU } ;
6-
7- use crate :: messages:: { portfolio:: document:: utility_types:: document_metadata:: LayerNodeIdentifier , prelude:: Responses } ;
1+ use crate :: consts:: { GIZMO_HIDE_THRESHOLD , NUMBER_OF_POINTS_HANDLE_SPOKE_EXTENSION , NUMBER_OF_POINTS_HANDLE_SPOKE_LENGTH , POINT_RADIUS_HANDLE_SEGMENT_THRESHOLD } ;
2+ use crate :: messages:: frontend:: utility_types:: MouseCursorIcon ;
3+ use crate :: messages:: message:: Message ;
4+ use crate :: messages:: portfolio:: document:: overlays:: utility_types:: OverlayContext ;
5+ use crate :: messages:: portfolio:: document:: utility_types:: document_metadata:: LayerNodeIdentifier ;
6+ use crate :: messages:: portfolio:: document:: utility_types:: network_interface:: InputConnector ;
7+ use crate :: messages:: prelude:: Responses ;
8+ use crate :: messages:: prelude:: { DocumentMessageHandler , FrontendMessage , InputPreprocessorMessageHandler , NodeGraphMessage } ;
9+ use crate :: messages:: tool:: common_functionality:: graph_modification_utils;
10+ use crate :: messages:: tool:: common_functionality:: shape_editor:: ShapeState ;
11+ use crate :: messages:: tool:: common_functionality:: shapes:: shape_utility:: { polygon_vertex_position, extract_polygon_parameters, inside_polygon, inside_star} ;
12+ use crate :: messages:: tool:: common_functionality:: shapes:: shape_utility:: { star_vertex_position, extract_star_parameters} ;
13+ use crate :: messages:: tool:: tool_messages:: tool_prelude:: Key ;
814use glam:: { DAffine2 , DVec2 } ;
9- use graph_craft:: document:: { NodeInput , value:: TaggedValue } ;
10-
11- use crate :: {
12- consts:: { GIZMO_HIDE_THRESHOLD , NUMBER_OF_POINTS_HANDLE_SPOKE_EXTENSION , NUMBER_OF_POINTS_HANDLE_SPOKE_LENGTH , POINT_RADIUS_HANDLE_SEGMENT_THRESHOLD } ,
13- messages:: {
14- frontend:: utility_types:: MouseCursorIcon ,
15- message:: Message ,
16- portfolio:: document:: { overlays:: utility_types:: OverlayContext , utility_types:: network_interface:: InputConnector } ,
17- prelude:: { DocumentMessageHandler , FrontendMessage , InputPreprocessorMessageHandler , NodeGraphMessage } ,
18- tool:: common_functionality:: {
19- graph_modification_utils,
20- shape_editor:: ShapeState ,
21- shapes:: shape_utility:: { calculate_star_vertex_position, extract_star_parameters} ,
22- } ,
23- } ,
24- } ;
15+ use graph_craft:: document:: NodeInput ;
16+ use graph_craft:: document:: value:: TaggedValue ;
17+ use std:: collections:: VecDeque ;
18+ use std:: f64:: consts:: TAU ;
2519
2620#[ derive( Clone , Debug , Default , PartialEq ) ]
2721pub enum NumberOfPointsHandleState {
@@ -43,6 +37,7 @@ impl NumberOfPointsHandle {
4337 self . handle_state = NumberOfPointsHandleState :: Inactive ;
4438 self . layer = None ;
4539 }
40+
4641 pub fn update_state ( & mut self , state : NumberOfPointsHandleState ) {
4742 self . handle_state = state;
4843 }
@@ -69,18 +64,16 @@ impl NumberOfPointsHandle {
6964
7065 match & self . handle_state {
7166 NumberOfPointsHandleState :: Inactive => {
72- for layer in document
73- . network_interface
74- . selected_nodes ( )
75- . selected_visible_and_unlocked_layers ( & document. network_interface )
76- . filter ( |layer| {
77- graph_modification_utils:: get_star_id ( * layer, & document. network_interface ) . is_some ( ) || graph_modification_utils:: get_polygon_id ( * layer, & document. network_interface ) . is_some ( )
78- } ) {
67+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
68+ let layers = selected_nodes. selected_visible_and_unlocked_layers ( & document. network_interface ) . filter ( |layer| {
69+ graph_modification_utils:: get_star_id ( * layer, & document. network_interface ) . is_some ( ) || graph_modification_utils:: get_polygon_id ( * layer, & document. network_interface ) . is_some ( )
70+ } ) ;
71+ for layer in layers {
7972 if let Some ( ( n, radius1, radius2) ) = extract_star_parameters ( Some ( layer) , document) {
8073 let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
8174 let center = viewport. transform_point2 ( DVec2 :: ZERO ) ;
8275
83- let point_on_max_radius = calculate_star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
76+ let point_on_max_radius = star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
8477
8578 if mouse_position. distance ( center) < NUMBER_OF_POINTS_HANDLE_SPOKE_LENGTH && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
8679 self . layer = Some ( layer) ;
@@ -94,7 +87,7 @@ impl NumberOfPointsHandle {
9487 let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
9588 let center = viewport. transform_point2 ( DVec2 :: ZERO ) ;
9689
97- let point_on_max_radius = calculate_polygon_vertex_position ( viewport, 0 , n, radius) ;
90+ let point_on_max_radius = polygon_vertex_position ( viewport, 0 , n, radius) ;
9891
9992 if mouse_position. distance ( center) < NUMBER_OF_POINTS_HANDLE_SPOKE_LENGTH && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
10093 self . layer = Some ( layer) ;
@@ -106,13 +99,11 @@ impl NumberOfPointsHandle {
10699 }
107100 }
108101 NumberOfPointsHandleState :: Hover | NumberOfPointsHandleState :: Dragging => {
109- let Some ( layer) = self . layer else {
110- return ;
111- } ;
102+ let Some ( layer) = self . layer else { return } ;
112103
113104 let Some ( ( n, radius) ) = extract_star_parameters ( Some ( layer) , document)
114105 . map ( |( n, r1, r2) | ( n, r1. max ( r2) ) )
115- . or_else ( || extract_polygon_parameters ( Some ( layer) , document) . map ( | ( n , r ) | ( n , r ) ) )
106+ . or_else ( || extract_polygon_parameters ( Some ( layer) , document) )
116107 else {
117108 return ;
118109 } ;
@@ -125,8 +116,6 @@ impl NumberOfPointsHandle {
125116 self . layer = None ;
126117 self . draw_spokes ( center, viewport, n, radius, overlay_context) ;
127118 responses. add ( FrontendMessage :: UpdateMouseCursor { cursor : MouseCursorIcon :: Default } ) ;
128-
129- return ;
130119 }
131120 }
132121 }
@@ -146,13 +135,11 @@ impl NumberOfPointsHandle {
146135
147136 match & self . handle_state {
148137 NumberOfPointsHandleState :: Inactive => {
149- for layer in document
150- . network_interface
151- . selected_nodes ( )
152- . selected_visible_and_unlocked_layers ( & document. network_interface )
153- . filter ( |layer| {
154- graph_modification_utils:: get_star_id ( * layer, & document. network_interface ) . is_some ( ) || graph_modification_utils:: get_polygon_id ( * layer, & document. network_interface ) . is_some ( )
155- } ) {
138+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
139+ let layers = selected_nodes. selected_visible_and_unlocked_layers ( & document. network_interface ) . filter ( |layer| {
140+ graph_modification_utils:: get_star_id ( * layer, & document. network_interface ) . is_some ( ) || graph_modification_utils:: get_polygon_id ( * layer, & document. network_interface ) . is_some ( )
141+ } ) ;
142+ for layer in layers {
156143 if let Some ( ( n, radius1, radius2) ) = extract_star_parameters ( Some ( layer) , document) {
157144 let radius = radius1. max ( radius2) ;
158145 let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
@@ -163,7 +150,7 @@ impl NumberOfPointsHandle {
163150 return ;
164151 }
165152 }
166- let point_on_max_radius = calculate_star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
153+ let point_on_max_radius = star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
167154
168155 if inside_star ( viewport, n, radius1, radius2, mouse_position) && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
169156 self . draw_spokes ( center, viewport, n, radius, overlay_context) ;
@@ -180,7 +167,7 @@ impl NumberOfPointsHandle {
180167 return ;
181168 }
182169 }
183- let point_on_max_radius = calculate_polygon_vertex_position ( viewport, 0 , n, radius) ;
170+ let point_on_max_radius = polygon_vertex_position ( viewport, 0 , n, radius) ;
184171
185172 if inside_polygon ( viewport, n, radius, mouse_position) && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
186173 self . draw_spokes ( center, viewport, n, radius, overlay_context) ;
@@ -190,13 +177,11 @@ impl NumberOfPointsHandle {
190177 }
191178 }
192179 NumberOfPointsHandleState :: Hover | NumberOfPointsHandleState :: Dragging => {
193- let Some ( layer) = self . layer else {
194- return ;
195- } ;
180+ let Some ( layer) = self . layer else { return } ;
196181
197182 let Some ( ( n, radius) ) = extract_star_parameters ( Some ( layer) , document)
198183 . map ( |( n, r1, r2) | ( n, r1. max ( r2) ) )
199- . or_else ( || extract_polygon_parameters ( Some ( layer) , document) . map ( | ( n , r ) | ( n , r ) ) )
184+ . or_else ( || extract_polygon_parameters ( Some ( layer) , document) )
200185 else {
201186 return ;
202187 } ;
@@ -218,9 +203,7 @@ impl NumberOfPointsHandle {
218203 y : -radius * angle. cos ( ) ,
219204 } ) ;
220205
221- let Some ( direction) = ( point - center) . try_normalize ( ) else {
222- continue ;
223- } ;
206+ let Some ( direction) = ( point - center) . try_normalize ( ) else { continue } ;
224207
225208 // If the user zooms out such that shape is very small hide the gizmo
226209 if point. distance ( center) < GIZMO_HIDE_THRESHOLD {
@@ -236,15 +219,12 @@ impl NumberOfPointsHandle {
236219 }
237220 }
238221
239- pub fn update_no_of_sides ( & self , document : & DocumentMessageHandler , input : & InputPreprocessorMessageHandler , responses : & mut VecDeque < Message > , drag_start : DVec2 ) {
222+ pub fn update_number_of_sides ( & self , document : & DocumentMessageHandler , input : & InputPreprocessorMessageHandler , responses : & mut VecDeque < Message > , drag_start : DVec2 ) {
240223 let delta = input. mouse . position - document. metadata ( ) . document_to_viewport . transform_point2 ( drag_start) ;
241224 let sign = ( input. mouse . position . x - document. metadata ( ) . document_to_viewport . transform_point2 ( drag_start) . x ) . signum ( ) ;
242- let net_delta = ( delta. length ( ) / 25.0 ) . round ( ) * sign;
243-
244- let Some ( layer) = self . layer else {
245- return ;
246- } ;
225+ let net_delta = ( delta. length ( ) / 25. ) . round ( ) * sign;
247226
227+ let Some ( layer) = self . layer else { return } ;
248228 let Some ( node_id) = graph_modification_utils:: get_star_id ( layer, & document. network_interface ) . or ( graph_modification_utils:: get_polygon_id ( layer, & document. network_interface ) ) else {
249229 return ;
250230 } ;
0 commit comments