forked from 1b-agent/opencadstudio-upstream
feat(paper): render-mode picker + ViewCube on active viewport
Paper-space'de bir viewport'a çift tıklanıp aktif hale gelince, model space'deki gibi sol üst köşede render-mode dropdown'ı ve sağ üst köşede ViewCube gösteriliyor. - render_mode_picker helper'a çıkarıldı; model space ve aktif paper viewport ortak kullanıyor (kod tekrarı yok) - SetRenderMode artık viewport-aware: aktif viewport varsa o viewport entity'sinin render_mode'unu, yoksa model-layout tab stilini günceller (Scene::active_viewport_render_mode getter/setter) - build_viewport_primitive'e show_viewcube parametresi; aktif viewport primitive'i ViewCube gizmo'sunu çiziyor - PaperViewportPane shader::Program artık Message'a özelleşti ve sol tık ViewCube hit-test'ini bounds-relative yapıp ViewCubeSnap üretiyor Bilinen sorun: picker/viewcube doğru konumda görünüyor ancak tıklamalar üstteki viewport_mouse mouse_area katmanına gidiyor; katman sırası bir sonraki adımda düzeltilecek. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
1 parent
fda0f2dbb9
commit
a41a05baa1
5 files changed
+149
-57
No files matched your search
@@ -2199,6 +2199,36 @@ impl Scene {
|
||||
}
|
||||
}
|
||||
|
||||
/// Render mode of the active paper-space viewport, or `None` when no
|
||||
/// viewport is active (PSPACE / model layout).
|
||||
pub fn active_viewport_render_mode(
|
||||
&self,
|
||||
) -> Option<acadrust::entities::ViewportRenderMode> {
|
||||
let h = self.active_viewport?;
|
||||
match self.document.get_entity(h) {
|
||||
Some(acadrust::EntityType::Viewport(vp)) => Some(vp.render_mode),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Set the active paper-space viewport's render mode. Returns `true`
|
||||
/// when a viewport was active and updated; `false` (no-op) otherwise,
|
||||
/// so the caller can fall back to the model-layout render mode.
|
||||
pub fn set_active_viewport_render_mode(
|
||||
&mut self,
|
||||
mode: acadrust::entities::ViewportRenderMode,
|
||||
) -> bool {
|
||||
let Some(h) = self.active_viewport else {
|
||||
return false;
|
||||
};
|
||||
if let Some(acadrust::EntityType::Viewport(vp)) = self.document.get_entity_mut(h) {
|
||||
vp.render_mode = mode;
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
/// View-rotation matrix for the active viewport (MSPACE), or the
|
||||
/// paper-space camera's matrix when not in MSPACE.
|
||||
/// Used by ViewCube hit-testing so clicks map to the correct camera.
|
||||
|
||||
Reference in new issue
Block a user