ocs_doc_api: Phase 4 set_view + viewport-view query

- SetViewportView op + GetViewportView query (append-only).
- backend set_viewport_view (update Viewport.view_target/view_height) + viewport_view.
- facade Entity::set_view/viewport_view (Viewport returns Entity).
- spec Viewport methods; api_reference + binding_schema regenerated; mocks + baseline.
- Test phase4_set_view_and_view_query -> 609 host lib + 3 consistency green.
- Phase 4 complete.
This commit is contained in:
Sebastian committed 2026-09-06 10:16:27 +02:00
1 parent 67655add72
commit e6c132e0eb
15 files changed
+187 -7

No files matched your search

+12
View File
@@ -309,6 +309,18 @@ impl Entity {
self.session.apply_op(Operation::SetAttribute { id: self.id, tag: tag.to_string(), value: value.to_string() })?;
Ok(())
}
/// This viewport's view (target WCS + zoom height). Viewport-only.
pub fn viewport_view(&self) -> ApiResult<([f64; 3], f64)> {
match self.session.one_query(Query::GetViewportView { id: self.id })? {
QueryResult::ViewportView { target, height } => Ok((target, height)),
_ => Err(ApiError::Transport("unexpected viewport-view result".into())),
}
}
/// Retarget / re-zoom this viewport (one undo step). Viewport-only.
pub fn set_view(&self, view_target: [f64; 3], view_height: f64) -> ApiResult<()> {
self.session.apply_op(Operation::SetViewportView { id: self.id, view_target, view_height })?;
Ok(())
}
pub fn as_solid(&self) -> Option<Solid> {
// Typed downcast is validated by the view's kind.
matches!(self.view().ok()?.kind.as_str(), "Solid3D").then(|| Solid::new(self.session.clone(), self.id))