- if ( node != NULL && (ii+1==im->xsize || isnan(im->gdes[i].p_data[ii]) )){
- /* GF_AREA STACK type*/
-/*
- if (im->gdes[i].gf == GF_STACK ) {
-*/
- if ( (im->gdes[i].gf == GF_STACK)
- || (im->gdes[i].stack) ) {
- int iii;
- for (iii=ii-1;iii>area_start;iii--){
- gfx_add_point(node,iii+im->xorigin,ytr(im,lastgdes->p_data[iii]));
- }
- } else {
- gfx_add_point(node,ii+im->xorigin,ytr(im,areazero));
- };
- node=NULL;
- };
- }
+
+ if ( im->slopemode == 0 && ii==0){
+ continue;
+ }
+ if ( isnan(im->gdes[i].p_data[ii]) ) {
+ ybase0 = DNAN;
+ continue;
+ }
+ ytop = ytr(im,im->gdes[i].p_data[ii]);
+ if ( lastgdes && im->gdes[i].stack ) {
+ ybase = ytr(im,lastgdes->p_data[ii]);
+ } else {
+ ybase = ytr(im,areazero);
+ }
+ if ( ybase == ytop ){
+ ybase0 = DNAN;
+ continue;
+ }
+ /* every area has to be wound clock-wise,
+ so we have to make sur base remains base */
+ if (ybase > ytop){
+ double extra = ytop;
+ ytop = ybase;
+ ybase = extra;
+ }
+ if ( im->slopemode == 0){
+ ybase0 = ybase;
+ ytop0 = ytop;
+ }
+ if (!isnan(ybase0)){
+ if ( im->slopemode == 0 ){
+ backY[++idxI] = ybase0-0.2;
+ backX[idxI] = ii+im->xorigin-1;
+ foreY[idxI] = ytop0+0.2;
+ foreX[idxI] = ii+im->xorigin-1;
+ }
+ backY[++idxI] = ybase-0.2;
+ backX[idxI] = ii+im->xorigin;
+ foreY[idxI] = ytop+0.2;
+ foreX[idxI] = ii+im->xorigin;
+ }
+
+ ybase0=ybase;
+ ytop0=ytop;
+ }
+ /* close up any remaining area */
+ free(foreY);
+ free(foreX);
+ free(backY);
+ free(backX);