diff options
Diffstat (limited to 'source/blender/blenlib/BLI_arithb.h')
-rw-r--r-- | source/blender/blenlib/BLI_arithb.h | 80 |
1 files changed, 60 insertions, 20 deletions
diff --git a/source/blender/blenlib/BLI_arithb.h b/source/blender/blenlib/BLI_arithb.h index cbc7e9cc3af..8eb4d5972e3 100644 --- a/source/blender/blenlib/BLI_arithb.h +++ b/source/blender/blenlib/BLI_arithb.h @@ -143,7 +143,6 @@ void CalcCent3f(float *cent, float *v1, float *v2, float *v3); void CalcCent4f(float *cent, float *v1, float *v2, float *v3, float *v4); void Crossf(float *c, float *a, float *b); -void Crossd(double *c, double *a, double *b); void Projf(float *c, float *v1, float *v2); float Inpf(float *v1, float *v2); @@ -151,7 +150,6 @@ float Inp2f(float *v1, float *v2); float Normalize(float *n); float Normalize2(float *n); -double Normalize_d(double *n); float Sqrt3f(float f); double Sqrt3d(double d); @@ -176,7 +174,39 @@ void CalcNormShort(short *v1, short *v2, short *v3, float *n); float power_of_2(float val); /** - * @section Euler conversion routines + * @section Euler conversion routines (With Custom Order) + */ + +/* Defines for rotation orders + * WARNING: must match the ePchan_RotMode in DNA_action_types.h + * order matters - types are saved to file! + */ +typedef enum eEulerRotationOrders { + EULER_ORDER_DEFAULT = 1, /* Blender 'default' (classic) is basically XYZ */ + EULER_ORDER_XYZ = 1, /* Blender 'default' (classic) - must be as 1 to sync with PoseChannel rotmode */ + EULER_ORDER_XZY, + EULER_ORDER_YXZ, + EULER_ORDER_YZX, + EULER_ORDER_ZXY, + EULER_ORDER_ZYX, + /* NOTE: there are about 6 more entries when including duplicated entries too */ +} eEulerRotationOrders; + +void EulOToQuat(float eul[3], short order, float quat[4]); +void QuatToEulO(float quat[4], float eul[3], short order); + +void EulOToMat3(float eul[3], short order, float Mat[3][3]); +void EulOToMat4(float eul[3], short order, float Mat[4][4]); + +void Mat3ToEulO(float Mat[3][3], float eul[3], short order); +void Mat4ToEulO(float Mat[4][4], float eul[3], short order); + +void Mat3ToCompatibleEulO(float mat[3][3], float eul[3], float oldrot[3], short order); + +void eulerO_rot(float beul[3], float ang, char axis, short order); + +/** + * @section Euler conversion routines (Blender XYZ) */ void EulToMat3(float *eul, float mat[][3]); @@ -187,11 +217,14 @@ void Mat4ToEul(float tmat[][4],float *eul); void EulToQuat(float *eul, float *quat); -void compatible_eul(float *eul, float *oldrot); - void Mat3ToCompatibleEul(float mat[][3], float *eul, float *oldrot); + +void compatible_eul(float *eul, float *oldrot); +void euler_rot(float *beul, float ang, char axis); + + /** * @section Quaternion arithmetic routines */ @@ -218,6 +251,8 @@ void printquat(char *str, float q[4]); void QuatInterpol(float *result, float *quat1, float *quat2, float t); void QuatAdd(float *result, float *quat1, float *quat2, float t); +void QuatToMat3(float *q, float m[][3]); +void QuatToMat4(float *q, float m[][4]); /** * @section matrix multiplication and copying routines @@ -307,8 +342,6 @@ void Mat4AddMat4(float m1[][4], float m2[][4], float m3[][4]); void VecUpMat3old(float *vec, float mat[][3], short axis); void VecUpMat3(float *vec, float mat[][3], short axis); -void VecRotToMat3(float *vec, float phi, float mat[][3]); -void VecRotToMat4(float *vec, float phi, float mat[][4]); void VecCopyf(float *v1, float *v2); int VecLen(int *v1, int *v2); @@ -341,19 +374,32 @@ void Vec2Subf(float *v, float *v1, float *v2); void Vec2Copyf(float *v1, float *v2); void Vec2Lerpf(float *target, float *a, float *b, float t); -void AxisAngleToQuatd(float *q, float *axis, double angle); -void AxisAngleToQuat(float *q, float *axis, float angle); +void AxisAngleToQuat(float q[4], float axis[3], float angle); +void QuatToAxisAngle(float q[4], float axis[3], float *angle); +void AxisAngleToEulO(float axis[3], float angle, float eul[3], short order); +void EulOToAxisAngle(float eul[3], short order, float axis[3], float *angle); +void AxisAngleToMat3(float axis[3], float angle, float mat[3][3]); +void AxisAngleToMat4(float axis[3], float angle, float mat[4][4]); +void Mat3ToAxisAngle(float mat[3][3], float axis[3], float *angle); +void Mat4ToAxisAngle(float mat[4][4], float axis[3], float *angle); + +void Mat3ToVecRot(float mat[3][3], float axis[3], float *angle); +void Mat4ToVecRot(float mat[4][4], float axis[3], float *angle); +void VecRotToMat3(float *vec, float phi, float mat[][3]); +void VecRotToMat4(float *vec, float phi, float mat[][4]); + void RotationBetweenVectorsToQuat(float *q, float v1[3], float v2[3]); void vectoquat(float *vec, short axis, short upflag, float *q); +void Mat3ToQuat_is_ok(float wmat[][3], float *q); +void VecReflect(float *out, float *v1, float *v2); +void VecBisect3(float *v, float *v1, float *v2, float *v3); float VecAngle2(float *v1, float *v2); float VecAngle3(float *v1, float *v2, float *v3); float NormalizedVecAngle2(float *v1, float *v2); float VecAngle3_2D(float *v1, float *v2, float *v3); float NormalizedVecAngle2_2D(float *v1, float *v2); - -void euler_rot(float *beul, float ang, char axis); void NormalShortToFloat(float *out, short *in); void NormalFloatToShort(short *out, float *in); @@ -425,11 +471,6 @@ void VecStar(float mat[][3],float *vec); short EenheidsMat(float mat[][3]); -void QuatToMat3(float *q, float m[][3]); -void QuatToMat4(float *q, float m[][4]); - -void Mat3ToQuat_is_ok(float wmat[][3], float *q); - void i_ortho(float left, float right, float bottom, float top, float nearClip, float farClip, float matrix[][4]); void i_polarview(float dist, float azimuth, float incidence, float twist, float Vm[][4]); void i_translate(float Tx, float Ty, float Tz, float mat[][4]); @@ -438,8 +479,6 @@ void i_rotate(float angle, char axis, float mat[][4]); - - void MinMax3(float *min, float *max, float *vec); void SizeToMat3(float *size, float mat[][3]); void SizeToMat4(float *size, float mat[][4]); @@ -459,8 +498,9 @@ void Mat4ToSize(float mat[][4], float *size); void triatoquat(float *v1, float *v2, float *v3, float *quat); -void LocEulSizeToMat4(float mat[][4], float loc[3], float eul[3], float size[3]); -void LocQuatSizeToMat4(float mat[][4], float loc[3], float quat[4], float size[3]); +void LocEulSizeToMat4(float mat[4][4], float loc[3], float eul[3], float size[3]); +void LocEulOSizeToMat4(float mat[4][4], float loc[3], float eul[3], float size[3], short rotOrder); +void LocQuatSizeToMat4(float mat[4][4], float loc[3], float quat[4], float size[3]); void tubemap(float x, float y, float z, float *u, float *v); void spheremap(float x, float y, float z, float *u, float *v); |