Subversion Repositories wimsdev

Rev

Blame | Last modification | View Log | RSS feed

  1. #ifndef __VDEFS_H
  2. #define __VDEFS_H
  3.  
  4. #ifndef NULL
  5. #define NULL 0
  6. #endif
  7.  
  8. #define DELETED -2
  9.  
  10. typedef struct tagFreenode
  11.     {
  12.     struct tagFreenode * nextfree;
  13.     } Freenode ;
  14.  
  15.  
  16. typedef struct tagFreelist
  17.     {
  18.     Freenode * head;
  19.     int nodesize;
  20.     } Freelist ;
  21.  
  22. typedef struct tagPoint
  23.     {
  24.     float x ;
  25.     float y ;
  26.     } Point ;
  27.  
  28. /* structure used both for sites and for vertices */
  29.  
  30. typedef struct tagSite
  31.     {
  32.     Point coord ;
  33.     int sitenbr ;
  34.     int refcnt ;
  35.     } Site ;
  36.  
  37.  
  38. typedef struct tagEdge
  39.     {
  40.     float a, b, c ;
  41.     Site * ep[2] ;
  42.     Site * reg[2] ;
  43.     int edgenbr ;
  44.     } Edge ;
  45.  
  46. #define le 0
  47. #define re 1
  48.  
  49. typedef struct tagHalfedge
  50.     {
  51.     struct tagHalfedge * ELleft ;
  52.     struct tagHalfedge * ELright ;
  53.     Edge * ELedge ;
  54.     int ELrefcnt ;
  55.     char ELpm ;
  56.     Site * vertex ;
  57.     float ystar ;
  58.     struct tagHalfedge * PQnext ;
  59.     } Halfedge ;
  60.  
  61. /* edgelist.c */
  62. void ELinitialize(void) ;
  63. Halfedge * HEcreate(Edge *, int) ;
  64. void ELinsert(Halfedge *, Halfedge *) ;
  65. Halfedge * ELgethash(int) ;
  66. Halfedge * ELleftbnd(Point *) ;
  67. void ELdelete(Halfedge *) ;
  68. Halfedge * ELright(Halfedge *) ;
  69. Halfedge * ELleft(Halfedge *) ;
  70. Site * leftreg(Halfedge *) ;
  71. Site * rightreg(Halfedge *) ;
  72. extern int ELhashsize ;
  73. extern Site * bottomsite ;
  74. extern Freelist hfl ;
  75. extern Halfedge * ELleftend, * ELrightend, **ELhash ;
  76.  
  77. /* geometry.c */
  78. void geominit(void) ;
  79. Edge * bisect(Site *, Site *) ;
  80. Site * intersect(Halfedge *, Halfedge *) ;
  81. int right_of(Halfedge *, Point *) ;
  82. void endpoint(Edge *, int, Site *) ;
  83. float dist(Site *, Site *) ;
  84. void makevertex(Site *) ;
  85. void deref(Site *) ;
  86. void ref(Site *) ;
  87. extern float deltax, deltay ;
  88. extern int nsites, nedges, sqrt_nsites, nvertices ;
  89. extern Freelist sfl, efl ;
  90.  
  91. /* heap.c */
  92. void PQinsert(Halfedge *, Site *, float) ;
  93. void PQdelete(Halfedge *) ;
  94. int PQbucket(Halfedge *) ;
  95. int PQempty(void) ;
  96. Point PQ_min(void) ;
  97. Halfedge * PQextractmin(void) ;
  98. void PQinitialize(void) ;
  99. extern int PQmin, PQcount, PQhashsize ;
  100. extern Halfedge * PQhash ;
  101.  
  102. /* main.c */
  103. extern int sorted, triangulate, plot, debug, nsites, siteidx ;
  104. extern float xmin, xmax, ymin, ymax ;
  105. extern Site * sites ;
  106. extern Freelist sfl ;
  107.  
  108. /* getopt.c */
  109. extern int getopt(int, char *const *, const char *);
  110.  
  111. /* memory.c */
  112. void freeinit(Freelist *, int) ;
  113. char *getfree(Freelist *) ;
  114. void makefree(Freenode *, Freelist *) ;
  115. char *myalloc(unsigned) ;
  116.  
  117. /* output.c */
  118. void openpl(void) ;
  119. void line(float, float, float, float) ;
  120. void circle(float, float, float) ;
  121. void range(float, float, float, float) ;
  122. void out_bisector(Edge *) ;
  123. void out_ep(Edge *) ;
  124. void out_vertex(Site *) ;
  125. void out_site(Site *) ;
  126. void out_triple(Site *, Site *, Site *) ;
  127. void plotinit(void) ;
  128. void clip_line(Edge *) ;
  129.  
  130. /* voronoi.c */
  131. void voronoi(Site *(*)()) ;
  132.  
  133. #endif  
  134.  
  135.  
  136.