From 052448f7330c6ff9c432eba03de9bae842497d09 Mon Sep 17 00:00:00 2001 From: Jonah Boling <56607167+jonahrb@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:47:11 -0500 Subject: [PATCH] feat: create body from surface (#1454) Co-authored-by: pyansys-ci-bot <92810346+pyansys-ci-bot@users.noreply.github.com> Co-authored-by: Roberto Pastor Muela <37798125+RobPasMue@users.noreply.github.com> --- doc/changelog.d/1454.added.md | 1 + .../_static/thumbnails/quarter_sphere.png | Bin 0 -> 105791 bytes doc/source/conf.py | 1 + doc/source/examples.rst | 1 + .../03_modeling/surface_bodies.mystnb | 86 ++++++++++++++++++ .../geometry/core/connection/conversions.py | 86 ++++++++++++++++++ src/ansys/geometry/core/designer/component.py | 43 +++++++++ src/ansys/geometry/core/shapes/__init__.py | 1 + .../geometry/core/shapes/surfaces/__init__.py | 1 + tests/integration/test_design.py | 71 ++++++++++++++- 10 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 doc/changelog.d/1454.added.md create mode 100644 doc/source/_static/thumbnails/quarter_sphere.png create mode 100644 doc/source/examples/03_modeling/surface_bodies.mystnb diff --git a/doc/changelog.d/1454.added.md b/doc/changelog.d/1454.added.md new file mode 100644 index 0000000000..ef8d8f281c --- /dev/null +++ b/doc/changelog.d/1454.added.md @@ -0,0 +1 @@ +create body from surface \ No newline at end of file diff --git a/doc/source/_static/thumbnails/quarter_sphere.png b/doc/source/_static/thumbnails/quarter_sphere.png new file mode 100644 index 0000000000000000000000000000000000000000..28ea6e9eedb445eb2cc6986a699399e8d2dae6b9 GIT binary patch literal 105791 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 literal 0 HcmV?d00001 diff --git a/doc/source/conf.py b/doc/source/conf.py index 984ef635e6..d016751985 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -292,6 +292,7 @@ def intersphinx_pyansys_geometry(switcher_version: str): "examples/03_modeling/export_design": "_static/thumbnails/export_design.png", "examples/03_modeling/design_tree": "_static/thumbnails/design_tree.png", "examples/03_modeling/service_colors": "_static/thumbnails/service_colors.png", + "examples/03_modeling/surface_bodies": "_static/thumbnails/quarter_sphere.png", "examples/04_applied/01_naca_airfoils": "_static/thumbnails/naca_airfoils.png", "examples/04_applied/02_naca_fluent": "_static/thumbnails/naca_fluent.png", } diff --git a/doc/source/examples.rst b/doc/source/examples.rst index 857aa11ef9..8ec8e76546 100644 --- a/doc/source/examples.rst +++ b/doc/source/examples.rst @@ -47,6 +47,7 @@ These examples demonstrate service-based modeling operations. examples/03_modeling/export_design.mystnb examples/03_modeling/design_tree.mystnb examples/03_modeling/service_colors.mystnb + examples/03_modeling/surface_bodies.mystnb Applied examples ---------------- diff --git a/doc/source/examples/03_modeling/surface_bodies.mystnb b/doc/source/examples/03_modeling/surface_bodies.mystnb new file mode 100644 index 0000000000..5ea0ffbd95 --- /dev/null +++ b/doc/source/examples/03_modeling/surface_bodies.mystnb @@ -0,0 +1,86 @@ +--- +jupytext: + text_representation: + extension: .mystnb + format_name: myst + format_version: 0.13 + jupytext_version: 1.16.4 +kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- + +# Modeling: Surface bodies and trimmed surfaces +This example will show how to trim different surfaces, and how to use those surfaces to create surface bodies. + +## Create a surface +Create a sphere surface. This can be done without launching the modeler. + +```{code-cell} ipython3 +from ansys.geometry.core.shapes.surfaces import Sphere +from ansys.geometry.core.math import Point3D + +surface = Sphere(origin=Point3D([0, 0, 0]), radius=1) +``` + +Now get information on how the surface is defined and parameterized. + +```{code-cell} ipython3 +surface.parameterization() +``` + +## Trim the surface +For a sphere, its parametization is (`u: [0, 2*pi]`, `v:[-pi/2, pi/2]`), where u corresponds to longitude and v corresponds to latitude. We can **trim** a surface by providing new parameters. + +```{code-cell} ipython3 +from ansys.geometry.core.shapes.box_uv import BoxUV +from ansys.geometry.core.shapes.parameterization import Interval +import math + +trimmed_surface = surface.trim(BoxUV(range_u=Interval(0, math.pi), range_v=Interval(0, math.pi/2))) +``` + +From a TrimmedSurface, you can always refer back to the underlying Surface if needed. + +```{code-cell} ipython3 +trimmed_surface.geometry +``` + +## Create a surface body + +Now create a surface body by launching the modeler session and providing the trimmed surface. Then plot the body to see how we created a quarter of a sphere as a surface body. + +```{code-cell} ipython3 +from ansys.geometry.core import launch_modeler + +modeler = launch_modeler() +print(modeler) +``` + +```{code-cell} ipython3 +design = modeler.create_design("SurfaceBodyExample") +body = design.create_body_from_surface("trimmed_sphere", trimmed_surface) +design.plot() +``` + +If the sphere was left untrimmed, it would create a solid body since the surface is fully closed. In this case, since the surface was open, it created a surface body. + +This same process can be used with other surfaces including: +- cone +- cylinder +- plane +- torus + +Each surface has its own unique parameterization, which must be understood before trying to trim it. + ++++ + +## Close session +When you finish interacting with your modeling service, you should close the active server session. This frees resources wherever the service is running. + +Close the server session. + +```{code-cell} ipython3 +modeler.close() +``` diff --git a/src/ansys/geometry/core/connection/conversions.py b/src/ansys/geometry/core/connection/conversions.py index 84147d352f..7b77da3e78 100644 --- a/src/ansys/geometry/core/connection/conversions.py +++ b/src/ansys/geometry/core/connection/conversions.py @@ -37,8 +37,10 @@ Point as GRPCPoint, Polygon as GRPCPolygon, Surface as GRPCSurface, + SurfaceType as GRPCSurfaceType, Tessellation, TrimmedCurve as GRPCTrimmedCurve, + TrimmedSurface as GRPCTrimmedSurface, ) from ansys.geometry.core.math.frame import Frame from ansys.geometry.core.math.matrix import Matrix44 @@ -50,6 +52,7 @@ from ansys.geometry.core.shapes.curves.curve import Curve from ansys.geometry.core.shapes.curves.ellipse import Ellipse from ansys.geometry.core.shapes.curves.line import Line +from ansys.geometry.core.shapes.surfaces import TrimmedSurface from ansys.geometry.core.shapes.surfaces.cone import Cone from ansys.geometry.core.shapes.surfaces.cylinder import Cylinder from ansys.geometry.core.shapes.surfaces.plane import PlaneSurface @@ -576,3 +579,86 @@ def trimmed_curve_to_grpc_trimmed_curve(curve: "TrimmedCurve") -> GRPCTrimmedCur interval_start=i_start, interval_end=i_end, ) + + +def surface_to_grpc_surface(surface: Surface) -> tuple[GRPCSurface, GRPCSurfaceType]: + """Convert a ``Surface`` object to a surface gRPC message. + + Parameters + ---------- + surface : Surface + Surface to convert. + + Returns + ------- + GRPCSurface + Return ``Surface`` as a ``ansys.api.geometry.Surface`` message. + GRPCSurfaceType + Return the grpc surface type of ``Surface``. + """ + grpc_surface = None + surface_type = None + origin = point3d_to_grpc_point(surface.origin) + reference = unit_vector_to_grpc_direction(surface.dir_x) + axis = unit_vector_to_grpc_direction(surface.dir_z) + + if isinstance(surface, Plane): + grpc_surface = GRPCSurface(origin=origin, reference=reference, axis=axis) + surface_type = GRPCSurfaceType.SURFACETYPE_PLANE + elif isinstance(surface, Sphere): + grpc_surface = GRPCSurface( + origin=origin, reference=reference, axis=axis, radius=surface.radius.m + ) + surface_type = GRPCSurfaceType.SURFACETYPE_SPHERE + elif isinstance(surface, Cylinder): + grpc_surface = GRPCSurface( + origin=origin, reference=reference, axis=axis, radius=surface.radius.m + ) + surface_type = GRPCSurfaceType.SURFACETYPE_CYLINDER + elif isinstance(surface, Cone): + grpc_surface = GRPCSurface( + origin=origin, + reference=reference, + axis=axis, + radius=surface.radius.m, + half_angle=surface.half_angle.m, + ) + surface_type = GRPCSurfaceType.SURFACETYPE_CONE + elif isinstance(surface, Torus): + grpc_surface = GRPCSurface( + origin=origin, + reference=reference, + axis=axis, + major_radius=surface.major_radius.m, + minor_radius=surface.minor_radius.m, + ) + surface_type = GRPCSurfaceType.SURFACETYPE_TORUS + + return grpc_surface, surface_type + + +def trimmed_surface_to_grpc_trimmed_surface( + trimmed_surface: TrimmedSurface, +) -> GRPCTrimmedSurface: + """Convert a ``TrimmedSurface`` to a trimmed surface gRPC message. + + Parameters + ---------- + trimmed_surface : TrimmedSurface + Surface to convert. + + Returns + ------- + GRPCTrimmedSurface + Geometry service gRPC ``TrimmedSurface`` message. + """ + surface_geometry, surface_type = surface_to_grpc_surface(trimmed_surface.geometry) + + return GRPCTrimmedSurface( + surface=surface_geometry, + type=surface_type, + u_min=trimmed_surface.box_uv.interval_u.start, + u_max=trimmed_surface.box_uv.interval_u.end, + v_min=trimmed_surface.box_uv.interval_v.start, + v_max=trimmed_surface.box_uv.interval_v.end, + ) diff --git a/src/ansys/geometry/core/designer/component.py b/src/ansys/geometry/core/designer/component.py index 8fedae0f94..bef18fd6b0 100644 --- a/src/ansys/geometry/core/designer/component.py +++ b/src/ansys/geometry/core/designer/component.py @@ -36,6 +36,7 @@ CreateExtrudedBodyRequest, CreatePlanarBodyRequest, CreateSphereBodyRequest, + CreateSurfaceBodyRequest, CreateSweepingChainRequest, CreateSweepingProfileRequest, TranslateRequest, @@ -57,6 +58,7 @@ point3d_to_grpc_point, sketch_shapes_to_grpc_geometries, trimmed_curve_to_grpc_trimmed_curve, + trimmed_surface_to_grpc_trimmed_surface, unit_vector_to_grpc_direction, ) from ansys.geometry.core.designer.beam import Beam, BeamProfile @@ -76,6 +78,7 @@ from ansys.geometry.core.shapes.curves.circle import Circle from ansys.geometry.core.shapes.curves.trimmed_curve import TrimmedCurve from ansys.geometry.core.shapes.parameterization import Interval +from ansys.geometry.core.shapes.surfaces import TrimmedSurface from ansys.geometry.core.sketch.sketch import Sketch from ansys.geometry.core.typing import Real @@ -895,6 +898,46 @@ def create_surface_from_face(self, name: str, face: Face) -> Body: self._master_component.part.bodies.append(tb) return Body(response.id, response.name, self, tb) + @protect_grpc + @check_input_types + @ensure_design_is_active + @min_backend_version(25, 1, 0) + def create_body_from_surface(self, name: str, trimmed_surface: TrimmedSurface) -> Body: + """Create a surface body from a trimmed surface. + + Notes + ----- + It is possible to create a closed solid body (as opposed to an open surface body) with a + Sphere or Torus if they are untrimmed. This can be validated with `body.is_surface`. + + Parameters + ---------- + name : str + User-defined label for the new surface body. + trimmed_surface : TrimmedSurface + Geometry for the new surface body. + + Returns + ------- + Body + Surface body. + """ + surface = trimmed_surface_to_grpc_trimmed_surface(trimmed_surface) + request = CreateSurfaceBodyRequest( + name=name, + parent=self.id, + trimmed_surface=surface, + ) + + self._grpc_client.log.debug( + f"Creating surface body from trimmed surface provided on {self.id}. Creating body..." + ) + response = self._bodies_stub.CreateSurfaceBody(request) + + tb = MasterBody(response.master_id, name, self._grpc_client, is_surface=response.is_surface) + self._master_component.part.bodies.append(tb) + return Body(response.id, response.name, self, tb) + @check_input_types @ensure_design_is_active def create_coordinate_system(self, name: str, frame: Frame) -> CoordinateSystem: diff --git a/src/ansys/geometry/core/shapes/__init__.py b/src/ansys/geometry/core/shapes/__init__.py index 45f4ca4e28..9530398c17 100644 --- a/src/ansys/geometry/core/shapes/__init__.py +++ b/src/ansys/geometry/core/shapes/__init__.py @@ -39,3 +39,4 @@ from ansys.geometry.core.shapes.surfaces.surface import Surface from ansys.geometry.core.shapes.surfaces.surface_evaluation import SurfaceEvaluation from ansys.geometry.core.shapes.surfaces.torus import Torus +from ansys.geometry.core.shapes.surfaces.trimmed_surface import TrimmedSurface diff --git a/src/ansys/geometry/core/shapes/surfaces/__init__.py b/src/ansys/geometry/core/shapes/surfaces/__init__.py index 05f8d721d5..c833ab1875 100644 --- a/src/ansys/geometry/core/shapes/surfaces/__init__.py +++ b/src/ansys/geometry/core/shapes/surfaces/__init__.py @@ -28,3 +28,4 @@ from ansys.geometry.core.shapes.surfaces.surface import Surface from ansys.geometry.core.shapes.surfaces.surface_evaluation import SurfaceEvaluation from ansys.geometry.core.shapes.surfaces.torus import Torus +from ansys.geometry.core.shapes.surfaces.trimmed_surface import TrimmedSurface diff --git a/tests/integration/test_design.py b/tests/integration/test_design.py index a4c66cbe63..cca741203f 100644 --- a/tests/integration/test_design.py +++ b/tests/integration/test_design.py @@ -56,7 +56,17 @@ Vector3D, ) from ansys.geometry.core.misc import DEFAULT_UNITS, UNITS, Accuracy, Angle, Distance -from ansys.geometry.core.shapes import Circle, Ellipse, Interval, ParamUV +from ansys.geometry.core.shapes import ( + Circle, + Cone, + Cylinder, + Ellipse, + Interval, + ParamUV, + Sphere, + Torus, +) +from ansys.geometry.core.shapes.box_uv import BoxUV from ansys.geometry.core.sketch import Sketch from ansys.tools.visualization_interface.utils.color import Color @@ -2669,3 +2679,62 @@ def check_list_equality(lines, expected_lines): " |---(body) nested_1_nested_1_comp_1_circle", ] assert check_list_equality(lines, ref) is True + + +def test_surface_body_creation(modeler: Modeler): + """Test surface body creation from trimmed surfaces.""" + design = modeler.create_design("Design1") + + # half sphere + surface = Sphere([0, 0, 0], 1) + trimmed_surface = surface.trim(BoxUV(Interval(0, np.pi * 2), Interval(0, np.pi / 2))) + body = design.create_body_from_surface("sphere", trimmed_surface) + assert len(design.bodies) == 1 + assert body.is_surface + assert body.faces[0].area.m == pytest.approx(np.pi * 2) + + # cylinder + surface = Cylinder([0, 0, 0], 1) + trimmed_surface = surface.trim(BoxUV(Interval(0, np.pi * 2), Interval(0, 1))) + body = design.create_body_from_surface("cylinder", trimmed_surface) + + assert len(design.bodies) == 2 + assert body.is_surface + assert body.faces[0].area.m == pytest.approx(np.pi * 2) + + # cone + surface = Cone([0, 0, 0], 1, np.pi / 4) + trimmed_surface = surface.trim(BoxUV(Interval(0, np.pi * 2), Interval(surface.apex.z.m, 0))) + body = design.create_body_from_surface("cone", trimmed_surface) + + assert len(design.bodies) == 3 + assert body.is_surface + assert body.faces[0].area.m == pytest.approx(4.44288293816) + + # half torus + surface = Torus([0, 0, 0], 2, 1) + trimmed_surface = surface.trim(BoxUV(Interval(0, np.pi), Interval(0, np.pi * 2))) + body = design.create_body_from_surface("torus", trimmed_surface) + + assert len(design.bodies) == 4 + assert body.is_surface + assert body.faces[0].area.m == pytest.approx(39.4784176044) + + # SOLID BODIES + + # sphere + surface = Sphere([0, 0, 0], 1) + trimmed_surface = surface.trim(BoxUV(Interval(0, np.pi * 2), Interval(-np.pi / 2, np.pi / 2))) + body = design.create_body_from_surface("sphere_solid", trimmed_surface) + assert len(design.bodies) == 5 + assert not body.is_surface + assert body.faces[0].area.m == pytest.approx(np.pi * 4) + + # torus + surface = Torus([0, 0, 0], 2, 1) + trimmed_surface = surface.trim(BoxUV(Interval(0, np.pi * 2), Interval(0, np.pi * 2))) + body = design.create_body_from_surface("torus_solid", trimmed_surface) + + assert len(design.bodies) == 6 + assert not body.is_surface + assert body.faces[0].area.m == pytest.approx(39.4784176044 * 2)