Repository navigation
feat: Remote rendering 4.5: Record camera and cross section drags in SERVER mode - #190
Open
LKasianAnsys wants to merge 6 commits into
Open
LKasianAnsys wants to merge 6 commits into
LKasianAnsys wants to merge 6 commits into
Conversation
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 26, 2026 14:30
348572a to
f5e6a7c
Compare
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 26, 2026 17:34
f5e6a7c to
0e80db3
Compare
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 26, 2026 19:46
0e80db3 to
63882ec
Compare
LKasianAnsys
marked this pull request as ready for review
October 26, 2026 20:45
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 28, 2026 14:10
624ebb7 to
476fc17
Compare
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 28, 2026 16:17
476fc17 to
4ceead7
Compare
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 28, 2026 16:31
4ceead7 to
206504f
Compare
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 29, 2026 21:55
206504f to
842eaf2
Compare
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
October 29, 2026 23:11
626a4db to
1741c9f
Compare
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
November 2, 2026 13:57
1741c9f to
4497b72
Compare
# Conflicts: # src/ansys/visor/viewer/renderer/server_renderer.py
LKasianAnsys
force-pushed
the
feat/4.5-record-camera-and-cross-section-drags
branch
from
November 2, 2026 14:24
4497b72 to
bc019e7
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue
Resolves #30
Context
Until now, a mouse drag in server mode moved the server's camera or cross-section widget, but the
save_stateAPI would keep the last synced camera, and dragging the cross-section plane did not actually move the clipping plane.In this PR, the server now detects the end of a gesture from the forwarded release or wheel event, and records the camera through the same code path used by the CLIENT mode
sync_camera.Manual check: start VISOR in SERVER mode.
Copilot summary
This pull request introduces a robust mechanism for recording and publishing camera and cross-section plane states at the end of user gestures (such as mouse drags and wheel events) in SERVER mode, ensuring accurate state synchronization after interactive changes. The changes span the renderer, window, widget, and test layers, with new hooks and logic to capture and publish state only when gestures complete, and comprehensive tests to verify the behavior.
Key changes grouped by theme:
Recording and Publishing State at Gesture End:
server_window.pyto detect the end of user gestures (mouse button release or wheel event) and trigger recording and publishing of the pipeline camera and cross-section plane states in a single, locked section. ([[1]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-a39360576881e234c010ed98e5367fb7a7d1b387da52f55a42d1efcf30ba092aR13-R16),[[2]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-a39360576881e234c010ed98e5367fb7a7d1b387da52f55a42d1efcf30ba092aR29-R37),[[3]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-a39360576881e234c010ed98e5367fb7a7d1b387da52f55a42d1efcf30ba092aL91-R117))record_pipeline_cameraandrecord_cross_section_planemethods inServerRendererto handle state recording and publishing, ensuring no redundant frame requests and correct state capture only when necessary. ([src/ansys/visor/viewer/renderer/server_renderer.pyR93-R117](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-f2ab9442d7526c6bc406de355e3ce5fc287e09ff8c49b5d1efec698a93ab723dR93-R117))_publish_camerato separate camera record publishing from frame requests, introducing_publish_camera_recordfor clarity and correct sequencing. ([src/ansys/visor/viewer/renderer/server_renderer.pyL154-R185](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-f2ab9442d7526c6bc406de355e3ce5fc287e09ff8c49b5d1efec698a93ab723dL154-R185))Widget Enhancements for Cross-Section Plane Tracking:
link_plane_to_handleandtake_handle_movedmethods toVisorCrossSectionWidget, enabling the widget to mark when the handle has been moved and to synchronize the clip plane with the handle at every drag step. ([[1]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-b0fef21f1bcc21331db361eecdc8bb7fbe52d8da6c4e9f64556f890030dcacfcR37-R38),[[2]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-b0fef21f1bcc21331db361eecdc8bb7fbe52d8da6c4e9f64556f890030dcacfcR67),[[3]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-b0fef21f1bcc21331db361eecdc8bb7fbe52d8da6c4e9f64556f890030dcacfcR183-R198))ServerRenderer. ([src/ansys/visor/viewer/renderer/server_renderer.pyR66](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-f2ab9442d7526c6bc406de355e3ce5fc287e09ff8c49b5d1efec698a93ab723dR66))Renderer Refactoring for State Recording:
sync_cameraandsync_cross_section_planeinPipelineRendererto delegate state recording and projection to new_write_cameraand_write_cross_sectionhelpers, clarifying responsibilities and supporting the new gesture-end recording logic. ([[1]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-9199ec1a3522d373bbefbf5a83b3eff4045fda5f22969be86aaac1a946c694f5L292-L299),[[2]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-9199ec1a3522d373bbefbf5a83b3eff4045fda5f22969be86aaac1a946c694f5L374-L386))Testing and Validation:
[[1]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-232814e2a82defe690b9c786f507c4d72bf3ff26707ef1adcc1c3da3b204213eR12-R19),[[2]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-232814e2a82defe690b9c786f507c4d72bf3ff26707ef1adcc1c3da3b204213eR34-R43),[[3]](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-232814e2a82defe690b9c786f507c4d72bf3ff26707ef1adcc1c3da3b204213eR54-R204))[tests/unit/renderer/test_server_window.pyR202-R211](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-1d3469247a2b4faf2316bde832548716aa2a75bc1998ee07d58fec284f48bae3R202-R211))Documentation and Changelog:
[doc/changelog.d/190.added.mdR1](https://github.com/ansys/Visual-Interactive-Simulation-Object-Renderer/pull/190/files#diff-83ff440840cf81f5cca748d99436963d52c68219d0d9d61057861937c8a45569R1))These changes collectively ensure that interactive camera and cross-section manipulations are reliably and efficiently captured and published, improving the accuracy of remote rendering state synchronization.
References: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]