Migrating from another library
If you already have a mesh-processing pipeline built on one of the libraries below, these pages map the functions you're calling today onto their triwarp equivalent, and call out the handful of places where the mapping isn't 1:1 — a different return convention, a parameter the reference library doesn't expose, or an algorithm that's genuinely different rather than merely renamed.
| Coming from | For | Page |
|---|---|---|
| trimesh | Mesh bookkeeping — edges, adjacency, boundary, validation, primitives, sampling, proximity | trimesh → |
| libigl | Discrete differential geometry — cotangent Laplacians, curvature, parametrization, heat geodesics | libigl → |
| Open3D | Point clouds, registration, surface reconstruction | Open3D → |
| MeshLab / PyMeshLab | Editing filters — remeshing, decimation, smoothing, hole filling | MeshLab → |
| potpourri3d | The heat-method family — vector heat, parallel transport, log maps, signed distance | potpourri3d → |
| PyTorch3D | Batched neighbour/Chamfer primitives, mesh regularization losses | PyTorch3D → |
Three things worth knowing before diving into a specific mapping:
- Every triwarp function takes and returns
wp.array, nevernp.ndarray. A one-timewp.array(numpy_array, dtype=...)/warp_array.numpy()pair is the whole conversion; see Concepts for why the boundary is drawn there. - Faces are a flat
(3 * n_faces,)wp.int32buffer, not(n_faces, 3). Every mapping table below assumes this; reshape once at the boundary (faces_flat = faces_np.reshape(-1),faces_rows = faces_flat.numpy().reshape(-1, 3)) rather than at every call site. - There is no scene graph, viewer, or mesh "session" object. triwarp is a library of
functions (plus one optional, stateless
Trimeshconvenience wrapper), not a mutable-document editor like a MeshLabMeshSetor an Open3DTriangleMeshwith in-place filters. A function that would mutate its input in one of those libraries instead returns a new array in triwarp.
These pages name the closest triwarp equivalent for each function; they are not exhaustive — the full picture is the generated API Reference, and every mapping asserted here is one this project's own test suite checks by comparing outputs directly against the reference library, not merely by name.