.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/012-camera-position.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_012-camera-position.py: .. _camera_position_example: Control camera position and orientation ======================================== This example showcases various camera positioning and rotation techniques to navigate and view results from different angles: - **Axis-aligned camera positions** (top, bottom, front, back, left, right, isometric). - **Camera rotation** around world axes (X, Y, Z). - **Combined transformations** by chaining rotation operations. - **Viewport-level camera control** for visualization management. .. GENERATED FROM PYTHON SOURCE LINES 34-35 Import dependencies .. GENERATED FROM PYTHON SOURCE LINES 35-43 .. code-block:: Python from ansys.result_explorer.core import launch_result_explorer from ansys.result_explorer.core.examples import ( ExampleKeys, get_example_file, get_example_snapshot_settings, ) from ansys.result_explorer.core.objects import CameraPosition .. GENERATED FROM PYTHON SOURCE LINES 44-47 Launch Result Explorer and load data ------------------------------------ Start a Result Explorer instance and create a workspace with a solution. .. GENERATED FROM PYTHON SOURCE LINES 47-61 .. code-block:: Python rx = launch_result_explorer() rst_path = get_example_file(ExampleKeys.RST_MULTIPLE_CONNECTIONS) print("Creating workspace...") workspace = rx.create_workspace(name="Camera Example Workspace") print("Creating solution...") sol = rx.create_solution( name="Camera Example Solution", file_path=rst_path, ) print(f"Solution created: {sol}") .. rst-class:: sphx-glr-script-out .. code-block:: none Creating workspace... Creating solution... Solution created: ====================================================================== Solution: Camera Example Solution ====================================================================== ID: 7ef35e87-1ecf-475c-9896-759962669f74 Description: N/A Status: Ready: Yes Live: No Result Files: - /home/runner/work/pyresultexplorer/pyresultexplorer/tests/data/multiple_connections.rst (key: rst) Analysis Information: Physics Type: mechanical Analysis Type: static Solver Version: 24.1 Unit System: MKS: m, kg, N, s, V, A, degC Mesh Information: Num Elements: 246 Num Nodes: 844 Num Named Selections: 2 Num Bodies: 18 Distance Unit: m Results Information: Num Sets: 1 Available Results: 28 Time/Freq Unit: s Available Plot Results: Displacement - total_displacement - displacement [X, Y, Z] Stress - stress_tensor [XX, YY, ZZ, XY, YZ, XZ] - equivalent_von_mises_stress - principal_stress_1 [1] - principal_stress_2 [2] - principal_stress_3 [3] Elastic Strain - elastic_strain_tensor [XX, YY, ZZ, XY, YZ, XZ] - equivalent_elastic_strain - principal_elastic_strain_1 [1] - principal_elastic_strain_2 [2] - principal_elastic_strain_3 [3] Structural Temperature - structural_temperature Strain Energy - strain_energy Kinetic Energy - kinetic_energy Contact - contact_status - contact_pressure - contact_penetration - contact_sliding_distance - contact_gap_distance - contact_friction_stress - contact_total_stress - contact_fluid_penetration_pressure - contact_surface_heat_flux Beam Results - beam_axial_force - beam_bending_moment_y - beam_bending_moment_z - beam_torsional_moment - beam_axial_stress - beam_axial_strain - beam_shear_force_y - beam_shear_force_z User Defined Solver Text Outputs (Logs): None ====================================================================== .. GENERATED FROM PYTHON SOURCE LINES 62-65 Assign a view to a viewport ---------------------------- Pick a 3-D view and assign it to the workspace viewport. .. GENERATED FROM PYTHON SOURCE LINES 65-77 .. code-block:: Python views = sol.plot_views view = next((v for v in views if "Displacement" in v.name), None) or views[0] print(f"Using view: {view.name}") print("Assigning view to viewport...") viewport = workspace.assign_view(view=view, wait=True) viewport.display_options.show_mesh_edges = True print(f"Viewport ready: {viewport}") viewport.save_snapshot( file_path="012-camera-position-initial.png", settings=get_example_snapshot_settings() ) .. image-sg:: /examples/images/sphx_glr_012-camera-position_001.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none Using view: Displacement Assigning view to viewport... Viewport ready: Viewport(0b380bc4-d2f5-447c-a867-959692615dae) .. GENERATED FROM PYTHON SOURCE LINES 78-82 Preserve initial camera state ------------------------------ Read the initial camera state to preserve zoom and translation when applying preset orientations. .. GENERATED FROM PYTHON SOURCE LINES 82-100 .. code-block:: Python initial_cam = viewport.display_options.camera_position initial_zoom = initial_cam.zoom if initial_cam is not None else 1.0 initial_translation = initial_cam.translation if initial_cam is not None else (0.0, 0.0, 0.0) print(f"Initial zoom={initial_zoom}, translation={initial_translation}") def apply_camera(label: str, cam: CameraPosition) -> None: """Apply a camera position and print the result.""" print(f"\n--- {label} ---") cam = cam.with_zoom(initial_zoom).with_translation(*initial_translation) opts = viewport.display_options opts.camera_position = cam viewport.save_snapshot( file_path=f"012-camera-position-{label.replace(' ', '-').lower()}.png", settings=get_example_snapshot_settings(), ) .. rst-class:: sphx-glr-script-out .. code-block:: none Initial zoom=0.05590475075809319, translation=(-0.0017736924358639327, -0.0010054096795604189, -0.01587615475514842) .. GENERATED FROM PYTHON SOURCE LINES 101-104 Apply axis-aligned preset views -------------------------------- Set the camera to standard axis-aligned orientations. .. GENERATED FROM PYTHON SOURCE LINES 104-112 .. code-block:: Python apply_camera("Top view", CameraPosition.top()) apply_camera("Bottom view", CameraPosition.bottom()) apply_camera("Front view", CameraPosition.front()) apply_camera("Back view", CameraPosition.back()) apply_camera("Left view", CameraPosition.left()) apply_camera("Right view", CameraPosition.right_view()) apply_camera("Isometric view", CameraPosition.isometric()) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /examples/images/sphx_glr_012-camera-position_002.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_002.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_003.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_003.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_004.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_004.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_005.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_005.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_006.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_006.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_007.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_007.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_008.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_008.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out .. code-block:: none --- Top view --- --- Bottom view --- --- Front view --- --- Back view --- --- Left view --- --- Right view --- --- Isometric view --- .. GENERATED FROM PYTHON SOURCE LINES 113-116 Apply rotations around world axes ----------------------------------- Rotate the camera from an isometric base around each world axis. .. GENERATED FROM PYTHON SOURCE LINES 116-122 .. code-block:: Python iso = CameraPosition.isometric() apply_camera("Isometric + 30° around X", iso.rotate_x(30)) apply_camera("Isometric + 45° around Y", iso.rotate_y(45)) apply_camera("Isometric + 60° around Z", iso.rotate_z(60)) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /examples/images/sphx_glr_012-camera-position_009.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_009.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_010.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_010.png :class: sphx-glr-multi-img * .. image-sg:: /examples/images/sphx_glr_012-camera-position_011.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_011.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out .. code-block:: none --- Isometric + 30° around X --- --- Isometric + 45° around Y --- --- Isometric + 60° around Z --- .. GENERATED FROM PYTHON SOURCE LINES 123-126 Combine multiple rotations ---------------------------- Chain multiple rotations to create complex camera orientations. .. GENERATED FROM PYTHON SOURCE LINES 126-132 .. code-block:: Python apply_camera( "Isometric + 15° X + 30° Y + 45° Z", iso.rotate_x(15).rotate_y(30).rotate_z(45), ) rx.stop() .. image-sg:: /examples/images/sphx_glr_012-camera-position_012.png :alt: 012 camera position :srcset: /examples/images/sphx_glr_012-camera-position_012.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none --- Isometric + 15° X + 30° Y + 45° Z --- .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 29.668 seconds) .. _sphx_glr_download_examples_012-camera-position.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: 012-camera-position.ipynb <012-camera-position.ipynb>` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: 012-camera-position.py <012-camera-position.py>` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: 012-camera-position.zip <012-camera-position.zip>` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_