#include <math.h>
#include <maya/MIOStream.h>
#include <maya/MPxNode.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MFnTypedAttribute.h>
#include <maya/MFnStringData.h>
#include <maya/MFnPlugin.h>
class stringFormat :
public MPxNode
{
public:
stringFormat();
~stringFormat() override;
static void *creator();
public:
};
void *stringFormat::creator()
{
return new stringFormat();
}
{
stringData.
create(&stat2), &stat);
0, &stat);
stringData.
create(&stat2), &stat);
return MS::kSuccess;
}
stringFormat::stringFormat() {}
stringFormat::~stringFormat() {}
int findNextMatch(
MString &
string,
int indx,
int ¶m,
char &letter)
{
const char *str = string.asChar();
while (str[indx])
{
if ((str[indx] == '^') &&
(str[indx + 1] >= '0') && (str[indx + 1] <= '9') &&
(str[indx + 2] >= 'a') && (str[indx + 1] <= 'z'))
{
param = str[indx + 1] - '0';
letter = str[indx + 2];
return indx + 1;
}
indx++;
}
return -1;
}
{
if (plug == attrOutput)
{
int indx = 0;
int param;
char letter;
while ((indx = findNextMatch(format, indx, param, letter)) > 0)
{
double val = 0.;
{
{
}
}
bool valid = false;
switch (letter)
{
case 'd':
val = floor(val + .5);
case 'f':
valid = true;
break;
case 't':
{
const char *sign = "";
if (val < 0)
{
sign = "-";
val = -val;
}
int valInt = (int)(val + .5);
int sec = valInt / 24;
int frame = valInt - sec * 24;
int min = sec / 60;
sec -= min * 60;
int hour = min / 60;
min -= hour * 60;
char buffer[90];
if (hour > 0)
sprintf(buffer, "%s%d:%02d:%02d.%02d",
sign, hour, min, sec, frame);
else
sprintf(buffer, "%s%02d:%02d.%02d",
sign, min, sec, frame);
replace = buffer;
}
valid = true;
break;
}
if (valid)
{
}
}
}
else
{
return MS::kUnknownParameter;
}
return MS::kSuccess;
}
{
MFnPlugin plugin(obj, PLUGIN_COMPANY,
"8.0",
"Any");
plugin.registerNode("stringFormat", stringFormat::id,
stringFormat::creator, stringFormat::initialize));
"stringFormatDeleteUI", "", ""));
return status;
}
{
return status;
}