//
//  Vrml 97 library
//  Copyright (C) 1998 Chris Morley
//  %W% %G%
//  VrmlNodeElevationGrid.h

#ifndef  _VRMLNODEELEVATIONGRID_
#define  _VRMLNODEELEVATIONGRID_

#include "VrmlNodeGeometry.h"

#include "VrmlSFBool.h"
#include "VrmlSFFloat.h"
#include "VrmlSFInt.h"
#include "VrmlSFNode.h"

#include "VrmlMFFloat.h"


class VrmlNodeElevationGrid : public VrmlNodeGeometry {

public:

  // Define the fields of elevationGrid nodes
  static VrmlNodeType *defineType(VrmlNodeType *t = 0);
  virtual VrmlNodeType *nodeType() const;

  VrmlNodeElevationGrid(VrmlScene *);
  virtual ~VrmlNodeElevationGrid();

  virtual VrmlNode *cloneMe() const;
  virtual void cloneChildren(VrmlNamespace *);

  virtual bool isModified() const;
  virtual void clearFlags();

  virtual void addToScene( VrmlScene *s, const char *relUrl );

  virtual void copyRoutes(VrmlNamespace *ns) const;

  virtual ostream& printFields(ostream& os, int indent);

  virtual Viewer::Object insertGeometry(Viewer *);

  virtual void setField(const char *fieldName, const VrmlField &fieldValue);

  virtual VrmlNodeColor *color();

  virtual VrmlNodeElevationGrid* toElevationGrid() const; //LarryD Mar 09/99

  virtual VrmlNode* getNormal();  //LarryD Mar 09/99
  virtual VrmlNode* getTexCoord();  //LarryD Mar 09/99
  virtual bool getCcw(){ return d_ccw.get(); }   //LarryD Mar 09/99
  virtual bool getColorPerVertex(){ return d_colorPerVertex.get(); }  //LarryD Mar 09/99
  virtual float getCreaseAngle(){ return d_creaseAngle.get();}  //LarryD Mar 09/99
  virtual const VrmlMFFloat& getHeight() const;   //LarryD Mar 09/99
  virtual bool getNormalPerVertex(){ return d_normalPerVertex.get();}  //LarryD Mar 09/99
  virtual bool getSolid(){ return d_solid.get();}  //LarryD Mar 09/99
  virtual int getXDimension() { return d_xDimension.get(); }  //LarryD Mar 09/99
  virtual float getXSpacing() { return d_xSpacing.get(); }  //LarryD Mar 09/99
  virtual int getZDimension() { return d_zDimension.get(); }  //LarryD Mar 09/99
  virtual float getZSpacing() { return d_zSpacing.get(); }  //LarryD Mar 09/99

protected:

  VrmlSFNode d_color;
  VrmlSFNode d_normal;
  VrmlSFNode d_texCoord;

  VrmlSFBool d_ccw;
  VrmlSFBool d_colorPerVertex;
  VrmlSFFloat d_creaseAngle;
  VrmlMFFloat d_height;
  VrmlSFBool d_normalPerVertex;
  VrmlSFBool d_solid;
  VrmlSFInt d_xDimension;
  VrmlSFFloat d_xSpacing;
  VrmlSFInt d_zDimension;
  VrmlSFFloat d_zSpacing;

};

#endif // _VRMLNODEELEVATIONGRID_
