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 ,
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:: {
12
+ extract_polygon_parameters, extract_star_parameters, inside_polygon, inside_star, polygon_vertex_position, star_vertex_position,
4
13
} ;
5
- use std:: { collections:: VecDeque , f64:: consts:: TAU } ;
6
-
7
- use crate :: messages:: { portfolio:: document:: utility_types:: document_metadata:: LayerNodeIdentifier , prelude:: Responses } ;
14
+ use crate :: messages:: tool:: tool_messages:: tool_prelude:: Key ;
8
15
use 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
- } ;
16
+ use graph_craft:: document:: NodeInput ;
17
+ use graph_craft:: document:: value:: TaggedValue ;
18
+ use std:: collections:: VecDeque ;
19
+ use std:: f64:: consts:: TAU ;
25
20
26
21
#[ derive( Clone , Debug , Default , PartialEq ) ]
27
22
pub enum NumberOfPointsHandleState {
@@ -43,6 +38,7 @@ impl NumberOfPointsHandle {
43
38
self . handle_state = NumberOfPointsHandleState :: Inactive ;
44
39
self . layer = None ;
45
40
}
41
+
46
42
pub fn update_state ( & mut self , state : NumberOfPointsHandleState ) {
47
43
self . handle_state = state;
48
44
}
@@ -69,18 +65,16 @@ impl NumberOfPointsHandle {
69
65
70
66
match & self . handle_state {
71
67
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
- } ) {
68
+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
69
+ let layers = selected_nodes. selected_visible_and_unlocked_layers ( & document. network_interface ) . filter ( |layer| {
70
+ graph_modification_utils:: get_star_id ( * layer, & document. network_interface ) . is_some ( ) || graph_modification_utils:: get_polygon_id ( * layer, & document. network_interface ) . is_some ( )
71
+ } ) ;
72
+ for layer in layers {
79
73
if let Some ( ( n, radius1, radius2) ) = extract_star_parameters ( Some ( layer) , document) {
80
74
let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
81
75
let center = viewport. transform_point2 ( DVec2 :: ZERO ) ;
82
76
83
- let point_on_max_radius = calculate_star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
77
+ let point_on_max_radius = star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
84
78
85
79
if mouse_position. distance ( center) < NUMBER_OF_POINTS_HANDLE_SPOKE_LENGTH && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
86
80
self . layer = Some ( layer) ;
@@ -94,7 +88,7 @@ impl NumberOfPointsHandle {
94
88
let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
95
89
let center = viewport. transform_point2 ( DVec2 :: ZERO ) ;
96
90
97
- let point_on_max_radius = calculate_polygon_vertex_position ( viewport, 0 , n, radius) ;
91
+ let point_on_max_radius = polygon_vertex_position ( viewport, 0 , n, radius) ;
98
92
99
93
if mouse_position. distance ( center) < NUMBER_OF_POINTS_HANDLE_SPOKE_LENGTH && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
100
94
self . layer = Some ( layer) ;
@@ -106,13 +100,11 @@ impl NumberOfPointsHandle {
106
100
}
107
101
}
108
102
NumberOfPointsHandleState :: Hover | NumberOfPointsHandleState :: Dragging => {
109
- let Some ( layer) = self . layer else {
110
- return ;
111
- } ;
103
+ let Some ( layer) = self . layer else { return } ;
112
104
113
105
let Some ( ( n, radius) ) = extract_star_parameters ( Some ( layer) , document)
114
106
. map ( |( n, r1, r2) | ( n, r1. max ( r2) ) )
115
- . or_else ( || extract_polygon_parameters ( Some ( layer) , document) . map ( | ( n , r ) | ( n , r ) ) )
107
+ . or_else ( || extract_polygon_parameters ( Some ( layer) , document) )
116
108
else {
117
109
return ;
118
110
} ;
@@ -125,8 +117,6 @@ impl NumberOfPointsHandle {
125
117
self . layer = None ;
126
118
self . draw_spokes ( center, viewport, n, radius, overlay_context) ;
127
119
responses. add ( FrontendMessage :: UpdateMouseCursor { cursor : MouseCursorIcon :: Default } ) ;
128
-
129
- return ;
130
120
}
131
121
}
132
122
}
@@ -146,13 +136,11 @@ impl NumberOfPointsHandle {
146
136
147
137
match & self . handle_state {
148
138
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
- } ) {
139
+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
140
+ let layers = selected_nodes. selected_visible_and_unlocked_layers ( & document. network_interface ) . filter ( |layer| {
141
+ graph_modification_utils:: get_star_id ( * layer, & document. network_interface ) . is_some ( ) || graph_modification_utils:: get_polygon_id ( * layer, & document. network_interface ) . is_some ( )
142
+ } ) ;
143
+ for layer in layers {
156
144
if let Some ( ( n, radius1, radius2) ) = extract_star_parameters ( Some ( layer) , document) {
157
145
let radius = radius1. max ( radius2) ;
158
146
let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
@@ -163,7 +151,7 @@ impl NumberOfPointsHandle {
163
151
return ;
164
152
}
165
153
}
166
- let point_on_max_radius = calculate_star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
154
+ let point_on_max_radius = star_vertex_position ( viewport, 0 , n, radius1, radius2) ;
167
155
168
156
if inside_star ( viewport, n, radius1, radius2, mouse_position) && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
169
157
self . draw_spokes ( center, viewport, n, radius, overlay_context) ;
@@ -180,7 +168,7 @@ impl NumberOfPointsHandle {
180
168
return ;
181
169
}
182
170
}
183
- let point_on_max_radius = calculate_polygon_vertex_position ( viewport, 0 , n, radius) ;
171
+ let point_on_max_radius = polygon_vertex_position ( viewport, 0 , n, radius) ;
184
172
185
173
if inside_polygon ( viewport, n, radius, mouse_position) && point_on_max_radius. distance ( center) > GIZMO_HIDE_THRESHOLD {
186
174
self . draw_spokes ( center, viewport, n, radius, overlay_context) ;
@@ -190,13 +178,11 @@ impl NumberOfPointsHandle {
190
178
}
191
179
}
192
180
NumberOfPointsHandleState :: Hover | NumberOfPointsHandleState :: Dragging => {
193
- let Some ( layer) = self . layer else {
194
- return ;
195
- } ;
181
+ let Some ( layer) = self . layer else { return } ;
196
182
197
183
let Some ( ( n, radius) ) = extract_star_parameters ( Some ( layer) , document)
198
184
. map ( |( n, r1, r2) | ( n, r1. max ( r2) ) )
199
- . or_else ( || extract_polygon_parameters ( Some ( layer) , document) . map ( | ( n , r ) | ( n , r ) ) )
185
+ . or_else ( || extract_polygon_parameters ( Some ( layer) , document) )
200
186
else {
201
187
return ;
202
188
} ;
@@ -218,9 +204,7 @@ impl NumberOfPointsHandle {
218
204
y : -radius * angle. cos ( ) ,
219
205
} ) ;
220
206
221
- let Some ( direction) = ( point - center) . try_normalize ( ) else {
222
- continue ;
223
- } ;
207
+ let Some ( direction) = ( point - center) . try_normalize ( ) else { continue } ;
224
208
225
209
// If the user zooms out such that shape is very small hide the gizmo
226
210
if point. distance ( center) < GIZMO_HIDE_THRESHOLD {
@@ -236,15 +220,12 @@ impl NumberOfPointsHandle {
236
220
}
237
221
}
238
222
239
- pub fn update_no_of_sides ( & self , document : & DocumentMessageHandler , input : & InputPreprocessorMessageHandler , responses : & mut VecDeque < Message > , drag_start : DVec2 ) {
223
+ pub fn update_number_of_sides ( & self , document : & DocumentMessageHandler , input : & InputPreprocessorMessageHandler , responses : & mut VecDeque < Message > , drag_start : DVec2 ) {
240
224
let delta = input. mouse . position - document. metadata ( ) . document_to_viewport . transform_point2 ( drag_start) ;
241
225
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
- } ;
226
+ let net_delta = ( delta. length ( ) / 25. ) . round ( ) * sign;
247
227
228
+ let Some ( layer) = self . layer else { return } ;
248
229
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 {
249
230
return ;
250
231
} ;
0 commit comments