dMatrix::GetEulerAngles() takes dEulerAngleOrder parameter, and Newton defines it as two possible combinations:

m_pitchYawRoll

m_rollYawpitch

There are actually 4 other combinations, which complete all possible permutations of Pitch, Yaw and Roll. In my project, the way the coordinate systems are set up, I have to use YPR and RPY permutations, which are not included in Newton. So, in order to overcome this: in dMathDefines.h, I add 4 additional options (plus, re-insert 2 Newton ones with my naming convention, for clarity):

- Code: Select all
`enum dEulerAngleOrder`

{

m_pitchYawRoll,

m_pitchRollYaw,

PYR = (0 << 8) + (1 << 4) + (2 << 0),

PRY = (0 << 8) + (2 << 4) + (1 << 0),

RYP = (2 << 8) + (1 << 4) + (0 << 0),

RPY = (2 << 8) + (0 << 4) + (1 << 0),

YPR = (1 << 8) + (0 << 4) + (2 << 0),

YRP = (1 << 8) + (2 << 4) + (0 << 0)

};

This worked fine, since the year-old Newton dMatrix::GetEulerAngles() function had:

- Code: Select all
`int a0 = (order>>8)&3;`

int a1 = (order>>4)&3;

int a2 = (order>>0)&3;

However , the most recent version switched to switch-case blocks, so I had to revert to a year-old method for the time being.

Can this please be addressed? I think Newton should offer all 6 Euler angle order permutations, since there are a lot of graphical engines with all kinds of coordinate system conventions (case in point - mine!) and therefore Newton should have the utmost in flexibility to support all possible cases.