Fix for mathutils.Euler on big endian systems

D719 from jrestemeier with edits
This commit is contained in:
Campbell Barton 2014-08-08 02:07:56 +10:00
parent 29eb567288
commit a108532eb9
Notes: blender-bot 2023-02-14 10:17:42 +01:00
Referenced by issue #41211, 3D Connexion space pilot pro Fly blender 2.7 dont work
1 changed files with 15 additions and 6 deletions

View File

@ -83,14 +83,23 @@ static const char *euler_order_str(EulerObject *self)
short euler_order_from_string(const char *str, const char *error_prefix)
{
if ((str[0] && str[1] && str[2] && str[3] == '\0')) {
#ifdef __LITTLE_ENDIAN__
# define MAKE_ID3(a, b, c) (((a)) | ((b) << 8) | ((c) << 16))
#else
# define MAKE_ID3(a, b, c) (((a) << 24) | ((b) << 16) | ((c) << 8))
#endif
switch (*((PY_INT32_T *)str)) {
case 'X' | 'Y' << 8 | 'Z' << 16: return EULER_ORDER_XYZ;
case 'X' | 'Z' << 8 | 'Y' << 16: return EULER_ORDER_XZY;
case 'Y' | 'X' << 8 | 'Z' << 16: return EULER_ORDER_YXZ;
case 'Y' | 'Z' << 8 | 'X' << 16: return EULER_ORDER_YZX;
case 'Z' | 'X' << 8 | 'Y' << 16: return EULER_ORDER_ZXY;
case 'Z' | 'Y' << 8 | 'X' << 16: return EULER_ORDER_ZYX;
case MAKE_ID3('X', 'Y', 'Z'): return EULER_ORDER_XYZ;
case MAKE_ID3('X', 'Z', 'Y'): return EULER_ORDER_XZY;
case MAKE_ID3('Y', 'X', 'Z'): return EULER_ORDER_YXZ;
case MAKE_ID3('Y', 'Z', 'X'): return EULER_ORDER_YZX;
case MAKE_ID3('Z', 'X', 'Y'): return EULER_ORDER_ZXY;
case MAKE_ID3('Z', 'Y', 'X'): return EULER_ORDER_ZYX;
}
#undef MAKE_ID3
}
PyErr_Format(PyExc_ValueError,