Skip to content

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, never np.ndarray. A one-time wp.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.int32 buffer, 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 Trimesh convenience wrapper), not a mutable-document editor like a MeshLab MeshSet or an Open3D TriangleMesh with 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.