Smooth a tetrahedral mesh while preserving the boundary and curve features.
This function takes as input a Mesh_complex_3_in_triangulation_3 and will iteratively move its vertices to improve the quality of the tetrahedra while preserving (softly) the boundary and curve features. Vertices will stay close to their original entity (surface patch or curve). Corners are locked on their original position. The code is capable of recovering curvature discontinuities (sharp features) in a patch, and is capable of recovering inverted tetrahedra in the mesh. A valid input mesh is guaranteed to remain valid after and during the smoothing.