Remesh a surface while preserving exact boundary vertex positions and count in Python (preferably PyVista / trimesh), open to alternate libs

1 day ago 1
ARTICLE AD BOX

I have a triangulated surface mesh in Python (PyVista Polydata) and a set of pre-defined boundary points — four ordered arrays defining lead edge, trail edge, root, and tip. I want to remesh the surface so that

The output mesh should have the same input boundary points as its boundary vertices, so the resurfaced mesh should have the same position, count, and order of the pre-defined boundry points.

The interior vertices are redistributed uniformly across the surface (algorithm should automatically determine interior vertex count based on boundary pts count)

No clean or welding operation is ever applied to the boundary vertices after insertion

Vertex indices 0 through N-1 in the output are always the boundary points in input order — this must be consistent across multiple meshes of the same wing in different deformation states

Base mesh with target vertices, aka the inputs for the remeshing script/algorithm/function

My current approach uses edge-splitting to insert boundary points onto the mesh, followed by Laplacian smoothing with boundary vertices frozen. The problem is that decimate_pro and clean() after smoothing collapse nearby boundary vertices, reducing the boundary count.

I tried:

Inserting boundary points by edge-splitting. It works but clean() after smoothing merges close boundary vertices

Appending new vertices and rebuilding faces, but clean() still merges them

Skipping clean() entirely, but it leaves a non-manifold mesh that downstream tools reject

Question: Is there a standard algorithm or library (libigl, trimesh, CGAL Python bindings, or similar) that supports constrained remeshing / surface wrapping where boundary vertices are treated as hard constraints (fixed in position and count) while the interior is freely remeshed to a target density?

Minimum reproducible example and expected output would be: input mesh with 850 boundary vertices → output mesh with exactly 850 boundary vertices at identical positions, approximately 50000 total vertices, manifold, no self-intersections.

Read Entire Article