From 551d4c1c60fffe9319f9cda0136f9da9f3adb679 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Mon, 12 Oct 2026 01:13:12 +0300 Subject: [PATCH] fix(grips): arcs, circles and solids with a flipped normal show grips in place Their grip code already works in world space, and the dispatch layer converted the grips through the OCS a second time, so for a normal of (0,0,-1) the grips (and grip edits) were mirrored across the Y axis. Fixes #1683 Co-Authored-By: Claude Opus 5.5 --- src/scene/view/dispatch.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scene/view/dispatch.rs b/src/scene/view/dispatch.rs index 8dccdd9fa..927f6877b 100644 --- a/src/scene/view/dispatch.rs +++ b/src/scene/view/dispatch.rs @@ -34,12 +34,12 @@ pub fn prop_current_vertex() -> usize { /// through untouched. Per-entity grip code works in raw field space, so the /// dispatch layer converts: display grips OCS→WCS, incoming edits WCS→OCS. fn planar_ocs_normal(entity: &EntityType) -> Option<(f64, f64, f64)> { + // Arc, Circle and Solid grips are already world-space (their grip code + // places them through the OCS itself); converting them again mirrors + // them for a flipped normal. let n = match entity { - EntityType::Arc(e) => e.normal, - EntityType::Circle(e) => e.normal, EntityType::LwPolyline(e) => e.normal, EntityType::Polyline2D(e) => e.normal, - EntityType::Solid(e) => e.normal, EntityType::Text(e) => e.normal, EntityType::AttributeDefinition(e) => e.normal, EntityType::Hatch(e) => e.normal,