@@ -86,11 +86,12 @@ impl PointRadiusHandle {
8686 }
8787
8888 // Draw the point handle gizmo for the polygon shape
89- if let Some ( ( sides, radius) ) = extract_polygon_parameters ( Some ( layer) , document) {
89+ if let Some ( ( sides, radius, is_inner_radius ) ) = extract_polygon_parameters ( Some ( layer) , document) {
9090 let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
91+ let effective_radius = if is_inner_radius { radius / ( PI / sides as f64 ) . cos ( ) } else { radius } ;
9192
9293 for i in 0 ..sides {
93- let point = polygon_vertex_position ( viewport, i as i32 , sides, radius ) ;
94+ let point = polygon_vertex_position ( viewport, i as i32 , sides, effective_radius ) ;
9495 let center = viewport. transform_point2 ( DVec2 :: ZERO ) ;
9596
9697 // If the user zooms out such that shape is very small hide the gizmo
@@ -129,8 +130,9 @@ impl PointRadiusHandle {
129130 }
130131
131132 // Polygon
132- if let Some ( ( sides, radius) ) = extract_polygon_parameters ( Some ( layer) , document) {
133- let point = polygon_vertex_position ( viewport, self . point as i32 , sides, radius) ;
133+ if let Some ( ( sides, radius, is_inner_radius) ) = extract_polygon_parameters ( Some ( layer) , document) {
134+ let effective_radius = if is_inner_radius { radius / ( PI / sides as f64 ) . cos ( ) } else { radius } ;
135+ let point = polygon_vertex_position ( viewport, self . point as i32 , sides, effective_radius) ;
134136
135137 if matches ! ( & self . handle_state, PointRadiusHandleState :: Hover ) && ( mouse_position - point) . length ( ) > 5. {
136138 self . update_state ( PointRadiusHandleState :: Inactive ) ;
@@ -165,11 +167,12 @@ impl PointRadiusHandle {
165167 }
166168
167169 // Draw the point handle gizmo for the Polygon shape
168- if let Some ( ( sides, radius) ) = extract_polygon_parameters ( Some ( layer) , document) {
170+ if let Some ( ( sides, radius, is_inner_radius ) ) = extract_polygon_parameters ( Some ( layer) , document) {
169171 let viewport = document. metadata ( ) . transform_to_viewport ( layer) ;
172+ let effective_radius = if is_inner_radius { radius / ( PI / sides as f64 ) . cos ( ) } else { radius } ;
170173
171174 for i in 0 ..sides {
172- let point = polygon_vertex_position ( viewport, i as i32 , sides, radius ) ;
175+ let point = polygon_vertex_position ( viewport, i as i32 , sides, effective_radius ) ;
173176 let center = viewport. transform_point2 ( DVec2 :: ZERO ) ;
174177
175178 // If the user zooms out such that shape is very small hide the gizmo
@@ -210,8 +213,9 @@ impl PointRadiusHandle {
210213 }
211214
212215 // Polygon
213- if let Some ( ( sides, radius) ) = extract_polygon_parameters ( Some ( layer) , document) {
214- let point = polygon_vertex_position ( viewport, self . point as i32 , sides, radius) ;
216+ if let Some ( ( sides, radius, is_inner_radius) ) = extract_polygon_parameters ( Some ( layer) , document) {
217+ let effective_radius = if is_inner_radius { radius / ( PI / sides as f64 ) . cos ( ) } else { radius } ;
218+ let point = polygon_vertex_position ( viewport, self . point as i32 , sides, effective_radius) ;
215219
216220 let Some ( direction) = ( point - center) . try_normalize ( ) else { return } ;
217221
@@ -419,17 +423,23 @@ impl PointRadiusHandle {
419423 } ;
420424
421425 let viewport_transform = document. network_interface . document_metadata ( ) . transform_to_viewport ( layer) ;
422- let center = viewport_transform . transform_point2 ( DVec2 :: ZERO ) ;
426+
423427 let radius_index = self . radius_index ;
424428
425429 let original_radius = self . initial_radius ;
426430
427- let delta = viewport_transform. inverse ( ) . transform_point2 ( input. mouse . position ) - viewport_transform. inverse ( ) . transform_point2 ( drag_start) ;
428- let radius = drag_start - center;
431+ let drag_start = viewport_transform. inverse ( ) . transform_point2 ( drag_start) ;
432+ let delta = viewport_transform. inverse ( ) . transform_point2 ( input. mouse . position ) - drag_start;
433+ let radius = drag_start;
429434 let projection = delta. project_onto ( radius) ;
430435 let sign = radius. dot ( delta) . signum ( ) ;
431436
432437 let mut net_delta = projection. length ( ) * sign * original_radius. signum ( ) ;
438+ if let Some ( ( sides, _, is_inner_radius) ) = extract_polygon_parameters ( Some ( layer) , document) {
439+ if is_inner_radius {
440+ net_delta *= ( PI / sides as f64 ) . cos ( ) ;
441+ }
442+ }
433443 let new_radius = original_radius + net_delta;
434444
435445 self . update_state ( PointRadiusHandleState :: Dragging ) ;
0 commit comments