Source code for Muscat.Bridges.gmshBridge

import os

from Muscat.MeshContainers.Mesh import Mesh
from Muscat.IO.StlWriter import WriteMeshToStl
from Muscat.Helpers.IO.TemporaryDirectory import TemporaryDirectory
from Muscat.Helpers.IO.FileTools import WriteTempFile
from Muscat.Helpers.Logger import Info

from Muscat.IO.GmshReader import ReadGmsh
from Muscat.IO.CodeInterface import Interface
from Muscat.Helpers.IO.Which import Which

gmshExec = "gmsh"


[docs] def StlToMesh(stlmesh: Mesh) -> Mesh: """Fill 2D close surface with 3D elements. This functionality uses gmsh whit a external call Parameters ---------- stlmesh : Mesh a close mesh composed only by 2D elements. Returns ------- Mesh a mesh composed with by the 2D exterior mesh filled with 3D elements. The order of the 2D element (and nodes) is not necessarily preserved. """ gmshTemplate = """ Merge "{stlFileName}"; // load the surface mesh Surface Loop(1) = Surface{{:}}; // make a single shell from all surfaces, assuming that the mesh is watertight Volume(1) = {{1}}; // create a volume from the shell Mesh.Algorithm3D=10; // test the new 3D algorithm exit(); """ inter = Interface(workingDirectory=TemporaryDirectory.GetTempPath()) inter.inputFileExtension = ".geo" inter.inputFilename = "StlToMeshScript" inter.tpl = gmshTemplate inter.codeCommand = Which(gmshExec) inter.acceptedReturnCodes = [0, 1] stlFileName = "StlToMesh_mesh.stl" inter.parameters = {"stlFileName": stlFileName} WriteMeshToStl(TemporaryDirectory.GetTempPath() + os.sep+stlFileName, stlmesh) inter.WriteFile(0) inter.options = ["-3", "-f", "msh2"] workingFileName = TemporaryDirectory.GetTempPath() + inter.inputFilename + "0.msh" if os.path.isfile(workingFileName): os.remove(workingFileName) Info("---------------") Info(workingFileName) Info(os.path.isfile(workingFileName)) Info(inter.SingleRunComputationAndReturnOutput(0)) return ReadGmsh(workingFileName)
[docs] def CheckIntegrity(GUI: bool = False): from Muscat.Helpers.CheckTools import SkipTest if SkipTest("GMSH_NO_FAIL"): # pragma: no cover return "skip" if not Which(gmshExec): # pragma: no cover print("gmsh not found") return "skip" print(Which(gmshExec)) from Muscat.IO.StlReader import ReadStl from Muscat.TestData import GetTestDataPath stlmesh = ReadStl(GetTestDataPath()+"stlsphere.stl") mesh = StlToMesh(stlmesh) mesh = StlToMesh(stlmesh) print(stlmesh) print(mesh) if GUI: # pragma: no cover from Muscat.Actions.OpenInParaView import OpenInParaView OpenInParaView(mesh, wait=GUI) return 'ok'
if __name__ == '__main__': print(CheckIntegrity(True)) # pragma: no cover