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

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

    //
    // meshRemapCmd.h
    //
    // Description:
    //      Transfer the vertex/edge/face information from one mesh onto another.
    //      The meshes are traversed based on three user supplied CVs, for each
    //      mesh.
    //
    //      The CV/edge/face information is mapped based on the traversal
    //      order within each mesh.
    //
    // Usage:
    //              meshRemap srcMesh.vtx[5] srcMesh.vtx[23] srcMesh.vtx[9] dstMesh.vtx[13] dstMesh.vtx[16] dstMesh.vtx[17]
    //
    //      The vertices for each mesh must all be from a common face, be
    //      adjacent, and be in order, clockwise or counter-clockwise, around
    //      that face. For example, if the face has five vertices A, B, C, D
    //      and E, in clockwise order, then you could specify ABC, BCD, DEA,
    //      AED, DCB, etc. But ABD would be invalid because B and D are not
    //      adjacent, and BCA would be invalid because they are not in order.
    //
    // See Also:
    //      meshRemapTool.cpp : this context allows you to interactively pick
    //      vertices and invoke this command
    //

    #ifndef _MESH_REMAP_CMD_H_
    #define _MESH_REMAP_CMD_H_

    #include <maya/MPxCommand.h>
    #include <maya/MDagPath.h>
    #include <maya/MSelectionList.h>
    #include <maya/MIntArray.h>
    #include <maya/MFloatPointArray.h>
    #include <maya/MStringArray.h>
    #include <maya/MFnMesh.h>

    class MArgList;
    class MFloatArray;
    class MColorArray;

    // MAIN CLASS DECLARATION FOR THE MEL COMMAND:
    class meshRemapCommand : public MPxCommand
    {
        private:
            int                 fFaceIdxSrc;
            int                 fFaceIdxDst;

            MIntArray           fFaceVtxSrc;
            MIntArray           fFaceVtxDst;

            MDagPath            fDagPathSrc;
            MDagPath            fDagPathDst;

            // For undo
            MFloatPointArray        fVertices;
            MIntArray           fPolygonCounts;
            MIntArray           fPolygonConnects;
            // For Colors undo
            MStringArray                    fColorSetNames;
            MColorArray                    *fColorArrays;
            MFnMesh::MColorRepresentation  *fRepArray;
            bool                           *fClampedArray;
            // For UVs undo
            MStringArray                    fUVSetNames;
            MFloatArray                    *fUArrays;
            MFloatArray                    *fVArrays;
            MIntArray                      *fUVCountsArrays;
            MIntArray                      *fUVIdsArrays;

        MStatus parseArgs(const MArgList&);

       public:
          meshRemapCommand();
          virtual ~meshRemapCommand();
          static void* creator();

          MStatus doIt(const MArgList&);
          MStatus redoIt();

          bool    isUndoable() const { return true; }
          MStatus undoIt();

          void    reset();
    };

    #endif