|
|
1.1 ! root 1: /* ! 2: ...read triangle-format movie file... ! 3: nv ! 4: vx(i), vy(i) i=1,nv ! 5: nt ! 6: itri(1..3,it) it=1,nt ! 7: time, fmin, fmax ! 8: fk(i) i=1,nv in compressed format ! 9: ! 10: if nv=0 or nt=0, use same values as for previous frame ! 11: ! 12: WARNING. If vx,vy bounding box changes, so will grid. ! 13: */ ! 14: ! 15: #include <stdio.h> ! 16: #include "../view2d.h" ! 17: #define INF 1e25 ! 18: char *progname; ! 19: ! 20: int mx, my; /* output grid */ ! 21: float *tr, *f; ! 22: int nv, nt; ! 23: float *vx, *vy; ! 24: float *fk; ! 25: int *itri; ! 26: float xmin, xmax, ymin, ymax; ! 27: int verbose; ! 28: ! 29: main(argc,argv) ! 30: int argc; ! 31: char **argv; ! 32: { ! 33: int i, ifr; ! 34: char *Malloc(); ! 35: ! 36: progname = argv[0]; ! 37: mx = 5; my = 5; ! 38: verbose = 0; ! 39: for(argc--, argv++; *argv; argv++){ ! 40: if(**argv == '-' ){ ! 41: switch(argv[0][1]) { ! 42: case 'n': ! 43: i = sscanf(&argv[0][2], "%d,%d", &mx, &my); ! 44: if(i==1) my = mx; ! 45: else if(i!=2) error("options: -nmx,my"); ! 46: break; ! 47: case 'v': ! 48: verbose++; ! 49: break; ! 50: } ! 51: } ! 52: } ! 53: ! 54: i = mx*my*sizeof(float); ! 55: tr = (float *)Malloc(i); ! 56: f = (float *)Malloc(i); ! 57: nv = 0; ! 58: nt = 0; ! 59: while(fr()){ ! 60: if(verbose)fprintf(stderr,"frame %d done\n",ifr++); ! 61: } ! 62: ! 63: exit(0); ! 64: } ! 65: ! 66: fr() ! 67: { ! 68: int new_nv, new_nt; ! 69: int i, j; ! 70: float time, fmin, fmax, floor; ! 71: char *Malloc(); ! 72: ! 73: i = scanf("%d",&new_nv); ! 74: if( i == EOF ) return(0); ! 75: if(verbose)fprintf(stderr,"nv=%d\n",new_nv); ! 76: if( nv==0 ){ ! 77: if(new_nv==0) error("nv must be nonzero for first frame"); ! 78: }else{ ! 79: if(new_nv!=0){ ! 80: free((char *)fk); ! 81: free((char *)vx); ! 82: free((char *)vy); ! 83: } ! 84: } ! 85: if((nv==0)||(new_nv!=0)){ ! 86: nv = new_nv; ! 87: i = nv*sizeof(float); ! 88: fk = (float *)Malloc(i); ! 89: vx = (float *)Malloc(i); ! 90: vy = (float *)Malloc(i); ! 91: xmin = INF; xmax = -INF; ! 92: ymin = INF; ymax = -INF; ! 93: for(j=0; j<nv; j++){ ! 94: i = scanf("%e %e",vx+j,vy+j); ! 95: if( i == EOF ) error("unexpected EOF"); ! 96: if( i!=2 ) error("bad format"); ! 97: if(vx[j]<xmin) xmin=vx[j]; ! 98: if(vx[j]>xmax) xmax=vx[j]; ! 99: if(vy[j]<ymin) ymin=vy[j]; ! 100: if(vy[j]>ymax) ymax=vy[j]; ! 101: } ! 102: } ! 103: ! 104: i = scanf("%d",&new_nt); ! 105: if( i == EOF ) error("unexpected EOF"); ! 106: if(verbose)fprintf(stderr,"nt=%d\n",new_nt); ! 107: if( nt==0 ){ ! 108: if(new_nt==0) error("automatic triangulation not implemented yet"); ! 109: }else{ ! 110: if(nt!=0){ ! 111: free((char *)itri); ! 112: } ! 113: } ! 114: if((nt==0)||(new_nt!=0)){ ! 115: nt = new_nt; ! 116: i = 3*nt*sizeof(int); ! 117: itri = (int *)Malloc(i); ! 118: for(j=0; j<nt; j++){ ! 119: i = scanf("%d %d %d",itri+3*j,itri+1+3*j,itri+2+3*j); ! 120: if( i == EOF ) error("unexpected EOF"); ! 121: if( i!=3 ) error("bad format"); ! 122: } ! 123: macbox_( &nv,vx,vy,&nt,itri, ! 124: &mx,&xmin,&xmax,&my,&ymin,&ymax,tr); ! 125: if(verbose){ ! 126: fprintf(stderr,"tr="); ! 127: for(i=0;i<mx*my;i++){ ! 128: fprintf(stderr," %f",tr[i]); ! 129: } ! 130: fprintf(stderr,"\n"); ! 131: } ! 132: } ! 133: ! 134: i = scanf("%e %f %f\n", &time, &fmin, &fmax); ! 135: if( i != 3 ) error("bad time,fmin,fmax format %d",i); ! 136: ! 137: unpack(nv,fk,fmin,fmax,floor); ! 138: ! 139: floor = -INF; ! 140: intbox_(&mx,&xmin,&xmax,&my,&ymin,&ymax,f,tr, ! 141: &nv,fk,&floor,vx,vy,itri); ! 142: if(verbose){ ! 143: fprintf(stderr,"f=\n"); ! 144: for(j=0;j<my;j++){ ! 145: for(i=0;i<mx;i++){ ! 146: fprintf(stderr," %g",f[i+mx*j]); ! 147: } ! 148: fprintf(stderr,"\n"); ! 149: } ! 150: } ! 151: ! 152: moviefil(1,mx,my,time,floor,f); ! 153: ! 154: return(1); ! 155: } ! 156: ! 157: /* read compressed values */ ! 158: unpack(npts,data,fmin,fmax,floor) ! 159: int npts; ! 160: float *data; ! 161: float fmin, fmax; /* data range before compression */ ! 162: float floor; /* value to flag out of bounds */ ! 163: /* input: npts,fmin,fmax,floor */ ! 164: /* output: data */ ! 165: { ! 166: int hi, lo; ! 167: float frange = fmax - fmin; ! 168: for(; npts>0; npts--, data++){ ! 169: hi = getchar()-33; ! 170: if(hi < 0) hi = getchar()-33; /* discard newline */ ! 171: lo = getchar()-33; ! 172: if( (hi=='~'-33) && (lo=='~'-33) ){ ! 173: *data = floor; ! 174: }else{ ! 175: *data = fmin + (hi*64+lo)*frange/4095; ! 176: } ! 177: } ! 178: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.