.. _ref_index_surfer: *************** Surface meshing *************** The :class:`Surfer ` class enables you to perform surface meshing using different surface meshing algorithms on *TopoFaces* or face zonelets. Surface meshing considers many parameters, such as size field type, minimum size, maximum size, growth rate, and transition type, while meshing *TopoFaces* or face zonelets. .. tip:: Surface meshing with constant and variable sizing with tri/quad mesh can be generated using the :func:`Mesh.surface_mesh() ` method in the Lucid API. ================================= Surface meshing geometry/topology ================================= The following example shows how to perform these steps: * Import topology-based geometry (SCDOC) files and visualize the model. * Surface mesh the TopoFaces with constant size. Start the PyPrimeMesh client and import the CAD geometry (SCDOC) file: .. code-block:: python import ansys.meshing.prime as prime from ansys.meshing.prime.graphics import Graphics prime_client = prime.launch_prime() model = prime_client.model # Import CAD file input_file = r"D:/Examples/simple-bracket-holes.scdoc" file_io = prime.FileIO(model) file_io.import_cad( input_file, params=prime.ImportCadParams(model=model, length_unit=prime.LengthUnit.MM), ) # Show model in graphic display = Graphics(model) display(update=True) part = model.get_part_by_name("simple-bracket-holes") .. figure:: ../images/simple-bracket-holes_scdoc.png :width: 300pt :align: center **CAD geometry imported** Initialize surfer parameters and generate surface mesh on TopoFaces: .. code-block:: python # Surface mesh with triangular elements of uniform size surfer_params = prime.SurferParams(model=model, constant_size=1.0) surfer_result = prime.Surfer(model).mesh_topo_faces( part.id, topo_faces=part.get_topo_faces(), params=surfer_params ) .. figure:: ../images/simple-bracket-holes_mesh3.png :width: 300pt :align: center **Surface mesh displayed** =============== Remesh surfaces =============== This example shows you to perform these steps: * Import a faceted geometry (STL) file and visualize the model. * Create curvature size control and compute a volumetric size field. (For more information, see :ref:`ref_index_sizing`.) * Remesh the STL surface mesh. Start the PyPrimeMesh client and import the faceted geometry (STL) file: .. code-block:: python import ansys.meshing.prime as prime from ansys.meshing.prime.graphics import Graphics prime_client = prime.launch_prime() model = prime_client.model # Import CAD file input_file = r"D:/Examples/simple-bracket-holes.stl" file_io = prime.FileIO(model) file_io.import_cad( input_file, params=prime.ImportCadParams(model=model, length_unit=prime.LengthUnit.MM), ) Now that the CAD file is imported, display the model using graphics module: .. code-block:: python # Show model in graphic and get part summary display = Graphics(model) display(update=True) part = model.get_part_by_name("simple-bracket-holes") part_summary_res = part.get_summary(prime.PartSummaryParams(model=model)) .. figure:: ../images/simple-bracket-holes_stl.png :width: 300pt :align: center **Faceted geometry imported** Print the results of part summary: .. code-block:: pycon >>> print(part_summary_res) Part Name: simple-bracket-holes Part ID: 2 0 Edge Zonelets 1 Face Zonelets 0 Cell Zonelets 0 Edge Zones Edge Zone Name(s) : [] 0 Face Zones Face Zone Name(s) : [] 0 Volume Zones Volume Zone Name(s) : [] 0 Label(s) Names: [] Bounding box (-10 -10 -8.17) (19.1 23.075 25.52) Mesh Summary: 1048 Nodes 0 Poly Faces 0 Quad Faces 2124 Tri Faces 2124 Faces 0 Cells Set the global sizing parameters to initialize size control parameters (with curvature refinement): .. code-block:: python # Surface mesh size controls model.set_global_sizing_params( prime.GlobalSizingParams(model, min=0.27, max=5.5, growth_rate=1.2) ) size_control = model.control_data.create_size_control(prime.SizingType.CURVATURE) size_control.set_scope(prime.ScopeDefinition(model)) Compute the volumetric size field based on the size controls: .. code-block:: python size_field = prime.SizeField(model) res = size_field.compute_volumetric( size_control_ids=[size_control.id], volumetric_sizefield_params=prime.VolumetricSizeFieldComputeParams( model, enable_multi_threading=False ), ) Initialize surfer parameters and generate a surface mesh on face zonelets: .. code-block:: python # Surface mesh with triangular elements surfer_params = prime.SurferParams( model=model, size_field_type=prime.SizeFieldType.VOLUMETRIC ) surfer_result = prime.Surfer(model).remesh_face_zonelets( part_id=part.id, face_zonelets=part.get_face_zonelets(), edge_zonelets=part.get_edge_zonelets(), params=surfer_params, ) .. figure:: ../images/simple-bracket-holes_mesh1.png :width: 300pt :align: center **Surface mesh displayed**