polyModifierNode.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 _polyModifierNode
#define _polyModifierNode
// 
// File: polyModifierNode.h
//
// Dependency Graph Node: polyModifierNode
//
// Author: Lonnie Li
//
// Overview:
//
//      The polyModifierNode class is a intermediate class used by polyModifierCmd to
//      modify a polygonal object in Maya. The purpose of the polyModifierNode is to 
//      generalize a node that can receive an input mesh object, modify the mesh and
//      return the modified mesh.
//
//      polyModifierNode is an abstraction which does not need to know about the DG
//      and simply needs to know about the process outlined above. polyModifierCmd
//      manages when and how this node will be used.
//
//      Each polyModifierNode is recommended to contain an instance of a polyModifierFty
//      which will do the actual work, leaving only the node setup and attribute
//      associations to the node. The recommended structure of a polyModifierNode is
//      as follows:
//
//              _____________
//             /        ___  \
//           /         /   \   \
//        O |   Node  | Fty |   | O
//        |  \         \___/   /  |
//        |    \_____________/    |
//      inMesh                 outMesh
//
//
//      The purpose of the node is to simply define the attributes (inputs and outputs) of
//      the node and associate which attribute affects each other. This is basic node setup
//      for a DG node. Using the above structure, the node's inherited "compute()" method
//      (from MPxNode) should retrieve the inputs and pass the appropriate data down to the
//      polyModifierFty for processing.
//
//
// How to use: 
//
//      (1) Create a class derived from polyModifierNode
//      (2) Define and associate inMesh and outMesh attributes (inMesh --> affects --> outMesh)
//      (3) Add any additional attributes specific to the derived node and setup associations
//      (4) Define an instance of your specific polyModifierFty to perform the operation on the node
//      (5) Override the MPxNode::compute() method
//      (6) Inside compute():
//
//          (a) Retrieve input attributes
//          (b) Use inputs to setup your factory to operate on the given mesh
//          (c) Call the factory's inherited doIt() method
//
//

// Proxies
//
#include <maya/MPxNode.h>

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

public:

    // There needs to be a MObject handle declared for each attribute that
    // the node will have.  These handles are needed for getting and setting
    // the values later.
    //
    static  MObject     inMesh;
    static  MObject     outMesh;
};

#endif