#include <string.h>
#include <maya/MIOStream.h>
#include <math.h>
#include <maya/MPxGeometryFilter.h>
#include <maya/MItGeometry.h>
#include <maya/MTypeId.h> 
#include <maya/MPlug.h>
#include <maya/MDataBlock.h>
#include <maya/MDataHandle.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MFnPlugin.h>
#include <maya/MFnDependencyNode.h>
#include <maya/MPoint.h>
#include <maya/MMatrix.h>
#define McheckErr(stat,msg)     \
    if ( MS::kSuccess != stat ) {   \
        cerr << msg;                \
        return MS::kFailure;        \
    }
{
public:
                        yTwist();
    virtual             ~yTwist();
    static  void*       creator();
    
    
                               unsigned int     multiIndex);
public:
    
    
    
private:
};
yTwist::yTwist() 
{ 
}
yTwist::~yTwist()
{}
void* yTwist::creator()
{
    return new yTwist();
}
{
    
    
    addAttribute( angle); 
    
    
    attributeAffects( yTwist::angle, yTwist::outputGeom );
}
                unsigned int )
{
    
    
    
    McheckErr(status, "Error getting angle data handle\n");
    double magnitude = angleData.
asDouble();
 
    
    
    McheckErr(status, "Error getting envelope data handle\n");  
    
    
        
        
        
        double ff = magnitude*pt.
y*env;
 
        if (ff != 0.0) {
            double cct= cos(ff);
            double cst= sin(ff);
            double tt= pt.
x*cct-pt.
z*cst;
 
            pt.
z= pt.
x*cst + pt.
z*cct;
        }
    }
    return status;
}
{
    MFnPlugin plugin( obj, PLUGIN_COMPANY, 
"3.0", 
"Any");
 
    result = plugin.registerNode( "yTwist", yTwist::id, yTwist::creator, 
    return result;
}
{
    result = plugin.deregisterNode( yTwist::id );
    return result;
}