The Cylinder we have in Wolfram Language is the simplest type: right circular cylinder. But with the help of BSplineSurface, more interesting variations can be created and represented in a compact fashion. This is a use case of spline surface constructed from so called Tensor Product.
To produce cylinder in the TP way, we realize a cylinder is merely a circle “sweeping” along a straight line, so it can be represented as “tensor product” of circle and straight line.

Helper functions

ClearAll[pipe,branch,branchSeq]​​pipe=RightComposition;​​branch=Through@*{##}&;​​branchSeq=pipe[branch[##],Apply@Sequence]&;
ClearAll[FindDivisionsExact]​​FindDivisionsExact[range:{_,_},n_Integer?(#≥2&)]:=Rescale[Range[n]//N//Rescale,{0,1},range]​​FindDivisionsExact[n_Integer?(#≥2&)]:=FindDivisionsExact[{0,1},n]

Circle as B-spline curve

A generic circular arc (in 2D space) can be represented as BSplineCurve using the following circArc function:
In[]:=
ClearAll[arcControlPointSet]​​arcControlPointSet[θ0_,Δθ_]:=
Cos[θ0]
Sin[θ0]
Cos[θ0]-Sin[θ0]Tan
Δθ
8

Sin[θ0]+Cos[θ0]Tan
Δθ
8

Cos
Δθ
4
+θ0
Sin
Δθ
4
+θ0
Cos
3Δθ
8
+θ0Sec
Δθ
8

Sec
Δθ
8
Sin
3Δθ
8
+θ0
Cos
Δθ
2
+θ0
Sin
Δθ
2
+θ0
Cos
5Δθ
8
+θ0Sec
Δθ
8

Sec
Δθ
8
Sin
5Δθ
8
+θ0
Cos
3Δθ
4
+θ0
Sin
3Δθ
4
+θ0
Cos
7Δθ
8
+θ0Sec
Δθ
8

Sec
Δθ
8
Sin
7Δθ
8
+θ0
Cos[Δθ+θ0]
Sin[Δθ+θ0]
In[]:=
ClearAll[circArc]​​circArc[θ0_,Δθ_]:=BSplineCurve​​arcControlPointSet[θ0,Δθ]​​,SplineDegree2​​,SplineKnots0,0,0,
1
4
,
1
4
,
1
2
,
1
2
,
3
4
,
3
4
,1,1,1​​,SplineWeights1,Cos
Δθ
8
,1,Cos
Δθ
8
,1,Cos
Δθ
8
,1,Cos
Δθ
8
,1​​
In[]:=
Manipulate​​Graphics​​
,AbsoluteThickness[7],Circle[]​​,
,Arrow@{{0,0},ReIm@Exp[Iθ0]},
,Arrow@{{0,0},ReIm@Exp[I(θ0+Δθ)]}​​,{Black,AbsoluteThickness[2],circArc[θ0,Δθ]}​​,
,AbsoluteThickness[1],Line@arcControlPointSet[θ0,Δθ]​​​​,PlotRange
2
{{-1,1},{-1,1}}​​​​,θ0,
π
8
,Style"
θ
0
",
,Medium,0,2π​​,Δθ,
3π
2
,Style"Δθ",
,Medium,0,2π​​,ControlPlacementTop
Out[]=

Right cylinder as B-spline surface

To uplift the arc to 3D space (lying in
X
-
Y
plane), we add a
Z
coordinate to each points:
In[]:=
Moduleθ0=
π
8
,Δθ=
3π
2
,ctrlGrid​​,ctrlGrid=arcControlPointSet[θ0,Δθ]//Map@Append[0]​​;​​Graphics3D​​
,Line[ctrlGrid]​​,
,ReplacePart[circArc[θ0,Δθ],1ctrlGrid]​​,AxesTrue​​
Out[]=
To “sweeping” the arc along
Z
axis, we use multiple geometric transformations (tfSet):
In[]:=
Moduleθ0=
π
8
,Δθ=
3π
2
,zSlices=5,zRange={-1,.5},circ3D,tfSet,ctrlGrid​​,circ3D=arcControlPointSet[θ0,Δθ]//Map@Append[0]​​;tfSet=TranslationTransform[{0,0,#}]&/@Rescale[Range@zSlices,{1,zSlices},zRange]​​;ctrlGrid=#[circ3D]&/@tfSet​​;Graphics3D​​
,Line[ctrlGrid],
,Line[ctrlGrid]​​,
,ReplacePart[circArc[θ0,Δθ],1#]&/@ctrlGrid​​​​,BoxedFalse,Lighting"Accent",AxesTrue​​
Out[]=
To fully construct the TP surface, three more options need to be taken care of: SplineDegree, SplineKnots and SplineWeights :
The whole cylindrical surface changes with its generating circular arc:

Oblique cylinder as B-spline surface

Showcase

We can summarize aboving code as following cylindricalPatch function:
A random graph composed with 100 random cylindrical patches:
It always looks cooler with lots of moving parts: