#include <maya/MString.h>
#include <maya/MViewport2Renderer.h>
#include <maya/MRenderTargetManager.h>
#include <maya/MUiMessage.h>
#include <maya/MPoint.h>
#include <maya/MViewport2Renderer.h>
#include <maya/MDrawContext.h>
#include <maya/MItMeshPolygon.h>
#include <maya/MSelectionList.h>
#include <maya/MGlobal.h>
#include <memory>
#include "narrowPolyRenderOverride.h"
static const MString kPresentOpName =
"__MyPresentTarget";
static const MString kSceneRenderOpName =
"__MySimpleSceneRender";
static const MString kUserOpName =
"__MyUserRenderOp";
MHWRender::DrawAPI
narrowPolyRenderOverride::supportedDrawAPIs() const
{
return ( MHWRender::kOpenGL | MHWRender::kDirectX11 | MHWRender::kOpenGLCoreProfile );
}
bool
narrowPolyRenderOverride::startOperationIterator()
{
mCurrentOperation = 0;
return true;
}
narrowPolyRenderOverride::renderOperation()
{
if (mCurrentOperation >= 0 && mCurrentOperation < kNumberOfOps)
{
while(!mRenderOperations[mCurrentOperation])
{
mCurrentOperation++;
if (mCurrentOperation >= kNumberOfOps) return nullptr;
}
if (mRenderOperations[mCurrentOperation])
{
return mRenderOperations[mCurrentOperation].get();
}
}
return nullptr;
}
bool
narrowPolyRenderOverride::nextRenderOperation()
{
mCurrentOperation++;
if (mCurrentOperation < kNumberOfOps)
{
return true;
}
return false;
}
narrowPolyRenderOverride::setup(
const MString & destination )
{
if (mRenderOperations[kPresentOp] == NULL)
{
mRenderOperations[kSceneRenderOp] = MRenderOperationPtr(new MSceneRender(kSceneRenderOpName));
mRenderOperations[kUserOpNumber] = MRenderOperationPtr(new narrowPolyRenderUserOperation(kUserOpName));
mRenderOperations[kPresentOp] = MRenderOperationPtr(new MPresentTarget(kPresentOpName));
}
mCurrentOperation = -1;
}
narrowPolyRenderOverride::cleanup()
{
mCurrentOperation = -1;
}
void narrowPolyRenderUserOperation::addUIDrawables(
{
if (status != MS::kSuccess) return;
if (status != MS::kSuccess) return;
for (; !itMeshPolygon.isDone(); itMeshPolygon.next())
{
if (status != MS::kSuccess) return;
if (length == 3)
{
status = itMeshPolygon.getVertices(polyIndices);
if (status != MS::kSuccess)return;
for (int i = 0; i < length; i++)
{
MPoint p1 = points[(i + 1) % length];
MPoint p2 = points[(i + 2) % length];
double angle = v1.angle(v2) * 180 / 3.14159;
if ((fabs(angle - kTolerance) < .0001) || angle < kTolerance)
{
break;
}
}
}
}
{
drawManager.
beginDrawable(MUIDrawManager::Selectability::kNonSelectable);
drawManager.
mesh(MUIDrawManager::Primitive::kTriangles, positions);
}
}