fix(viewport): stabilize grid and grip clipping
Keep the grid on UCS XY, derive spacing from zoom, and clip perspective lines by screen density without dropping the near side.
This commit is contained in:
parent
e0a2e1ffd3
commit
7f1a1ff57b
4 changed files with 573 additions and 233 deletions
|
|
@ -1,4 +1,3 @@
|
|||
use crate::ui::overlay::GridPlane;
|
||||
use acadrust::tables::Ucs;
|
||||
|
||||
// ── Coordinate parsing ─────────────────────────────────────────────────────
|
||||
|
|
@ -160,22 +159,6 @@ pub(super) fn ucs_rotated_z(origin: glam::DVec3, angle_z: f32) -> Ucs {
|
|||
ucs
|
||||
}
|
||||
|
||||
// ── Grid plane detection ───────────────────────────────────────────────────
|
||||
|
||||
/// Choose the grid plane whose normal is most aligned with the camera view direction.
|
||||
pub(super) fn grid_plane_from_camera(pitch: f32, yaw: f32) -> GridPlane {
|
||||
let fz = pitch.sin().abs();
|
||||
let fy = (pitch.cos() * yaw.cos()).abs();
|
||||
let fx = (pitch.cos() * yaw.sin()).abs();
|
||||
if fz >= fy && fz >= fx {
|
||||
GridPlane::Xy
|
||||
} else if fy >= fx {
|
||||
GridPlane::Xz
|
||||
} else {
|
||||
GridPlane::Yz
|
||||
}
|
||||
}
|
||||
|
||||
// ── Drawing constraint helpers ─────────────────────────────────────────────
|
||||
|
||||
/// Constrain `pt` to the nearest 90° direction from `base`, in the active UCS
|
||||
|
|
|
|||
Loading…
Reference in a new issue