ansys-pyensight-core 0.8.5__tar.gz → 0.8.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ansys-pyensight-core might be problematic. Click here for more details.

Files changed (52) hide show
  1. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/PKG-INFO +1 -1
  2. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/pyproject.toml +1 -1
  3. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/ansys/geometry/service/extension.py +47 -6
  4. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/config/extension.toml +2 -1
  5. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/ansys/geometry/serviceui/extension.py +24 -1
  6. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/config/extension.toml +1 -1
  7. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/dsg_server.py +7 -0
  8. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/omniverse_dsg_server.py +8 -3
  9. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/LICENSE +0 -0
  10. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/README.rst +0 -0
  11. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/__init__.py +0 -0
  12. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/deep_pixel_view.html +0 -0
  13. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/dockerlauncher.py +0 -0
  14. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/enscontext.py +0 -0
  15. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/enshell_grpc.py +0 -0
  16. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/ensight_grpc.py +0 -0
  17. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/ensobj.py +0 -0
  18. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/ansys/geometry/service/__init__.py +0 -0
  19. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/data/icon.png +0 -0
  20. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/data/preview.png +0 -0
  21. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/docs/CHANGELOG.md +0 -0
  22. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/docs/README.md +0 -0
  23. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.service/docs/index.rst +0 -0
  24. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/ansys/geometry/serviceui/__init__.py +0 -0
  25. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/data/icon.png +0 -0
  26. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/data/preview.png +0 -0
  27. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/docs/CHANGELOG.md +0 -0
  28. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/docs/README.md +0 -0
  29. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/exts/ansys.geometry.serviceui/docs/index.rst +0 -0
  30. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/launch_ensight.py +0 -0
  31. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/launcher.py +0 -0
  32. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/listobj.py +0 -0
  33. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/locallauncher.py +0 -0
  34. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/py.typed +0 -0
  35. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/renderable.py +0 -0
  36. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/session.py +0 -0
  37. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/sgeo_poll.html +0 -0
  38. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/__init__.py +0 -0
  39. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/adr.py +0 -0
  40. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/export.py +0 -0
  41. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/omniverse.py +0 -0
  42. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/parts.py +0 -0
  43. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/query.py +0 -0
  44. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/readers.py +0 -0
  45. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/resources/Materials/000_sky.exr +0 -0
  46. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/resources/Materials/Fieldstone/Fieldstone_BaseColor.png +0 -0
  47. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/resources/Materials/Fieldstone/Fieldstone_N.png +0 -0
  48. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/resources/Materials/Fieldstone/Fieldstone_ORM.png +0 -0
  49. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/resources/Materials/Fieldstone.mdl +0 -0
  50. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/support.py +0 -0
  51. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/variables.py +0 -0
  52. {ansys_pyensight_core-0.8.5 → ansys_pyensight_core-0.8.6}/src/ansys/pyensight/core/utils/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ansys-pyensight-core
3
- Version: 0.8.5
3
+ Version: 0.8.6
4
4
  Summary: A python wrapper for Ansys EnSight
5
5
  Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
6
6
  Maintainer-email: "ANSYS, Inc." <pyansys.core@ansys.com>
@@ -6,7 +6,7 @@ build-backend = "flit_core.buildapi"
6
6
 
7
7
  [project]
8
8
  name = "ansys-pyensight-core"
9
- version = "0.8.5"
9
+ version = "0.8.6"
10
10
  description = "A python wrapper for Ansys EnSight"
11
11
  readme = "README.rst"
12
12
  requires-python = ">=3.9,<4"
@@ -13,6 +13,8 @@ import psutil
13
13
 
14
14
  try:
15
15
  import ansys.pyensight.core
16
+ import ansys.pyensight.core.utils.dsg_server as tmp_dsg_server # noqa: F401
17
+ import ansys.pyensight.core.utils.omniverse_dsg_server as tmp_ov_dsg_server # noqa: F401
16
18
  except ModuleNotFoundError:
17
19
  logging.warning("ansys.geometry.server - Installing ansys-pyensight-core")
18
20
  omni.kit.pipapi.install("ansys-pyensight-core")
@@ -82,6 +84,11 @@ class AnsysGeometryServiceServerExtension(omni.ext.IExt):
82
84
  self._security_token = self._setting("securityCode", "ENSIGHT_SECURITY_TOKEN")
