From 18f0eb8cd68af830424d4e8394c047c6fa7482ed Mon Sep 17 00:00:00 2001 From: Randy Frank Date: Fri, 12 Jul 2024 18:21:15 -0400 Subject: [PATCH 1/2] Add time scaling to OV export Allow EnSight time values to be scaled by arbitrary values. --- doc/source/_static/omniverse_tool.png | Bin 0 -> 60208 bytes doc/source/user_guide/omniverse_info.rst | 55 +++++++++++++----- .../config/extension.toml | 2 +- exts/ansys.geometry.service/docs/CHANGELOG.md | 5 +- .../config/extension.toml | 2 +- .../docs/CHANGELOG.md | 7 ++- .../config/extension.toml | 2 +- .../ansys.geometry.service/docs/CHANGELOG.md | 5 +- .../config/extension.toml | 2 +- .../docs/CHANGELOG.md | 7 ++- src/ansys/pyensight/core/utils/omniverse.py | 9 ++- 11 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 doc/source/_static/omniverse_tool.png diff --git a/doc/source/_static/omniverse_tool.png b/doc/source/_static/omniverse_tool.png new file mode 100644 index 0000000000000000000000000000000000000000..db2aca68d631b077a5b94204d9ac1c43971ae792 GIT binary patch literal 60208 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/doc/source/user_guide/omniverse_info.rst b/doc/source/user_guide/omniverse_info.rst index 4b438866a32..da6647daf36 100644 --- a/doc/source/user_guide/omniverse_info.rst +++ b/doc/source/user_guide/omniverse_info.rst @@ -21,12 +21,13 @@ Omniverse System Configuration ------------------------------ To use this functionality, a local installation of Omniverse is required. -Install Omniverse along with one application like "Create" or "View" on -your local system. +Please `install Omniverse `_ along +with one application like "Create" or "View" on your local system before +attempting to use this interface. PyEnSight and EnSight Python API -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-------------------------------- The ``omniverse`` pyensight module will look for and leverage locally installed Omniverse to provide its APIs. If you are using the @@ -46,6 +47,16 @@ in your own python, one can just use the API like this: s.ensight.utils.omniverse.update() +.. note:: + + The ``batch=False`` option used in the examples causes the EnSight + GUI to be displayed together with the Omniverse Composer GUI. + + Also, care must be taken to close the EnSight session before + exiting an Omniverse application hosting a PyEnSight session or is + it possible to leave the EnSight instance running. + + From inside an EnSight session, the API is similar: .. code-block:: python @@ -65,12 +76,22 @@ From inside an EnSight session, the API is similar: After running the script, the scene will appear in the Nucleus tree view as ``User/water``. The file ``dsg_scene.usd`` can be loaded into Composer. The -``s.ensight.utils.omniverse.update()`` command can be used to update the +``ensight.utils.omniverse.update()`` command can be used to update the USD data in Omniverse, reflecting any recent changes in the EnSight scene. +Starting with 2025 R1, one can also access Omniverse via an EnSight +user-defined tool: + +.. image:: /_static/omniverse_tool.png -Within an Omniverse Application -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +This tool will only be available if EnSight detects an installed copy +of Omniverse. Clicking on "Connect to Omniverse" executes something +similar to the previous Python snippet and the button will change to +a mode where it just executes ``ensight.utils.omniverse.update()``. + + +PyEnSight/Omniverse kit from Within an Omniverse Application +------------------------------------------------------------ To install the service (and the pyensight module) into an Omniverse application, one can install is via the third party extensions dialog. @@ -80,18 +101,24 @@ will install it, along with the ansys.pyensight.core module. .. image:: /_static/omniverse_extension.png -At this point, the same pyensight script can be used to connect to +At this point, the same pyensight script run in the Omniverse +``Script Editor`` panel can be used to connect to an EnSight session or the GUI panel can be used to connect to a copy of EnSight that was launched with the ``-grpc_server {port}`` option specified. +The ``ansys.geometry.serviceui`` kit includes a GUI similar to the +EnSight 2025 R1 user-defined tool. It allows one to select a +target URI in Omniverse and the details of a gRPC connection +to a running EnSight. For example, if one launches EnSight with +``ensight.bat -grpc_server 2345``, then the uri: ``grpc://127.0.0.1:2345`` +can to used to request a locally running EnSight to push the current +scene to Omniverse. -.. note:: - The ``batch=False`` option used in the examples causes the EnSight - GUI to be displayed together with the Omniverse Composer GUI. - - Also, care must be taken to close the EnSight session before - exiting an Omniverse application hosting a pyensight session or is - it possible to leave the EnSight instance running. +.. note:: + If the ``ansys.geometry.service`` and ``ansys.geometry.serviceui`` + do not show up in the Community extensions list in Omniverse, then + it can be added to the ``Extension Search Paths`` list as: + ``git://github.com/ansys/pyensight.git?branch=main&dir=exts``. diff --git a/exts/ansys.geometry.service/config/extension.toml b/exts/ansys.geometry.service/config/extension.toml index 0fe8d34a340..751305152fd 100644 --- a/exts/ansys.geometry.service/config/extension.toml +++ b/exts/ansys.geometry.service/config/extension.toml @@ -1,6 +1,6 @@ [package] # Semantic Versioning is used: https://semver.org/ -version = "0.8.6" +version = "0.8.7" # Lists people or organizations that are considered the "authors" of the package. authors = ["ANSYS"] diff --git a/exts/ansys.geometry.service/docs/CHANGELOG.md b/exts/ansys.geometry.service/docs/CHANGELOG.md index 96fc5462ec7..2abc3e1bc6a 100644 --- a/exts/ansys.geometry.service/docs/CHANGELOG.md +++ b/exts/ansys.geometry.service/docs/CHANGELOG.md @@ -3,6 +3,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [0.9.0] - 2024-06-28 +## [0.8.7] - 2024-07-12 +- Support for time varying data and temporal scaling + +## [0.8.4] - 2024-06-28 - Initial kit version of ANSYS Geometry Service Server diff --git a/exts/ansys.geometry.serviceui/config/extension.toml b/exts/ansys.geometry.serviceui/config/extension.toml index b4805b13f3b..bb506207f9e 100644 --- a/exts/ansys.geometry.serviceui/config/extension.toml +++ b/exts/ansys.geometry.serviceui/config/extension.toml @@ -1,6 +1,6 @@ [package] # Semantic Versioning is used: https://semver.org/ -version = "0.8.6" +version = "0.8.7" # Lists people or organizations that are considered the "authors" of the package. authors = ["ANSYS"] diff --git a/exts/ansys.geometry.serviceui/docs/CHANGELOG.md b/exts/ansys.geometry.serviceui/docs/CHANGELOG.md index 19eba7173c2..2abc3e1bc6a 100644 --- a/exts/ansys.geometry.serviceui/docs/CHANGELOG.md +++ b/exts/ansys.geometry.serviceui/docs/CHANGELOG.md @@ -3,6 +3,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [0.9.0] - 2024-06-28 -- Initial kit version of ANSYS Geometry Service GUI +## [0.8.7] - 2024-07-12 +- Support for time varying data and temporal scaling + +## [0.8.4] - 2024-06-28 +- Initial kit version of ANSYS Geometry Service Server diff --git a/src/ansys/pyensight/core/exts/ansys.geometry.service/config/extension.toml b/src/ansys/pyensight/core/exts/ansys.geometry.service/config/extension.toml index 0fe8d34a340..751305152fd 100644 --- a/src/ansys/pyensight/core/exts/ansys.geometry.service/config/extension.toml +++ b/src/ansys/pyensight/core/exts/ansys.geometry.service/config/extension.toml @@ -1,6 +1,6 @@ [package] # Semantic Versioning is used: https://semver.org/ -version = "0.8.6" +version = "0.8.7" # Lists people or organizations that are considered the "authors" of the package. authors = ["ANSYS"] diff --git a/src/ansys/pyensight/core/exts/ansys.geometry.service/docs/CHANGELOG.md b/src/ansys/pyensight/core/exts/ansys.geometry.service/docs/CHANGELOG.md index 96fc5462ec7..2abc3e1bc6a 100644 --- a/src/ansys/pyensight/core/exts/ansys.geometry.service/docs/CHANGELOG.md +++ b/src/ansys/pyensight/core/exts/ansys.geometry.service/docs/CHANGELOG.md @@ -3,6 +3,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [0.9.0] - 2024-06-28 +## [0.8.7] - 2024-07-12 +- Support for time varying data and temporal scaling + +## [0.8.4] - 2024-06-28 - Initial kit version of ANSYS Geometry Service Server diff --git a/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/config/extension.toml b/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/config/extension.toml index b4805b13f3b..bb506207f9e 100644 --- a/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/config/extension.toml +++ b/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/config/extension.toml @@ -1,6 +1,6 @@ [package] # Semantic Versioning is used: https://semver.org/ -version = "0.8.6" +version = "0.8.7" # Lists people or organizations that are considered the "authors" of the package. authors = ["ANSYS"] diff --git a/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/docs/CHANGELOG.md b/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/docs/CHANGELOG.md index 19eba7173c2..2abc3e1bc6a 100644 --- a/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/docs/CHANGELOG.md +++ b/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/docs/CHANGELOG.md @@ -3,6 +3,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [0.9.0] - 2024-06-28 -- Initial kit version of ANSYS Geometry Service GUI +## [0.8.7] - 2024-07-12 +- Support for time varying data and temporal scaling + +## [0.8.4] - 2024-06-28 +- Initial kit version of ANSYS Geometry Service Server diff --git a/src/ansys/pyensight/core/utils/omniverse.py b/src/ansys/pyensight/core/utils/omniverse.py index 08106b43799..0ec38501402 100644 --- a/src/ansys/pyensight/core/utils/omniverse.py +++ b/src/ansys/pyensight/core/utils/omniverse.py @@ -173,6 +173,7 @@ def create_connection( temporal: bool = False, live: bool = True, debug_filename: str = "", + time_scale: float = 1.0, options: dict = {}, ) -> None: """Ensure that an EnSight dsg -> omniverse server is running @@ -200,9 +201,13 @@ def create_connection( If True, one can call 'update()' to send updated geometry to Omniverse. If False, the Omniverse connection will push a single update and then disconnect. Defaults to True. + time_scale : float + Multiply all EnSight time values by this factor before exporting to Omniverse. + The default is 1.0. debug_filename : str If the name of a file is provided, it will be used to save logging information on - the connection between EnSight and Omniverse. + the connection between EnSight and Omniverse. This option is no longer supported, + but the API remains for backwards compatibility. options : dict Allows for a fallback for the grpc host/port and the security token. """ @@ -237,6 +242,8 @@ def create_connection( cmd.append("--/exts/ansys.geometry.service/vrmode=1") if normalize_geometry: cmd.append("--/exts/ansys.geometry.service/normalizeGeometry=1") + if time_scale != 1.0: + cmd.append(f"--/exts/ansys.geometry.service/timeScale={time_scale}") cmd.append(f"--/exts/ansys.geometry.service/omniUrl={omniverse_path}") cmd.append(f"--/exts/ansys.geometry.service/dsgUrl={dsg_uri}") cmd.append("--/exts/ansys.geometry.service/run=1") From 759486529eecc5b93ab8150b7647b4800d1dd658 Mon Sep 17 00:00:00 2001 From: Randy Frank Date: Tue, 16 Jul 2024 18:06:09 -0400 Subject: [PATCH 2/2] Improve docs Extend the docs to cover developer cases. --- doc/source/user_guide/omniverse_info.rst | 70 ++++++++++++++++++- .../ansys/geometry/service/extension.py | 2 +- .../ansys/geometry/service/extension.py | 2 +- 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/doc/source/user_guide/omniverse_info.rst b/doc/source/user_guide/omniverse_info.rst index da6647daf36..ee360ea7933 100644 --- a/doc/source/user_guide/omniverse_info.rst +++ b/doc/source/user_guide/omniverse_info.rst @@ -27,7 +27,7 @@ attempting to use this interface. PyEnSight and EnSight Python API --------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``omniverse`` pyensight module will look for and leverage locally installed Omniverse to provide its APIs. If you are using the @@ -91,7 +91,7 @@ a mode where it just executes ``ensight.utils.omniverse.update()``. PyEnSight/Omniverse kit from Within an Omniverse Application ------------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To install the service (and the pyensight module) into an Omniverse application, one can install is via the third party extensions dialog. @@ -115,10 +115,74 @@ to a running EnSight. For example, if one launches EnSight with can to used to request a locally running EnSight to push the current scene to Omniverse. - .. note:: If the ``ansys.geometry.service`` and ``ansys.geometry.serviceui`` do not show up in the Community extensions list in Omniverse, then it can be added to the ``Extension Search Paths`` list as: ``git://github.com/ansys/pyensight.git?branch=main&dir=exts``. + + +Developers: Running a "dev" build from the Command Line +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Omniverse kits can be run as command line tools and +the ``ansys.geometry.service`` is designed to support this mode +of operation as well. For this to work, one needs a copy of the +pyensight wheel and the name of a ``kit`` executable. The pyensight wheel +can be built by checking out the repo and building it. One can +find the location of a kit via the ``Omniverse Launcher`` application +using the ``Settings`` option: + +.. image:: /_static/omniverse_create_location.png + +Consider an example where the create app has been installed and the +file ``C:\Users\me\AppData\Local\ov\pkg\create-2023.2.5\kit.bat`` +exists. A copy of the pyensight repo is located and built here: +``D:\repos\pyensight``. With these conditions, one can run the extension +from the command line like this: + +.. code-block:: bat + + cd "C:\Users\me\AppData\Local\ov\pkg\create-2023.2.5" + .\kit.bat --ext-folder "D:\repos\pyensight\exts" --enable ansys.geometry.service --/exts/ansys.geometry.service/help=1 + + +Will generate the following output in the logs: + +.. code-block:: + + ANSYS Omniverse Geometry Service: ansys.geometry.service-0.8.5 + --/exts/ansys.geometry.service/help=1 + Display this help. + --/exts/ansys.geometry.service/run=1 + Run the server. + --/exts/ansys.geometry.service/omniUrl=URL + Omniverse pathname. (default: omniverse://localhost/Users/test) + --/exts/ansys.geometry.service/dsgUrl=URL + Dynamic Scene Graph connection URL. (default: grpc://127.0.0.1:5234) + --/exts/ansys.geometry.service/securityCode=TOKEN + Dynamic Scene Graph security token. (default: ) + --/exts/ansys.geometry.service/temporal=0|1 + If non-zero, include all timeseteps in the scene. (default: False) + --/exts/ansys.geometry.service/vrmode=0|1 + If non-zero, do not include a camera in the scene. (default: False) + --/exts/ansys.geometry.service/normalizeGeometry=0|1 + If non-zero, remap the geometry to the domain [-1,-1,-1]-[1,1,1]. (default: False) + + +Documenting the various kit command line options. Using the ``run=1`` option will launch the server from +from the command line. This version of the service will be run using the version of the pyensight wheel +installed in the specified ``--ext-folder``. When run as above, the service will use the +latest release of the ansys.pyensight.core wheel. If a local build is located here: +``D:\repos\pyensight\dist\ansys_pyensight_core-0.9.0.dev0-py3-none-any.whl`` it can be +used in the above kit by installing it into the Omniverse kit Python: + + +.. code-block:: bat + + .\kit\python.bat -m pip install D:\repos\pyensight\dist\ansys_pyensight_core-0.9.0.dev0-py3-none-any.whl + + +This version will be used instead of the older version in the PyPi repository. + diff --git a/exts/ansys.geometry.service/ansys/geometry/service/extension.py b/exts/ansys.geometry.service/ansys/geometry/service/extension.py index f991ea49176..d8b5ebfbe56 100644 --- a/exts/ansys.geometry.service/ansys/geometry/service/extension.py +++ b/exts/ansys.geometry.service/ansys/geometry/service/extension.py @@ -331,7 +331,7 @@ def launch_server(self) -> None: cmd.extend(["--ext-folder", kit_dir]) cmd.extend(["--enable", "ansys.geometry.service"]) if self.security_token: - cmd.append(f"--/exts/ansys.geometry.service/securityCode={self.security_token}") + cmd.append(f'--/exts/ansys.geometry.service/securityCode="{self.security_token}"') if self.temporal: cmd.append("--/exts/ansys.geometry.service/temporal=1") if self.vrmode: diff --git a/src/ansys/pyensight/core/exts/ansys.geometry.service/ansys/geometry/service/extension.py b/src/ansys/pyensight/core/exts/ansys.geometry.service/ansys/geometry/service/extension.py index f991ea49176..d8b5ebfbe56 100644 --- a/src/ansys/pyensight/core/exts/ansys.geometry.service/ansys/geometry/service/extension.py +++ b/src/ansys/pyensight/core/exts/ansys.geometry.service/ansys/geometry/service/extension.py @@ -331,7 +331,7 @@ def launch_server(self) -> None: cmd.extend(["--ext-folder", kit_dir]) cmd.extend(["--enable", "ansys.geometry.service"]) if self.security_token: - cmd.append(f"--/exts/ansys.geometry.service/securityCode={self.security_token}") + cmd.append(f'--/exts/ansys.geometry.service/securityCode="{self.security_token}"') if self.temporal: cmd.append("--/exts/ansys.geometry.service/temporal=1") if self.vrmode: