feat(ucs): orient the ViewCube to the active UCS
The ViewCube showed world Front/Top/Right. It now composes the camera rotation with the active UCS (scene.viewcube_ucs, synced from the tab's active_ucs), so its faces follow the user's coordinate system in model space. Render uniform, hover/click hit-test, and the click→snap direction all go through scene.viewcube_ucs_mat() so they stay in lock-step; identity outside model space leaves paper-viewport navigation unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
88bf2e57dc
commit
d78ed60582
5 changed files with 43 additions and 9 deletions
|
|
@ -794,7 +794,7 @@ impl Scene {
|
|||
images,
|
||||
meshes: self.meshes_arc(),
|
||||
uniforms,
|
||||
cam_rotation: inst.camera.view_rotation_mat(),
|
||||
cam_rotation: inst.camera.view_rotation_mat() * self.viewcube_ucs_mat(),
|
||||
// Only the active viewport gets the hovered-region highlight.
|
||||
hover_region: if inst.active { hover_region } else { None },
|
||||
show_viewcube: inst.active,
|
||||
|
|
@ -826,7 +826,7 @@ impl Scene {
|
|||
cursor: mouse::Cursor,
|
||||
) {
|
||||
let pos = cursor.position_in(bounds);
|
||||
let cam_rotation = self.camera.borrow().view_rotation_mat();
|
||||
let cam_rotation = self.camera.borrow().view_rotation_mat() * self.viewcube_ucs_mat();
|
||||
if let Some(p) = pos {
|
||||
let tile = self.active_model_tile_bounds(bounds.width, bounds.height);
|
||||
state.hover_region = hover_id(
|
||||
|
|
|
|||
Loading…
Reference in a new issue