Back to index

wims  3.65+svn20090927
vdefs.h
Go to the documentation of this file.
00001 #ifndef __VDEFS_H
00002 #define __VDEFS_H
00003 
00004 #ifndef NULL
00005 #define NULL 0
00006 #endif
00007 
00008 #define DELETED -2
00009 
00010 typedef struct tagFreenode
00011     {
00012     struct tagFreenode * nextfree;
00013     } Freenode ;
00014 
00015 
00016 typedef struct tagFreelist
00017     {
00018     Freenode * head;
00019     int nodesize;
00020     } Freelist ;
00021 
00022 typedef struct tagPoint
00023     {
00024     float x ;
00025     float y ;
00026     } Point ;
00027 
00028 /* structure used both for sites and for vertices */
00029 
00030 typedef struct tagSite
00031     {
00032     Point coord ;
00033     int sitenbr ;
00034     int refcnt ;
00035     } Site ;
00036 
00037 
00038 typedef struct tagEdge
00039     {
00040     float a, b, c ;
00041     Site * ep[2] ;
00042     Site * reg[2] ;
00043     int edgenbr ;
00044     } Edge ;
00045 
00046 #define le 0
00047 #define re 1
00048 
00049 typedef struct tagHalfedge
00050     {
00051     struct tagHalfedge * ELleft ;
00052     struct tagHalfedge * ELright ;
00053     Edge * ELedge ;
00054     int ELrefcnt ;
00055     char ELpm ;
00056     Site * vertex ;
00057     float ystar ;
00058     struct tagHalfedge * PQnext ;
00059     } Halfedge ;
00060 
00061 /* edgelist.c */
00062 void ELinitialize(void) ;
00063 Halfedge * HEcreate(Edge *, int) ;
00064 void ELinsert(Halfedge *, Halfedge *) ;
00065 Halfedge * ELgethash(int) ;
00066 Halfedge * ELleftbnd(Point *) ;
00067 void ELdelete(Halfedge *) ;
00068 Halfedge * ELright(Halfedge *) ;
00069 Halfedge * ELleft(Halfedge *) ;
00070 Site * leftreg(Halfedge *) ;
00071 Site * rightreg(Halfedge *) ;
00072 extern int ELhashsize ;
00073 extern Site * bottomsite ;
00074 extern Freelist hfl ;
00075 extern Halfedge * ELleftend, * ELrightend, **ELhash ;
00076 
00077 /* geometry.c */
00078 void geominit(void) ;
00079 Edge * bisect(Site *, Site *) ;
00080 Site * intersect(Halfedge *, Halfedge *) ;
00081 int right_of(Halfedge *, Point *) ;
00082 void endpoint(Edge *, int, Site *) ;
00083 float dist(Site *, Site *) ;
00084 void makevertex(Site *) ;
00085 void deref(Site *) ;
00086 void ref(Site *) ;
00087 extern float deltax, deltay ;
00088 extern int nsites, nedges, sqrt_nsites, nvertices ;
00089 extern Freelist sfl, efl ;
00090 
00091 /* heap.c */
00092 void PQinsert(Halfedge *, Site *, float) ;
00093 void PQdelete(Halfedge *) ;
00094 int PQbucket(Halfedge *) ;
00095 int PQempty(void) ;
00096 Point PQ_min(void) ;
00097 Halfedge * PQextractmin(void) ;
00098 void PQinitialize(void) ;
00099 extern int PQmin, PQcount, PQhashsize ;
00100 extern Halfedge * PQhash ;
00101 
00102 /* main.c */
00103 extern int sorted, triangulate, plot, debug, nsites, siteidx ;
00104 extern float xmin, xmax, ymin, ymax ;
00105 extern Site * sites ;
00106 extern Freelist sfl ;
00107 
00108 /* getopt.c */
00109 extern int getopt(int, char *const *, const char *);
00110 
00111 /* memory.c */
00112 void freeinit(Freelist *, int) ;
00113 char *getfree(Freelist *) ;
00114 void makefree(Freenode *, Freelist *) ;
00115 char *myalloc(unsigned) ;
00116 
00117 /* output.c */
00118 void openpl(void) ;
00119 void line(float, float, float, float) ;
00120 void circle(float, float, float) ;
00121 void range(float, float, float, float) ;
00122 void out_bisector(Edge *) ;
00123 void out_ep(Edge *) ;
00124 void out_vertex(Site *) ;
00125 void out_site(Site *) ;
00126 void out_triple(Site *, Site *, Site *) ;
00127 void plotinit(void) ;
00128 void clip_line(Edge *) ;
00129 
00130 /* voronoi.c */
00131 void voronoi(Site *(*)()) ;
00132 
00133 #endif  
00134 
00135