Clear["Global`*"]
Needs["Splines`"];
f = SplineFit[{{0, 0, 3}, {2, 0, 3}, {2, 2, 1}, {0, 1, 0}}, Cubic];
plot = ParametricPlot3D[f[t], {t, 0, 3}, MeshFunctions -> {"ArcLength"},
Mesh -> {15}, MeshStyle -> {PointSize[0.02], Red},
WorkingPrecision -> 15]
The red dots are located at
pts = Cases[plot // Normal, Point[pt_] :> pt, Infinity];
Length@pts
(* 15 *)
The red dots are ordered as
orderedPts = Rest@pts[[FindCurvePath[pts][[1]]]];
EDIT: Or more robustly,
orderedPts = Rest@pts[[FindShortestTour[pts][[2]]]]
They are approximately equally spaced (note that the curve length between points is not the same as the EucldeanDistance
between them)
dist = EuclideanDistance @@@ Partition[orderedPts, 2, 1]
(* {0.483212, 0.482984, 0.481793, 0.477275, 0.478571, 0.482301, 0.482944, \
0.483029, 0.482915, 0.482403, 0.47809, 0.474605, 0.481376, 0.482977} *)
{Mean[dist], StandardDeviation[dist]}
(* {0.481034, 0.00274354} *)