Skip to content

Commit c0513b1

Browse files
jacobrkerstetterpyansys-ci-botpre-commit-ci[bot]RobPasMue
authored
feat: rename named selection (#2382)
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 49756c8 commit c0513b1

File tree

6 files changed

+69
-0
lines changed

6 files changed

+69
-0
lines changed

doc/changelog.d/2382.added.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Rename named selection

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,8 @@ def create_named_selection(self, **kwargs) -> dict:
5353
def delete_named_selection(self, **kwargs) -> dict:
5454
"""Delete a named selection by id."""
5555
pass
56+
57+
@abstractmethod
58+
def rename_named_selection(self, **kwargs) -> dict:
59+
"""Rename a named selection by id."""
60+
pass

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,19 @@ def delete_named_selection(self, **kwargs): # noqa: D102
107107

108108
# Return the response - empty dictionary
109109
return {}
110+
111+
@protect_grpc
112+
def rename_named_selection(self, **kwargs): # noqa: D102
113+
from ansys.api.geometry.v0.namedselections_pb2 import SetNameRequest
114+
115+
# Create the request - assumes all inputs are valid and of the proper type
116+
request = SetNameRequest(
117+
id=build_grpc_id(kwargs["id"]),
118+
new_name=kwargs["new_name"],
119+
)
120+
121+
# Call the gRPC service
122+
self.stub.SetName(request)
123+
124+
# Return the response - empty dictionary
125+
return {}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,7 @@ def create_named_selection(self, **kwargs): # noqa: D102
5858
@protect_grpc
5959
def delete_named_selection(self, **kwargs): # noqa: D102
6060
raise NotImplementedError
61+
62+
@protect_grpc
63+
def rename_named_selection(self, **kwargs): # noqa: D102
64+
raise NotImplementedError

src/ansys/geometry/core/designer/selection.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
get_faces_from_ids,
4040
get_vertices_from_ids,
4141
)
42+
from ansys.geometry.core.misc.checks import min_backend_version
4243

4344
if TYPE_CHECKING: # pragma: no cover
4445
from ansys.geometry.core.designer.design import Design
@@ -156,6 +157,15 @@ def name(self) -> str:
156157
"""Name of the named selection."""
157158
return self._name
158159

160+
@name.setter
161+
@min_backend_version(26, 1, 0)
162+
def name(self, value: str) -> None:
163+
"""Set the name of the named selection."""
164+
self._grpc_client.services.named_selection.rename_named_selection(
165+
id=self._id, new_name=value
166+
)
167+
self._name = value
168+
159169
@property
160170
def bodies(self) -> list[Body]:
161171
"""All bodies in the named selection."""

tests/integration/test_design.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,39 @@ def test_named_selections(modeler: Modeler):
596596
assert len(design.named_selections) == 3
597597

598598

599+
def test_rename_named_selection(modeler: Modeler):
600+
"""Test for renaming and verifying a ``NamedSelection``."""
601+
# Create your design on the server side
602+
design = modeler.create_design("NamedSelection_Test")
603+
604+
# Create 2 Sketch objects and draw a circle and a polygon (all client side)
605+
sketch_1 = Sketch()
606+
sketch_1.circle(Point2D([10, 10], UNITS.mm), Quantity(10, UNITS.mm))
607+
sketch_2 = Sketch()
608+
sketch_2.polygon(Point2D([-30, -30], UNITS.mm), Quantity(10, UNITS.mm), sides=5)
609+
610+
# Build 2 independent components and bodies
611+
circle_comp = design.add_component("CircleComponent")
612+
body_circle_comp = circle_comp.extrude_sketch("Circle", sketch_1, Quantity(50, UNITS.mm))
613+
polygon_comp = design.add_component("PolygonComponent")
614+
body_polygon_comp = polygon_comp.extrude_sketch("Polygon", sketch_2, Quantity(30, UNITS.mm))
615+
616+
# Create the NamedSelection
617+
only_circle = design.create_named_selection("OnlyCircle", bodies=[body_circle_comp])
618+
design.create_named_selection("OnlyPolygon", bodies=[body_polygon_comp])
619+
design.create_named_selection("CircleAndPolygon", bodies=[body_circle_comp, body_polygon_comp])
620+
621+
# Check that the named selections are available
622+
assert len(design.named_selections) == 3
623+
624+
# Rename the only circle NS
625+
only_circle.name = "JustCircle"
626+
assert only_circle.name == "JustCircle"
627+
assert design.named_selections[0].name == "JustCircle"
628+
assert design.named_selections[1].name == "OnlyPolygon"
629+
assert design.named_selections[2].name == "CircleAndPolygon"
630+
631+
599632
def test_old_backend_version(modeler: Modeler, use_grpc_client_old_backend: Modeler):
600633
# Try to vefify name selection using earlier backend version
601634
design = modeler.open_file(Path(FILES_DIR, "25R1BasicBoxNameSelection.scdocx"))

0 commit comments

Comments
 (0)