Annotation of researchv10no/cmd/view2d/Tri/tri.c, revision 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.