Skip to content

Commit a2bdd22

Browse files
smereupyansys-ci-botpre-commit-ci[bot]RobPasMue
authored
feat: expose enclosure methods (#2383)
Co-authored-by: PyAnsys CI Bot <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Roberto Pastor Muela <[email protected]>
1 parent 715ae01 commit a2bdd22

File tree

8 files changed

+472
-2
lines changed

8 files changed

+472
-2
lines changed

doc/changelog.d/2383.added.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Expose enclosure methods

src/ansys/geometry/core/_grpc/_services/base/prepare_tools.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,18 @@ def remove_logo(self, **kwargs) -> dict:
8383
def detect_helixes(self, **kwargs) -> dict:
8484
"""Detect helixes in geometry."""
8585
pass
86+
87+
@abstractmethod
88+
def create_box_enclosure(self, **kwargs) -> dict:
89+
"""Create a box enclosure around bodies."""
90+
pass
91+
92+
@abstractmethod
93+
def create_cylinder_enclosure(self, **kwargs) -> dict:
94+
"""Create a cylinder enclosure around bodies."""
95+
pass
96+
97+
@abstractmethod
98+
def create_sphere_enclosure(self, **kwargs) -> dict:
99+
"""Create a sphere enclosure around bodies."""
100+
pass

src/ansys/geometry/core/_grpc/_services/v0/conversions.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
TrimmedCurve as GRPCTrimmedCurve,
5757
TrimmedSurface as GRPCTrimmedSurface,
5858
)
59+
from ansys.api.geometry.v0.preparetools_pb2 import EnclosureOptions as GRPCEnclosureOptions
5960
import pint
6061

6162
from ansys.geometry.core.errors import GeometryRuntimeError
@@ -95,6 +96,7 @@
9596
from ansys.geometry.core.sketch.nurbs import SketchNurbs
9697
from ansys.geometry.core.sketch.polygon import Polygon
9798
from ansys.geometry.core.sketch.segment import SketchSegment
99+
from ansys.geometry.core.tools.prepare_tools import EnclosureOptions
98100

99101

100102
def from_point3d_to_grpc_point(point: "Point3D") -> GRPCPoint:
@@ -1410,3 +1412,27 @@ def serialize_entity_identifier(entity):
14101412
for entity in getattr(response, "deleted_bodies", [])
14111413
],
14121414
}
1415+
1416+
1417+
def from_enclosure_options_to_grpc_enclosure_options(
1418+
enclosure_options: "EnclosureOptions",
1419+
) -> GRPCEnclosureOptions:
1420+
"""Convert enclosure_options to grpc definition.
1421+
1422+
Parameters
1423+
----------
1424+
enclosure_options : EnclosureOptions
1425+
Definition of the enclosure options.
1426+
1427+
Returns
1428+
-------
1429+
GRPCEnclosureOptions
1430+
Grpc converted definition.
1431+
"""
1432+
frame = enclosure_options.frame
1433+
return GRPCEnclosureOptions(
1434+
create_shared_topology=enclosure_options.create_shared_topology,
1435+
subtract_bodies=enclosure_options.subtract_bodies,
1436+
frame=from_frame_to_grpc_frame(frame) if frame is not None else None,
1437+
cushion_proportion=enclosure_options.cushion_proportion,
1438+
)

src/ansys/geometry/core/_grpc/_services/v0/prepare_tools.py

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@
2727

2828
from ..base.conversions import from_measurement_to_server_length
2929
from ..base.prepare_tools import GRPCPrepareToolsService
30-
from .conversions import build_grpc_id
30+
from .conversions import (
31+
build_grpc_id,
32+
from_enclosure_options_to_grpc_enclosure_options,
33+
serialize_tracker_command_response,
34+
)
3135

3236

