fix(grips): compute grip positions in f64 so they sit on the wire
Grip markers drew visibly offset from the entity on large-coordinate (UTM-scale) drawings: every Grippable impl cast the f64 entity coordinates to f32 BEFORE the world-offset subtraction, and at 1e7 magnitude an f32 holds ~0.9 drawing units of rounding error. The wires subtract the offset in f64 first (precision-preserving), so the grips landed up to ~1 unit away from the geometry they belong to. GripDef.world is now DVec3: producers fill it straight from the f64 entity data, refresh_selected_grips subtracts the world offset in f64, and only the small offset-local result is cast to f32 for screen-space projection (grips_to_screen / find_hit_grip) and drag state. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ed29933d87
commit
25715d1b03
33 changed files with 898 additions and 817 deletions
|
|
@ -437,9 +437,12 @@ impl OpenCADStudio {
|
|||
let grips = dispatch::grips(entity)
|
||||
.into_iter()
|
||||
.map(|mut g| {
|
||||
g.world.x -= wo[0] as f32;
|
||||
g.world.y -= wo[1] as f32;
|
||||
g.world.z -= wo[2] as f32;
|
||||
// Subtract in f64: at UTM magnitudes an f32 cast before
|
||||
// the offset costs ~1 unit and draws the grip off the
|
||||
// wire.
|
||||
g.world.x -= wo[0];
|
||||
g.world.y -= wo[1];
|
||||
g.world.z -= wo[2];
|
||||
g
|
||||
})
|
||||
.collect();
|
||||
|
|
|
|||
Loading…
Reference in a new issue