apiMeshCreator.h

//-
// ==========================================================================
// 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.
// ==========================================================================
//+


#ifndef _apiMeshCreator
#define _apiMeshCreator

//
// apiMeshCreator.h
//
// A DG node that takes a maya mesh as input and outputs apiMeshData.
// If there is no input then the node creates a cube or sphere
// depending on what the shapeType attribute is set to.
//

#include <maya/MPxNode.h>
#include <maya/MTypeId.h>
#include <maya/MPointArray.h>
#include <maya/MIntArray.h>
#include <maya/MVectorArray.h>
#include <maya/MDoubleArray.h> 

class apiMeshGeomUV; 

class apiMeshCreator : public MPxNode
{
public:
    apiMeshCreator();
    virtual ~apiMeshCreator(); 

    //
    // Overrides
    //

    virtual MStatus         compute( const MPlug& plug, MDataBlock& data );

    //
    // Helper methods
    //

    static  void *          creator();
    static  MStatus         initialize();

    MStatus                 computeInputMesh( const MPlug& plug,
                                              MDataBlock& datablock,
                                              MPointArray& vertices,
                                              MIntArray& counts,
                                              MIntArray& connects,
                                              MVectorArray& normals,
                                              apiMeshGeomUV &uvs ); 

    void                    buildCube( double cube_size,
                                       MPointArray& pa,
                                       MIntArray& faceCounts,
                                       MIntArray& faceConnects,
                                       MVectorArray& normals,
                                       apiMeshGeomUV& uvs ); 

    void                    buildSphere( double radius,
                                         int divisions,
                                         MPointArray& pa,
                                         MIntArray& faceCounts,
                                         MIntArray& faceConnects,
                                         MVectorArray& normals, 
                                         apiMeshGeomUV& uvs ); 

public:
    //
    // Attributes
    //
    static  MObject         size;
    static  MObject         shapeType;
    static  MObject         inputMesh;
    static  MObject         outputSurface;
        
public: 
    static  MTypeId     id;
};

#endif /* _apiMeshCreator */