//NOTE: This is an intreface to a function for the vector creation.


#include "GEOM_Function.hxx"

#define PLN_ARG_SIZE 1

#define PLN_ARG_PNT1 2
#define PLN_ARG_PNT2 3
#define PLN_ARG_PNT3 4

#define PLN_ARG_VEC 5

#define PLN_ARG_REF 6

class GEOMImpl_IPlane
{
 public:

  GEOMImpl_IPlane(Handle(GEOM_Function) theFunction): _func(theFunction) {}

  void SetSize(double theSize) { _func->SetReal(PLN_ARG_SIZE, theSize); }

  double GetSize() { return _func->GetReal(PLN_ARG_SIZE); }

  void SetPoint (Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_PNT1, theRef); }
  void SetVector(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_VEC , theRef); }

  void SetFace  (Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_REF , theRef); }

  void SetPoint1(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_PNT1, theRef); }
  void SetPoint2(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_PNT2, theRef); }
  void SetPoint3(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_PNT3, theRef); }

  Handle(GEOM_Function) GetPoint () { return _func->GetReference(PLN_ARG_PNT1); }
  Handle(GEOM_Function) GetVector() { return _func->GetReference(PLN_ARG_VEC ); }

  Handle(GEOM_Function) GetFace  () { return _func->GetReference(PLN_ARG_REF ); }

  Handle(GEOM_Function) GetPoint1() { return _func->GetReference(PLN_ARG_PNT1); }
  Handle(GEOM_Function) GetPoint2() { return _func->GetReference(PLN_ARG_PNT2); }
  Handle(GEOM_Function) GetPoint3() { return _func->GetReference(PLN_ARG_PNT3); }

 private:

  Handle(GEOM_Function) _func;
};
