// Vorosweep - Copyright (C) 2010-2014 T. Mouton
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to <thibaud.mouton@gmail.com>.

#include "vorosweep.h"

using namespace vorosweep;

void Graph::handle_newgenerator ( Event *ev )
{
  Convex_generator *cg = ev->get_generator();
  Point *apex = cg->get_apex();
  int gid = ev->get_gid();

  // before inserting, we need to ensure that the generator CAN BE inserted
  Bucket *buc = bucketgrid->get_bucket ( gid );
  if ( buc->point_already_covered ( apex->p, get_time() ) )
  {
    dbgprintf ( 1, "--> generator can not be inserted !!\n" );
    return;
  }

  for ( int i = 0; i < cg->face_size()  ; i++ )
  {
    SweepEdge *se = cg->get_sweepedge ( i );
    Event *ne = econtainer->get();
    ne->init ( se, se->get_start()->p, get_time(), Event::NEWEDGESWITCH, gid ); // init event at time 0
    add_priority_event ( ne );
  }
  for ( int i = 0; i < cg->face_size()  ; i++ )
  {
    SweepFacet *sf = cg->get_sweepfacet ( i );
    Event *ne = econtainer->get();
    ne->init ( sf, sf->get_start()->p, get_time(), Event::FACETSWITCH, gid ); // init event at time 0
    add_event ( ne );
  }
  cg->set_active();
}