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

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

    //
    // apiMeshIterator.cpp
    //

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

    apiMeshGeomIterator::apiMeshGeomIterator( void * geom, MObjectArray & comps )
        : MPxGeometryIterator( geom, comps ),
        geometry( (apiMeshGeom*)geom )
    {
        reset();
    }

    apiMeshGeomIterator::apiMeshGeomIterator( void * geom, MObject & comps )
        : MPxGeometryIterator( geom, comps ),
        geometry( (apiMeshGeom*)geom )
    {
        reset();
    }

    /* override */
    void apiMeshGeomIterator::reset()
    //
    // Description
    //
    //
    //   Resets the iterator to the start of the components so that another
    //   pass over them may be made.
    //
    {
        MPxGeometryIterator::reset();
        setCurrentPoint( 0 );
        if ( NULL != geometry ) {
            int maxVertex = geometry->vertices.length();
            setMaxPoints( maxVertex );
        }
    }

    /* override */
    MPoint apiMeshGeomIterator::point() const
    //
    // Description
    //
    //    Returns the point for the current element in the iteration.
    //    This is used by the transform tools for positioning the
    //    manipulator in component mode. It is also used by deformers.
    //
    {
        MPoint pnt;
        if ( NULL != geometry ) {
            pnt = geometry->vertices[ index() ];
        }
        return pnt;
    }

    /* override */
    void apiMeshGeomIterator::setPoint( const MPoint & pnt ) const
    //
    // Description
    //
    //    Set the point for the current element in the iteration.
    //    This is used by deformers.
    //
    {
        if ( NULL != geometry ) {
            geometry->vertices.set( pnt, index() );
        }
    }

    /* override */
    int apiMeshGeomIterator::iteratorCount() const
    {
    //
    // Description
    //
    //    Return the number of vertices in the iteration.
    //    This is used by deformers such as smooth skinning
    //
        return geometry->vertices.length();

    }

    /* override */
    bool apiMeshGeomIterator::hasPoints() const
    //
    // Description
    //
    //    Returns true since the shape data has points.
    //
    {
        return true;
    }