Skip to content

Commit d179f1b

Browse files
assembly controls and round info
1 parent f1418d7 commit d179f1b

File tree

6 files changed

+309
-41
lines changed

6 files changed

+309
-41
lines changed

src/ansys/geometry/core/_grpc/_services/_service.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
from .._version import GeometryApiProtos, set_proto_version
2626
from .base.admin import GRPCAdminService
27+
from .base.assembly_controls import GRPCAssemblyControlsService
2728
from .base.beams import GRPCBeamsService
2829
from .base.bodies import GRPCBodyService
2930
from .base.coordinate_systems import GRPCCoordinateSystemService
@@ -81,6 +82,7 @@ def __init__(self, channel: grpc.Channel, version: GeometryApiProtos | str | Non
8182

8283
# Lazy load all the services
8384
self._admin = None
85+
self._assembly_controls = None
8486
self._beams = None
8587
self._bodies = None
8688
self._coordinate_systems = None
@@ -124,6 +126,32 @@ def admin(self) -> GRPCAdminService:
124126

125127
return self._admin
126128

129+
@property
130+
def assembly_controls(self) -> GRPCAssemblyControlsService:
131+
"""
132+
Get the assembly controls service for the specified version.
133+
134+
Returns
135+
-------
136+
GRPCAssemblyControlsService
137+
The assembly controls service for the specified version.
138+
"""
139+
if not self._assembly_controls:
140+
# Import the appropriate assembly controls service based on the version
141+
from .v0.assembly_controls import GRPCAssemblyControlsServiceV0
142+
from .v1.assembly_controls import GRPCAssemblyControlsServiceV1
143+
144+
if self.version == GeometryApiProtos.V0:
145+
self._assembly_controls = GRPCAssemblyControlsServiceV0(self.channel)
146+
elif self.version == GeometryApiProtos.V1: # pragma: no cover
147+
# V1 is not implemented yet
148+
self._assembly_controls = GRPCAssemblyControlsServiceV1(self.channel)
149+
else: # pragma: no cover
150+
# This should never happen as the version is set in the constructor
151+
raise ValueError(f"Unsupported version: {self.version}")
152+
153+
return self._assembly_controls
154+
127155
@property
128156
def beams(self) -> GRPCBeamsService:
129157
"""
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Copyright (C) 2023 - 2025 ANSYS, Inc. and/or its affiliates.
2+
# SPDX-License-Identifier: MIT
3+
#
4+
#
5+
# Permission is hereby granted, free of charge, to any person obtaining a copy
6+
# of this software and associated documentation files (the "Software"), to deal
7+
# in the Software without restriction, including without limitation the rights
8+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
# copies of the Software, and to permit persons to whom the Software is
10+
# furnished to do so, subject to the following conditions:
11+
#
12+
# The above copyright notice and this permission notice shall be included in all
13+
# copies or substantial portions of the Software.
14+
#
15+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
# SOFTWARE.
22+
"""Module containing the assembly controls service implementation (abstraction layer)."""
23+
24+
from abc import ABC, abstractmethod
25+
26+
import grpc
27+
28+
29+
class GRPCAssemblyControlsService(ABC): # pragma: no cover
30+
"""Assembly controls service for gRPC communication with the Geometry server.
31+
32+
Parameters
33+
----------
34+
channel : grpc.Channel
35+
The gRPC channel to the server.
36+
"""
37+
38+
def __init__(self, channel: grpc.Channel):
39+
"""Initialize the GRPCAssemblyControls class."""
40+
pass
41+
42+
@abstractmethod
43+
def create_align_condition(self, **kwargs) -> dict:
44+
"""Create an align condition between two geometry objects."""
45+
pass
46+
47+
@abstractmethod
48+
def create_tangent_condition(self, **kwargs) -> dict:
49+
"""Create a tangent condition between two geometry objects."""
50+
pass
51+
52+
@abstractmethod
53+
def create_orient_condition(self, **kwargs) -> dict:
54+
"""Create an orient condition between two geometry objects."""
55+
pass
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Copyright (C) 2023 - 2025 ANSYS, Inc. and/or its affiliates.
2+
# SPDX-License-Identifier: MIT
3+
#
4+
#
5+
# Permission is hereby granted, free of charge, to any person obtaining a copy
6+
# of this software and associated documentation files (the "Software"), to deal
7+
# in the Software without restriction, including without limitation the rights
8+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
# copies of the Software, and to permit persons to whom the Software is
10+
# furnished to do so, subject to the following conditions:
11+
#
12+
# The above copyright notice and this permission notice shall be included in all
13+
# copies or substantial portions of the Software.
14+
#
15+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
# SOFTWARE.
22+
"""Module containing the assembly controls service implementation for v0."""
23+
24+
import grpc
25+
26+
from ansys.geometry.core.errors import protect_grpc
27+
28+
from ..base.assembly_controls import GRPCAssemblyControlsService
29+
30+
31+
class GRPCAssemblyControlsServiceV0(GRPCAssemblyControlsService):
32+
"""Assembly controls service for gRPC communication with the Geometry server.
33+
34+
This class provides methods to interact with the Geometry server's
35+
assembly controls service. It is specifically designed for the v0 version of the
36+
Geometry API.
37+
38+
Parameters
39+
----------
40+
channel : grpc.Channel
41+
The gRPC channel to the server.
42+
"""
43+
44+
@protect_grpc
45+
def __init__(self, channel: grpc.Channel): # noqa: D102
46+
from ansys.api.geometry.v0.commands_pb2_grpc import CommandsStub
47+
48+
self.stub = CommandsStub(channel)
49+
50+
@protect_grpc
51+
def create_align_condition(self, **kwargs) -> dict: # noqa: D102
52+
from ansys.api.dbu.v0.dbumodels_pb2 import EntityIdentifier
53+
from ansys.api.geometry.v0.commands_pb2 import (
54+
CreateAlignTangentOrientGearConditionRequest,
55+
)
56+
57+
# Create the request - assumes all inputs are valid and of the proper type
58+
request = CreateAlignTangentOrientGearConditionRequest(
59+
parent=EntityIdentifier(id=kwargs["parent_id"]),
60+
geometric_a=EntityIdentifier(id=kwargs["geometric_a_id"]),
61+
geometric_b=EntityIdentifier(id=kwargs["geometric_b_id"]),
62+
)
63+
64+
# Call the gRPC service
65+
resp = self.stub.CreateAlignCondition(request)
66+
67+
# Return the response - formatted as a dictionary
68+
return {
69+
"moniker": resp.condition.moniker,
70+
"is_deleted": resp.condition.is_deleted,
71+
"is_enabled": resp.condition.is_enabled,
72+
"is_satisfied": resp.condition.is_satisfied,
73+
"offset": resp.offset,
74+
"is_reversed": resp.is_reversed,
75+
"is_valid": resp.is_valid,
76+
}
77+
78+
@protect_grpc
79+
def create_tangent_condition(self, **kwargs) -> dict: # noqa: D102
80+
from ansys.api.dbu.v0.dbumodels_pb2 import EntityIdentifier
81+
from ansys.api.geometry.v0.commands_pb2 import (
82+
CreateAlignTangentOrientGearConditionRequest,
83+
)
84+
85+
# Create the request - assumes all inputs are valid and of the proper type
86+
request = CreateAlignTangentOrientGearConditionRequest(
87+
parent=EntityIdentifier(id=kwargs["parent_id"]),
88+
geometric_a=EntityIdentifier(id=kwargs["geometric_a_id"]),
89+
geometric_b=EntityIdentifier(id=kwargs["geometric_b_id"]),
90+
)
91+
92+
# Call the gRPC service
93+
resp = self.stub.CreateTangentCondition(request)
94+
95+
# Return the response - formatted as a dictionary
96+
return {
97+
"moniker": resp.condition.moniker,
98+
"is_deleted": resp.condition.is_deleted,
99+
"is_enabled": resp.condition.is_enabled,
100+
"is_satisfied": resp.condition.is_satisfied,
101+
"offset": resp.offset,
102+
"is_reversed": resp.is_reversed,
103+
"is_valid": resp.is_valid,
104+
}
105+
106+
@protect_grpc
107+
def create_orient_condition(self, **kwargs) -> dict: # noqa: D102
108+
from ansys.api.dbu.v0.dbumodels_pb2 import EntityIdentifier
109+
from ansys.api.geometry.v0.commands_pb2 import (
110+
CreateAlignTangentOrientGearConditionRequest,
111+
)
112+
113+
# Create the request - assumes all inputs are valid and of the proper type
114+
request = CreateAlignTangentOrientGearConditionRequest(
115+
parent=EntityIdentifier(id=kwargs["parent_id"]),
116+
geometric_a=EntityIdentifier(id=kwargs["geometric_a_id"]),
117+
geometric_b=EntityIdentifier(id=kwargs["geometric_b_id"]),
118+
)
119+
120+
# Call the gRPC service
121+
resp = self.stub.CreateOrientCondition(request)
122+
123+
# Return the response - formatted as a dictionary
124+
return {
125+
"moniker": resp.condition.moniker,
126+
"is_deleted": resp.condition.is_deleted,
127+
"is_enabled": resp.condition.is_enabled,
128+
"is_satisfied": resp.condition.is_satisfied,
129+
"offset": resp.offset,
130+
"is_reversed": resp.is_reversed,
131+
"is_valid": resp.is_valid,
132+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ def get_round_info(self, **kwargs): # noqa: D102
507507

508508
# Create the request - assumes all inputs are valid and of the proper type
509509
request = RoundInfoRequest(
510-
face_id=[EntityIdentifier(id=kwargs["face_id"])],
510+
face=EntityIdentifier(id=kwargs["face_id"]),
511511
)
512512

513513
# Call the gRPC service
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Copyright (C) 2023 - 2025 ANSYS, Inc. and/or its affiliates.
2+
# SPDX-License-Identifier: MIT
3+
#
4+
#
5+
# Permission is hereby granted, free of charge, to any person obtaining a copy
6+
# of this software and associated documentation files (the "Software"), to deal
7+
# in the Software without restriction, including without limitation the rights
8+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
# copies of the Software, and to permit persons to whom the Software is
10+
# furnished to do so, subject to the following conditions:
11+
#
12+
# The above copyright notice and this permission notice shall be included in all
13+
# copies or substantial portions of the Software.
14+
#
15+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
# SOFTWARE.
22+
"""Module containing the assembly controls service implementation for v1."""
23+
24+
import grpc
25+
26+
from ansys.geometry.core.errors import protect_grpc
27+
28+
from ..base.assembly_controls import GRPCAssemblyControlsService
29+
30+
31+
class GRPCAssemblyControlsServiceV1(GRPCAssemblyControlsService):
32+
"""Assembly controls service for gRPC communication with the Geometry server.
33+
34+
This class provides methods to interact with the Geometry server's
35+
assembly controls service. It is specifically designed for the v1 version of the
36+
Geometry API.
37+
38+
Parameters
39+
----------
40+
channel : grpc.Channel
41+
The gRPC channel to the server.
42+
"""
43+
44+
@protect_grpc
45+
def __init__(self, channel: grpc.Channel): # noqa: D102
46+
from ansys.api.geometry.v1.geometricentities.assemble import AssemblyControlsStub
47+
48+
self.stub = AssemblyControlsStub(channel)
49+
50+
@protect_grpc
51+
def create_align_condition(self, **kwargs) -> dict: # noqa: D102
52+
raise NotImplementedError
53+
54+
@protect_grpc
55+
def create_tangent_condition(self, **kwargs) -> dict: # noqa: D102
56+
raise NotImplementedError
57+
58+
@protect_grpc
59+
def create_orient_condition(self, **kwargs) -> dict: # noqa: D102
60+
raise NotImplementedError

0 commit comments

Comments
 (0)