#include <zprmouse.h>

point2<double> const zprmouse::mouseratio(point2<uint> const & p) const
{
  assert(zz.width!=0);
  assert(zz.height!=0);

  point2<double> r(p.x,p.y);
  r.x /= (double)zz.width;
  r.y /= (double)zz.height;

  assert(r.x <= 1.0);
  assert(r.y <= 1.0);

  return r;
}

point2<double> const zprmouse::mouseratio() const
{
  return mouseratio(point2<uint>(zz.mouseX,zz.mouseY));
}

point3<double> const zprmouse::world(point2<uint> const & p) const
{
  point3<GLdouble> p2;
  zz.readMouse(&p2.x,&p2.y,&p2.z,p.x,p.y);

  return point3<double>(p2.x,p2.y,p2.z);
}

point3<double> const zprmouse::world() const
{
  return point3<double>(zz.mouseXworld,zz.mouseYworld,zz.mouseZworld);
}

/*
point2<uint> const zprmouse::mouseratioInv
(
  point2<double> const & p
) const;
{
  assert(p.x<=1.0);
  assert(p.y<=1.0);
  return point2<uint>(p.x*z.width,p.y*z.height);
}
*/

point3<double> const zprmouse::world
(
  point2<double> const & p
) const
{
  return world( mouseratioInv(p) );
}


