//
//  Vrml 97 library
//  Copyright (C) 1998 Chris Morley
//
//  %W% %G%
//  VrmlNodeTransform.h

#ifndef  _VRMLNODETRANSFORM_
#define  _VRMLNODETRANSFORM_

#include "VrmlNodeGroup.h"
#include "VrmlSFRotation.h"
#include "VrmlSFVec3f.h"

class VrmlNodeTransform : public VrmlNodeGroup {

public:

  // Define the fields of Transform nodes
  static VrmlNodeType *defineType(VrmlNodeType *t = 0);
  virtual VrmlNodeType *nodeType() const;

  VrmlNodeTransform(VrmlScene *);
  virtual ~VrmlNodeTransform();

  virtual VrmlNode *cloneMe() const;

  virtual ostream& printFields(ostream& os, int indent);

  virtual void render(Viewer *);

  virtual void setField(const char *fieldName, const VrmlField &fieldValue);

  virtual void accumulateTransform(VrmlNode*);
  virtual void inverseTransform(Viewer *);
  virtual void inverseTransform(double [4][4]);

  virtual VrmlNodeTransform* toTransform() const;     //LarryD Feb 24/99
  virtual const VrmlSFVec3f& getCenter() const;  //LarryD Feb 24/99
  virtual const VrmlSFRotation& getRotation() const;  //LarryD Feb 24/99
  virtual const VrmlSFVec3f& getScale() const;  //LarryD Feb 24/99
  virtual const VrmlSFRotation& getScaleOrientation() const;  //LarryD Feb 24/99
  virtual const VrmlSFVec3f& getTranslation() const;  //LarryD Feb 

private:

  VrmlSFVec3f d_center;
  VrmlSFRotation d_rotation;
  VrmlSFVec3f d_scale;
  VrmlSFRotation d_scaleOrientation;
  VrmlSFVec3f d_translation;

  Viewer::Object d_xformObject;
  
};

#endif // _VRMLNODETRANSFORM_

