#include <maya/MPxLocatorNode.h>
#include <maya/MFnPlugin.h>
#include <maya/MFnEnumAttribute.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MFnTypedAttribute.h>
#include <maya/MFnStringData.h>
#include <maya/MFnPointArrayData.h>
#include <maya/MPointArray.h>
#include <maya/MFloatPointArray.h>
#include <maya/MUintArray.h>
#include <maya/MDrawRegistry.h>
#include <maya/MPxDrawOverride.h>
#include <maya/MUserData.h>
#include <algorithm>
{
public:
enum EuiType {
kText,
kLine,
kPoint,
kRect,
kQuad,
kSphere,
kCircle,
kArc,
kLineList,
kPointList,
kLineStrip,
kIcon,
kCone,
kBox,
kSphere2,
kCircle2,
kArc2,
kCone2,
kCylinder,
kCapsule
};
public:
uiDrawManager();
~uiDrawManager() override;
static void* creator();
static MObject aPrimitiveTransparency;
static MObject aWorldViewportConverter;
static MObject aTextBoxTransparency;
static MObject aSubdivisionsHeight;
public:
static MString drawDbClassification;
};
MObject uiDrawManager::aSelectability;
MObject uiDrawManager::aPrimitiveColor;
MObject uiDrawManager::aPrimitiveTransparency;
MObject uiDrawManager::aWorldViewportConverter;
MObject uiDrawManager::aTextAlignment;
MObject uiDrawManager::eTextIncline;
MObject uiDrawManager::aTextWeight;
MObject uiDrawManager::aTextStretch;
MObject uiDrawManager::aTextBoxSize;
MObject uiDrawManager::aTextBoxColor;
MObject uiDrawManager::aTextBoxTransparency;
MObject uiDrawManager::aTextFontSize;
MObject uiDrawManager::aFontFaceName;
MObject uiDrawManager::aLineStartPoint;
MObject uiDrawManager::aLineEndPoint;
MObject uiDrawManager::aRectNormal;
MObject uiDrawManager::aQuadVertex[4];
MObject uiDrawManager::aCircleNormal;
MObject uiDrawManager::aConeDirection;
MObject uiDrawManager::aSubdivisionsAxis;
MObject uiDrawManager::aSubdivisionsHeight;
MObject uiDrawManager::aNumSubdivisions;
MObject uiDrawManager::aCylinderUp;
MTypeId uiDrawManager::id(0x0008002A);
MString uiDrawManager::drawDbClassification(
"drawdb/geometry/uiDrawManager");
MString uiDrawManager::drawRegistrantId(
"uiDrawManagerPlugin");
uiDrawManager::uiDrawManager() {}
uiDrawManager::~uiDrawManager() {}
void* uiDrawManager::creator()
{
return new uiDrawManager();
}
{
public:
uiDrawManagerData();
uiDrawManager::EuiType fUIType{uiDrawManager::kText};
MColor fColor{1.0f, 0.0f, 0.0f, 1.0f};
float fLineWidth{2.f};
bool fIsFilled{false};
bool fShaded{false};
bool fXRay{false};
double fRadius{1.0};
double fHeight{1.0};
bool fDraw2D{false};
bool fWorldViewportConverter{false};
MPoint fPosition{0.0, 0.0, 0.001};
MString fText{
"uiDrawManager-Text"};
unsigned int fFontFaceIndex{0};
int fTextLine{0};
int fTextBoxWidth{0};
int fTextBoxHeight{0};
MColor fTextBoxColor{0.0f, 1.0f, 1.0f, 1.0f};
float fPointSize{2.0f};
MPoint fLineStartPoint{0.0, 0.0, 0.0};
MPoint fLineEndPoint{1.0, 1.0, 1.0};
MVector fRectNormal{0.0, 0.0, 1.0};
double fRectScaleX{1.0};
double fRectScaleY{1.0};
MVector fCircleNormal{0.0, 0.0, 1.0};
float fIconScale{1.0f};
unsigned fIconIndex;
MVector fConeDirection{0.0, 0.0, 1.0};
MPoint fBoxScale{1.0, 1.0, 1.0};
int fSubdivisionsAxis{10};
int fSubdivisionsHeight{4};
int fNumSubdivisions{10};
MVector fCylinderUp{0.0, 1.0, 0.0};
};
uiDrawManagerData::uiDrawManagerData()
{
}
{
public:
{
return new uiDrawManagerDrawOverride(obj);
}
~uiDrawManagerDrawOverride() override;
DrawAPI supportedDrawAPIs() const override;
bool isBounded(
const MDagPath& cameraPath)
const override;
const MDagPath& cameraPath)
const override;
bool hasUIDrawables() const override { return true; }
void addUIDrawables(
protected:
private:
uiDrawManagerDrawOverride(
const MObject& obj);
};
uiDrawManagerDrawOverride::uiDrawManagerDrawOverride(
const MObject& obj)
{
}
uiDrawManagerDrawOverride::~uiDrawManagerDrawOverride()
{
}
DrawAPI uiDrawManagerDrawOverride::supportedDrawAPIs() const
{
return (kOpenGL | kDirectX11 | kOpenGLCoreProfile);
}
bool uiDrawManagerDrawOverride::isBounded(
const MDagPath& ,
{
return false;
}
{
}
MUserData* uiDrawManagerDrawOverride::prepareForDraw(
{
uiDrawManagerData* data = dynamic_cast<uiDrawManagerData*>(oldData);
if (!data) {
data = new uiDrawManagerData();
}
if (status) {
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aUIType);
data->fUIType = (uiDrawManager::EuiType)plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aSelectability);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aPrimitiveColor);
nData.getData(data->fColor.r, data->fColor.g, data->fColor.b);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aPrimitiveTransparency);
data->fColor.a = 1.0f - plug.asFloat();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aLineWidth);
data->fLineWidth = plug.asFloat();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aLineStyle);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aIsFilled);
data->fIsFilled = plug.asBool();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aShaded);
data->fShaded = plug.asBool();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aXRay);
data->fXRay = plug.asBool();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aRadius);
data->fRadius = plug.asDouble();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aHeight);
data->fHeight = std::max(plug.asFloat(), 1.0f);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aDraw2D);
data->fDraw2D = plug.asBool();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aWorldViewportConverter);
data->fWorldViewportConverter = plug.asBool();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aPosition);
nData.getData(data->fPosition.x, data->fPosition.y, data->fPosition.z);
data->fPosition.w = 1.0f;
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aSubdivisionsAxis);
data->fSubdivisionsAxis = plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aSubdivisionsHeight);
data->fSubdivisionsHeight = plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aNumSubdivisions);
data->fNumSubdivisions = plug.asInt();
}
switch (data->fUIType)
{
case uiDrawManager::kText:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aText);
data->fText = plug.asString();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextFontSize);
data->fTextFontSize = std::max(plug.asInt(), 0);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aFontFaceName);
data->fFontFaceIndex = (unsigned int)plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextAlignment);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::eTextIncline);
data->fTextIncline = plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextWeight);
data->fTextWeight = plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextStretch);
data->fTextStretch = plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextLine);
data->fTextLine = plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextBoxSize);
nData.getData(data->fTextBoxWidth, data->fTextBoxHeight);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextBoxColor);
nData.getData(data->fTextBoxColor.r, data->fTextBoxColor.g, data->fTextBoxColor.b);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aTextBoxTransparency);
data->fTextBoxColor.a = 1.0f - plug.asFloat();
}
break;
case uiDrawManager::kPoint:
case uiDrawManager::kPointList:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aPointSize);
data->fPointSize = plug.asFloat();
}
if (data->fUIType == uiDrawManager::kPoint)
{
data->fPoints.clear();
data->fPoints.append( data->fPosition );
}
else
{
unsigned int divisionCount = 50;
double ddivisionCount = 100.0 / (double)divisionCount;
data->fPoints.clear();
for (unsigned int i=0; i<=divisionCount; i++)
{
for (unsigned int j=0; j<=divisionCount; j++)
{
for (unsigned int k=0; k<=divisionCount; k++)
{
MPoint delta(
double(i)*ddivisionCount,
double(j)*ddivisionCount,
double(k)*ddivisionCount);
newPoint = data->fPosition + delta;
data->fPoints.append( newPoint );
}
}
}
}
break;
case uiDrawManager::kLine:
case uiDrawManager::kLineList:
case uiDrawManager::kLineStrip:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aLineStartPoint);
nData.getData(data->fLineStartPoint.x, data->fLineStartPoint.y, data->fLineStartPoint.z);
data->fLineStartPoint.w = 1.0f;
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aLineEndPoint);
nData.getData(data->fLineEndPoint.x, data->fLineEndPoint.y, data->fLineEndPoint.z);
data->fLineEndPoint.w = 1.0f;
}
if (data->fUIType == uiDrawManager::kLine)
{
data->fLines.clear();
data->fLines.append( data->fLineStartPoint );
data->fLines.append( data->fLineEndPoint );
}
else
{
unsigned int divisionCount = 50;
double ddivisionCount = 100.0 / (double)divisionCount;
data->fLines.clear();
for (unsigned int i=0; i<=divisionCount; i++)
{
for (unsigned int j=0; j<=divisionCount; j++)
{
for (unsigned int k=0; k<=divisionCount; k++)
{
MPoint delta(
double(i)*ddivisionCount,
double(j)*ddivisionCount,
double(k)*ddivisionCount);
newPoint = data->fLineStartPoint + delta;
data->fLines.append( newPoint );
newPoint = data->fLineEndPoint + delta;
data->fLines.append( newPoint );
}
}
}
}
break;
case uiDrawManager::kRect:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aRectUp);
nData.getData(data->fRectUp.x, data->fRectUp.y, data->fRectUp.z);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aRectNormal);
nData.getData(data->fRectNormal.x, data->fRectNormal.y, data->fRectNormal.z);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aRectScale);
nData.getData(data->fRectScaleX, data->fRectScaleY);
}
break;
case uiDrawManager::kQuad:
{
for (int i = 0; i < 4; ++i)
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aQuadVertex[i]);
nData.getData(data->fQuadVertex[i].x, data->fQuadVertex[i].y, data->fQuadVertex[i].z);
}
}
break;
case uiDrawManager::kCircle:
case uiDrawManager::kCircle2:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aCircleNormal);
nData.getData(data->fCircleNormal.x, data->fCircleNormal.y, data->fCircleNormal.z);
}
break;
case uiDrawManager::kArc:
case uiDrawManager::kArc2:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aArcStart);
nData.getData(data->fArcStart.x, data->fArcStart.y, data->fArcStart.z);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aArcEnd);
nData.getData(data->fArcEnd.x, data->fArcEnd.y, data->fArcEnd.z);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aArcNormal);
nData.getData(data->fArcNormal.x, data->fArcNormal.y, data->fArcNormal.z);
}
break;
case uiDrawManager::kSphere:
case uiDrawManager::kSphere2:
break;
case uiDrawManager::kIcon:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aIconName);
data->fIconIndex = (unsigned int)plug.asInt();
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aIconScale);
data->fIconScale = std::max(plug.asFloat(), 1.0f);
}
break;
case uiDrawManager::kCone:
case uiDrawManager::kCone2:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aConeDirection);
nData.getData(data->fConeDirection.x, data->fConeDirection.y, data->fConeDirection.z);
}
break;
case uiDrawManager::kBox:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aBoxUp);
nData.getData(data->fBoxUp.x, data->fBoxUp.y, data->fBoxUp.z);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aBoxRight);
nData.getData(data->fBoxRight.x, data->fBoxRight.y, data->fBoxRight.z);
}
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aBoxScale);
nData.getData(data->fBoxScale.x, data->fBoxScale.y, data->fBoxScale.z);
}
break;
case uiDrawManager::kCylinder:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aCylinderUp);
nData.getData(data->fCylinderUp.x, data->fCylinderUp.y, data->fCylinderUp.z);
}
case uiDrawManager::kCapsule:
{
MPlug plug(uiDrawManagerNode, uiDrawManager::aCapsuleUp);
nData.getData(data->fCapsuleUp.x, data->fCapsuleUp.y, data->fCapsuleUp.z);
}
default:
perror("unhandled ui type.");
break;
}
}
return data;
}
void uiDrawManagerDrawOverride::addUIDrawables(
{
const uiDrawManagerData* thisdata = dynamic_cast<const uiDrawManagerData*>(data);
if (!thisdata) {
return;
}
switch (thisdata->fUIType)
{
case uiDrawManager::kText:
{
MString faceName = uiDrawManagerData::fFontList[thisdata->fFontFaceIndex];
int boxSize[] = { thisdata->fTextBoxWidth, thisdata->fTextBoxHeight };
if (thisdata->fWorldViewportConverter)
{
if (thisdata->fDraw2D)
{
double x = thisdata->fPosition.x, y = thisdata->fPosition.y;
double viewX, viewY;
char buff[128];
worldPos = (worldFarPt - worldPos) * 0.01 + worldPos;
sprintf(buff, "(%.2lf %.2lf)->(%.2lf, %.2lf, %.2lf)", x, y,
worldPos.
x, worldPos.
y, worldPos.
z);
drawManager.
text(worldPos, buff, thisdata->fTextAlignment,
boxSize[0]+boxSize[1] == 0 ? NULL : boxSize, &thisdata->fTextBoxColor, false);
printf("2D: (%.2lf %.2lf)->(%.2lf, %.2lf, %.2lf)->(%.2lf, %.2lf)\n", x, y,
worldPos.
x, worldPos.
y, worldPos.
z, viewX, viewY);
}
else
{
double x, y;
char buff[128];
sprintf(buff, "(%.2lf, %.2lf, %.2lf)->(%.2lf %.2lf)", thisdata->fPosition.x,
thisdata->fPosition.y, thisdata->fPosition.z, x, y);
drawManager.
text2d(
MPoint(x, y), buff, thisdata->fTextAlignment,
boxSize[0]+boxSize[1] == 0 ? NULL : boxSize, &thisdata->fTextBoxColor, false);
printf("3D: (%.2lf, %.2lf, %.2lf)->(%.2lf %.2lf)->(%.2lf, %.2lf, %.2lf)\n", thisdata->fPosition.x,
thisdata->fPosition.y, thisdata->fPosition.z, x, y, worldPt.
x, worldPt.
y, worldPt.
z);
}
}
else
{
if (thisdata->fDraw2D)
{
drawManager.
text2d(thisdata->fPosition, thisdata->fText, thisdata->fTextAlignment,
boxSize[0]+boxSize[1] == 0 ? NULL : boxSize, &thisdata->fTextBoxColor, false);
}
else
{
drawManager.
text(thisdata->fPosition, thisdata->fText, thisdata->fTextAlignment,
boxSize[0]+boxSize[1] == 0 ? NULL : boxSize, &thisdata->fTextBoxColor, false);
}
}
}
break;
case uiDrawManager::kLine:
case uiDrawManager::kLineList:
case uiDrawManager::kLineStrip:
{
if (thisdata->fUIType == uiDrawManager::kLineStrip)
drawManager.
lineStrip(thisdata->fLines, thisdata->fDraw2D);
else
drawManager.
lineList(thisdata->fLines, thisdata->fDraw2D);
}
break;
case uiDrawManager::kPoint:
case uiDrawManager::kPointList:
{
drawManager.
points(thisdata->fPoints, thisdata->fDraw2D);
}
break;
case uiDrawManager::kRect:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
if (thisdata->fDraw2D) {
drawManager.
rect2d(thisdata->fPosition, thisdata->fRectUp,
thisdata->fRectScaleX, thisdata->fRectScaleY, thisdata->fIsFilled);
}
else {
drawManager.
rect(thisdata->fPosition, thisdata->fRectUp, thisdata->fRectNormal,
thisdata->fRectScaleX, thisdata->fRectScaleY, thisdata->fIsFilled);
}
if (thisdata->fXRay)
}
break;
case uiDrawManager::kQuad:
{
thisdata->fIsFilled ? MUIDrawManager::kTriStrip : MUIDrawManager::kClosedLine;
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
if (thisdata->fDraw2D) {
for (int i = 0; i < 4; ++i) {
position.
append(thisdata->fQuadVertex[i]);
}
drawManager.
mesh2d(mode, position, NULL, thisdata->fIsFilled ? &index : NULL);
}
else {
for (int i = 0; i < 4; ++i) {
position.
append(thisdata->fQuadVertex[i]);
}
drawManager.
mesh(mode, position, NULL, NULL, thisdata->fIsFilled ? &index : NULL);
}
if (thisdata->fXRay)
}
break;
case uiDrawManager::kSphere:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
drawManager.
sphere(thisdata->fPosition, thisdata->fRadius, thisdata->fIsFilled);
if (thisdata->fXRay)
}
break;
case uiDrawManager::kSphere2:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
drawManager.
sphere(thisdata->fPosition, thisdata->fRadius, thisdata->fSubdivisionsAxis, thisdata->fSubdivisionsHeight, thisdata->fIsFilled);
if (thisdata->fXRay)
}
break;
case uiDrawManager::kCircle:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
if (thisdata->fDraw2D) {
drawManager.
circle2d(thisdata->fPosition, thisdata->fRadius,
thisdata->fIsFilled);
}
else {
drawManager.
circle(thisdata->fPosition, thisdata->fCircleNormal, thisdata->fRadius,
thisdata->fIsFilled);
}
if (thisdata->fXRay)
}
break;
case uiDrawManager::kCircle2:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
if (thisdata->fDraw2D) {
drawManager.
circle2d(thisdata->fPosition, thisdata->fRadius, thisdata->fNumSubdivisions,
thisdata->fIsFilled);
}
else {
drawManager.
circle(thisdata->fPosition, thisdata->fCircleNormal, thisdata->fRadius, thisdata->fNumSubdivisions,
thisdata->fIsFilled);
}
if (thisdata->fXRay)
}
break;
case uiDrawManager::kArc:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
if (thisdata->fDraw2D) {
drawManager.
arc2d(thisdata->fPosition, thisdata->fArcStart, thisdata->fArcEnd,
thisdata->fRadius, thisdata->fIsFilled);
}
else {
drawManager.
arc(thisdata->fPosition, thisdata->fArcStart, thisdata->fArcEnd,
thisdata->fArcNormal, thisdata->fRadius, thisdata->fIsFilled);
}
if (thisdata->fXRay)
}
break;
case uiDrawManager::kArc2:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
if (thisdata->fDraw2D) {
drawManager.
arc2d(thisdata->fPosition, thisdata->fArcStart, thisdata->fArcEnd,
thisdata->fRadius, thisdata->fNumSubdivisions, thisdata->fIsFilled);
}
else {
drawManager.
arc(thisdata->fPosition, thisdata->fArcStart, thisdata->fArcEnd,
thisdata->fArcNormal, thisdata->fRadius, thisdata->fNumSubdivisions, thisdata->fIsFilled);
}
if (thisdata->fXRay)
}
break;
case uiDrawManager::kIcon:
{
MString iconName = uiDrawManagerData::fIconList[thisdata->fIconIndex];
if (thisdata->fXRay)
drawManager.
icon(thisdata->fPosition, iconName, thisdata->fIconScale);
if (thisdata->fXRay)
}
break;
case uiDrawManager::kCone:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
drawManager.
cone(thisdata->fPosition,
thisdata->fConeDirection,
thisdata->fRadius,
thisdata->fHeight,
thisdata->fIsFilled);
if (thisdata->fXRay)
}
break;
case uiDrawManager::kCone2:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
drawManager.
cone(thisdata->fPosition,
thisdata->fConeDirection,
thisdata->fRadius,
thisdata->fHeight,
thisdata->fNumSubdivisions,
thisdata->fIsFilled);
if (thisdata->fXRay)
}
break;
case uiDrawManager::kBox:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
drawManager.
box(thisdata->fPosition,
thisdata->fBoxUp,
thisdata->fBoxRight,
thisdata->fBoxScale[0],
thisdata->fBoxScale[1],
thisdata->fBoxScale[2],
thisdata->fIsFilled);
if (thisdata->fXRay)
}
break;
case uiDrawManager::kCylinder:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
drawManager.
cylinder(thisdata->fPosition, thisdata->fCylinderUp,
thisdata->fRadius, thisdata->fHeight, thisdata->fSubdivisionsAxis, thisdata->fIsFilled);
if (thisdata->fXRay)
}
break;
case uiDrawManager::kCapsule:
{
MUIDrawManager::kShaded : MUIDrawManager::kFlat);
if (thisdata->fXRay)
drawManager.
capsule(thisdata->fPosition, thisdata->fCapsuleUp,
thisdata->fRadius, thisdata->fHeight, thisdata->fSubdivisionsAxis,
thisdata->fSubdivisionsHeight, thisdata->fIsFilled);
if (thisdata->fXRay)
}
break;
default:
perror("unhandled ui types.");
break;
}
}
MStatus uiDrawManager::initialize()
{
aUIType = eAttr.
create(
"uiType",
"ut", uiDrawManager::kText);
eAttr.
addField(
"text", uiDrawManager::kText);
eAttr.
addField(
"line", uiDrawManager::kLine);
eAttr.
addField(
"point", uiDrawManager::kPoint);
eAttr.
addField(
"rect", uiDrawManager::kRect);
eAttr.
addField(
"quad", uiDrawManager::kQuad);
eAttr.
addField(
"sphere", uiDrawManager::kSphere);
eAttr.
addField(
"circle", uiDrawManager::kCircle);
eAttr.
addField(
"arc", uiDrawManager::kArc);
eAttr.
addField(
"line list", uiDrawManager::kLineList);
eAttr.
addField(
"line strip", uiDrawManager::kLineStrip);
eAttr.
addField(
"point list", uiDrawManager::kPointList);
eAttr.
addField(
"icon", uiDrawManager::kIcon);
eAttr.
addField(
"cone", uiDrawManager::kCone);
eAttr.
addField(
"box", uiDrawManager::kBox);
eAttr.
addField(
"sphere2", uiDrawManager::kSphere2);
eAttr.
addField(
"circle2", uiDrawManager::kCircle2);
eAttr.
addField(
"arc2", uiDrawManager::kArc2);
eAttr.
addField(
"cone2", uiDrawManager::kCone2);
eAttr.
addField(
"cylinder", uiDrawManager::kCylinder);
eAttr.
addField(
"capsule", uiDrawManager::kCapsule);
aSelectability = eAttr.
create(
"selectability",
"st", MUIDrawManager::kAutomatic);
eAttr.
addField(
"NonSelectable", MUIDrawManager::kNonSelectable);
eAttr.
addField(
"Selectable", MUIDrawManager::kSelectable);
eAttr.
addField(
"Automatic", MUIDrawManager::kAutomatic);
aLineStyle = eAttr.
create(
"lineStyle",
"ls", MUIDrawManager::kSolid);
eAttr.
addField(
"solid", MUIDrawManager::kSolid);
eAttr.
addField(
"shortdotted", MUIDrawManager::kShortDotted);
eAttr.
addField(
"shortdashed", MUIDrawManager::kShortDashed);
eAttr.
addField(
"dashed", MUIDrawManager::kDashed);
eAttr.
addField(
"dotted", MUIDrawManager::kDotted);
unsigned int nFont = MUIDrawManager::getFontList(uiDrawManagerData::fFontList);
if (nFont == 0)
{
perror("No font available!");
}
aFontFaceName = eAttr.
create(
"fontFaceName",
"ffn", 0);
for (unsigned int i = 0; i < nFont; i++)
{
MString str = uiDrawManagerData::fFontList[i];
}
aTextAlignment = eAttr.
create(
"textAlignment",
"ta", MUIDrawManager::kLeft);
eAttr.
addField(
"left", MUIDrawManager::kLeft);
eAttr.
addField(
"center", MUIDrawManager::kCenter);
eAttr.
addField(
"right", MUIDrawManager::kRight);
eTextIncline = eAttr.
create(
"textIncline",
"tic", MUIDrawManager::kInclineNormal);
eAttr.
addField(
"normal", MUIDrawManager::kInclineNormal);
eAttr.
addField(
"italic", MUIDrawManager::kInclineItalic);
aTextWeight = eAttr.
create(
"textWeight",
"tw", MUIDrawManager::kWeightBold);
eAttr.
addField(
"light", MUIDrawManager::kWeightLight);
eAttr.
addField(
"normal", MUIDrawManager::kWeightNormal);
eAttr.
addField(
"demiBold", MUIDrawManager::kWeightDemiBold);
eAttr.
addField(
"bold", MUIDrawManager::kWeightBold);
eAttr.
addField(
"black", MUIDrawManager::kWeightBlack);
aTextLine = eAttr.
create(
"textLine",
"tl", 0);
eAttr.
addField(
"overline", MUIDrawManager::kLineOverline);
eAttr.
addField(
"underline", MUIDrawManager::kLineUnderline);
eAttr.
addField(
"strikeout", MUIDrawManager::kLineStrikeoutLine);
float defaultPosition[4][3] =
{
{0.0, 0.0, 0.0},
{1.0, 0.0, 0.0},
{1.0, 1.0, 0.0},
{0.0, 1.0, 0.0}
};
for (int i = 0; i < 4; ++i)
{
nAttr.
setDefault(defaultPosition[i][0], defaultPosition[i][1], defaultPosition[i][2]);
}
aIconName = eAttr.
create(
"icon",
"i", 0 );
unsigned int iconCount = MUIDrawManager::getIconNames(uiDrawManagerData::fIconList);
for (unsigned int i=0; i<iconCount; i++)
{
MString str = uiDrawManagerData::fIconList[i];
}
return MS::kSuccess;
}
{
MFnPlugin plugin( obj, PLUGIN_COMPANY,
"3.0",
"Any");
status = plugin.registerNode(
"uiDrawManager",
uiDrawManager::id,
&uiDrawManager::creator,
&uiDrawManager::initialize,
&uiDrawManager::drawDbClassification);
if (!status) {
status.
perror(
"registerNode");
return status;
}
uiDrawManager::drawDbClassification,
uiDrawManager::drawRegistrantId,
uiDrawManagerDrawOverride::Creator);
if (!status) {
status.
perror(
"registerDrawOverrideCreator");
return status;
}
return status;
}
{
status = MDrawRegistry::deregisterGeometryOverrideCreator(
uiDrawManager::drawDbClassification,
uiDrawManager::drawRegistrantId);
if (!status) {
status.
perror(
"deregisterGeometryOverrideCreator");
return status;
}
status = plugin.deregisterNode( uiDrawManager::id );
if (!status) {
status.
perror(
"deregisterNode");
return status;
}
return status;
}