#ifndef _MPxTransformationMatrix #define _MPxTransformationMatrix // //- // ========================================================================== // Copyright (C) 1995 - 2006 Autodesk, Inc., and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files contain unpublished // information proprietary to Autodesk, Inc. ("Autodesk") and/or its // licensors, which is protected by U.S. and Canadian federal copyright law // and by international treaties. // // The Data may not be disclosed or distributed to third parties or be // copied or duplicated, in whole or in part, without the prior written // consent of Autodesk. // // The copyright notices in the Software and this entire statement, // including the above license grant, this restriction and the following // disclaimer, must be included in all copies of the Software, in whole // or in part, and all derivative works of the Software, unless such copies // or derivative works are solely in the form of machine-executable object // code generated by a source language processor. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. // AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED // WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF // NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, // OR ARISING FROM A COURSE OF DEALING, USAGE, OR TRADE PRACTICE. IN NO // EVENT WILL AUTODESK AND/OR ITS LICENSORS BE LIABLE FOR ANY LOST // REVENUES, DATA, OR PROFITS, OR SPECIAL, DIRECT, INDIRECT, OR // CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK AND/OR ITS LICENSORS HAS // BEEN ADVISED OF THE POSSIBILITY OR PROBABILITY OF SUCH DAMAGES. // ========================================================================== //+ // // Description: // // This is the API side of user defined transformation matrices. // Any MPxTransformationMatrix will have an associated THxformMatrix // class to handle the Maya side of things. // // CLASS: MPxTransformationMatrix // // ***************************************************************************** // // CLASS DESCRIPTION (MPxTransformationMatrix) // // ***************************************************************************** #if defined __cplusplus // ***************************************************************************** // INCLUDED HEADER FILES #include #include #include #include #include #include #include #include #include // DECLARATIONS // CLASS DECLARATION (MPxTransformationMatrix) /// Base class of all user defined transformation matrices. (OpenMaya) (OpenMayaMPx.py) /** Base class of all user defined transformation matrices. */ class OPENMAYA_EXPORT MPxTransformationMatrix { public: /// MPxTransformationMatrix(); /// MPxTransformationMatrix(const MTransformationMatrix &); /// MPxTransformationMatrix(const MPxTransformationMatrix &); /// MPxTransformationMatrix(const MMatrix &); /// virtual ~MPxTransformationMatrix(); /// virtual void copyValues(MPxTransformationMatrix *); /// virtual MTypeId typeId() const; /// MPxTransformationMatrix & operator = (const MPxTransformationMatrix &src); /// MPxTransformationMatrix & operator = (const MMatrix &src); /// MPxTransformationMatrix & operator = (const MTransformationMatrix &src); /// bool operator == (const MPxTransformationMatrix &); /// bool operator != (const MPxTransformationMatrix &); /// bool operator == (const MTransformationMatrix &); /// bool operator != (const MTransformationMatrix &); /// bool operator == (const MMatrix &); /// bool operator != (const MMatrix &); /// /// virtual bool isEquivalent(const MPxTransformationMatrix &, double tolerance = MMatrix_kTol) const; /// virtual bool isEquivalent(const MTransformationMatrix &, double tolerance = MMatrix_kTol) const; /// virtual bool isEquivalent(const MMatrix &, double tolerance = MMatrix_kTol) const; /// virtual MPxTransformationMatrix reverse() const; /// virtual MPxTransformationMatrix &transformBy(const MTransformationMatrix &); /// virtual MMatrix asMatrix() const; /// virtual MMatrix asMatrixInverse() const; /// virtual MMatrix asScaleMatrix() const; /// virtual MMatrix asScaleMatrixInverse() const; /// virtual MMatrix asRotateMatrix() const; /// virtual MMatrix asRotateMatrixInverse() const; /// virtual MMatrix asMatrix(double percent) const; /// virtual MMatrix asInterpolationMatrix(const MTransformationMatrix &toM, double percent, bool rot, int direction = 0) const; /// virtual MTransformationMatrix asTransformationMatrix() const; // // Translation methods: // /// virtual MVector translation(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus translateTo(const MVector &vector, MSpace::Space = MSpace::kTransform); /// virtual MStatus translateBy(const MVector &vector, MSpace::Space = MSpace::kTransform); // // Rotation methods: // /// virtual MQuaternion rotation(MSpace::Space = MSpace::kTransform, MStatus *ReturnStatus = NULL) const; /// virtual MEulerRotation eulerRotation(MSpace::Space = MSpace::kTransform, MStatus *ReturnStatus = NULL) const; /// virtual MStatus rotateTo(const MQuaternion &q, MSpace::Space = MSpace::kTransform); /// virtual MStatus rotateBy(const MQuaternion &q, MSpace::Space = MSpace::kTransform); /// virtual MStatus rotateTo(const MEulerRotation &e, MSpace::Space = MSpace::kTransform); /// virtual MStatus rotateBy(const MEulerRotation &e, MSpace::Space = MSpace::kTransform); /// virtual MTransformationMatrix::RotationOrder rotationOrder(MStatus* ReturnStatus = NULL) const; /// virtual MStatus setRotationOrder(MTransformationMatrix::RotationOrder, bool preserve = true); /// virtual MQuaternion rotateOrientation(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus setRotateOrientation(const MQuaternion &q, MSpace::Space = MSpace::kTransform, bool balance = true); /// virtual MEulerRotation eulerRotateOrientation(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; virtual MStatus setRotateOrientation(const MEulerRotation &euler, MSpace::Space = MSpace::kTransform, bool balance = true); // // Scale methods: // /// virtual MVector scale(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus scaleTo(const MVector &, MSpace::Space = MSpace::kTransform); /// virtual MStatus scaleBy(const MVector &, MSpace::Space = MSpace::kTransform); // Shear methods: // /// virtual MVector shear(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus shearTo(const MVector& shear, MSpace::Space = MSpace::kTransform); /// virtual MStatus shearBy(const MVector& shear, MSpace::Space = MSpace::kTransform); // Scale pivot methods: // /// virtual MPoint scalePivot(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus setScalePivot(const MPoint &, MSpace::Space = MSpace::kTransform, bool balance = true); /// virtual MVector scalePivotTranslation(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus setScalePivotTranslation(const MVector &vector, MSpace::Space = MSpace::kTransform); // Rotate pivot methods: /// virtual MPoint rotatePivot(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus setRotatePivot(const MPoint &, MSpace::Space = MSpace::kTransform, bool balance = true); /// virtual MVector rotatePivotTranslation(MSpace::Space = MSpace::kTransform, MStatus* ReturnStatus = NULL) const; /// virtual MStatus setRotatePivotTranslation(const MVector &vector, MSpace::Space = MSpace::kTransform); /// virtual MStatus unSquishIt(); /// virtual MMatrix unSquishMatrix() const; static void *creator(); /// static MEulerRotation::RotationOrder convertTransformationRotationOrder(MTransformationMatrix::RotationOrder, MStatus *ReturnStatus = NULL); /// static MTransformationMatrix::RotationOrder convertEulerRotationOrder(MEulerRotation::RotationOrder, MStatus *ReturnStatus = NULL); /// static const MPxTransformationMatrix identity; /// static MTypeId baseTransformationMatrixId; BEGIN_NO_SCRIPT_SUPPORT: /// OBSOLETE & NO SCRIPT SUPPORT static MEulerRotation::RotationOrder convertRotationOrder(MTransformationMatrix::RotationOrder, MStatus *ReturnStatus = NULL); /// OBSOLETE & NO SCRIPT SUPPORT static MTransformationMatrix::RotationOrder convertRotationOrder(MEulerRotation::RotationOrder, MStatus *ReturnStatus = NULL); /// NO SCRIPT SUPPORT friend std::ostream &operator << (std::ostream &os, const MPxTransformationMatrix &m); END_NO_SCRIPT_SUPPORT: protected: /// virtual MStatus decomposeMatrix(const MMatrix &); /// MVector scaleValue; /// MEulerRotation rotationValue; /// MVector translationValue; /// MVector shearValue; /// MPoint scalePivotValue; /// MVector scalePivotTranslationValue; /// MPoint rotatePivotValue; /// MVector rotatePivotTranslationValue; /// MQuaternion rotateOrientationValue; private: static const char* className(); void* instance; }; // ***************************************************************************** #endif /* __cplusplus */ #endif /* _MPxTransformationMatrix */