#include <maya/MPxLocatorNode.h>
#include <maya/MString.h>
#include <maya/MTypeId.h>
#include <maya/MColor.h>
#include <maya/M3dView.h>
#include <maya/MFnPlugin.h>
#include <maya/MDistance.h>
#include <maya/MFnUnitAttribute.h>
#include <maya/MDrawRegistry.h>
#include <maya/MPxDrawOverride.h>
#include <maya/MUserData.h>
#include <maya/MDrawContext.h>
#include <maya/MHWGeometryUtilities.h>
#include <maya/MPointArray.h>
#include <assert.h>
static float topSquare[][3] = {
{ -1.00f, 1.00f, -1.00f },
{ -1.00f, 1.00f, 1.00f },
{ 1.00f, 1.00f, -1.00f },
{ 1.00f, 1.00f, 1.00f } };
static float bottomSquare[][3] = {
{ -1.00f, 0.00f, -1.00f },
{ -1.00f, 0.00f, 1.00f },
{ 1.00f, 0.00f, -1.00f },
{ 1.00f, 0.00f, 1.00f } };
{
public:
squares();
~squares() override;
static void * creator();
public:
static MString drawDbClassification;
};
MString squares::drawDbClassification(
"drawdb/geometry/squares");
MString squares::drawRegistrantId(
"SquaresNodePlugin");
squares::squares() {}
squares::~squares() {}
{
return MS::kUnknownParameter;
}
bool squares::isBounded() const
{
return true;
}
{
MPlug plug( thisNode, size );
plug.getValue( sizeVal );
MPoint corner1( -1.0, 1.0, -1.0 );
MPoint corner2( 1.0, 0.0, 1.0 );
corner1 = corner1 * multiplier;
corner2 = corner2 * multiplier;
}
void* squares::creator()
{
return new squares();
}
{
public:
~SquareData() override {}
};
{
public:
{
return new SquaresDrawOverride(obj);
}
~SquaresDrawOverride() override;
const MDagPath& cameraPath)
const override;
const MDagPath& cameraPath)
const override;
private:
SquaresDrawOverride(
const MObject& obj);
float getMultiplier(
const MDagPath& objPath)
const;
};
SquaresDrawOverride::SquaresDrawOverride(
const MObject& obj)
{
}
SquaresDrawOverride::~SquaresDrawOverride()
{
}
{
}
float SquaresDrawOverride::getMultiplier(
const MDagPath& objPath)
const
{
if (status)
{
MPlug plug(SquaresNode, squares::size);
if (!plug.isNull())
{
if (plug.getValue(sizeVal))
{
}
}
}
return 1.0f;
}
bool SquaresDrawOverride::isBounded(
const MDagPath& ,
{
return true;
}
{
MPoint corner1( -1.0, 1.0, -1.0 );
MPoint corner2( 1.0, 0.0, 1.0 );
float multiplier = getMultiplier(objPath);
corner1 = corner1 * multiplier;
corner2 = corner2 * multiplier;
}
MUserData* SquaresDrawOverride::prepareForDraw(
{
SquareData* data = dynamic_cast<SquareData*>(oldData);
if (!data)
{
data = new SquareData();
}
float fMultiplier = getMultiplier(objPath);
data->fTopSquareList.clear();
data->fTopSquareList.append(topSquare[0][0] * fMultiplier, topSquare[0][1] * fMultiplier, topSquare[0][2] * fMultiplier);
data->fTopSquareList.append(topSquare[1][0] * fMultiplier, topSquare[1][1] * fMultiplier, topSquare[1][2] * fMultiplier);
data->fTopSquareList.append(topSquare[2][0] * fMultiplier, topSquare[2][1] * fMultiplier, topSquare[2][2] * fMultiplier);
data->fTopSquareList.append(topSquare[2][0] * fMultiplier, topSquare[2][1] * fMultiplier, topSquare[2][2] * fMultiplier);
data->fTopSquareList.append(topSquare[1][0] * fMultiplier, topSquare[1][1] * fMultiplier, topSquare[1][2] * fMultiplier);
data->fTopSquareList.append(topSquare[3][0] * fMultiplier, topSquare[3][1] * fMultiplier, topSquare[3][2] * fMultiplier);
data->fBottomSquareList.clear();
data->fBottomSquareList.append(bottomSquare[0][0] * fMultiplier, bottomSquare[0][1] * fMultiplier, bottomSquare[0][2] * fMultiplier);
data->fBottomSquareList.append(bottomSquare[1][0] * fMultiplier, bottomSquare[1][1] * fMultiplier, bottomSquare[1][2] * fMultiplier);
data->fBottomSquareList.append(bottomSquare[2][0] * fMultiplier, bottomSquare[2][1] * fMultiplier, bottomSquare[2][2] * fMultiplier);
data->fBottomSquareList.append(bottomSquare[2][0] * fMultiplier, bottomSquare[2][1] * fMultiplier, bottomSquare[2][2] * fMultiplier);
data->fBottomSquareList.append(bottomSquare[1][0] * fMultiplier, bottomSquare[1][1] * fMultiplier, bottomSquare[1][2] * fMultiplier);
data->fBottomSquareList.append(bottomSquare[3][0] * fMultiplier, bottomSquare[3][1] * fMultiplier, bottomSquare[3][2] * fMultiplier);
data->fTopLineList.clear();
data->fTopLineList.append(topSquare[0][0] * fMultiplier, topSquare[0][1] * fMultiplier, topSquare[0][2] * fMultiplier);
data->fTopLineList.append(topSquare[1][0] * fMultiplier, topSquare[1][1] * fMultiplier, topSquare[1][2] * fMultiplier);
data->fTopLineList.append(topSquare[1][0] * fMultiplier, topSquare[1][1] * fMultiplier, topSquare[1][2] * fMultiplier);
data->fTopLineList.append(topSquare[3][0] * fMultiplier, topSquare[3][1] * fMultiplier, topSquare[3][2] * fMultiplier);
data->fTopLineList.append(topSquare[3][0] * fMultiplier, topSquare[3][1] * fMultiplier, topSquare[3][2] * fMultiplier);
data->fTopLineList.append(topSquare[2][0] * fMultiplier, topSquare[2][1] * fMultiplier, topSquare[2][2] * fMultiplier);
data->fTopLineList.append(topSquare[2][0] * fMultiplier, topSquare[2][1] * fMultiplier, topSquare[2][2] * fMultiplier);
data->fTopLineList.append(topSquare[0][0] * fMultiplier, topSquare[0][1] * fMultiplier, topSquare[0][2] * fMultiplier);
data->fBottomLineList.clear();
data->fBottomLineList.append(bottomSquare[0][0] * fMultiplier, bottomSquare[0][1] * fMultiplier, bottomSquare[0][2] * fMultiplier);
data->fBottomLineList.append(bottomSquare[1][0] * fMultiplier, bottomSquare[1][1] * fMultiplier, bottomSquare[1][2] * fMultiplier);
data->fBottomLineList.append(bottomSquare[1][0] * fMultiplier, bottomSquare[1][1] * fMultiplier, bottomSquare[1][2] * fMultiplier);
data->fBottomLineList.append(bottomSquare[3][0] * fMultiplier, bottomSquare[3][1] * fMultiplier, bottomSquare[3][2] * fMultiplier);
data->fBottomLineList.append(bottomSquare[3][0] * fMultiplier, bottomSquare[3][1] * fMultiplier, bottomSquare[3][2] * fMultiplier);
data->fBottomLineList.append(bottomSquare[2][0] * fMultiplier, bottomSquare[2][1] * fMultiplier, bottomSquare[2][2] * fMultiplier);
data->fBottomLineList.append(bottomSquare[2][0] * fMultiplier, bottomSquare[2][1] * fMultiplier, bottomSquare[2][2] * fMultiplier);
data->fBottomLineList.append(bottomSquare[0][0] * fMultiplier, bottomSquare[0][1] * fMultiplier, bottomSquare[0][2] * fMultiplier);
{
data->fTopSquareColor =
MColor( 1.0f, 0.0f, 0.0f, 1.0f );
data->fBottomSquareColor =
MColor( 1.0f, 1.0f, 0.0f, 1.0f );
}
else
{
data->fTopSquareColor =
MColor( 0.8f, 0.0f, 0.5f, 1.0f );
data->fBottomSquareColor =
MColor( 0.8f, 0.2f, 0.0f, 1.0f );
}
return data;
}
void SquaresDrawOverride::addUIDrawables(
{
SquareData* pLocatorData = (SquareData*)data;
if (!pLocatorData)
{
return;
}
drawManager.
setColor( pLocatorData->fWireFrameColor);
{
drawManager.
setColor( pLocatorData->fBottomSquareColor );
drawManager.
setColor( pLocatorData->fTopSquareColor );
}
MColor textColor( 0.1f, 0.8f, 0.8f, 1.0f );
}
{
stat = addAttribute( size );
if (!stat) {
return stat;
}
return MS::kSuccess;
}
{
MFnPlugin plugin( obj, PLUGIN_COMPANY,
"3.0",
"Any");
status = plugin.registerNode(
"squares",
squares::id,
&squares::creator,
&squares::initialize,
&squares::drawDbClassification);
if (!status) {
status.
perror(
"registerNode");
return status;
}
squares::drawDbClassification,
squares::drawRegistrantId,
SquaresDrawOverride::Creator);
if (!status) {
status.
perror(
"registerDrawOverrideCreator");
return status;
}
return status;
}
{
squares::drawDbClassification,
squares::drawRegistrantId);
if (!status) {
status.
perror(
"deregisterDrawOverrideCreator");
return status;
}
status = plugin.deregisterNode( squares::id );
if (!status) {
status.
perror(
"deregisterNode");
return status;
}
return status;
}