# -*- coding: utf-8 -*-
[docs]def MeshToPyVista(mesh, TagsAsFields=False):
from Muscat.Bridges.vtkBridge import MeshToVtk
import pyvista as pv
return pv.wrap(MeshToVtk(mesh, TagsAsFields=TagsAsFields))
[docs]def PyVistaToMesh(pvmesh, FieldsAsTags=False):
from Muscat.Bridges.vtkBridge import VtkToMesh
return VtkToMesh(pvmesh, FieldsAsTags=FieldsAsTags)
[docs]def PlotMesh(mesh, TagsAsFields: bool = False, **kargs): # pragma: no cover
"""Plot a mesh using PyVista
Parameters
----------
mesh : Mesh, vtk mehs or a pyvista mesh
the mesh to be plotted
TagsAsFields : bool, optional
if True the tags of the mesh (in the case of a Muscat Mesh) are converted to fields, by default False
"""
from Muscat.Containers.Mesh import Mesh
if isinstance(mesh, Mesh):
pyVistaMesh = MeshToPyVista(mesh, TagsAsFields=TagsAsFields)
else:
pyVistaMesh = mesh
pyVistaMesh.plot(**kargs)
[docs]def CheckIntegrity(GUI: bool = False):
from Muscat.Helpers.CheckTools import SkipTest
if SkipTest("PYVISTA_NO_FAIL"): # pragma: no cover
return "skip"
try:
import pyvista
except: # pragma: no cover
return "skip : pyvista not installed"
import Muscat.Containers.ElementsDescription as ED
from Muscat.Containers.MeshCreationTools import CreateMeshOf
from Muscat.Containers.MeshTools import IsClose
points = [[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]
tet = [[0, 1, 2, 3]]
res = CreateMeshOf(points, tet, elemName=ED.Tetrahedron_4)
res.nodeFields = {"x": res.nodes[:, 0].flatten(), "Pos": res.nodes}
res.nodesTags.CreateTag("FirstPoint").AddToTag(0)
res.elemFields = {"SecondPoint": res.GetElementsOfType(ED.Tetrahedron_4).connectivity[:, 1].flatten().astype(float), "conn": res.GetElementsOfType(ED.Tetrahedron_4).connectivity}
res.GetElementsOfType(ED.Tetrahedron_4).tags.CreateTag("FirstTetrahedron").AddToTag(0)
sol = MeshToPyVista(res, TagsAsFields=True)
resII = PyVistaToMesh(sol, FieldsAsTags=True)
print(res)
print(resII)
if not IsClose(res, resII): # pragma: no cover
raise (Exception("The meshes are not equal"))
if GUI: # pragma: no cover
PlotMesh(res)
PlotMesh(resII, eye_dome_lighting=True, cpos=[-1, -1, 0.2], color=True)
return "ok"
if __name__ == "__main__":
print(CheckIntegrity(True)) # pragma: no cover