/// This file is part of the X3DToolKit library
/// Copyright (C) 2002-2004  Yannick Le Goc (legoc@imag.fr)

/// http://artis.imag.fr/Members/Yannick.Legoc/X3D/

/// This library is free software; you can redistribute it and/or
/// modify it under the terms of the GNU Lesser General Public
/// License as published by the Free Software Foundation; either
/// version 2.1 of the License, or (at your option) any later version.

/// This library is distributed in the hope that it will be useful,
/// but WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
/// Lesser General Public License for more details.

/// You should have received a copy of the GNU Lesser General Public
/// License along with this library; if not, write to the Free Software
/// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#ifndef X3DTK_X3D_INDEXEDFACESET_H
#define X3DTK_X3D_INDEXEDFACESET_H

#include "X3DTypes.h"
#include "X3D_X3DComposedGeometryNode.h"

namespace X3DTK {
namespace X3D {

/*! \brief Class declared in <b><X3DTK/X3D/scenegraph.h></b>, part of the <a href="../../doc/X3DSpecs/Part01/components/geometry3D.html">
 *  Geometry3D component</a> defining an IndexedFaceSet
 *  (<a href="../../doc/X3DSpecs/Part01/components/geometry3D.html#IndexedFaceSet">
 *  documentation</a>).
 *
 *  \ingroup X3DSceneGraph
 */

class IndexedFaceSet : public X3DComposedGeometryNode
{
public:
  /// Constructor.
  IndexedFaceSet();
  /// Destructor.
  virtual ~IndexedFaceSet();
  
  /// Sets the ColorIndex attribute.
  void setColorIndex(const MFInt32 &colorIndex);
  /// Sets the Convex attribute.
  void setConvex(const SFBool &convex);
  /// Sets the CoordIndex attribute.
  void setCoordIndex(const MFInt32 &coordIndex);
  /// Sets the CreaseAngle attribute.
  void setCreaseAngle(const SFFloat &creaseAngle);
  /// Sets the NormalIndex attribute.
  void setNormalIndex(const MFInt32 &normalIndex);
  /// Sets the TexCoordIndex attribute.
  void setTexCoordIndex(const MFInt32 &texCoordIndex);
    
  /// Gets the ColorIndex attribute.
  inline const MFInt32 &getColorIndex() const {return _colorIndex;};
  /// Gets the Convex attribute.
  inline const SFBool &getConvex() const {return _convex;};  
  /// Gets the CoordIndex attribute.
  inline const MFInt32 &getCoordIndex() const {return _coordIndex;};
  /// Gets the CreaseAngle attribute.
  inline const SFFloat &getCreaseAngle() const {return _creaseAngle;};
  /// Gets the NormalIndex attribute.
  inline const MFInt32 &getNormalIndex() const {return _normalIndex;};
  /// Gets the TexCoordIndex attribute.
  inline const MFInt32 &getTexCoordIndex() const {return _texCoordIndex;};

private:  
  /// Color index attribute.
  MFInt32 _colorIndex;
  /// Convex attribute.
  SFBool _convex;
  /// Coord index attribute.
  MFInt32 _coordIndex;
  /// Crease angle attribute.
  SFFloat _creaseAngle; 
  /// Normal index attribute.
  MFInt32 _normalIndex;
  /// texCoord index attribute.
  MFInt32 _texCoordIndex;
};

}
}

#endif
