rockingTransform/rockingTransform.h

rockingTransform/rockingTransform.h
//-
// ==========================================================================
// Copyright 2015 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 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 void postConstructor();
virtual MStatus validateAndSetValue(const MPlug& plug,
const MDataHandle& handle, const MDGContext& context);
virtual void resetTransformation (const MMatrix &);
// Utility for getting the related rock matrix pointer
rockingTransformMatrix *getRockingTransformMatrix();
const char* className();
static void * creator();
static MStatus initialize();
virtual MStatus compute( const MPlug& plug, MDataBlock& data );
static MTypeId id;
protected:
// Degrees
static MObject aRockInX;
double rockXValue;
typedef MPxTransform ParentClass;
};
class DegreeRadianConverter
{
public:
double degreesToRadians( double degrees );
double radiansToDegrees( double radians );
};