Index: cdt.c =================================================================== --- cdt.c (revision 17774) +++ cdt.c (revision 17775) @@ -257,6 +257,17 @@ init_bbox(cdt, bbox_x1, bbox_y1, bbox_x2, bbox_y2); } +void cdt_free(cdt_t *cdt) +{ + vttriangle_uninit(&cdt->triangles); + vtedge_uninit(&cdt->edges); + VTPOINT_FOREACH(p, &cdt->points) + trianglelist_free(p->adj_triangles); + edgelist_free(p->adj_edges); + VTPOINT_FOREACH_END(); + vtpoint_uninit(&cdt->points); +} + static int is_point_in_triangle(point_t *p, triangle_t *t) { return ORIENT_CCW_CL(t->p[0], t->p[1], p) && ORIENT_CCW_CL(t->p[1], t->p[2], p) && ORIENT_CCW_CL(t->p[2], t->p[0], p); Index: cdt.h =================================================================== --- cdt.h (revision 17774) +++ cdt.h (revision 17775) @@ -28,6 +28,7 @@ void cdt_init(cdt_t *cdt, coord_t bbox_x1, coord_t bbox_y1, coord_t bbox_x2, coord_t bbox_y2); +void cdt_free(cdt_t *cdt); point_t *cdt_insert_point(cdt_t *cdt, coord_t x, coord_t y); void cdt_delete_point(cdt_t *cdt, point_t *p); /* any edge adjecent to this point cannot be constrained */ Index: cdt_test.c =================================================================== --- cdt_test.c (revision 17774) +++ cdt_test.c (revision 17775) @@ -25,8 +25,8 @@ clock_t t; pointlist_node_t *p_violations = NULL; - cdt_init(&cdt, 1000, 1000, 5000, 5000); - //cdt_init(&cdt, 0, 0, 100000, 100000); + //cdt_init(&cdt, 1000, 1000, 5000, 5000); + cdt_init(&cdt, 0, 0, 100000, 100000); /* cdt_insert_point(&cdt, 2500, 3000); @@ -167,6 +167,7 @@ */ /* delete 2 constrained edges */ + /* p1 = cdt_insert_point(&cdt, 2400, 1500); cdt_insert_point(&cdt, 2200, 3500); cdt_insert_point(&cdt, 2200, 2000); @@ -187,8 +188,8 @@ cdt_delete_constrained_edge(&cdt, ed[0]); cdt_delete_constrained_edge(&cdt, ed[1]); cdt_delete_constrained_edge(&cdt, ed[2]); + */ - /* srand(time(NULL)); e_num = 0; for (i = 0; i < 100; i++) { @@ -209,11 +210,12 @@ fprintf(stderr, "deleting edge (%d, %d) - (%d, %d)\n", ed[i]->endp[0]->pos.x, ed[i]->endp[0]->pos.y, ed[i]->endp[1]->pos.x, ed[i]->endp[1]->pos.y); cdt_delete_constrained_edge(&cdt, ed[i]); } - */ + if (cdt_check_delaunay(&cdt, &p_violations, NULL)) fprintf(stderr, "delaunay\n"); else fprintf(stderr, "not delaunay\n"); cdt_dump_animator(&cdt, 0, p_violations, NULL); + cdt_free(&cdt); }