#include <planepointsurface.h>
#include <point.h>
#include <zero.h>

void planepointsurface::operator()
(
  bool & accept,
  double & x,
  double & y,
  double & z,
  doublec u,
  doublec v
) 
{
  ++state;
  state %=3;

  doublec u2 = (uoffset + u)*uscale;
  doublec v2 = (voffset + v)*vscale;

  point3<double> & nml(pln.nml);

  accept=false;
   
  switch (state)
  {
    case 0:
      if (nml.z*nml.z<zero<double>::val)
        return;

      x = u2;
      y = v2;
      z = (pln.d0-u2*nml.x-v2*nml.y)/nml.z;
      accept=true;
      break;

    case 1:
      if (nml.x*nml.x<zero<double>::val)
        return;

      y = u2;
      z = v2;
      x = (pln.d0-u2*nml.y-v2*nml.z)/nml.x;
      accept=true;
      break;

    case 2:
      if (nml.y*nml.y<zero<double>::val)
        return;

      x = u2;
      z = v2;
      y = (pln.d0-u2*nml.x-v2*nml.z)/nml.y;
      accept=true;
      break;
  }
}



