#include "line.h" #include "boundary.h" void line_init(linetype *z) { z->num_lines=0; z->line=NULL; } void line_addline(linetype *z, marklistptr list) { int n=z->num_lines; marklistptr step,end; z->line=(marklistptr*)realloc(z->line,sizeof(marklistptr)*(n+1)); z->line[n]=NULL; for(step=list;step; step=step->next){ if(z->line[n]==NULL){ end=marklist_addcopy(&z->line[n],step->data); } else { end=marklist_addcopy(&end,step->data); } } z->num_lines++; } void line_addmark(linetype *z, int n, marktype m) { marklist_addcopy(&z->line[n],m); } void line_dump(linetype *z) { int i; fprintf(stderr,"z->num_lines: %d\n",z->num_lines); for(i=0;inum_lines;i++){ fprintf(stderr,"line %d: %d\n",i,marklist_length(z->line[i])); } } void line_free(linetype *z) { int i; for(i=0;inum_lines;i++){ marklist_free(&z->line[i]); } free(z->line); z->line=NULL; z->num_lines=0; } void line_test() { marktype im; marklistptr list=NULL; linetype z; marktype_readnamed("b.pbm",&im); list=extract_all_marks(list,im,1,8); line_init(&z); line_addline(&z,list); line_dump(&z); marklist_prune_under_area(&list,5,200); line_addline(&z,list); line_dump(&z); line_free(&z); fprintf(stderr,"line_test() finished\n"); }