How to fit B-splines to unstructured grids (triangulated surfaces)?

As a continuation of trying to calculate curvature tensors on triangulated surfaces (here), I am interested in trying other methods. One approach is to use NURBS. To be more precise I would like to be able to create a BSpline surface that can be fitted to a triangulated mesh, ideally having the vertices of the mesh fitting the NURBS surface and not the control points. One of the advantages of doing this is that if we have the BSpline function then we can use this to calculate surface curvatures and other geometric measures. It would also be conceivable to have local overlapping "patches" of BSplines for tricky geometries.

It seems that this is not so trivial. In Mathematica NURBS are implemented using BSplineFunction. It takes a rectangular array of control points as input, and does not fit through an arbitrary number of points as in Interpolation. Unfortunately when one uses Interpolation for unstructured grids it does not seem to allow one to use the Spline option, which would be great in order to get out the parameters.

This has been covered somewhat already see e.g. (Produce a spline from a set of {{x, y}, z} points and get its parameters/expression) or (How to make BSplineFunction pass each data point and naturally smooth?), but I haven’t yet managed to work out a solution for non-regular meshes or meshes in 3D in which there is no rectangular uv parametrisation of the surface. Any ideas of how to do this in mathematica?

• @ J.M. thanks. I think this was what you were thinking of in terms of splitting the previous question up so this one focusses more on the B-Spline fitting? Hope is ok? – Dunlop Mar 21 '17 at 10:55
• Yep, this looks good. – J. M.'s technical difficulties Mar 22 '17 at 2:13