83
85
  self._temporal = self._setting("temporal") != "0"
84
86
  self._vrmode = self._setting("vrmode") != "0"
87
+ try:
88
+ scale = float(self._setting("timeScale"))
89
+ except ValueError:
90
+ scale = 1.0
91
+ self._time_scale = scale
85
92
  self._normalize_geometry = self._setting("normalizeGeometry") != "0"
86
93
  self._version = "unknown"
87
94
  self._shutdown = False
@@ -141,6 +148,15 @@ class AnsysGeometryServiceServerExtension(omni.ext.IExt):
141
148
  def normalize_geometry(self, val: bool) -> None:
142
149
  self._normalize_geometry = val
143
150
 
151
+ @property
152
+ def time_scale(self) -> float:
153
+ """Value to multiply DSG time values by before passing to Omniverse"""
154
+ return self._time_scale
155
+
156
+ @time_scale.setter
157
+ def time_scale(self, value: float) -> None:
158
+ self._time_scale = value
159
+
144
160
  @classmethod
145
161
  def get_instance(cls) -> Optional["AnsysGeometryServiceServerExtension"]:
146
162
  return cls._service_instance
@@ -260,18 +276,40 @@ class AnsysGeometryServiceServerExtension(omni.ext.IExt):
260
276
  self.warning(
261
277
  f" If non-zero, remap the geometry to the domain [-1,-1,-1]-[1,1,1]. (default: {self.normalize_geometry})"
262
278
  )
279
+ self.warning(" --/exts/ansys.geometry.service/timeScale=FLOAT")
280
+ self.warning(
281
+ f" Multiply all DSG time values by this value. (default: {self.time_scale})"
282
+ )
283
+
284
+ def is_server_running(self) -> bool:
285
+ """
286
+ Returns True if the server is running.
287
+
288
+ Returns
289
+ -------
290
+ bool
291
+ True if the server is running.
292
+ """
293
+ if self._server_process:
294
+ if psutil.pid_exists(self._server_process.pid):
295
+ return True
296
+ return False
263
297
 
264
298
  def stop_server(self) -> None:
265
299
  """
266
300
  If a DSG server connection has been started, stop it. It could be in
267
301
  process or a subprocess.
268
302
  """
269
- self._shutdown = True
270
- if self._server_process:
271
- for child in psutil.Process(self._server_process.pid).children(recursive=True):
272
- child.kill()
273
- self._server_process.kill()
274
- self._server_process = None
303
+ try:
304
+ self._shutdown = True
305
+ if self._server_process:
306
+ for child in psutil.Process(self._server_process.pid).children(recursive=True):
307
+ child.kill()
308
+ self._server_process.kill()
309
+ except psutil.NoSuchProcess:
310
+ pass
311
+ self._server_process = None
312
+ self._shutdown = False
275
313
 
276
314
  def launch_server(self) -> None:
