#ifndef VORONOI_H
#define VORONOI_H
#include "voronoi/site.h"
#include "voronoi/info.h"
#include "voronoi/edges.h"
#include "voronoi/hedges.h"
namespace Voronoi {
struct VoronoiServer : Server {
double margin;
double incr;
double pmargin;
int iterations;
bool useIter;
bool doAll;
Bounds bounds;
const int N;
VoronoiServer(Layout *client, Layout *current) :
Server(client,current),margin(0.05),incr(0.025),pmargin(5.0/72),iterations(-1),useIter(false),
N(400), infos(N),sites(N),edges(sites,infos,bounds,N),hedges(sites,N) {}
void Process(ChangeQueue &changeQ);
private:
Infos infos;
Sites sites;
Edges edges;
Halfedges hedges;
void chkBoundBox();
void makeInfo();
void sortSites(std::vector<Site*> &sort);
void geomUpdate(std::vector<Site*> &sort);
int countOverlap(int iter);
void increaseBoundBox();
bool isInterior (Info* ip);
void newpos(Info* ip);
void addCorners();
void newPos();
bool vAdjust();
void updateLayout(ChangeQueue &Q);
void voronoi(const std::vector<Site*> &order);
};
}
#endif // VORONOI_H