/// 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_MATERIAL_H
#define X3DTK_X3D_MATERIAL_H

#include "X3DTypes.h"
#include "X3D_X3DMaterialNode.h"

namespace X3DTK {
namespace X3D {

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

class Material : public X3DMaterialNode
{
public:
  /// Constructor.
  Material();
  /// Destructor.
  virtual ~Material();
  
  /// Sets the AmbientIntensity attribute.
  void setAmbientIntensity(const SFFloat &ambientIntensity);
  /// Sets the DiffuseColo attribute.
  void setDiffuseColor(const SFColor &diffuseColor);
  /// Sets the EmissiveColo attribute.
  void setEmissiveColor(const SFColor &emissiveColor);
  /// Sets the Shininess attribute.
  void setShininess(const SFFloat &shininess);  
  /// Sets the SpecularColor attribute.
  void setSpecularColor(const SFColor &specularColor);  
  /// Sets the Transparenc attribute.
  void setTransparency(const SFFloat &transparency);  
  
  /// Gets the AmbientIntensity attribute.
  inline const SFFloat &getAmbientIntensity() const {return _ambientIntensity;};       
  /// Gets the DiffuseColor attribute.
  inline const SFColor &getDiffuseColor() const {return _diffuseColor;};     
  /// Gets the EmissiveColor attribute.
  inline const SFColor &getEmissiveColor() const {return _emissiveColor; };    
  /// Gets the Shininess attribute.
  inline const SFFloat &getShininess() const {return _shininess;};        
  /// Gets the SpecularColor attribute.
  inline const SFColor &getSpecularColor() const {return _specularColor;};    
  /// Gets the Transparency attribute.
  inline const SFFloat &getTransparency() const {return _transparency;};   

private:    
  /// Ambient intensity.
  SFFloat _ambientIntensity;       
  /// Diffuse color.     
  SFColor _diffuseColor;     
  /// Emissive color.    
  SFColor _emissiveColor;    
  /// Shininess. 
  SFFloat _shininess;        
  /// Specular color. 
  SFColor _specularColor;    
  /// Transparency.
  SFFloat _transparency;     
};

}
}

#endif
