arcLenNode/arcLenNode.cpp
         
    
#include <string.h>
#include <maya/MIOStream.h>
#include <math.h>
#include <maya/MPxNode.h>
#include <maya/MFnNumericAttribute.h>
#include <maya/MFnTypedAttribute.h>
#include <maya/MFnPlugin.h>
#include <maya/MFnNurbsCurve.h>
#include <maya/MString.h> 
#include <maya/MTypeId.h> 
#include <maya/MPlug.h> 
#include <maya/MDataBlock.h>
#include <maya/MDataHandle.h> 
{
public:
                        arcLen();
    virtual             ~arcLen(); 
    static  void*       creator();
public:
};
arcLen::arcLen() {}
arcLen::~arcLen() {}
void* arcLen::creator()
{
    return new arcLen();
}
{
    
 
    if( plug == output )
    {
        if( !status ) {
            status.
perror(
"ERROR getting data");
        } else {
            if( !status ) {
                status.
perror(
"ERROR creating curve function set");
            } else {
                double result = curveFn.length();
                outputHandle.
set( result );
            }
        }
    } else {
    }
}
{
    inputCurve = typedAttr.
create( 
"inputCurve", 
"in", 
                                    &status );
    if( !status ) {
        status.
perror(
"ERROR creating arcLen curve attribute");
        return status;
    }
    output = numericAttr.
create( 
"output", 
"out", 
                                    &status );
    if( !status ) {
        status.
perror(
"ERROR creating arcLen output attribute");
        return status;
    }
    status = addAttribute( inputCurve );
    if( !status ) {
        status.
perror(
"addAttribute(inputCurve)");
        return status;
    }
    status = addAttribute( output );
    if( !status ) {
        status.
perror(
"addAttribute(output)");
        return status;
    }
    status = attributeAffects( inputCurve, output );
    if( !status ) {
        status.
perror(
"attributeAffects(inputCurve, output)");
        return status;
    }
}
{
    MFnPlugin plugin( obj, PLUGIN_COMPANY, 
"3.0", 
"Any");
 
    status = plugin.registerNode( "arcLen", arcLen::id, arcLen::creator,
                                               arcLen::initialize);
    if (!status) {
        status.
perror(
"registerNode");
        return status;
    }
    return status;
}
{
    status = plugin.deregisterNode( arcLen::id );
    if (!status) {
        status.
perror(
"deregisterNode");
        return status;
    }
    return status;
}