277
315
  """
@@ -300,6 +338,8 @@ class AnsysGeometryServiceServerExtension(omni.ext.IExt):
300
338
  cmd.append("--/exts/ansys.geometry.service/vrmode=1")
301
339
  if self.normalize_geometry:
302
340
  cmd.append("--/exts/ansys.geometry.service/normalizeGeometry=1")
341
+ if self.time_scale != 1.0:
342
+ cmd.append(f"--/exts/ansys.geometry.service/timeScale={self.time_scale}")
303
343
  cmd.append(f"--/exts/ansys.geometry.service/omniUrl={self.omni_uri}")
304
344
  cmd.append(f"--/exts/ansys.geometry.service/dsgUrl={self.dsg_uri}")
305
345
  cmd.append("--/exts/ansys.geometry.service/run=1")
@@ -344,6 +384,7 @@ class AnsysGeometryServiceServerExtension(omni.ext.IExt):
344
384
  security_code=self.security_token,
345
385
  verbose=1,
346
386
  normalize_geometry=self.normalize_geometry,
387
+ time_scale=self.time_scale,
347
388
  handler=update_handler,
348
389
  )
349
390
 
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  # Semantic Versioning is used: https://semver.org/
3
- version = "0.8.5"
3
+ version = "0.8.6"
4
4
 
5
5
  # Lists people or organizations that are considered the "authors" of the package.
6
6
  authors = ["ANSYS"]
@@ -56,3 +56,4 @@ exts."ansys.geometry.service".securityCode = ""
56
56
  exts."ansys.geometry.service".temporal = "0"
57
57
  exts."ansys.geometry.service".vrmode = "0"
58
58
  exts."ansys.geometry.service".normalizeGeometry = "0"
59
+ exts."ansys.geometry.service".timeScale = "1.0"
@@ -20,6 +20,7 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
20
20
  self._temporal_w = None
21
21
  self._vrmode_w = None
22
22
  self._normalize_w = None
23
+ self._time_scale_w = None
23
24
  self._connect_w = None
24
25
  self._update_w = None
25
26
  self._connected = False
@@ -38,7 +39,7 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
38
39
  self._logger.error(text)
39
40
 
40
41
  def launch_server(self) -> None:
41
- if self._connected:
42
+ if self.service.is_server_running():
42
43
  return
43
44
  self.service.dsg_uri = self._dsg_uri_w.model.as_string
44
45
  self.service.security_token = self._dsg_token_w.model.as_string
@@ -46,7 +47,14 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
46
47
  self.service.temporal = self._temporal_w.model.as_bool
47
48
  self.service.vrmode = self._vrmode_w.model.as_bool
48
49
  self.service.normalize_geometry = self._normalize_w.model.as_bool
50
+ scale = self._time_scale_w.model.as_float
51
+ if scale <= 0.0:
52
+ scale = 1.0
53
+ self.service.time_scale = scale
49
54
  self.service.launch_server()
55
+ if not self.service.is_server_running():
56
+ self.error("Failed to launch omniverse service.")
57
+ return
50
58
 
51
59
  # parse the DSG USI
52
60
  parsed = urlparse(self.service.dsg_uri)
@@ -60,6 +68,9 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
60
68
  host=host, port=port, secret_key=self.service.security_token
61
69
  )
62
70
  self._grpc.connect()
71
+ if not self._grpc.is_connected():
72
+ self.error(f"Failed to connect to DSG service {host}:{port}")
73
+ return
63
74
 
64
75
  self.info("Connected to DSG service")
65
76
  self._connected = True
@@ -69,6 +80,7 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
69
80
  return
70
81
  self.service.stop_server()
71
82
  self._grpc.shutdown()
83
+ self._grpc = None
72
84
 
73
85
  self.info("Disconnect from DSG service")
74
86
  self._connected = False
@@ -104,12 +116,15 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
104
116
  def update_ui(self) -> None:
105
117
  if self._connected:
106
118
  self._connect_w.text = "Disconnect from DSG Server"
119
+ self._label_w.text = f"Connected to: {self.service.dsg_uri}"
107
120
  else:
108
121
  self._connect_w.text = "Connect to DSG Server"
122
+ self._label_w.text = "No connected DSG server"
109
123
  self._update_w.enabled = self._connected
110
124
  self._temporal_w.enabled = True
111
125
  self._vrmode_w.enabled = not self._connected
112
126
  self._normalize_w.enabled = not self._connected
127
+ self._time_scale_w.enabled = not self._connected
113
128
  self._dsg_uri_w.enabled = not self._connected
114
129
  self._dsg_token_w.enabled = not self._connected
115
130
  self._omni_uri_w.enabled = not self._connected
@@ -151,6 +166,13 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
151
166
  self._normalize_w.model.set_value(self.service.normalize_geometry)
152
167
  ui.Label("Normalize", alignment=ui.Alignment.LEFT_CENTER)
153
168
 
169
+ with ui.HStack(spacing=5):
170
+ ui.Label(
171
+ "Temporal scaling factor:", alignment=ui.Alignment.RIGHT_CENTER, width=0
172
+ )
173
+ self._time_scale_w = ui.FloatField()
174
+ self._time_scale_w.model.as_float = self.service.time_scale
175
+
154
176
  with ui.HStack():
155
177
  self._connect_w = ui.Button("Connect to DSG Server", clicked_fn=self.connect_cb)
156
178
  self._update_w = ui.Button("Request Update", clicked_fn=self.update_cb)
@@ -166,5 +188,6 @@ class AnsysGeometryServiceUIExtension(omni.ext.IExt):
166
188
  self._temporal_w = None
167
189
  self._vrmode_w = None
168
190
  self._normalize_w = None
191
+ self._time_scale_w = None
169
192
  self._connect_w = None
170
193
  self._update_w = None
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  # Semantic Versioning is used: https://semver.org/
3
- version = "0.8.5"
3
+ version = "0.8.6"
4
4
 
5
5
  # Lists people or organizations that are considered the "authors" of the package.
6
6
  authors = ["ANSYS"]
@@ -349,6 +349,7 @@ class DSGSession(object):
349
349
  verbose: int = 0,
350
350
  normalize_geometry: bool = False,
351
351
  vrmode: bool = False,
352
+ time_scale: float = 1.0,
352
353
  handler: UpdateHandler = UpdateHandler(),
353
354
  ):
354
355
  """
