import os
import sys
from meshlib import mrmeshpy as mm
from meshlib import mrviewerpy as mv
if not os.path.exists("mesh.stl"):
mm.saveMesh(mm.makeCube(), "mesh.stl")
if sys.platform.startswith("linux") and not (os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY")):
sys.exit("MeshLib Viewer requires a graphical session, but no display was found "
"(neither DISPLAY nor WAYLAND_DISPLAY is set). "
"On a headless machine start with the mesh loading and saving example "
"(MeshLoadSave.dox.py) instead.")
mesh = mm.loadMesh("mesh.stl")
params = mm.OffsetParameters()
params.voxelSize = mesh.computeBoundingBox().diagonal() * 5e-3
if mm.findRightBoundary(mesh.topology).empty():
params.signDetectionMode = mm.SignDetectionMode.HoleWindingRule
offset = mesh.computeBoundingBox().diagonal() * 0.05
result_mesh = mm.offsetMesh(mesh, offset, params)
try:
mv.launch()
except RuntimeError as e:
sys.exit(f"Could not start MeshLib Viewer: {e}")
mv.addMeshToScene(mesh, "Mesh 1")
mv.Viewer().preciseFitDataViewport()
mv.selectByName("Mesh 1")
mv.Viewer().preciseFitDataViewport()
mv.Viewer().showSceneTree(True)
input("Press Enter to continue...")
mv.clearScene()
mv.addMeshToScene(result_mesh, "Mesh Offset")
mv.selectByName("Mesh Offset")
mv.Viewer().showSceneTree(False)
input("Press Enter to continue...")
mv.Viewer().shutdown()
Viewer with scene tree