Source code for capytaine.io.meshio
"""Importing mesh from meshio"""
# Copyright (C) 2017-2022 Matthieu Ancellin
# See LICENSE file at <https://github.com/capytaine/capytaine>
import logging
import numpy as np
from capytaine.tools.optional_imports import import_optional_dependency
from capytaine.meshes.meshes import Mesh
LOG = logging.getLogger(__name__)
[docs]
def load_from_meshio(mesh, name=None):
"""Create a Mesh from a meshio mesh object."""
meshio = import_optional_dependency("meshio")
if not isinstance(mesh, meshio._mesh.Mesh):
raise TypeError('mesh must be of type meshio._mesh.Mesh, received {:}'.format(type(mesh)))
def all_faces_as_quads(cells):
all_faces = []
if 'quad' in cells:
all_faces.append(cells['quad'])
if 'triangle' in cells:
num_triangles = len(mesh.cells_dict['triangle'])
LOG.info("Stored {:} triangle faces as quadrilaterals".format(num_triangles))
triangles_as_quads = np.empty((cells['triangle'].shape[0], 4), dtype=int)
triangles_as_quads[:, :3] = cells['triangle'][:, :]
triangles_as_quads[:, 3] = cells['triangle'][:, 2] # Repeat one node to make a quad
all_faces.append(triangles_as_quads)
return np.concatenate(all_faces)
if name is None:
name = f'mesh_from_meshio_{next(Mesh._ids)}'
mesh = Mesh(vertices=mesh.points, faces=all_faces_as_quads(mesh.cells_dict), name=name)
mesh.heal_mesh()
return mesh