diff --git a/doc/changelog.d/2455.maintenance.md b/doc/changelog.d/2455.maintenance.md new file mode 100644 index 0000000000..374d5f4cfb --- /dev/null +++ b/doc/changelog.d/2455.maintenance.md @@ -0,0 +1 @@ +Chore: v1 general cleanup diff --git a/src/ansys/geometry/core/_grpc/_services/v0/bodies.py b/src/ansys/geometry/core/_grpc/_services/v0/bodies.py index b4981f2b0c..6a6e7fc0a1 100644 --- a/src/ansys/geometry/core/_grpc/_services/v0/bodies.py +++ b/src/ansys/geometry/core/_grpc/_services/v0/bodies.py @@ -732,8 +732,8 @@ def boolean(self, **kwargs) -> dict: # noqa: D102 serialized_tracker_response = {} try: request = BooleanRequest( - body1=kwargs["target"].id, - tool_bodies=[other.id for other in kwargs["other"]], + body1=kwargs["target"], + tool_bodies=[other for other in kwargs["other"]], method=kwargs["method"], ) if pyansys_geom.USE_TRACKER_TO_UPDATE_DESIGN: @@ -754,8 +754,8 @@ def boolean(self, **kwargs) -> dict: # noqa: D102 for body2 in kwargs["other"]: tmp_resp = self.stub.Boolean( request=BooleanRequest( - body1=kwargs["target"].id, - body2=body2.id, + body1=kwargs["target"], + body2=body2, method=kwargs["method"], ) ).empty_result @@ -766,8 +766,8 @@ def boolean(self, **kwargs) -> dict: # noqa: D102 elif len(kwargs["other"]) == 1: resp = self.stub.Boolean( request=BooleanRequest( - body1=kwargs["target"].id, - body2=kwargs["other"][0].id, + body1=kwargs["target"], + body2=kwargs["other"][0], method=kwargs["method"], ) ) diff --git a/src/ansys/geometry/core/_grpc/_services/v0/prepare_tools.py b/src/ansys/geometry/core/_grpc/_services/v0/prepare_tools.py index edc85fb731..ffbe6ef9cd 100644 --- a/src/ansys/geometry/core/_grpc/_services/v0/prepare_tools.py +++ b/src/ansys/geometry/core/_grpc/_services/v0/prepare_tools.py @@ -311,7 +311,7 @@ def create_box_enclosure(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = CreateEnclosureBoxRequest( - bodies=[GRPCBody(id=body.id) for body in kwargs["bodies"]], + bodies=[GRPCBody(id=id) for id in kwargs["body_ids"]], x_low=from_measurement_to_server_length(kwargs["x_low"]), x_high=from_measurement_to_server_length(kwargs["x_high"]), y_low=from_measurement_to_server_length(kwargs["y_low"]), @@ -345,7 +345,7 @@ def create_cylinder_enclosure(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = CreateEnclosureCylinderRequest( - bodies=[GRPCBody(id=body.id) for body in kwargs["bodies"]], + bodies=[GRPCBody(id=id) for id in kwargs["body_ids"]], axial_distance_low=from_measurement_to_server_length(kwargs["axial_distance_low"]), axial_distance_high=from_measurement_to_server_length(kwargs["axial_distance_high"]), radial_distance=from_measurement_to_server_length(kwargs["radial_distance"]), @@ -376,7 +376,7 @@ def create_sphere_enclosure(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = CreateEnclosureSphereRequest( - bodies=[GRPCBody(id=body.id) for body in kwargs["bodies"]], + bodies=[GRPCBody(id=id) for id in kwargs["body_ids"]], radial_distance=from_measurement_to_server_length(kwargs["radial_distance"]), enclosure_options=grpc_enclosure_options, ) diff --git a/src/ansys/geometry/core/_grpc/_services/v0/repair_tools.py b/src/ansys/geometry/core/_grpc/_services/v0/repair_tools.py index 5ab137fc0f..50712881f1 100644 --- a/src/ansys/geometry/core/_grpc/_services/v0/repair_tools.py +++ b/src/ansys/geometry/core/_grpc/_services/v0/repair_tools.py @@ -517,7 +517,7 @@ def inspect_geometry(self, **kwargs) -> dict: # noqa: D102 from ansys.api.geometry.v0.repairtools_pb2 import InspectGeometryRequest # Create the request - assumes all inputs are valid and of the proper type - request = InspectGeometryRequest(bodies=kwargs.get("bodies")) + request = InspectGeometryRequest(bodies=kwargs.get("bodies", [])) # Call the gRPC service inspect_result_response = self.stub.InspectGeometry(request) diff --git a/src/ansys/geometry/core/_grpc/_services/v1/assembly_condition.py b/src/ansys/geometry/core/_grpc/_services/v1/assembly_condition.py index 4d5bbed89a..007e33e57e 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/assembly_condition.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/assembly_condition.py @@ -61,9 +61,9 @@ def create_align_condition(self, **kwargs) -> dict: # noqa: D102 request = CreateAlignRequest( request_data=[ CreateAlignRequestData( - parent=build_grpc_id(kwargs["parent_id"]), - geometric_a=build_grpc_id(kwargs["geometric_a_id"]), - geometric_b=build_grpc_id(kwargs["geometric_b_id"]), + parent_id=build_grpc_id(kwargs["parent_id"]), + geometric_a_id=build_grpc_id(kwargs["geometric_a_id"]), + geometric_b_id=build_grpc_id(kwargs["geometric_b_id"]), ) ] ) @@ -93,9 +93,9 @@ def create_tangent_condition(self, **kwargs) -> dict: # noqa: D102 request = CreateTangentRequest( request_data=[ CreateTangentRequestData( - parent=build_grpc_id(kwargs["parent_id"]), - geometric_a=build_grpc_id(kwargs["geometric_a_id"]), - geometric_b=build_grpc_id(kwargs["geometric_b_id"]), + parent_id=build_grpc_id(kwargs["parent_id"]), + geometric_a_id=build_grpc_id(kwargs["geometric_a_id"]), + geometric_b_id=build_grpc_id(kwargs["geometric_b_id"]), ) ] ) @@ -125,9 +125,9 @@ def create_orient_condition(self, **kwargs) -> dict: # noqa: D102 request = CreateOrientRequest( request_data=[ CreateOrientRequestData( - parent=build_grpc_id(kwargs["parent_id"]), - geometric_a=build_grpc_id(kwargs["geometric_a_id"]), - geometric_b=build_grpc_id(kwargs["geometric_b_id"]), + parent_id=build_grpc_id(kwargs["parent_id"]), + geometric_a_id=build_grpc_id(kwargs["geometric_a_id"]), + geometric_b_id=build_grpc_id(kwargs["geometric_b_id"]), ) ] ) diff --git a/src/ansys/geometry/core/_grpc/_services/v1/bodies.py b/src/ansys/geometry/core/_grpc/_services/v1/bodies.py index a1550029d0..5e92155413 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/bodies.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/bodies.py @@ -456,23 +456,24 @@ def create_surface_body_from_trimmed_curves(self, **kwargs) -> dict: # noqa: D1 @protect_grpc def translate(self, **kwargs) -> dict: # noqa: D102 from ansys.api.discovery.v1.operations.edit_pb2 import ( - MoveTranslateRequest, - MoveTranslateRequestData, + TranslateRequest, + TranslateRequestData, ) # Create the request with selection_ids, direction, and distance - request = MoveTranslateRequest( + request = TranslateRequest( request_data=[ - MoveTranslateRequestData( - selection_ids=[build_grpc_id(body_id) for body_id in kwargs["ids"]], - direction=from_unit_vector_to_grpc_direction(kwargs["direction"]), - distance=from_length_to_grpc_quantity(kwargs["distance"]), + TranslateRequestData( + id=build_grpc_id(id), + translation=from_unit_vector_to_grpc_direction(kwargs["direction"]), + distance=from_measurement_to_server_length(kwargs["distance"]), ) + for id in kwargs["ids"] ] ) # Call the gRPC service - self.edit_stub.MoveTranslate(request=request) + self.edit_stub.Translate(request=request) # Return the response - formatted as a dictionary return {} @@ -788,30 +789,27 @@ def set_suppressed(self, **kwargs) -> dict: # noqa: D102 @protect_grpc def rotate(self, **kwargs) -> dict: # noqa: D102 from ansys.api.discovery.v1.operations.edit_pb2 import ( - MoveRotateRequest, - MoveRotateRequestData, + RotateOptions, + RotateRequest, + RotateRequestData, ) - from ansys.geometry.core.shapes.curves.line import Line - - from .conversions import from_angle_to_grpc_quantity, from_line_to_grpc_line + from .conversions import from_angle_to_grpc_quantity - # Create a Line from axis_origin and axis_direction - axis = Line(kwargs["axis_origin"], kwargs["axis_direction"]) + # Create options + options = RotateOptions( + angle=from_angle_to_grpc_quantity(kwargs["angle"]), + axis_origin=from_point3d_to_grpc_point(kwargs["axis_origin"]), + axis_direction=from_unit_vector_to_grpc_direction(kwargs["axis_direction"]), + ) # Create the request with selection_ids, axis, and angle - request = MoveRotateRequest( - request_data=[ - MoveRotateRequestData( - selection_ids=[build_grpc_id(kwargs["id"])], - axis=from_line_to_grpc_line(axis), - angle=from_angle_to_grpc_quantity(kwargs["angle"]), - ) - ] + request = RotateRequest( + request_data=[RotateRequestData(id=build_grpc_id(kwargs["id"]), options=options)] ) # Call the gRPC service - self.edit_stub.MoveRotate(request=request) + self.edit_stub.Rotate(request=request) # Return the response - formatted as a dictionary return {} @@ -838,12 +836,16 @@ def scale(self, **kwargs) -> dict: # noqa: D102 @protect_grpc def mirror(self, **kwargs) -> dict: # noqa: D102 - from ansys.api.discovery.v1.operations.edit_pb2 import MirrorRequest + from ansys.api.discovery.v1.operations.edit_pb2 import MirrorRequest, MirrorRequestData # Create the request - assumes all inputs are valid and of the proper type request = MirrorRequest( - selection_ids=[build_grpc_id(kwargs["id"])], - plane=from_plane_to_grpc_plane(kwargs["plane"]), + request_data=[ + MirrorRequestData( + ids=[build_grpc_id(kwargs["id"])], + mirror_plane=from_plane_to_grpc_plane(kwargs["plane"]), + ) + ] ) # Call the gRPC service @@ -988,79 +990,74 @@ def get_tesellation_with_options(self, **kwargs) -> dict: # noqa: D102 @protect_grpc def boolean(self, **kwargs) -> dict: # noqa: D102 - # v1 uses the combine method instead of a separate boolean method - # Map the v0 parameters to v1 combine parameters - return self.combine( - target=kwargs["target"], - other=kwargs["other"], - type_bool_op=kwargs["method"], + from ansys.api.discovery.v1.operations.edit_pb2 import BooleanRequest + + # Create the request - assumes all inputs are valid and of the proper type + request = BooleanRequest( + body1_id=build_grpc_id(kwargs["target"]), + tool_body_ids=[build_grpc_id(id) for id in kwargs["other"]], + method=kwargs["method"], keep_other=kwargs["keep_other"], - transfer_named_selections=False, ) + # Call the gRPC service + response = self.edit_stub.Boolean(request=request) + + if not response.tracked_command_response.command_response.success: + raise ValueError(f"Boolean operation failed: {kwargs['err_msg']}") + + # Return the response - formatted as a dictionary + return {"complete_command_response": response} + @protect_grpc def combine(self, **kwargs) -> dict: # noqa: D102 from ansys.api.discovery.v1.operations.edit_pb2 import ( CombineIntersectBodiesRequest, CombineIntersectBodiesRequestData, - CombineMergeBodiesRequest, - CombineMergeBodiesRequestData, ) - target_body = kwargs["target"] - other_bodies = kwargs["other"] - type_bool_op = kwargs["type_bool_op"] - keep_other = kwargs["keep_other"] - transfer_named_selections = kwargs.get("transfer_named_selections", False) + # Create the request - assumes all inputs are valid and of the proper type + request = CombineIntersectBodiesRequest( + request_data=[ + CombineIntersectBodiesRequestData( + target_selection_ids=[build_grpc_id(kwargs["target"])], + tool_selection_ids=[build_grpc_id(id) for id in kwargs["other"]], + keep_cutter=kwargs["keep_other"], + subtract_from_target=True, + transfer_named_selections=kwargs["transfer_named_selections"], + ) + ] + ) - if type_bool_op == "intersect": - request_data = CombineIntersectBodiesRequestData( - target_selection_ids=[build_grpc_id(target_body)], - tool_selection_ids=[build_grpc_id(body) for body in other_bodies], - keep_cutter=keep_other, - subtract_from_target=False, - transfer_named_selections=transfer_named_selections, - ) - request = CombineIntersectBodiesRequest(request_data=[request_data]) - response = self.edit_stub.CombineIntersectBodies(request=request) - elif type_bool_op == "subtract": - request_data = CombineIntersectBodiesRequestData( - target_selection_ids=[build_grpc_id(target_body)], - tool_selection_ids=[build_grpc_id(body) for body in other_bodies], - keep_cutter=keep_other, - subtract_from_target=True, - transfer_named_selections=transfer_named_selections, - ) - request = CombineIntersectBodiesRequest(request_data=[request_data]) - response = self.edit_stub.CombineIntersectBodies(request=request) - elif type_bool_op == "unite": - # Create request data with all body IDs - all_body_ids = [build_grpc_id(target_body)] - all_body_ids.extend([build_grpc_id(body) for body in other_bodies]) - - request_data = CombineMergeBodiesRequestData(target_selection_ids=all_body_ids) - request = CombineMergeBodiesRequest(request_data=[request_data]) - response = self.edit_stub.CombineMergeBodies(request=request) - else: - raise ValueError(f"Invalid boolean operation type: {type_bool_op}") - - if not response.success: - raise ValueError(f"Boolean operation failed: {response}") + # Call the gRPC service + response = self.edit_stub.CombineIntersectBodies(request=request) + + if not response.tracked_command_response.command_response.success: + raise ValueError(f"Boolean operation failed: {kwargs['err_msg']}") # Return the response - formatted as a dictionary return {"complete_command_response": response} @protect_grpc def split_body(self, **kwargs) -> dict: # noqa: D102 - from ansys.api.discovery.v1.operations.edit_pb2 import SplitBodyRequest + from ansys.api.discovery.v1.operations.edit_pb2 import ( + SplitBodyRequest, + SplitBodyRequestData, + ) # Create the request - assumes all inputs are valid and of the proper type request = SplitBodyRequest( - selection=[build_grpc_id(id) for id in kwargs["body_ids"]], - split_by_plane=from_plane_to_grpc_plane(kwargs["plane"]) if kwargs["plane"] else None, - split_by_slicer=[build_grpc_id(id) for id in kwargs["slicer_ids"]], - split_by_faces=[build_grpc_id(id) for id in kwargs["face_ids"]], - extend_surfaces=kwargs["extend_surfaces"], + request_data=[ + SplitBodyRequestData( + selection_ids=[build_grpc_id(id) for id in kwargs["body_ids"]], + split_by_plane=( + from_plane_to_grpc_plane(kwargs["plane"]) if kwargs["plane"] else None + ), + split_by_slicer_ids=[build_grpc_id(id) for id in kwargs["slicer_ids"]], + split_by_face_ids=[build_grpc_id(id) for id in kwargs["face_ids"]], + extend_surfaces=kwargs["extend_surfaces"], + ) + ] ) # Call the gRPC service @@ -1068,7 +1065,7 @@ def split_body(self, **kwargs) -> dict: # noqa: D102 # Return the response - formatted as a dictionary return { - "success": resp.success, + "success": resp.tracked_command_response.command_response.success, } @protect_grpc @@ -1145,7 +1142,7 @@ def assign_midsurface_thickness(self, **kwargs) -> dict: # noqa: D102 request_data=[ SetMidSurfaceThicknessRequestData( ids=[build_grpc_id(id) for id in kwargs["ids"]], - thickness=from_measurement_to_server_length(kwargs["thickness"]), + thickness=from_length_to_grpc_quantity(kwargs["thickness"]), ) ] ) diff --git a/src/ansys/geometry/core/_grpc/_services/v1/components.py b/src/ansys/geometry/core/_grpc/_services/v1/components.py index b01f4a8476..8af6b8fa69 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/components.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/components.py @@ -89,10 +89,20 @@ def create(self, **kwargs) -> dict: # noqa: D102 @protect_grpc def set_name(self, **kwargs) -> dict: # noqa: D102 - from ansys.api.discovery.v1.design.designmessages_pb2 import SetDesignEntityNameRequest + from ansys.api.discovery.v1.design.designmessages_pb2 import ( + SetDesignEntityNameRequest, + SetDesignEntityNameRequestData, + ) # Create the request - assumes all inputs are valid and of the proper type - request = SetDesignEntityNameRequest(id=build_grpc_id(kwargs["id"]), name=kwargs["name"]) + request = SetDesignEntityNameRequest( + request_data=[ + SetDesignEntityNameRequestData( + id=build_grpc_id(kwargs["id"]), + name=kwargs["name"], + ) + ] + ) # Call the gRPC service _ = self.stub.SetName(request) diff --git a/src/ansys/geometry/core/_grpc/_services/v1/conversions.py b/src/ansys/geometry/core/_grpc/_services/v1/conversions.py index 9eb2f770a2..b3d7d7b032 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/conversions.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/conversions.py @@ -478,7 +478,11 @@ def from_grpc_edge_tess_to_pd(tess: GRPCEdgeTessellation) -> "pv.PolyData": def from_grpc_edge_tess_to_raw_data(tess: GRPCEdgeTessellation) -> dict: """Convert a ``EdgeTessellation`` to raw data.""" - return {"vertices": [coord for pt in tess.vertices for coord in (pt.x, pt.y, pt.z)]} + return { + "vertices": [ + coord.value_in_geometry_units for pt in tess.vertices for coord in (pt.x, pt.y, pt.z) + ] + } def from_tess_options_to_grpc_tess_options( @@ -1204,15 +1208,18 @@ def from_grpc_surface_to_surface(surface: GRPCSurface, surface_type: "SurfaceTyp origin = from_grpc_point_to_point3d(surface.origin) axis = UnitVector3D([surface.axis.x, surface.axis.y, surface.axis.z]) reference = UnitVector3D([surface.reference.x, surface.reference.y, surface.reference.z]) + radius = surface.radius.value_in_geometry_units + major_radius = surface.major_radius.value_in_geometry_units + minor_radius = surface.minor_radius.value_in_geometry_units if surface_type == SurfaceType.SURFACETYPE_CONE: - result = Cone(origin, surface.radius, surface.half_angle, reference, axis) + result = Cone(origin, radius, surface.half_angle.value_in_geometry_units, reference, axis) elif surface_type == SurfaceType.SURFACETYPE_CYLINDER: - result = Cylinder(origin, surface.radius, reference, axis) + result = Cylinder(origin, radius, reference, axis) elif surface_type == SurfaceType.SURFACETYPE_SPHERE: - result = Sphere(origin, surface.radius, reference, axis) + result = Sphere(origin, radius, reference, axis) elif surface_type == SurfaceType.SURFACETYPE_TORUS: - result = Torus(origin, surface.major_radius, surface.minor_radius, reference, axis) + result = Torus(origin, major_radius, minor_radius, reference, axis) elif surface_type == SurfaceType.SURFACETYPE_PLANE: result = PlaneSurface(origin, reference, axis) else: @@ -1264,7 +1271,7 @@ def from_driving_dimension_to_grpc_driving_dimension( id=driving_dimension.id, name=driving_dimension.name, dimension_type=driving_dimension.dimension_type.value, - dimension_value=from_length_to_grpc_quantity(driving_dimension.dimension_value), + dimension_value=GRPCQuantity(value_in_geometry_units=driving_dimension.dimension_value), ) diff --git a/src/ansys/geometry/core/_grpc/_services/v1/edges.py b/src/ansys/geometry/core/_grpc/_services/v1/edges.py index 8ecb95d3b5..ec88063492 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/edges.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/edges.py @@ -143,7 +143,7 @@ def get_faces(self, **kwargs) -> dict: # noqa: D102 return { "faces": [ { - "id": face.id, + "id": face.id.id, "surface_type": face.surface_type, "is_reversed": face.is_reversed, } @@ -238,8 +238,8 @@ def extrude_edges_up_to(self, **kwargs) -> dict: # noqa: D102 request = ExtrudeEdgesUpToRequest( request_data=[ ExtrudeEdgesUpToRequestData( - edge_ids=[build_grpc_id(id) for id in kwargs["face_ids"]], - up_to_selection_id=build_grpc_id(kwargs["up_to_selection_id"]), + edge_ids=[build_grpc_id(id) for id in kwargs["edge_ids"]], + up_to_selection_id=build_grpc_id(kwargs["up_to_selection"]), seed_point=from_point3d_to_grpc_point(kwargs["seed_point"]), direction=from_unit_vector_to_grpc_direction(kwargs["direction"]), extrude_type=kwargs["extrude_type"].value, @@ -248,7 +248,7 @@ def extrude_edges_up_to(self, **kwargs) -> dict: # noqa: D102 ) # Call the gRPC service and serialize the response - response = self.edit_stub.ExtrudeFacesUpTo(request=request) + response = self.edit_stub.ExtrudeEdgesUpTo(request=request) tracked_response = serialize_tracked_command_response(response.tracked_command_response) # Return the response - formatted as a dictionary diff --git a/src/ansys/geometry/core/_grpc/_services/v1/faces.py b/src/ansys/geometry/core/_grpc/_services/v1/faces.py index 6629004f87..e9a806bc8b 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/faces.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/faces.py @@ -27,7 +27,6 @@ from ansys.geometry.core.errors import protect_grpc from ..base.conversions import ( - from_measurement_to_server_length, to_area, ) from ..base.faces import GRPCFacesService @@ -607,7 +606,7 @@ def get_round_info(self, **kwargs) -> dict: # noqa: D102 # Return the response - formatted as a dictionary return { "along_u": response.along_u, - "radius": response.radius, + "radius": response.radius.value_in_geometry_units, } @protect_grpc @@ -622,7 +621,7 @@ def offset_faces(self, **kwargs) -> dict: # noqa: D102 request_data=[ OffsetFacesRequestData( face_ids=[build_grpc_id(id) for id in kwargs["face_ids"]], - offset=from_measurement_to_server_length(kwargs["distance"]), + offset=from_length_to_grpc_quantity(kwargs["distance"]), direction=from_unit_vector_to_grpc_direction(kwargs["direction"]), extrude_type=kwargs["extrude_type"].value, ) @@ -649,8 +648,8 @@ def setup_offset_relationship(self, **kwargs) -> dict: # noqa: D102 request = FaceOffsetRequest( request_data=[ FaceOffsetRequestData( - face1=build_grpc_id(kwargs["face1_id"]), - face2=build_grpc_id(kwargs["face2_id"]), + id1=build_grpc_id(kwargs["face1_id"]), + id2=build_grpc_id(kwargs["face2_id"]), set_baselines=kwargs["set_baselines"], process_adjacent_faces=kwargs["process_adjacent_faces"], ) diff --git a/src/ansys/geometry/core/_grpc/_services/v1/prepare_tools.py b/src/ansys/geometry/core/_grpc/_services/v1/prepare_tools.py index 7025c62037..768c615093 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/prepare_tools.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/prepare_tools.py @@ -32,7 +32,6 @@ from_enclosure_options_to_grpc_enclosure_options, from_length_to_grpc_quantity, get_standard_tracker_response, - get_tracker_response_with_created_bodies, serialize_tracked_command_response, ) @@ -70,7 +69,10 @@ def extract_volume_from_faces(self, **kwargs) -> dict: # noqa: D102 response = self.stub.ExtractVolumeFromFaces(request) # Return the response - formatted as a dictionary - return get_tracker_response_with_created_bodies(response) + return { + "success": response.tracked_command_response.command_response.success, + "created_bodies": [body.id.id for body in response.created_bodies], + } @protect_grpc def extract_volume_from_edge_loops(self, **kwargs) -> dict: # noqa: D102 @@ -86,71 +88,75 @@ def extract_volume_from_edge_loops(self, **kwargs) -> dict: # noqa: D102 response = self.stub.ExtractVolumeFromEdgeLoops(request) # Return the response - formatted as a dictionary - return get_tracker_response_with_created_bodies(response) + return { + "success": response.tracked_command_response.command_response.success, + "created_bodies": [body.id.id for body in response.created_bodies], + } @protect_grpc def remove_rounds(self, **kwargs) -> dict: # noqa: D102 from ansys.api.discovery.v1.operations.prepare_pb2 import RemoveRoundsRequest - from google.protobuf.wrappers_pb2 import BoolValue # Create the request - assumes all inputs are valid and of the proper type request = RemoveRoundsRequest( selection_ids=[build_grpc_id(round) for round in kwargs["rounds"]], - auto_shrink=BoolValue(value=kwargs["auto_shrink"]), + auto_shrink=kwargs["auto_shrink"], ) # Call the gRPC service response = self.stub.RemoveRounds(request) # Return the response - formatted as a dictionary - return get_standard_tracker_response(response) + return { + "success": response.tracked_command_response.command_response.success, + } @protect_grpc def share_topology(self, **kwargs) -> dict: # noqa: D102 from ansys.api.discovery.v1.operations.prepare_pb2 import ShareTopologyRequest - from google.protobuf.wrappers_pb2 import BoolValue # Create the request - assumes all inputs are valid and of the proper type request = ShareTopologyRequest( selection_ids=[build_grpc_id(body) for body in kwargs["bodies"]], - tolerance=from_length_to_grpc_quantity(kwargs["tolerance"]), - preserve_instances=BoolValue(value=kwargs["preserve_instances"]), + tolerance=from_measurement_to_server_length(kwargs["tolerance"]), + preserve_instances=kwargs["preserve_instances"], ) # Call the gRPC service response = self.stub.ShareTopology(request) # Return the response - formatted as a dictionary - return get_standard_tracker_response(response) + return { + "success": response.tracked_command_response.command_response.success, + } @protect_grpc def enhanced_share_topology(self, **kwargs) -> dict: # noqa: D102 from ansys.api.discovery.v1.operations.prepare_pb2 import ShareTopologyRequest - from google.protobuf.wrappers_pb2 import BoolValue # Create the request - assumes all inputs are valid and of the proper type request = ShareTopologyRequest( selection_ids=[build_grpc_id(body) for body in kwargs["bodies"]], - tolerance=from_length_to_grpc_quantity(kwargs["tolerance"]), - preserve_instances=BoolValue(value=kwargs["preserve_instances"]), + tolerance=from_measurement_to_server_length(kwargs["tolerance"]), + preserve_instances=kwargs["preserve_instances"], ) # Call the gRPC service - response = self.stub.EnhancedShareTopology(request) + response = self.stub.EnhancedShareTopology(request).response_data + tracked_response = serialize_tracked_command_response(response.tracked_command_response) # Return the response - formatted as a dictionary return { - "success": response.success, + "success": response.tracked_command_response.command_response.success, "found": response.found, "repaired": response.repaired, - "tracker_response": serialize_tracked_command_response(response.tracked_changes), "created_bodies_monikers": [ - created_body.id - for created_body in response.tracked_changes.get("created_bodies", []) + created_body.get("id").id + for created_body in tracked_response.get("created_bodies", []) ], "modified_bodies_monikers": [ - modified_body.id - for modified_body in response.tracked_changes.get("modified_bodies", []) + modified_body.get("id").id + for modified_body in tracked_response.get("modified_bodies", []) ], } @@ -238,26 +244,23 @@ def remove_logo(self, **kwargs): # noqa: D102 def detect_helixes(self, **kwargs) -> dict: # noqa: D102 from ansys.api.discovery.v1.operations.prepare_pb2 import ( FindHelixesOptions, + FindHelixesRequest, ) from ansys.geometry.core.shapes.parameterization import Interval - from ..base.conversions import ( - from_measurement_to_server_length, - to_distance, - ) from .conversions import ( from_grpc_curve_to_curve, from_grpc_point_to_point3d, ) # Create the request - assumes all inputs are valid and of the proper type - request = FindHelixesOptions( + request = FindHelixesRequest( body_ids=[build_grpc_id(body) for body in kwargs["bodies"]], options=FindHelixesOptions( - min_radius=from_measurement_to_server_length(kwargs["min_radius"]), - max_radius=from_measurement_to_server_length(kwargs["max_radius"]), - fit_radius_error=from_measurement_to_server_length(kwargs["fit_radius_error"]), + min_radius=from_length_to_grpc_quantity(kwargs["min_radius"]), + max_radius=from_length_to_grpc_quantity(kwargs["max_radius"]), + fit_radius_error=from_length_to_grpc_quantity(kwargs["fit_radius_error"]), ), ) @@ -279,12 +282,12 @@ def detect_helixes(self, **kwargs) -> dict: # noqa: D102 "interval": Interval( helix.trimmed_curve.interval_start, helix.trimmed_curve.interval_end ), - "length": to_distance(helix.trimmed_curve.length).value, + "length": helix.trimmed_curve.length.value_in_geometry_units, }, "edges": [ { - "id": edge.id, - "parent_id": edge.parent.id, + "id": edge.id.id, + "parent_id": edge.parent.id.id, "curve_type": edge.curve_type, "is_reversed": edge.is_reversed, } @@ -305,13 +308,13 @@ def create_box_enclosure(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = CreateEnclosureBoxRequest( - body_ids=[build_grpc_id(body.id) for body in kwargs["bodies"]], - x_low=from_measurement_to_server_length(kwargs["x_low"]), - x_high=from_measurement_to_server_length(kwargs["x_high"]), - y_low=from_measurement_to_server_length(kwargs["y_low"]), - y_high=from_measurement_to_server_length(kwargs["y_high"]), - z_low=from_measurement_to_server_length(kwargs["z_low"]), - z_high=from_measurement_to_server_length(kwargs["z_high"]), + body_ids=[build_grpc_id(id) for id in kwargs["body_ids"]], + x_low=from_length_to_grpc_quantity(kwargs["x_low"]), + x_high=from_length_to_grpc_quantity(kwargs["x_high"]), + y_low=from_length_to_grpc_quantity(kwargs["y_low"]), + y_high=from_length_to_grpc_quantity(kwargs["y_high"]), + z_low=from_length_to_grpc_quantity(kwargs["z_low"]), + z_high=from_length_to_grpc_quantity(kwargs["z_high"]), enclosure_options=grpc_enclosure_options, ) @@ -319,7 +322,10 @@ def create_box_enclosure(self, **kwargs) -> dict: # noqa: D102 response = self.stub.CreateEnclosureBox(request) # Return the response - formatted as a dictionary - return get_tracker_response_with_created_bodies(response) + return { + "success": response.tracked_command_response.command_response.success, + "created_bodies": [body.id.id for body in response.created_bodies], + } @protect_grpc def create_cylinder_enclosure(self, **kwargs) -> dict: # noqa: D102 @@ -331,10 +337,10 @@ def create_cylinder_enclosure(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = CreateEnclosureCylinderRequest( - body_ids=[build_grpc_id(body.id) for body in kwargs["bodies"]], - axial_distance_low=from_measurement_to_server_length(kwargs["axial_distance_low"]), - axial_distance_high=from_measurement_to_server_length(kwargs["axial_distance_high"]), - radial_distance=from_measurement_to_server_length(kwargs["radial_distance"]), + body_ids=[build_grpc_id(id) for id in kwargs["body_ids"]], + axial_distance_low=from_length_to_grpc_quantity(kwargs["axial_distance_low"]), + axial_distance_high=from_length_to_grpc_quantity(kwargs["axial_distance_high"]), + radial_distance=from_length_to_grpc_quantity(kwargs["radial_distance"]), enclosure_options=grpc_enclosure_options, ) @@ -342,7 +348,10 @@ def create_cylinder_enclosure(self, **kwargs) -> dict: # noqa: D102 response = self.stub.CreateEnclosureCylinder(request) # Return the response - formatted as a dictionary - return get_tracker_response_with_created_bodies(response) + return { + "success": response.tracked_command_response.command_response.success, + "created_bodies": [body.id.id for body in response.created_bodies], + } @protect_grpc def create_sphere_enclosure(self, **kwargs) -> dict: # noqa: D102 @@ -354,8 +363,8 @@ def create_sphere_enclosure(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = CreateEnclosureSphereRequest( - body_ids=[build_grpc_id(body.id) for body in kwargs["bodies"]], - radial_distance=from_measurement_to_server_length(kwargs["radial_distance"]), + body_ids=[build_grpc_id(id) for id in kwargs["body_ids"]], + radial_distance=from_length_to_grpc_quantity(kwargs["radial_distance"]), enclosure_options=grpc_enclosure_options, ) @@ -363,8 +372,28 @@ def create_sphere_enclosure(self, **kwargs) -> dict: # noqa: D102 response = self.stub.CreateEnclosureSphere(request) # Return the response - formatted as a dictionary - return get_tracker_response_with_created_bodies(response) + return { + "success": response.tracked_command_response.command_response.success, + "created_bodies": [body.id.id for body in response.created_bodies], + } @protect_grpc def detect_sweepable_bodies(self, **kwargs): # noqa: D102 - raise NotImplementedError + from ansys.api.discovery.v1.operations.prepare_pb2 import DetectSweepableBodiesRequest + + # Create the request - assumes all inputs are valid and of the proper type + request = DetectSweepableBodiesRequest( + bodies=[build_grpc_id(id=id) for id in kwargs["body_ids"]], + get_source_target_faces=kwargs["get_source_target_faces"], + ) + + # Call the gRPC service + response = self.stub.DetectSweepableBodies(request) + + # Return the response - formatted as a dictionary + return { + "results": [ + {"sweepable": result.result, "face_ids": [face.id for face in result.face_ids]} + for result in response.response_data + ] + } diff --git a/src/ansys/geometry/core/_grpc/_services/v1/repair_tools.py b/src/ansys/geometry/core/_grpc/_services/v1/repair_tools.py index 641a215baa..ead83d9165 100644 --- a/src/ansys/geometry/core/_grpc/_services/v1/repair_tools.py +++ b/src/ansys/geometry/core/_grpc/_services/v1/repair_tools.py @@ -217,7 +217,7 @@ def find_interferences(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = FindInterferenceRequest( - bodY_ids=[build_grpc_id(body) for body in kwargs["bodies"]], + body_ids=[build_grpc_id(body) for body in kwargs["bodies"]], cut_smaller_body=kwargs["cut_smaller_body"], ) @@ -241,7 +241,7 @@ def find_and_fix_short_edges(self, **kwargs): # noqa: D102 # Call the gRPC service response = self.stub.FindAndFixShortEdges(request) - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.response_data) @protect_grpc def find_and_fix_extra_edges(self, **kwargs) -> dict: # noqa: D102 @@ -256,7 +256,7 @@ def find_and_fix_extra_edges(self, **kwargs) -> dict: # noqa: D102 # Call the gRPC service response = self.stub.FindAndFixExtraEdges(request) - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.response_data) @protect_grpc def find_and_fix_split_edges(self, **kwargs) -> dict: # noqa: D102 @@ -272,7 +272,7 @@ def find_and_fix_split_edges(self, **kwargs) -> dict: # noqa: D102 # Call the gRPC service response = self.stub.FindAndFixSplitEdges(request) - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.response_data) @protect_grpc def find_and_fix_simplify(self, **kwargs) -> dict: # noqa: D102 @@ -287,7 +287,7 @@ def find_and_fix_simplify(self, **kwargs) -> dict: # noqa: D102 # Call the gRPC service response = self.stub.FindAndSimplify(request) - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.response_data) @protect_grpc def find_and_fix_stitch_faces(self, **kwargs) -> dict: # noqa: D102 @@ -308,7 +308,7 @@ def find_and_fix_stitch_faces(self, **kwargs) -> dict: # noqa: D102 # Call the gRPC service response = self.stub.FindAndFixStitchFaces(request) - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.response_data) @protect_grpc def inspect_geometry(self, **kwargs) -> dict: # noqa: D102 @@ -316,14 +316,14 @@ def inspect_geometry(self, **kwargs) -> dict: # noqa: D102 # Create the request - assumes all inputs are valid and of the proper type request = InspectGeometryRequest( - body_ids=[build_grpc_id(body) for body in kwargs.get("bodies")] + body_ids=[build_grpc_id(body) for body in kwargs.get("body_ids", [])] ) # Call the gRPC service - inspect_result_response = self.stub.InspectGeometry(request) + response = self.stub.InspectGeometry(request) # Serialize and return the response - return self.__serialize_inspect_result_response(inspect_result_response) + return self.__serialize_inspect_result_response(response) @protect_grpc def repair_geometry(self, **kwargs) -> dict: # noqa: D102 @@ -353,7 +353,7 @@ def fix_duplicate_faces(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixDuplicateFaces(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_missing_faces(self, **kwargs) -> dict: # noqa: D102 @@ -368,7 +368,7 @@ def fix_missing_faces(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixMissingFaces(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_inexact_edges(self, **kwargs) -> dict: # noqa: D102 @@ -383,7 +383,7 @@ def fix_inexact_edges(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixInexactEdges(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_extra_edges(self, **kwargs) -> dict: # noqa: D102 @@ -398,7 +398,7 @@ def fix_extra_edges(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixExtraEdges(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_short_edges(self, **kwargs) -> dict: # noqa: D102 @@ -413,7 +413,7 @@ def fix_short_edges(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixShortEdges(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_small_faces(self, **kwargs) -> dict: # noqa: D102 @@ -428,7 +428,7 @@ def fix_small_faces(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixSmallFaces(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_split_edges(self, **kwargs) -> dict: # noqa: D102 @@ -443,7 +443,7 @@ def fix_split_edges(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixSplitEdges(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_stitch_faces(self, **kwargs) -> dict: # noqa: D102 @@ -458,7 +458,7 @@ def fix_stitch_faces(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixStitchFaces(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) @protect_grpc def fix_unsimplified_faces(self, **kwargs) -> dict: # noqa: D102 @@ -488,7 +488,7 @@ def fix_interference(self, **kwargs) -> dict: # noqa: D102 response = self.stub.FixInterference(request) # Return the response - formatted as a dictionary - return serialize_repair_command_response(response) + return serialize_repair_command_response(response.result) def __serialize_inspect_result_response(self, response) -> dict: # noqa: D102 def serialize_body(body): diff --git a/src/ansys/geometry/core/designer/body.py b/src/ansys/geometry/core/designer/body.py index f3d958c109..83eaec4b29 100644 --- a/src/ansys/geometry/core/designer/body.py +++ b/src/ansys/geometry/core/designer/body.py @@ -2151,7 +2151,11 @@ def __generic_boolean_op( ] response = self._template._grpc_client.services.bodies.boolean( - target=self, other=grpc_other, method=method, err_msg=err_msg, keep_other=keep_other + target=self.id, + other=[other.id for other in grpc_other], + method=method, + err_msg=err_msg, + keep_other=keep_other, ) if not pyansys_geom.USE_TRACKER_TO_UPDATE_DESIGN: diff --git a/src/ansys/geometry/core/tools/prepare_tools.py b/src/ansys/geometry/core/tools/prepare_tools.py index 4189eff151..49c47d47b4 100644 --- a/src/ansys/geometry/core/tools/prepare_tools.py +++ b/src/ansys/geometry/core/tools/prepare_tools.py @@ -640,7 +640,7 @@ def create_box_enclosure( parent_design = get_design_from_body(bodies[0]) response = self._grpc_client._services.prepare_tools.create_box_enclosure( - bodies=bodies, + body_ids=[body.id for body in bodies], x_low=x_low, x_high=x_high, y_low=y_low, @@ -723,7 +723,7 @@ def create_cylinder_enclosure( parent_design = get_design_from_body(bodies[0]) response = self._grpc_client._services.prepare_tools.create_cylinder_enclosure( - bodies=bodies, + body_ids=[body.id for body in bodies], axial_distance_low=axial_distance_low, axial_distance_high=axial_distance_high, radial_distance=radial_distance, @@ -785,7 +785,7 @@ def create_sphere_enclosure( ) response = self._grpc_client._services.prepare_tools.create_sphere_enclosure( - bodies=bodies, + body_ids=[body.id for body in bodies], radial_distance=radial_distance, enclosure_options=enclosure_options, ) diff --git a/tests/integration/test_design.py b/tests/integration/test_design.py index fe4c7e342d..ea40a2b64c 100644 --- a/tests/integration/test_design.py +++ b/tests/integration/test_design.py @@ -92,12 +92,12 @@ def test_error_opening_file(modeler: Modeler, tmp_path_factory: pytest.TempPathF fake_path = Path("C:\\Users\\FakeUser\\Documents\\FakeProject\\FakeFile.scdocx") with pytest.raises( GeometryRuntimeError, - match="The '_upload_file' method is not supported in backend v1 and beyond.", + match="The '_upload_file' method is not supported in protos v1 and beyond", ): modeler._upload_file(fake_path) with pytest.raises( GeometryRuntimeError, - match=("The '_upload_file_stream' method is not supported with backend v1 and beyond."), + match="The '_upload_file_stream' method is not supported with protos v1 and beyond", ): modeler._upload_file_stream(fake_path) else: @@ -1322,8 +1322,12 @@ def test_upload_file(modeler: Modeler, tmp_path_factory: pytest.TempPathFactory) assert file.exists() # Upload file - path_on_server = modeler._upload_file(file) - assert path_on_server is not None + if modeler.client.services.version != GeometryApiProtos.V0: + with pytest.raises(match="The '_upload_file' method is not supported in protos v1"): + modeler._upload_file(file) + else: + path_on_server = modeler._upload_file(file) + assert path_on_server is not None def test_stream_upload_file(tmp_path_factory: pytest.TempPathFactory, transport_mode: str):