void CL_OutlineTriangulator::next_polygon() { next_contour(); if (impl->current_polygon.contours.empty()) return; impl->polygons.push_back(impl->current_polygon); impl->current_polygon = CL_OutlineTriangulator_Polygon(); }
void startcontour(double *data,int x,int y,double cut, double **cont, int *index,int startdir[2],int *charact,int periodic, int *boundary) { int dirmode,dir[2],endcontour=0; double d0,d3,cutp; *boundary=0; *charact=0; dir[0]=startdir[0]; dir[1]=startdir[1]; if (dir[0]==0) dirmode=vertical; else dirmode=horizontal; set_exclude(x,y,dirmode,1); d0=data[(*ind)(x,y)]; d3=data[(*ind)(x+abs(dir[1]),y+abs(dir[0]))]; cutp=(cut-d0)/(d3-d0); (*cont)[*index*2]=x+abs(dir[1])*cutp; (*cont)[*index*2+1]=y+abs(dir[0])*cutp; (*index)++; if((*index)>=indexmax) { indexmax+=contl; *cont=(double*)realloc(*cont,(indexmax*2+10)*sizeof(double)); if (*cont==NULL) { fprintf(stderr,"Error in realloc in contour() for *cont\n"); exit(1);} if (*index> 4*lattx*latty) { fprintf(stderr, "contour.c: startcontour:" "More contour points than lattice points %d", *index); return; } } for(;0==endcontour;(*index)++){ if((*index)>=indexmax) { indexmax+=contl; *cont=(double*)realloc(*cont,(indexmax*2+10)*sizeof(double)); if (*cont==NULL) { fprintf(stderr,"Error in malloc in contour()" " for *cont\n"); exit(1);} if (*index>4*lattx*latty) return; } endcontour=next_contour(data,cut,&x,&y,dir,&(*cont)[*index*2], &(*cont)[*index*2+1],charact,periodic, boundary); } if((*index)>=indexmax) { indexmax+=contl; *cont=(double*)realloc(*cont,(indexmax*2+10)*sizeof(double)); if (*cont==NULL) { fprintf(stderr,"Error in malloc in contour()" " for *cont\n"); exit(1);} if (*index>4*lattx*latty) return; } }