Repository navigation
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