In the code below, PL1 and PL2 should be measured planes :
"Radius" is the radius of cylinder to create.
Except for the planes, all the features are constructed from assignments.
PL1BIS =GENERIC/PLANE,DEPENDENT,CARTESIAN,$ (offset plane from PL1)
NOM/XYZ,<PL1.X+RADIUS*PL1.I,PL1.Y+RADIUS*PL1.J,PL1.Z+RADIUS*PL1.K>,$
MEAS/XYZ,<PL1.X+RADIUS*PL1.I,PL1.Y+RADIUS*PL1.J,PL1.Z+RADIUS*PL1.K>,$
NOM/IJK,<PL1.I,PL1.J,PL1.K>,$
MEAS/IJK,<PL1.I,PL1.J,PL1.K>
PL2BIS =GENERIC/PLANE,DEPENDENT,CARTESIAN,$ (offset plane from PL2)
NOM/XYZ,<PL2.X+RADIUS*PL2.I,PL2.Y+RADIUS*PL2.J,PL2.Z+RADIUS*PL2.K>,$
MEAS/XYZ,<PL2.X+RADIUS*PL2.I,PL2.Y+RADIUS*PL2.J,PL2.Z+RADIUS*PL2.K>,$
NOM/IJK,<PL2.I,PL2.J,PL2.K>,$
MEAS/IJK,<PL2.I,PL2.J,PL2.K>
ASSIGN/AXE_CYL=CROSS(PL1BIS.IJK,PL2BIS.IJK)
ASSIGN/ANGLE=RAD2DEG(ACOS((DOT(PL1BIS.IJK,PL2BIS.IJK)))) (angle between PL1BIS and PL2BIS)
(here, you can assign ANGLE=ANGLEBETWEEN(PL1BIS.IJK,PL2BIS.IJK), it's exactly the same !)
ASSIGN/DIST_P1_PL2BIS=DOT(PL2BIS.XYZ-PL1BIS.XYZ,PL2BIS.IJK) (distance between barycenter of PL1BIS and PL2BIS)
ASSIGN/PI=ACOS(-1) (calculation of pi)
ASSIGN/DIST_PROJ_INTER=DIST_P1_PL2BIS*TAN(DEG2RAD(ANGLE)-PI/2) (distance between projected point of barycenter on PL2BIS and point of intersection between 2 planes)
ASSIGN/M1=CROSS(AXE_CYL.IJK,PL1BIS.IJK) (vector from barycenter of PL1bis to the intersection line)
ASSIGN/P1I=SQRT(DIST_PROJ_INTER^2+DIST_P1_PL2BIS^2) (distance between barycenter PL1BIS and intersection line)
IF/DIST_P1_PL2BIS<0
ASSIGN/DEC=-P1I*M1
END_IF/
IF/DIST_P1_PL2BIS>0
ASSIGN/DEC=P1I*M1
END_IF/
PT_AXE =GENERIC/POINT,DEPENDENT,CARTESIAN,$ (create a point of cylinder axis)
NOM/XYZ,<PL1BIS.X+DEC.X,PL1BIS.Y+DEC.Y,PL1BIS.Z+DEC.Z>,$
MEAS/XYZ,<PL1BIS.X+DEC.X,PL1BIS.Y+DEC.Y,PL1BIS.Z+DEC.Z>,$
NOM/IJK,<AXE_CYL.I,AXE_CYL.J,AXE_CYL.K>,$
MEAS/IJK,<AXE_CYL.I,AXE_CYL.J,AXE_CYL.K>