Annotation of researchv10no/cmd/view2d/Tri/tri.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.