#include <maya/MPxNode.h>
#include <maya/MString.h>
#include <maya/MTypeId.h>
#include <maya/MPlug.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MFnPlugin.h>
#include <maya/MDataBlock.h>
#include <maya/MDataHandle.h>
#include <string.h>
#include <maya/MIOStream.h>
#include <math.h>
{
public:
transCircle() {};
~transCircle() override {};
static void* creator();
};
MTypeId transCircle::id( 0x80013 );
MObject transCircle::inputTranslate;
MObject transCircle::outputTranslate;
MObject transCircle::inputTranslateX;
MObject transCircle::inputTranslateY;
MObject transCircle::inputTranslateZ;
MObject transCircle::outputTranslateX;
MObject transCircle::outputTranslateY;
MObject transCircle::outputTranslateZ;
void* transCircle::creator()
{
return new transCircle;
}
{
inputTranslateX = nAttr.
create(
"inputTranslateX",
"itX",
inputTranslateY = nAttr.
create(
"inputTranslateY",
"itY",
inputTranslateZ = nAttr.
create(
"inputTranslateZ",
"itZ",
inputTranslate = nAttr.
create(
"inputTranslate",
"it",
inputTranslateX,
inputTranslateY,
inputTranslateZ );
outputTranslateX = nAttr.
create(
"outputTranslateX",
"otX",
outputTranslateY = nAttr.
create(
"outputTranslateY",
"otY",
outputTranslateZ = nAttr.
create(
"outputTranslateZ",
"otZ",
outputTranslate = nAttr.
create(
"outputTranslate",
"ot",
outputTranslateX,
outputTranslateY,
outputTranslateZ );
scale = nAttr.
create(
"scale",
"sc",
frames = nAttr.
create(
"frames",
"fr",
stat = addAttribute( inputTranslate );
if (!stat) { stat.
perror(
"addAttribute");
return stat;}
stat = addAttribute( input );
if (!stat) { stat.
perror(
"addAttribute");
return stat;}
stat = addAttribute( scale );
if (!stat) { stat.
perror(
"addAttribute");
return stat;}
stat = addAttribute( frames );
if (!stat) { stat.
perror(
"addAttribute");
return stat;}
stat = addAttribute( outputTranslate );
if (!stat) { stat.
perror(
"addAttribute");
return stat;}
stat = attributeAffects( inputTranslateX, outputTranslateX );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( inputTranslateY, outputTranslateY );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( inputTranslateZ, outputTranslateZ );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( inputTranslate, outputTranslateX );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( inputTranslate, outputTranslateY );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( inputTranslate, outputTranslateZ );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( inputTranslate, outputTranslate );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( input, outputTranslateX );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( input, outputTranslateY );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( scale, outputTranslateX );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( scale, outputTranslateY );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( frames, outputTranslateX );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
stat = attributeAffects( frames, outputTranslateY );
if (!stat) { stat.
perror(
"attributeAffects");
return stat;}
return MS::kSuccess;
}
{
bool k = ( plug == outputTranslateX ) |
( plug == outputTranslateY ) |
( plug == outputTranslateZ ) |
( plug == outputTranslate );
if (!k) return MS::kUnknownParameter;
if (!stat) { stat.
perror(
"inputValue: input");
return stat;}
if (!stat) { stat.
perror(
"inputValue: scale");
return stat;}
if (!stat) { stat.
perror(
"inputValue: frames");
return stat;}
if (!stat) { stat.
perror(
"inputValue: inputTranslate");
return stat;}
double currentFrame = inputData.
asDouble();
double scaleFactor = scaleData.
asDouble();
double framesPerCircle = framesData.
asDouble();
double angle = 6.2831853 * ( currentFrame/framesPerCircle );
double3 oTranslate;
oTranslate[0] = iTranslate[0] + (sin( angle ) * scaleFactor);
oTranslate[1] = iTranslate[1] + 1.0;
oTranslate[2] = iTranslate[2] + (cos( angle ) * scaleFactor);
otHandle.
set( oTranslate[0], oTranslate[1], oTranslate[2] );
return MS::kSuccess;
}
{
MFnPlugin plugin( obj, PLUGIN_COMPANY,
"3.0",
"Any");
status = plugin.registerNode( "transCircle", transCircle::id,
transCircle::creator, transCircle::initialize );
if (!status) {
status.
perror(
"registerNode");
return status;
}
return status;
}
{
status = plugin.deregisterNode( transCircle::id );
if (!status) {
status.
perror(
"deregisterNode");
return status;
}
return status;
}