- thePlane.RelativeMode.Distance = aRelativeDistance;
-
- const gp_Dir& aDX = gp::DX();
- const gp_Dir& aDY = gp::DY();
- const gp_Dir& aDZ = gp::DZ();
- double anAng1 = 0.0;
- double anAng2 = 0.0;
- switch ( thePlane.RelativeMode.Orientation )
- {
- case 0:
- {
- if ( aDY.IsParallel( aPlaneN, Precision::Angular() ) )
- {
- anAng1 = 0.0;
- anAng2 = 0.0;
- break;
- }
-
- if ( aDX.IsParallel( aPlaneN, Precision::Angular() ) )
- {
- anAng1 = 0.0;
- anAng2 = 0.0;
- break;
- }
-
- gp_Dir aDir1 = aPlaneN ^ aDX;
- gp_Dir aDir2 = aDY ^ aPlaneN;
- gp_Ax3 aRightHand( gp::Origin(), aPlaneN, aDY ^ aPlaneN );
-
- if ( aDir1 * aRightHand.YDirection() < 0.0 )
- {
- aDir1.Reverse();
- }
- if ( aDir2 * aRightHand.XDirection() < 0.0 )
- {
- aDir2.Reverse();
- }
-
- anAng1 = aDY.AngleWithRef( aDir1, aDX );
- anAng2 = aDX.AngleWithRef( aDir2, -aDY );
- break;
- }
- case 1:
- {
- if ( aDZ.IsParallel( aPlaneN, Precision::Angular() ) )
- {
- anAng1 = 0.0;
- anAng2 = 0.0;
- break;
- }
-
- if ( aDY.IsParallel( aPlaneN, Precision::Angular() ) )
- {
- anAng1 = 0.0;
- anAng2 = 0.0;
- break;
- }
-
- gp_Dir aDir1 = aPlaneN ^ aDY;
- gp_Dir aDir2 = aDZ ^ aPlaneN;
- gp_Ax3 aRightHand( gp::Origin(), aPlaneN, aDZ ^ aPlaneN );
-
- if ( aDir1 * aRightHand.YDirection() < 0.0 )
- {
- aDir1.Reverse();
- }
- if ( aDir2 * aRightHand.XDirection() < 0.0 )
- {
- aDir2.Reverse();
- }
-
- anAng1 = aDZ.AngleWithRef( aDir1, aDY );
- anAng2 = aDY.AngleWithRef( aDir2, -aDZ );
- break;
- }
- case 2:
- {
- if ( aDX.IsParallel( aPlaneN, Precision::Angular() ) )
- {
- anAng1 = 0.0;
- anAng2 = 0.0;
- break;
- }
-
- if ( aDZ.IsParallel( aPlaneN, Precision::Angular() ) )
- {
- anAng1 = 0.0;
- anAng2 = 0.0;
- break;
- }
-
- gp_Dir aDir1 = aPlaneN ^ aDZ;
- gp_Dir aDir2 = aDX ^ aPlaneN;
- gp_Ax3 aRightHand( gp::Origin(), aPlaneN, aDX ^ aPlaneN );
-
- if ( aDir1 * aRightHand.YDirection() < 0.0 )
- {
- aDir1.Reverse();
- }
- if ( aDir2 * aRightHand.XDirection() < 0.0 )
- {
- aDir2.Reverse();
- }
-
- anAng1 = aDX.AngleWithRef( aDir1, aDZ );
- anAng2 = aDZ.AngleWithRef( aDir2, -aDX );
- break;
- }
- }
-
- thePlane.RelativeMode.Rotation1 = anAng1 * ( 180.0 / M_PI );
- thePlane.RelativeMode.Rotation2 = anAng2 * ( 180.0 / M_PI );