#include <maya/MFnPlugin.h>
#include <maya/MPxNode.h>
#include <maya/MString.h>
#include <maya/MTypeId.h>
#include <maya/MPlug.h>
#include <maya/MDataBlock.h>
#include <maya/MDataHandle.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MFloatVector.h>
#define PERRORfail(stat,msg) \
if (!(stat)) { stat.perror((msg)); return (stat); }
class shiftNode;
{
public:
shiftNode();
~shiftNode() override;
static void * creator();
private:
float ox, oy, oz;
int initID, doneID;
static bool firstTime;
};
MObject shiftNode::aRefPointCamera;
shiftNode::shiftNode()
{
}
shiftNode::~shiftNode()
{
}
void * shiftNode::creator()
{
return new shiftNode();
}
{
aShift = nAttr.
create(
"shift",
"sh",
stat = addAttribute( aShift );
PERRORfail( stat, "addAttribute shift" );
aDist = nAttr.
create(
"distance",
"dis",
stat = addAttribute( aDist );
PERRORfail( stat, "addAttribute dist" );
stat = addAttribute( aColor );
PERRORfail( stat, "addAttribute inColor" );
aRefPointCamera = nAttr.
createPoint(
"refPointCamera",
"rpc" );
stat = addAttribute( aRefPointCamera );
PERRORfail( stat, "addAttribute refPointCamera" );
aUv = nAttr.
create(
"uvCoord",
"uv", u, v );
stat = addAttribute( aUv );
PERRORfail( stat, "addAttribute uv" );
PERRORfail(stat, "initialize create outColor attribute");
stat = addAttribute( aOutColor );
PERRORfail(stat, "addAttribute(outColor)");
attributeAffects ( aShift, aOutColor );
attributeAffects ( aDist, aOutColor );
attributeAffects ( aColor, aOutColor );
attributeAffects ( aRefPointCamera, aOutColor );
attributeAffects ( aUv, aOutColor );
attributeAffects ( aUv, aUv );
attributeAffects ( aRefPointCamera, aRefPointCamera );
return MS::kSuccess;
}
{
if ((plug != aOutColor) && (plug.
parent() != aOutColor))
return MS::kUnknownParameter;
PERRORfail(stat, "compute getting shift attr");
bool shiftIt = shiftH.
asBool();
PERRORfail(stat, "compute getting distance attr");
if ( shiftIt && distance != 0.0 )
{
PERRORfail(stat, "compute getting refPointCamera attr");
outUV.
set( oldUV[0]-distance, oldUV[1] );
outPC.
set( refPC.
x + distance, refPC.
y + distance, refPC.
z + distance);
clr += color;
outUV.
set( oldUV[0]+distance, oldUV[1] );
outPC.
set( refPC.
x - distance, refPC.
y + distance, refPC.
z + distance);
clr += color;
outUV.
set( oldUV[0], oldUV[1]-distance );
outPC.
set( refPC.
x + distance, refPC.
y - distance, refPC.
z + distance);
clr += color;
outUV.
set( oldUV[0], oldUV[1]+distance );
outPC.
set( refPC.
x - distance, refPC.
y - distance, refPC.
z + distance);
clr += color;
clr /= 5.0;
outUV.
set( oldUV[0], oldUV[1] );
outPC.
set( refPC.
x, refPC.
y, refPC.
z );
}
else
{
}
oclr = clr;
return MS::kSuccess;
}
{
const MString UserClassify(
"utility/general" );
MFnPlugin plugin( obj, PLUGIN_COMPANY,
"4.5",
"Any");
plugin.registerNode( "shiftNode", shiftNode::id,
shiftNode::creator, shiftNode::initialize,
return MS::kSuccess;
}
{
plugin.deregisterNode( shiftNode::id );
return MS::kSuccess;
}