#include <maya/MPxTransform.h>
#include <maya/MPxTransformationMatrix.h>
#include <maya/MGlobal.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MTransformationMatrix.h>
#include <maya/MFnDependencyNode.h>
#include <maya/MIOStream.h>
#include "rockingTransformCheck.h"
MTypeId rockingTransformCheckNode::idCheck(kRockingTransformCheckNodeID);
MTypeId rockingTransformCheckMatrix::idCheck(kRockingTransformCheckMatrixID);
rockingTransformCheckMatrix::rockingTransformCheckMatrix()
{
}
void *rockingTransformCheckMatrix::creator()
{
return new rockingTransformCheckMatrix();
}
rockingTransformCheckNode::rockingTransformCheckNode()
: ParentClass()
{
}
: ParentClass(tm)
{
}
rockingTransformCheckNode::~rockingTransformCheckNode()
{
}
{
return new rockingTransformCheckMatrix();
}
void *rockingTransformCheckNode::creator()
{
return new rockingTransformCheckNode();
}
const char* rockingTransformCheckNode::className()
{
return "rockingTransformCheckNode";
}
{
#ifdef ALLOW_DG_TO_HANDLE_LOCKS
return toTest;
#else
MObject rotateLockPlug = depNode.findPlug(
"rotateLockPlug", &status );
if ( rotateLockPlug.
isNull() )
return toTest;
return savedRotation;
#endif
}
{
#ifdef CHECK_ROTATION_LIMITS_USING_ATTRIBUTES
updateMatrixAttrs(minRotLimitEnable, context);
updateMatrixAttrs(maxRotLimitEnable, context);
double3 &minLimit = block.inputValue(minRotLimit).asDouble3();
double3 &maxLimit = block.inputValue(maxRotLimit).asDouble3();
unsigned ii = 0, jj = 0;
newRotation[ii] < minLimit[ii]) {
newRotation[ii] = minLimit[ii];
}
newRotation[ii] > maxLimit[ii]) {
newRotation[ii] = maxLimit[ii];
}
}
if ( ReturnStatus )
return newRotation;
#else
DegreeRadianConverter conv;
double degrees = conv.radiansToDegrees( unlimitedRotation.
x );
if ( degrees < 60 )
return unlimitedRotation;
euler.
x = conv.degreesToRadians( 60.0 );
if ( ReturnStatus )
return euler;
#endif
}
{
updateMatrixAttrs(context);
ReturnOnError(status);
status = baseTransformationMatrix->rotateTo(newRotation, space);
ReturnOnError(status);
ReturnOnError(status);
outRotation = applyRotationLimits(outRotation, block, &status);
ReturnOnError(status);
outRotation = applyRotationLocks(outRotation, savedRotation, &status);
ReturnOnError(status);
ReturnOnError(status);
ReturnOnError(status);
} else {
if (NULL == local) {
return status;
}
status = computeLocalTransformation(local, block);
{
delete local;
return status;
}
status = local->
rotateTo(newRotation, space);
{
delete local;
return status;
}
{
delete local;
return status;
}
outRotation = applyRotationLimits(outRotation, block, &status);
{
delete local;
return status;
}
outRotation = applyRotationLocks(outRotation, savedRotation, &status);
{
delete local;
return status;
}
{
delete local;
return status;
}
{
delete local;
return status;
}
delete local;
}
{
return status;
}
if (plug == rotate) {
handle.
set(outRotation.
x, outRotation.
y, outRotation.
z);
} else if (plug == rotateX) {
handle.
set(outRotation.
x);
} else if (plug == rotateY) {
handle.
set(outRotation.
y);
} else {
handle.
set(outRotation.
z);
}
return status;
}
rockingTransformCheckMatrix *rockingTransformCheckNode::getRockingTransformCheckMatrix()
{
rockingTransformCheckMatrix *ltm = (rockingTransformCheckMatrix *) baseTransformationMatrix;
return ltm;
}