#include "precompiled/PCH.h" /*=========================================================================== transformmatrix.hpp Created: October 16, 2000 Auuthor: Bryan Brandt Copyright (c) 2000 Radical Entertainment, Inc. All rights reserved. ===========================================================================*/ #ifndef _TRANSFORMMATRIX_HPP #define _TRANSFORMMATRIX_HPP #ifdef WORLD_BUILDER #include "main/toolhack.h" #endif #include class MObject; class MDagPath; class MFnTransform; class MFnIkJoint; class MTransformationMatrix; class TransformMatrix { public: enum RotateOrder { ORDER_XYZ = 0, ORDER_YZX, ORDER_ZXY, ORDER_XZY, ORDER_YXZ, ORDER_ZYX }; TransformMatrix(); TransformMatrix(const MDagPath& dagPath); TransformMatrix(const MTransformationMatrix& xform); bool Assign(const MDagPath& dagPath); bool Assign(const MTransformationMatrix& xform); void SetScalePivot(float x, float y, float z); void SetScalePivot(const tlPoint& sp); void SetScalePivotX(float x); void SetScalePivotY(float y); void SetScalePivotZ(float z); const tlPoint& GetScalePivot() const { return scalePivot; } float GetScalePivotX() const { return scalePivot.x; } float GetScalePivotY() const { return scalePivot.y; } float GetScalePivotZ() const { return scalePivot.z; } void SetScale(float x, float y, float z); void SetScaleX(float x); void SetScaleY(float y); void SetScaleZ(float z); float GetScaleX() const { return scaleX; } float GetScaleY() const { return scaleY; } float GetScaleZ() const { return scaleZ; } void SetShear(float xy, float xz, float yz); void SetShearXY(float xy); void SetShearXZ(float xz); void SetShearYZ(float yz); float GetShearXY() const { return shearXY; } float GetShearXZ() const { return shearXZ; } float GetShearYZ() const { return shearYZ; } void SetScalePivotTranslate(float x, float y, float z); void SetScalePivotTranslate(const tlPoint& spt); void SetScalePivotTranslateX(float x); void SetScalePivotTranslateY(float y); void SetScalePivotTranslateZ(float z); const tlPoint& GetScalePivotTranslate() const { return scalePivotTranslate; } float GetScalePivotTranslateX() const { return scalePivotTranslate.x; } float GetScalePivotTranslateY() const { return scalePivotTranslate.y; } float GetScalePivotTranslateZ() const { return scalePivotTranslate.z; } void SetRotatePivot(float x, float y, float z); void SetRotatePivot(const tlPoint& rp); void SetRotatePivotX(float x); void SetRotatePivotY(float y); void SetRotatePivotZ(float z); const tlPoint& GetRotatePivot() const { return rotatePivot; } float GetRotatePivotX() const { return rotatePivot.x; } float GetRotatePivotY() const { return rotatePivot.y; } float GetRotatePivotZ() const { return rotatePivot.z; } void SetRotateAxis(float x, float y, float z); void SetRotateAxisX(float rax); void SetRotateAxisY(float ray); void SetRotateAxisZ(float raz); float GetRotateAxisX() const { return rotateAxisX; } float GetRotateAxisY() const { return rotateAxisY; } float GetRotateAxisZ() const { return rotateAxisZ; } void SetRotateOrder(RotateOrder ro); RotateOrder GetRotateOrder() const { return rotateOrder; } void SetRotate(float x, float y, float z); void SetRotateX(float x); void SetRotateY(float y); void SetRotateZ(float z); float GetRotateX() const { return rotateX; } float GetRotateY() const { return rotateY; } float GetRotateZ() const { return rotateZ; } void SetRotatePivotTranslate(float x, float y, float z); void SetRotatePivotTranslate(const tlPoint& rpt); void SetRotatePivotTranslateX(float x); void SetRotatePivotTranslateY(float y); void SetRotatePivotTranslateZ(float z); const tlPoint& GetRotatePivotTranslate() const { return rotatePivotTranslate; } float GetRotatePivotTranslateX() const { return rotatePivotTranslate.x; } float GetRotatePivotTranslateY() const { return rotatePivotTranslate.y; } float GetRotatePivotTranslateZ() const { return rotatePivotTranslate.z; } void SetJointOrient(float x, float y, float z); void SetJointOrientX(float x); void SetJointOrientY(float y); void SetJointOrientZ(float z); float GetJointOrientX() const { return jointOrientX; } float GetJointOrientY() const { return jointOrientY; } float GetJointOrientZ() const { return jointOrientZ; } void SetInverseScale(float x, float y, float z); void SetInverseScaleX(float x); void SetInverseScaleY(float y); void SetInverseScaleZ(float z); float GetInverseScaleX() const { return inverseScaleX; } float GetInverseScaleY() const { return inverseScaleY; } float GetInverseScaleZ() const { return inverseScaleZ; } void SetTranslate(float x, float y, float z); void SetTranslate(const tlPoint& t); void SetTranslateX(float x); void SetTranslateY(float y); void SetTranslateZ(float z); const tlPoint& GetTranslate() const { return translate; } float GetTranslateX() const { return translate.x; } float GetTranslateY() const { return translate.y; } float GetTranslateZ() const { return translate.z; } void SetScaleMatrixIdentity(); void SetHierarchyMatrixIdentity(); void SetIdentity(); // these are the outputs of this class: // scale matrix - to be baked into the mesh // hierarchy matrix - stored in the skeleton const tlMatrix& GetScaleMatrix() const; const tlMatrix& GetHierarchyMatrix() const; // routines for extracting the above matrices, // except with an option to change coordinate systems // void GetScaleMatrixLHS(tlMatrix& matrix) const; void GetHierarchyMatrixLHS(tlMatrix& matrix) const; void GetScaleMatrixRHS(tlMatrix& matrix) const; void GetHierarchyMatrixRHS(tlMatrix& matrix) const; private: bool AssignJoint(MDagPath& dagPath, MObject& jointNode); void ComputeScaleMatrix(); void ComputeHierarchyMatrix(); tlPoint scalePivot; float scaleX; float scaleY; float scaleZ; float shearXY; float shearXZ; float shearYZ; tlPoint scalePivotTranslate; tlPoint rotatePivot; float rotateAxisX; float rotateAxisY; float rotateAxisZ; RotateOrder rotateOrder; float rotateX; float rotateY; float rotateZ; tlPoint rotatePivotTranslate; float jointOrientX; float jointOrientY; float jointOrientZ; float inverseScaleX; float inverseScaleY; float inverseScaleZ; tlPoint translate; bool scaleDirty; bool hierarchyDirty; tlMatrix scaleMatrix; tlMatrix hierarchyMatrix; }; #endif // _TRANSFORMMATRIX_HPP