
#include "ANDPoly.h"


ANDPoly::ANDPoly( Poly *a, Poly *b )
{
  Poly();

  this->a = a;
  this->b = b;
}

void ANDPoly::getScanline( Scanline *sl, int y )
{
  Scanline sla, slb;

  sl->clear( );

  a->getScanline( &sla, y );
  b->getScanline( &slb, y );

  float x;

  sla.firstPoint();
  slb.firstPoint();

  float p, pa, pb;
  int w = 0;

  bool oka, okb;

  oka = sla.peekPoint( &pa );
  okb = slb.peekPoint( &pb );

  bool in = false;

  while( oka || okb )
  {
    if( oka && ((!okb) || pa < pb ) )
    {
      sla.nextPoint( &p );
      w ^= 1;
    }
    else
    {
      slb.nextPoint( &p );
      w ^= 2;
    }

    if( (w == 3 && !in) || (w != 3 && in) )
    {
      sl->addPoint( p );
      in = !in;
    }

    oka = sla.peekPoint( &pa );
    okb = slb.peekPoint( &pb );
  }

}

/*
void ANDPoly::render( Image *im, int col )
{
  Scanline sl;

  for( int i=0; i<im->h; i++ )
  {
    getScanline( &sl, i );
    im->drawScanline( i, &sl, col );
  }
}
*/

