#include <maya/MApiNamespace.h>
#include <maya/MArgDatabase.h>
#include <maya/MFnPlugin.h>
#include <maya/MGlobal.h>
#include <maya/MPxCommand.h>
#include <maya/MSyntax.h>
#include <maya/MAnimControl.h>
#include <maya/MTime.h>
#include <maya/MRenderTargetManager.h>
#include <maya/MViewport2Renderer.h>
#include <vector>
#define kCaptureFrame "-cf"
#define kCaptureFrameLong "-captureFrame"
#define kShowFrame "-sf"
#define kShowFrameLong "-showFrame"
class MayaViewportRenderData
{
public:
MayaViewportRenderData(
const MTime& renderTime) : mRenderTime(renderTime)
{
if (theRenderer)
{
if (!targetManager)
return;
MString(
"CapturedTarget") + mRenderTime.value());
}
}
~MayaViewportRenderData()
{
if (theRenderer)
{
if (targetManager)
{
}
}
}
static void doRenderTask(MayaViewportRenderData* renderData)
{
if (!renderData)
return;
if (!theRenderer)
{
return;
}
if (!target)
{
return;
}
theRenderer->
render(
"modelPanel4", &target, 1);
}
const MTime& renderTime()
const
{
return mRenderTime;
}
{
return mTarget;
}
private:
};
std::vector<MayaViewportRenderData*> gRenderData;
{
public:
captureViewRenderCmd()
{
}
virtual ~captureViewRenderCmd()
{
}
static void* creator()
{
return new captureViewRenderCmd;
}
{
syntax.
addFlag(kCaptureFrame, kCaptureFrameLong,
}
};
{
if (!status)
return status;
if (argData.isFlagSet(kCaptureFrame))
{
for (unsigned int i = 0; i < gRenderData.size(); i++)
{
delete gRenderData[i];
}
argData.getFlagArgument(kCaptureFrame, 0, startTime);
argData.getFlagArgument(kCaptureFrame, 1, endTime);
for (
MTime currentTime = startTime; currentTime <= endTime;
currentTime++)
{
MayaViewportRenderData* newRenderTask =
new MayaViewportRenderData(currentTime);
gRenderData.push_back(newRenderTask);
MayaViewportRenderData::doRenderTask(newRenderTask);
}
}
else if (argData.isFlagSet(kShowFrame))
{
argData.getFlagArgument(kShowFrame, 0, time);
unsigned int frameToShow = gRenderData.size();
for (unsigned int i = 0; i < gRenderData.size(); i++)
{
if (time == gRenderData[i]->renderTime())
{
frameToShow = i;
break;
}
}
if (frameToShow == gRenderData.size())
{
return MS::kFailure;
}
MRenderer::theRenderer()->copyTargetToScreen(
gRenderData[frameToShow]->renderTarget());
}
return MS::kSuccess;
}
{
MFnPlugin plugin(_obj, PLUGIN_COMPANY,
"1.0");
MStatus stat = plugin.registerCommand(
"captureViewRender",
captureViewRenderCmd::creator,
captureViewRenderCmd::newSyntax);
if (!stat)
stat.
perror(
"registerCommand");
return stat;
}
{
MStatus stat = plugin.deregisterCommand(
"captureViewRender");
if (!stat)
stat.
perror(
"deregisterCommand");
for (unsigned int i = 0; i < gRenderData.size(); i++)
{
delete gRenderData[i];
}
gRenderData.clear();
return stat;
}