[docs]defStlToMesh(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 meshSurface Loop(1) = Surface{{:}}; // make a single shell from all surfaces, assuming that the mesh is watertightVolume(1) = {{1}}; // create a volume from the shellMesh.Algorithm3D=10; // test the new 3D algorithmexit();"""inter=Interface(workingDirectory=TemporaryDirectory.GetTempPath())inter.inputFileExtension=".geo"inter.inputFilename="StlToMeshScript"inter.tpl=gmshTemplateinter.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"ifos.path.isfile(workingFileName):os.remove(workingFileName)Info("---------------")Info(workingFileName)Info(os.path.isfile(workingFileName))Info(inter.SingleRunComputationAndReturnOutput(0))returnReadGmsh(workingFileName)
[docs]defCheckIntegrity(GUI:bool=False):fromMuscat.Helpers.CheckToolsimportSkipTestifSkipTest("GMSH_NO_FAIL"):# pragma: no coverreturn"skip"ifnotWhich(gmshExec):# pragma: no coverprint("gmsh not found")return"skip"print(Which(gmshExec))fromMuscat.IO.StlReaderimportReadStlfromMuscat.TestDataimportGetTestDataPathstlmesh=ReadStl(GetTestDataPath()+"stlsphere.stl")mesh=StlToMesh(stlmesh)mesh=StlToMesh(stlmesh)print(stlmesh)print(mesh)ifGUI:# pragma: no coverfromMuscat.Actions.OpenInParaViewimportOpenInParaViewOpenInParaView(mesh,wait=GUI)return'ok'
if__name__=='__main__':print(CheckIntegrity(True))# pragma: no cover