- Main Page
- Related Pages
- Modules
- Classes
- Examples

# apiSimpleShape.cpp

    //-
    // ==========================================================================
    // Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
    //
    // Use of this software is subject to the terms of the Autodesk
    // license agreement provided at the time of installation or download,
    // or which otherwise accompanies this software in either electronic
    // or hard copy form.
    // ==========================================================================
    //+

    //
    // apiSimpleShape.cpp
    //

    #include <math.h>
    #include <maya/MIOStream.h>

    #include <maya/MFnPlugin.h>

    #include <apiSimpleShape.h>
    #include <apiSimpleShapeUI.h>
    #include <apiSimpleShapeIterator.h>

    //
    // Shape implementation
    //

    MTypeId apiSimpleShape::id( 0x8009a );

    apiSimpleShape::apiSimpleShape() {}

    apiSimpleShape::~apiSimpleShape() {}

    void* apiSimpleShape::creator()
    //
    // Description
    //
    //    Called internally to create a new instance of the users MPx node.
    //
    {
        return new apiSimpleShape();
    }

    MStatus apiSimpleShape::initialize()
    //
    // Description
    //
    //    Attribute (static) initialization.
    //    See api_macros.h.
    //
    {
        return MS::kSuccess;
    }

    MPxGeometryIterator* apiSimpleShape::geometryIteratorSetup(MObjectArray& componentList,
                                                        MObject& components,
                                                        bool forReadOnly )
    //
    // Description
    //
    //    Creates a geometry iterator compatible with his shape.
    //
    // Arguments
    //
    //    componentList - list of components to be iterated
    //    components    - component to be iterator
    //    forReadOnly   -
    //
    // Returns
    //
    //    An iterator for the components
    //
    {
        apiSimpleShapeIterator * result = NULL;
        if ( components.isNull() )
        {
            result = new apiSimpleShapeIterator( getControlPoints(), componentList );
        }
        else
        {
            result = new apiSimpleShapeIterator( getControlPoints(), components );
        }
        return result;
    }

    bool apiSimpleShape::acceptsGeometryIterator( bool writeable )
    //
    // Description
    //
    //    Specifies that this shape can provide an iterator for getting/setting
    //    control point values.
    //
    // Arguments
    //
    //    writable - maya asks for an iterator that can set points if this is true
    //
    {
        return true;
    }

    bool apiSimpleShape::acceptsGeometryIterator( MObject&, bool writeable, bool forReadOnly )
    //
    // Description
    //
    //    Specifies that this shape can provide an iterator for getting/setting
    //    control point values.
    //
    // Arguments
    //
    //    writable   - maya asks for an iterator that can set points if this is true
    //    forReadOnly - maya asking for an iterator for querying only
    //
    {
        return true;
    }

    //
    // Node registry
    //
    // Registers/Deregisters apiSimpleShape user defined shape.
    //

    MStatus initializePlugin( MObject obj )
    {
        MFnPlugin plugin( obj, PLUGIN_COMPANY, "5.0", "Any");
        MStatus stat = plugin.registerShape( "apiSimpleShape", apiSimpleShape::id,
                                       &apiSimpleShape::creator,
                                       &apiSimpleShape::initialize,
                                       &apiSimpleShapeUI::creator  );
        if ( ! stat ) {
            cerr << "Failed to register shape\n";
        }

        return stat;
    }

    MStatus uninitializePlugin( MObject obj)
    {
        MFnPlugin plugin( obj );
        MStatus stat;

        stat = plugin.deregisterNode( apiSimpleShape::id );
        if ( ! stat ) {
            cerr << "Failed to deregister shape : apiSimpleShape \n";
        }

        return stat;
    }