- Main Page
- Related Pages
- Modules
- Classes
- Examples

# rockingTransform.h

    //-
    // ==========================================================================
    // Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
    //
    // Use of this software is subject to the terms of the Autodesk
    // license agreement provided at the time of installation or download,
    // or which otherwise accompanies this software in either electronic
    // or hard copy form.
    // ==========================================================================
    //+
    #include <maya/MMatrix.h>
    #include <maya/MPxTransform.h>
    #include <maya/MPxTransformationMatrix.h>

    class MDataHandle;
    class MDGContext;
    class MPlug;

    //
    // Define declarations
    //

    #define kRockingTransformNodeID 0x8101B
    #define kRockingTransformMatrixID 0x8101C

    #define ReturnOnError(status)              \
            if (MS::kSuccess != status) {      \
                return status;                \
            }

    //
    // Class declarations -- matrix and transform
    //

    class rockingTransformMatrix : public MPxTransformationMatrix
    {
        // A really simple implementation of MPxTransformationMatrix.
        // The methods include:
        // - Two accessor methods for getting and setting the
        // rock
        // - The virtual asMatrix() method which passes the matrix
        // back to Maya when the command "xform -q -ws -m" is invoked

        public:
            rockingTransformMatrix();
            static void *creator();

            virtual MMatrix asMatrix() const;
            virtual MMatrix asMatrix(double percent) const;
            virtual MMatrix asRotateMatrix() const;

            // Degrees
            double  getRockInX() const;
            void    setRockInX( double rock );

            static  MTypeId id;
        protected:
            typedef MPxTransformationMatrix ParentClass;
            // Degrees
            double rockXValue;
    };

    class rockingTransformNode : public MPxTransform
    {
        // A really simple custom transform.
        public:
            rockingTransformNode();
            rockingTransformNode(MPxTransformationMatrix *);
            virtual ~rockingTransformNode();

            virtual MPxTransformationMatrix *createTransformationMatrix();

            virtual void postConstructor();

            virtual MStatus validateAndSetValue(const MPlug& plug,
                        const MDataHandle& handle, const MDGContext& context);

            virtual void  resetTransformation (MPxTransformationMatrix *);
            virtual void  resetTransformation (const MMatrix &);

            // Utility for getting the related rock matrix pointer
            rockingTransformMatrix *getRockingTransformMatrix();

            const char* className();
            static  void *  creator();
            static  MStatus initialize();

            static  MTypeId id;
        protected:
            // Degrees
            static  MObject aRockInX;
            double rockXValue;
            typedef MPxTransform ParentClass;
    };

    class DegreeRadianConverter
    {
        public:
            double degreesToRadians( double degrees );
            double radiansToDegrees( double radians );
    };