| OS | Dev |
|---|---|
| Windows x64 (Visual Studio 2019) | zip / pdb |
| Windows x64 (Visual Studio 2022) | zip / pdb |
| Windows x64 (Visual Studio 2026) | zip / pdb |
| Windows arm64 (Visual Studio 2026) | zip / pdb |
| Ubuntu 22 LTS x64 | deb |
| Ubuntu 22 LTS arm64 | deb |
| Ubuntu 24 LTS x64 | deb |
| Ubuntu 24 LTS arm64 | deb |
| Ubuntu 26 LTS x64 | deb |
| Ubuntu 26 LTS arm64 | deb |
| Linux vcpkg (glibc 2.28) x64 | tar.xz |
| Linux vcpkg (glibc 2.28) arm64 | tar.xz |
| macOS x64 (Intel) | x64 pkg |
| macOS Arm (Apple Silicon) | arm64 pkg |
| Emscripten multi-thread (web environment) | zip |
| Emscripten single-thread (web environment) | zip |
| Emscripten multi-thread Wasm64 (web environment) | zip |
What's Changed
API:
- Alpha-shape triangles of a point cloud: new findAlphaShape with optional statistics and reported vertex duplications.
- meshToDensePointCloud: convert a mesh into a point cloud dense enough to stop any ball of a given radius.
- shrinkwrap: move every vertex of one mesh onto the closest point of another mesh.
- interpolateScalarsSmoothly: harmonic interpolation of a scalar field with fixed values, with selectable edge weights and vertex mass.
- Camera-based reconstruction: triangulateCameraPoints builds a mesh from points seen by one camera, smoothCameraMeshDepth denoises its depth, deleteFacesWithLongEdges cleans it up.
- delaunayTriangulationXY (renamed from terrainTriangulation) now has point-cloud overloads.
- New getLargestComponentArea and getLargestComponentVolume.
- New bridgeFillAllHoles( mesh, params ), and duplicateMultiHoleVertices can report the duplications it made.
- duplicateNonManifoldVertices can pick the smoothest path continuation through a non-manifold vertex.
- Const raw-pointer model getters and Object::constChildren() added; the old shared_ptr getters and children() const are deprecated, they were undefined behaviour.
- The Python distribution is split into the meshlib and meshlib-core (headless) packages.
Meshes:
- Precise predicates reworked: exact answer first, simulation of simplicity only on exact ties, and a custom fixed-width big-integer arithmetic instead of Boost. inCircle, inSphere, orient3d, segmentIntersectionOrder and the new ccwAroundLine are both faster and correct on inputs where they used to overflow.
- Planar triangulation: fixed contours with collinear and coincident points, and it can now emit a monotone split plan.
- Hole filling: fill plans and planar hole filling now work in mesh space, with support for symmetric anchors.
- Sharpening offset: exact zero-offset correction and an optional voxel clamp.
- Boolean: cutMesh no longer counts intersected edges cumulatively per contour, which made large cuts very slow.
- addPartByMask now rejects invalid stitching contours instead of only asserting in debug.
Performance:
- rayBoxIntersect was accelerated with SIMD instructions for NEON and Wasm, and the SSE path was optimized.
- Faster Delone edge flips, sweep-line triangulation with reusable caches, and a sorted-vector sparse polynomial.
- Smaller binaries: identical functions are folded at link time, libraries are stripped in the deb and vcpkg packages, and the Python bindings were reduced further.
- Third-party updates: vcpkg 2026.07.29, parallel-hashmap 2.0, fmt 12.2.0.
UI/UX:
- Scene tree groups are open by default again, and collapse only when a scene is loaded from a file.
- The mouse and the touchpad can now rotate the scene at the same time.
- Object transform widget: switching the axis transform mode during an active drag works as expected.
- The selected item highlight no longer overflows the drop-down list border.
- The viewer now warns about known problematic OpenGL drivers, and identifies the GPU when CUDA fails to initialize.
- Help links added to common ribbon tools and to the New/Open DICOMs items; default shortcuts moved into items.json.
- Import Plane in the plane widget now reads the plane in world coordinates.
- Fixed scene saving when an object name is cut to 12 characters ending with a space.
- macOS: glfwInit no longer changes the application working directory.
Save/Load:
- OpenCTM updated to fix heap overflows on crafted .ctm files (reported by S9S).
Python:
- mrviewerpy calls user callables under the GIL, launch() reports failure instead of returning silently, and the command loop fails fast instead of blocking forever.
- Expected-based deprecation warnings and the examples now name RuntimeError, which is what is actually raised.
- Wheels for Windows arm64.
Platforms and packages:
- Windows on ARM is supported end to end, in every language: C++ and C developer distributives, Python wheels, the C# NuGet payload, and MRCuda (CUDA 13.4). The UI and 3D rendering on Windows on ARM are experimental so far.
- New Ubuntu 26.04 build target, built and tested with GCC 16.
- Windows .pdb files ship in separate archives, and the required _ITERATOR_DEBUG_LEVEL is declared by the distribution package instead of being guessed.
- The .deb now declares a real architecture instead of "all".
- Wasm/Unity: the bundled freetype, libpng, zlib, lz4 and libjpeg-turbo are namespaced so they cannot clash with Unity's own copies.
- Experimental: third-party dependencies can be built without submodules.
Documentation:
- The C++, C, C# and Python setup guides were rewritten and verified end to end, each with a verification step and a troubleshooting section.
- New page on switching to MeshLib from other geometry libraries, links to the live demo, a rewritten README, and CITATION.cff with citation guidance.
Other:
- Numerous small improvements and bugfixes.
Commit: 8e821cd
Full Changelog: v3.1.3.429...v3.1.4.297