Skip to content

Release v3.1.4.297

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Sep 09:06
8e821cd
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