manipOverride/rockingTransform2.h
 
 
 
manipOverride/rockingTransform2.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 );
};