3337
class GRPCPrepareToolsServiceV0(GRPCPrepareToolsService):
@@ -295,3 +299,97 @@ def detect_helixes(self, **kwargs) -> dict: # noqa: D102
295299
for helix in response.helixes
296300
]
297301
}
302+
303+
@protect_grpc
304+
def create_box_enclosure(self, **kwargs) -> dict: # noqa: D102
305+
from ansys.api.geometry.v0.models_pb2 import Body as GRPCBody
306+
from ansys.api.geometry.v0.preparetools_pb2 import CreateEnclosureBoxRequest
307+
308+
grpc_enclosure_options = from_enclosure_options_to_grpc_enclosure_options(
309+
kwargs["enclosure_options"]
310+
)
311+
312+
# Create the request - assumes all inputs are valid and of the proper type
313+
request = CreateEnclosureBoxRequest(
314+
bodies=[GRPCBody(id=body.id) for body in kwargs["bodies"]],
315+
x_low=from_measurement_to_server_length(kwargs["x_low"]),
316+
x_high=from_measurement_to_server_length(kwargs["x_high"]),
317+
y_low=from_measurement_to_server_length(kwargs["y_low"]),
318+
y_high=from_measurement_to_server_length(kwargs["y_high"]),
319+
z_low=from_measurement_to_server_length(kwargs["z_low"]),
320+
z_high=from_measurement_to_server_length(kwargs["z_high"]),
321+
enclosure_options=grpc_enclosure_options,
322+
)
323+
324+
# Call the gRPC service
325+
response = self.stub.CreateEnclosureBox(request)
326+
327+
# Return the response - formatted as a dictionary
328+
serialized_tracker_response = serialize_tracker_command_response(
329+
response=response.command_response
330+
)
331+
return {
332+
"success": response.success,
333+
"created_bodies": [body.id for body in response.created_bodies],
334+
"tracker_response": serialized_tracker_response,
335+
}
336+
337+
@protect_grpc
338+
def create_cylinder_enclosure(self, **kwargs) -> dict: # noqa: D102
339+
from ansys.api.geometry.v0.models_pb2 import Body as GRPCBody
340+
from ansys.api.geometry.v0.preparetools_pb2 import CreateEnclosureCylinderRequest
341+
342+
grpc_enclosure_options = from_enclosure_options_to_grpc_enclosure_options(
343+
kwargs["enclosure_options"]
344+
)
345+
346+
# Create the request - assumes all inputs are valid and of the proper type
347+
request = CreateEnclosureCylinderRequest(
348+
bodies=[GRPCBody(id=body.id) for body in kwargs["bodies"]],
349+
axial_distance_low=from_measurement_to_server_length(kwargs["axial_distance_low"]),
350+
axial_distance_high=from_measurement_to_server_length(kwargs["axial_distance_high"]),
351+
radial_distance=from_measurement_to_server_length(kwargs["radial_distance"]),
352+
enclosure_options=grpc_enclosure_options,
353+
)
354+
355+
# Call the gRPC service
356+
response = self.stub.CreateEnclosureCylinder(request)
357+
358+
# Return the response - formatted as a dictionary
359+
serialized_tracker_response = serialize_tracker_command_response(
360+
response=response.command_response
361+
)
362+
return {
363+
"success": response.success,
364+
"created_bodies": [body.id for body in response.created_bodies],
365+
"tracker_response": serialized_tracker_response,
366+
}
367+
368+
@protect_grpc
369+
def create_sphere_enclosure(self, **kwargs) -> dict: # noqa: D102
370+
from ansys.api.geometry.v0.models_pb2 import Body as GRPCBody
371+
from ansys.api.geometry.v0.preparetools_pb2 import CreateEnclosureSphereRequest
372+
373+
grpc_enclosure_options = from_enclosure_options_to_grpc_enclosure_options(
374+
kwargs["enclosure_options"]
375+
)
376+
377+
# Create the request - assumes all inputs are valid and of the proper type
378+
request = CreateEnclosureSphereRequest(
379+
bodies=[GRPCBody(id=body.id) for body in kwargs["bodies"]],
380+
radial_distance=from_measurement_to_server_length(kwargs["radial_distance"]),
381+
enclosure_options=grpc_enclosure_options,
382+
)
383+
384+
# Call the gRPC service
385+
response = self.stub.CreateEnclosureSphere(request)
386+
387+
# Return the response - formatted as a dictionary
388+
serialized_tracker_response = serialize_tracker_command_response(
389+
response=response.command_response
390+
)
391+
return {
392+
"success": response.success,
393+
"created_bodies": [body.id for body in response.created_bodies],
394+
"tracker_response": serialized_tracker_response,
395+
}

src/ansys/geometry/core/_grpc/_services/v1/prepare_tools.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,15 @@ def remove_logo(self, **kwargs) -> dict: # noqa: D102
8282
@protect_grpc
8383
def detect_helixes(self, **kwargs) -> dict: # noqa: D102
8484
raise NotImplementedError
85+
86+
@protect_grpc
87+
def create_box_enclosure(self, **kwargs) -> dict: # noqa: D102
88+
raise NotImplementedError
89+
90+
@protect_grpc
91+
def create_cylinder_enclosure(self, **kwargs) -> dict: # noqa: D102
92+
raise NotImplementedError
93+
94+
@protect_grpc
95+
def create_sphere_enclosure(self, **kwargs) -> dict: # noqa: D102
96+
raise NotImplementedError

0 commit comments

Comments
 (0)