public function tem_cylinderCubeOverlap(cylinder, cube) result(overlap)

This function checks intesection of solid cube and cylinder.

The test is done by projecting each cube vertices on the cylinder axis
and check whether the projected point is within the cylinder length.
If yes then use the projected point as the origin of sphere and
do sphere-cube intersection.

Todo

HK: The algorithm used in here is not correct!
@todo KM: BUG in defining cylinder with fixed length.
This implementation works only for cylinder with infinite length

we check for all vertices to find if any of the cube vertices
intersect with cylinder
check whether cylinder axis intersect by cube
if true then no need to check for intersection of each cube vertices
on cylinder

Nodes of different colours represent the following:

Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.

Nodes of different colours represent the following:

Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.