Skip to content

Release v3.2.0.3

Latest

Choose a tag to compare

@github-actions github-actions released this 12 Nov 11:50
9eea3e0

Autogenerated release v3.2.0.3
9eea3e0

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
Windows x64 (clang-cl, Release only) zip / pdb
Windows arm64 (clang-cl, Release only) 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

New languages:

  • Rust: the meshlib crate on crates.io, with native libraries downloaded on the first build or bundled, a no_std build, into_result() / into_option() for returned expected and optional values, and a readme with examples.
  • Java: com.meshinspector:meshlib on Maven Central, with natives downloaded on first use; Expected results are unwrapped and errors thrown.
  • C, Rust and Java bindings use readable names instead of numbered overload suffixes, and every example now exists in C++, Python, C, C#, Rust and Java, all run by CI. New BooleanBenchmark example.

API:

  • Point cloud registration without an initial guess: computeFPFH (Fast Point Feature Histograms), findUniqueFPFHPoints, computeFPFHUniqueness, findFPFHMatches and findRigidXfRansac with optional overlap scoring.
  • Ball pivoting: findBallPivotingSeed/Component/Triangles/Mesh build the outer shape of a point cloud without normals.
  • Denoising: meshDenoiseWithCreases keeps caller-given creases, and denoiseNormals, NormalsToPoints and meshDenoiseViaNormals can work in a region.
  • Sharp edges and patches: findSharpEdges( minSharpCos, maxSharpCos ), getAllComponentsMapBySharpEdges, patchMeshByGroups, getAllComponentsFaces, cutAroundVertSets.
  • Inside volume of a mesh: makeInsideMeshVolume via precise ray casting, and makeInsideMeshVolumeVdb via OpenVDB, filling cavities and uniting self-overlaps.
  • computeLocalConvexity for meshes and point clouds; discrete curvatures for all vertices at once.
  • Self-intersections: selfBoolean supports nested self-intersections and can map result faces to input faces; SelfIntersections::fix got a SelfBoolean method.
  • SurfaceDistanceBuilder: point sources, finite lines, updates across seams, separate start edges and start points.
  • Decimation: new DecimateSettings::partsMode = AABBTree lets parallel decimation (subdivideParts > 1) take parts from the AABB tree without a prior packOptimally (which still gives the best performance); DecimateSettings::preventNormalFlips turns off the normal flip check.
  • Double-precision MeshTriPointd, EdgePointd and EdgeSegmentd; public MR::nextUp / MR::nextDown; BitSet::atomicTestSet.
  • Mesh::updateCaches and AABBTree::refit take the changed vertices, and relaxation refits the trees instead of dropping them.
  • Also new: eliminateDoubleTris can remove pillows, fixMeshDataDegeneracies keeps mesh attributes, getRegionInnerVerts, FindOverlappingSettings::minNormalDot, SubdivideSettings::onlyNearNotFlippable, a new2oldFaces output of uniteManyMeshes, decomposeMatrix3 with signedScale, and the CullBackFaces visualize property.

Breaking changes:

  • MR::Vector: vec_ renamed to vec and is now std::vector<T, MR::Allocator>; the Vector( std::vector && ) constructor is removed; resizeWithReserve of Vector and BitSet is deprecated.
  • TIFF moved out of MRMesh: MRTiffIO is replaced by the Raster API with a load/save registry in MRIOExtras.
  • The convert... contour functions renamed to xToY names (offsetSurfaceLineToMeshContours, surfaceLineToMeshContour, ...).
  • VertNormalsMode replaces bool saveNormals in meshToPointCloud, meshToDensePointCloud and ObjectPoints; SignDetectionMode::WindingRule is now OddCrossings; findProjections, fromNumpyArray and MeshOnVoxels::getPoints use VertCoords; OneMeshContours is one array of intersections without std::variant.

Meshes:

  • Boolean: no longer loses a mesh when the meshes only touch, connects lone contours by monotone chords instead of subdividing faces, and treats a component projecting on the boundary of an open mesh as outside it.
  • cutMesh: exact predicates for the planar sweep inside cut triangles, a force-fill mode that splits crossing contours, fixes along open borders and in the contour conversions near boundary edges.
  • Decimation no longer folds the neighbours of a deleted triangle onto each other, tries the other end of an edge when a collapse fails, and handles small closed tetrahedra.
  • Ray casting: near-coplanar hits of rayTriangleIntersect and rayMeshIntersectAll( Line3d ) are found reliably.
  • Also fixed: makeConvexHull losing vertices in the plane of the first triangle, remesh edge flips deviating from the surface, and an endless walk in intersection contours.

Performance:

  • The AABB tree of meshes is now 4-wide with up to 4 triangles per leaf, and leaves store the triangle vertices, which speeds up projections, ray casting and collision queries; the tree is also built faster and in parallel.
  • Boolean and cutMesh: many steps are now parallel or allocation-free, and both allocate with mimalloc.
  • MeshBuilder builds the topology of large meshes in parallel; parallel decimation of parts is faster.
  • mimalloc is used by MeshLib libraries and executables on all platforms.
  • Smaller bindings: C# DllImports at class scope (-22% on MRDotNet2.dll), minimal container bindings in C, and the JS module is served Brotli-compressed.
  • Third-party updates: vcpkg 2026.10.16, OpenVDB 14 support, libE57Format 3.4.1, OpenCASCADE 8 support.

UI/UX:

  • Shortcuts: several keys per action, Ctrl+Y for Redo, and two-key chords such as Space+digit for views.
  • Animated camera moves and View Cube turns, and a viewport background texture.
  • Mouse wheel zoom can be inverted, follows the physical wheel direction on macOS and is smoother.
  • Scene tree: Shift-click selects a range inside groups.
  • Transparency: fully transparent colors don't force the transparent pass, and antialiased edges of opaque objects stay in front of transparent ones.
  • Brush (Surface Manipulation) improvements: Relax keeps creases sharp, and undo groups smoothing, creases and subdivision with their stroke.
  • Dialogs: modal popups no longer close each other, dialogs can be placed over the ribbon top panel and the scene list, and a modal gets its own OS window when other platform windows exist.
  • Splash window on macOS, with an option to turn the splash off; -noMSAA launch flag; 2x MSAA under software rasterizers.
  • Object class names are translatable, and Export says which object type cannot be exported.
  • Experimental Wayland support on Linux.

MCP:

  • New tools and options: viewer_getCamera, viewer_shutdown, camera fit and animated moves, viewport background, object statistics.
  • Tool failures are reported as isError results, arguments are checked, waits for a busy viewer are bounded, and failed calls are logged.

Save/Load:

  • New formats: Google Draco (.drc meshes and point clouds, Draco-compressed glTF), G-code saving, LAS/LAZ point cloud saving, binary OFF loading.
  • STEP: Force Load Sub-Shapes option splits single-body parts, and STEP import settings are available in the Settings tool.
  • TIFF and GeoTIFF: non-ASCII paths on Windows, RGBA with unassociated alpha, no-data values, and fixed tie points and PixelIsPoint offsets.
  • OBJ: warnings about missing materials and textures, and correct handling of faces and usemtl lines outside of objects.
  • DICOM: Enhanced CT slices without functional groups.
  • Zip archives and folders skip macOS metadata, and zip errors name the file and the reason.

Python:

  • The Python modules are now built over the C bindings instead of pybind11.
  • Python 3.15+ support: the modules use the Python limited API, so the wheels also work with future Python versions; macOS uses Python 3.12 by default.
  • len() and construction from a list for Vector types; mrmeshnumpy returns float32 results and converts VoxelBitSet.
  • The Python viewer works from the macOS interactive prompt and shuts down cleanly at interpreter exit.

Platforms and packages:

  • Windows wheels, NuGet, Rust and Java natives are built with clang-cl, and new clang-cl developer zips (x64 and arm64) ship a CMake package config.
  • macOS packages are built with vcpkg, and the .pkg is signed and notarized.
  • Windows: the embedded Python ships its extension modules, and vcpkg's PDBs are in the symbols archive.
  • Stack traces use std::stacktrace where available and find PDBs next to the binaries.

Documentation:

  • Rust and Java API reference, readmes with examples for crates.io and NuGet, and a CONTRIBUTING section on writing and running tests.

Other:

  • Numerous small improvements and bugfixes.

Commit: 9eea3e0

Full Changelog: v3.1.4.297...v3.2.0.3