Unfortunately BSplineFunction
has many shortcomings. It does not honour exact input, it does not obey to PiecewiseExpand
, it does not provide the parameterization of BSplineFunction
, and now we discover that it does not play well with RevolutionPlot3D
. Here is an alternative:
myBSplineFunction[pts_?MatrixQ] :=
Module[{knots, deg},
knots = Rationalize@BSplineFunction[pts][[6, 1]];
deg = BSplineFunction[pts][[3, 1]];
Apply[Function,
List@Sum[
pts[[i + 1]] BSplineBasis[{deg, knots}, i, #], {i, 0,
Length[pts] - 1}]]];
RevolutionPlot3D[
Evaluate[myBSplineFunction[controlPoints][t]], {t, 0, 1}]