I have found the problem, but I am still left wondering why this happens.

If you run the code below on the surface and curves in the attached document, you see that the re-sampled curves have a big deviation with the original curves. That is caused by the fact that the `Pullback`

is done on the `BrepFace`

and the parameters are applied to the `NurbsSurface`

of the `BrepFace`

. Why does `.ToNurbsSurface()`

change the parameterization of the surface? It probably has something to do with the fact that the original surface is a surface-of-revolution?

pullback-oddity.3dm (93.4 KB)

```
public Result RunCommand(RhinoDoc doc, RunMode mode)
{
ObjRef sRef;
ObjRef[] cRefs;
Result res = RhinoGet.GetOneObject("Srf", false, ObjectType.Brep, out sRef);
if (res != Result.Success) return res;
res = RhinoGet.GetMultipleObjects("crvs", false, ObjectType.Curve, out cRefs);
if (res != Result.Success) return res;
Brep srf = sRef.Brep();
Curve[] curves = cRefs.Select(r => r.Curve()).ToArray();
Curve[] c2d = new Curve[curves.Length];
for (int i = 0; i < curves.Length; ++i)
{
// pullback on brepface
c2d[i] = srf.Faces[0].Pullback(curves[i], 1e-6);
}
NurbsSurface ns = srf.Faces[0].ToNurbsSurface();
foreach (var c2 in c2d)
{
Point3d[] uvs;
c2.DivideByCount(100, true, out uvs);
List<Point3d> resampled = new List<Point3d>();
foreach (var uv in uvs)
{
// apply brep face parameters on nurbs surface. FAIL
resampled.Add(ns.PointAt(uv.X, uv.Y));
}
doc.Objects.AddPolyline(resampled);
}
return Result.Success;
}
```