@@ -378,6 +379,9 @@ class DSGSession(object):
378
379
  vrmode : bool
379
380
  If True, do not include the EnSight camera in the generated view group. The default
380
381
  is to include the EnSight view in the scene transformations.
382
+ time_scale : float
383
+ All DSG protobuffers time values will be multiplied by this factor after
384
+ being received. The default is ``1.0``.
381
385
  handler : UpdateHandler
382
386
  This is an UpdateHandler subclass that is called back when the state of
383
387
  a scene transfer changes. For example, methods are called when the
@@ -394,6 +398,7 @@ class DSGSession(object):
394
398
  self._dsg = None
395
399
  self._normalize_geometry = normalize_geometry
396
400
  self._vrmode = vrmode
401
+ self._time_scale = time_scale
397
402
  self._time_limits = [
398
403
  sys.float_info.max,
399
404
  -sys.float_info.max,
@@ -709,5 +714,7 @@ class DSGSession(object):
709
714
  self._scene_bounds = None
710
715
  self._groups[view.id] = view
711
716
  if len(view.timeline) == 2:
717
+ view.timeline[0] *= self._time_scale
718
+ view.timeline[1] *= self._time_scale
712
719
  self.cur_timeline = [view.timeline[0], view.timeline[1]]
713
720
  self._callback_handler.add_group(view.id, view=True)
@@ -314,10 +314,11 @@ class OmniverseWrapper:
314
314
  diffuse=[1.0, 1.0, 1.0, 1.0],
315
315
  variable=None,
316
316
  timeline=[0.0, 0.0],
317
+ first_timestep=False,
317
318
  ):
318
319
  # 1D texture map for variables https://graphics.pixar.com/usd/release/tut_simple_shading.html
319
320
  # create the part usd object
320
- partname = self.clean_name(name + str(timeline[0]))
321
+ partname = self.clean_name(name + str(id) + str(timeline[0]))
321
322
  stage_name = "/Parts/" + partname + ".usd"
322
323
  part_stage_url = self.stage_url(stage_name)
323
324
  omni.client.delete(part_stage_url)
@@ -363,7 +364,10 @@ class OmniverseWrapper:
363
364
  )
364
365
  timestep_prim = UsdGeom.Xform.Define(self._stage, timestep_group_path)
365
366
  visibility_attr = UsdGeom.Imageable(timestep_prim).GetVisibilityAttr()
366
- visibility_attr.Set("invisible", Usd.TimeCode.EarliestTime())
367
+ if first_timestep:
368
+ visibility_attr.Set("inherited", Usd.TimeCode.EarliestTime())
369
+ else:
370
+ visibility_attr.Set("invisible", Usd.TimeCode.EarliestTime())
367
371
  visibility_attr.Set("inherited", timeline[0])
368
372
  # Final timestep has timeline[0]==timeline[1]. Leave final timestep visible.
369
373
  if timeline[0] < timeline[1]:
@@ -685,7 +689,7 @@ class OmniverseUpdateHandler(UpdateHandler):
685
689
  if command is None:
686
690
  return
687
691
  parent_prim = self._group_prims[command.parent_id]
688
- obj_id = self._session.mesh_block_count
692
+ obj_id = self.session.mesh_block_count
689
693
  matrix = command.matrix4x4
690
694
  name = command.name
691
695
  color = [
@@ -707,6 +711,7 @@ class OmniverseUpdateHandler(UpdateHandler):
707
711
  diffuse=color,
708
712
  variable=var_cmd,
709
713
  timeline=self.session.cur_timeline,
714
+ first_timestep=(self.session.cur_timeline[0] == self.session.time_limits[0]),
710
715
  )
711
716
  super().finalize_part(part)
712
717