#include <string.h>
#include <float.h>
#include <maya/MIOStream.h>
#include <math.h>
#include <maya/MPxGeometryFilter.h>
#include <maya/MItGeometry.h>
#include <maya/MPxLocatorNode.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MFnMatrixAttribute.h>
#include <maya/MFnMatrixData.h>
#include <maya/MFnPlugin.h>
#include <maya/MFnDependencyNode.h>
#include <maya/MTypeId.h>
#include <maya/MPlug.h>
#include <maya/MDataBlock.h>
#include <maya/MDataHandle.h>
#include <maya/MArrayDataHandle.h>
#include <maya/MPoint.h>
#include <maya/MVector.h>
#include <maya/MMatrix.h>
#include <maya/MTimer.h>
#include <maya/MDagModifier.h>
#include <maya/MFnMesh.h>
#include <maya/MFloatPointArray.h>
#include <maya/MFnTypedAttribute.h>
#include <maya/MFnMeshData.h>
#include <maya/MFloatVectorArray.h>
#define MCheckStatus(status,message) \
if( MStatus::kSuccess != status ) { \
cerr << message << "\n"; \
return status; \
}
{
public:
sseDeformer();
~sseDeformer() override;
static void* creator();
public:
private:
};
MTypeId sseDeformer::id( 0x8104E );
sseDeformer::sseDeformer() {}
sseDeformer::~sseDeformer() {}
void* sseDeformer::creator()
{
return new sseDeformer();
}
{
status = addAttribute( sseEnabled );
MCheckStatus(status, "ERROR in addAttribute\n");
status = attributeAffects( sseEnabled, outputGeom );
MCheckStatus(status, "ERROR in attributeAffects\n");
}
{
MObject thisNode = this->thisMObject();
{
printf("Ignoring requested plug\n");
return status;
}
{
MPlug inPlug(thisNode,input);
MCheckStatus(status, "ERROR getting input mesh\n");
{
do
{
MCheckStatus(status, "ERROR getting input mesh element\n");
MCheckStatus(status, "ERROR getting input mesh element index\n");
computeOneOutput( inputIndex, data, hInputElement );
}
}
else
{
MPlug inPlug(thisNode,input);
inPlug.selectAncestorLogicalIndex(plug.
logicalIndex(),input);
MCheckStatus(status, "ERROR getting input mesh\n");
}
return status;
}
{
MObject thisNode = this->thisMObject();
MPlug outPlug(thisNode, outputGeom);
outPlug.selectAncestorLogicalIndex(index, outputGeom);
printf("Incorrect input geometry type\n");
}
printf("Incorrect output mesh type\n");
}
printf("Output surface is NULL\n");
}
MCheckStatus(status, "ERROR setting points\n");
bool sseEnabled = (bool) sseData.
asBool();
if(sseEnabled) {
for(int i=0; i<nPoints; i++) {
float* ptPtr = &pts[i].x;
for(int j=0; j<4; j++) {
ptPtr[j] = env * (cosf(ptPtr[j]) * sinf(ptPtr[j]) * tanf(ptPtr[j]));
}
}
} else {
for(int i=0; i<nPoints; i++) {
for(int j=0; j<3; j++) {
pt[j] = env * (cosf(pt[j]) * sinf(pt[j]) * tanf(pt[j]));
}
}
}
if(sseEnabled) {
printf(
"SSE enabled, runtime %f\n", timer.
elapsedTime());
} else {
printf(
"SSE disabled, runtime %f\n", timer.
elapsedTime());
}
return status;
}
{
MFnPlugin plugin( obj, PLUGIN_COMPANY,
"1.0",
"Any");
result = plugin.registerNode( "sseDeformer", sseDeformer::id, sseDeformer::creator,
return result;
}
{
result = plugin.deregisterNode( sseDeformer::id );
return result;
}