meshOpFty.h

#ifndef _meshOpFty
#define _meshOpFty

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

//
// ***************************************************************************
//
// Overview:
//
//      The meshOp factory implements the actual meshOperation operation. 
//      It takes in three parameters:
//
//          1) A polygonal mesh
//          2) An array of component IDs
//          3) A mesh operation identifier
//
// Please refer to MFnMeshOperations to get more information on the different 
// mesh operations.
//

#include "polyModifierFty.h"

// General Includes
//
#include <maya/MObject.h>
#include <maya/MIntArray.h>
#include <maya/MString.h>

class MFnMesh;

enum MeshOperation
{
    kSubdivideEdges = 0,
    kSubdivideFaces = 1,
    kExtrudeEdges = 2,
    kExtrudeFaces = 3,
    kCollapseEdges = 4,
    kCollapseFaces = 5,
    kDuplicateFaces = 6,
    kExtractFaces = 7,
    kSplitLightning = 8,
    
    // Number of valid operations
    kMeshOperationCount = 9
};

class meshOpFty : public polyModifierFty
{

public:
                meshOpFty();
    virtual     ~meshOpFty();

    // Modifiers
    //
    void        setMesh( MObject& mesh );
    void        setComponentList( MObject& componentList );
    void        setComponentIDs( MIntArray& componentIDs );
    void        setMeshOperation( MeshOperation operationType );

    // Returns the type of component expected by a given mesh operation
    //
    static MFn::Type getExpectedComponentType( MeshOperation operationType );

    // polyModifierFty inherited methods
    //
    MStatus     doIt();

private:
    // Mesh Node - Note: We only make use of this MObject during a single 
    //                   call of the meshOperation plugin. It is never 
    //                   maintained and used between calls to the plugin as 
    //                   the MObject handle could be invalidated between 
    //                   calls to the plugin.
    //
    MObject     fMesh;

    // Selected Components and Operation to execute
    //
    MIntArray       fComponentIDs;
    MeshOperation   fOperationType;
    MObject         fComponentList;

    MStatus doLightningSplit(MFnMesh& meshFn);
};

#endif